大佬就可以撤退了!!(当然也可以温故而知新呀!!)
本次为C语言入门刷题!重在扎实基础,温习学过的基础知识!!!
夯实基础,走得更远!!
在一些入门题目中,题目经常会让我们输入n个数,之后以升序或者降序的方式输出,或者比较。
这就需要我们来掌握一种排序方式——冒泡排序!下面举例说明:
思路:
首先,要输出最高成绩的前五项,我们必须将所有输入成绩通过冒泡排序的方式,以降序的方式排好序后,通过输出数组前五个,即(i=0;i<5;i++) ,来输出前五项!
那么接下来就要看你是否认真学习了呢?
来和我的代码对比一下吧!
#includevoid max(int arr[], int sz) { for (int i = 0; i < sz - 1; i++) { int flag = 0; for (int j = 0; j < sz - 1 - i; j++) { if (arr[j] < arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; //冒泡排序!! arr[j + 1] = temp; flag = 1; } } if (flag == 0) { break; } } } int main() { int n = 0; int arr[50] = { 0 }; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } max(arr, n); for (int i = 0; i < 5; i++) //输出前五项 { printf("%d ", arr[i]); } return 0; }
这里使用flag的作用是针对已经排好序的数组元素,无需排序而设立,从而减小时间复杂度。
假设起初flag=0,若需要排序,则flag=1。最后只需判断flag是否等于0,等于0则无需排序,直接退出即可!
思路:首先,简易计算机简而言之,即输入 两个数 和 运算操作符,而后输出结果。
那我们可能会想,使用if else 语句可以吗?即如果输出的为 ’ / ’,就做除法运算等等......
if else 代码如下:
#includeint main() { double a=0,b=0; char ch=0; while(scanf("%lf %c %lf",&a,&ch,&b)!=EOF) { if(ch=='+'||ch=='-'||ch=='*'||ch=='/') //如果输入的是四则运算符号 { if(ch=='+') printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a+b); else if(ch=='-') printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a-b); else if(ch=='*') printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a*b); else if(ch=='/') //做除法时,分母不能为0 { if(b==0.0) printf("Wrong!Division by zero!\n"); else printf("%.4lf%c%.4lf=%.4lf\n",a,ch,b,a/b); } } else //如果输入的不为四则运算符号 printf("Invalid operation!\n"); } return 0; }
那既然都是判断,有没有想过switch呢?
可以通过输入的不同运算符,来进入不同的入口,进行计算输出!!
switch()代码如下:
#include int main() { double m=0; double n=0; char a=0; scanf("%lf %c %lf",&m,&a,&n); switch(a) { case '+': { double b=m+n; printf("%.4lf%c%.4lf=%.4lf",m,a,n,b); break; } case '-': { double b=m-n; printf("%.4lf%c%.4lf=%.4lf",m,a,n,b); break; } case '*': { double b=m*n; printf("%.4lf%c%.4lf=%.4lf",m,a,n,b); break; } case '/': { double b=m/n; if(n==0.0) { printf("Wrong!Division by zero!"); } else { printf("%.4lf%c%.4lf=%.4lf",m,a,n,b); } break; } default : printf("Invalid operation!"); break; return 0; } }
switch 语句必须遵循下面的规则:
switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。 switch(sepression)
在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
一个 switch 语句可以有一个可选的 default: ,出现在 switch 的结尾。default:可用于在上面所有 case 都不为真时执行一个任务。 你学会了吗??
对于图案输出问题,一定要把握它的规律!!即如何通过循环语句实现,或者控制循环次数。
话不多说,先看一个简单的!
思路:
输出一个直角三角形,输入一个整数n,就会输出一个由n行 * 组成的直角三角形,且第一行有一个* ,第二行有两个* ........
!! ! 那么由此可见,假设输出n=4,那么就会输出一个四行,四列的直角三角形,且每行的个数 与处于第几行 的值 相等。
代码如下:
#includeint main() { int n=0; while(scanf("%d",&n)!=EOF)//针对多组输入的题目 { for(int i=1;i<=n;i++) //第一个for循环是,循环几行。 { for(int j=1;j<=i;j++)//第二个for循环是一行循环几个 { printf("* "); } printf("\n"); } } return 0; }
所以,找到规律很重要,并且通过规律来控制它的循环次数!接下来,看一个难一点的!
题目链接:
思路:
首先图形是由空格和号构成,我们可以直观的看出,空格数为2的倍数,是由一开始,每次增加一。
当输出n=2时,共输出5行,那我们就可以拆开来看
第一部分,第一个循环控制行,第二个循环控制输出!
for(int i=0;i<=n;i++) //输出n,来第一部分控制行数。输出三行! { for(int j=1;j<=2*n-2*i;j++) //控制空格数,第一行输出四个,第二行两个,第三行0. { printf(" "); } for(int j=1;j<=i+1;j++) //控制号数,第一行输出一个,第二行两个,第三行三个。 { printf("*"); } printf("\n"); //每输出完一行,需要换行。 }
重点在循环中的终止条件!(j<=2*n-2*i)。
第二部分,第一个循环控制行,第二个循环控制输出!
for(int i=1;i<=n;i++) //只需输出两行(n行) { for(int j=1;j<=2*i;j++) //第一行空格数为2,第二个空格数为4. { printf(" "); } for(int j=1;j<=n-i+1;j++) // 第一行星号数位2,第二行数为1. { printf("*"); } printf("\n"); //每输出一行,需要换行。 }
同理可得:第一部分:输出行数:n+1.
第二部分:输出行数 :n.
注意:在第一部分和第二部分中间衔接的时候,星号数是依次减小。
总代码:
#includeint main() { int n=0; while(scanf("%d",&n)!=EOF) { for(int i=0;i<=n;i++) { for(int j=1;j<=2*n-2*i;j++) { printf(" "); } for(int j=1;j<=i+1;j++) { printf("*"); } printf("\n"); } for(int i=1;i<=n;i++) { for(int j=1;j<=2*i;j++) { printf(" "); } for(int j=1;j<=n-i+1;j++) { printf("*"); } printf("\n"); } } return 0; }
好好思考以后,肯定也有所收获了吧! 那就趁热打铁吧!
相信大家看完以后,也看懂了! 那么这期的C语言入门刷题基础知识点就到这里啦!!
是不是觉得不够,内容太少?
那么就期待下期我们再见吧!!记得三连哦,别到时候找不到俺!
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者