超佳出品
此次为入门必刷题2
大佬就可以撤退了!!(当然也可以温故而知新呀!!)
本次为C语言入门刷题!重在扎实基础,温习学过的基础知识!!!
夯实基础,走得更远!!
在一些入门题目中,题目经常会让我们输入n个数,之后以升序或者降序的方式输出,或者比较。
这就需要我们来掌握一种排序方式——冒泡排序!
冒泡排序重点详细介绍https://blog.csdn.net/ChaoFreeandeasy_/article/details/123562437?spm=1001.2014.3001.5502 (大家可以通过这个来直观深刻的了解并学习冒泡排序)
下面举例说明:
思路:
首先,要输出最高成绩的前五项,我们必须将所有输入成绩通过冒泡排序的方式,以降序的方式排好序后,通过输出数组前五个,即(i=0;i<5;i++) ,来输出前五项!
那么接下来就要看你是否认真学习了呢?
来和我的代码对比一下吧!
#include
void 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 代码如下:
#include
int 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()代码如下:
#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 语句必须遵循下面的规则:
对于图案输出问题,一定要把握它的规律!!即如何通过循环语句实现,或者控制循环次数。
话不多说,先看一个简单的!
思路:
输出一个直角三角形,输入一个整数n,就会输出一个由n行 * 组成的直角三角形,且第一行有一个* ,第二行有两个* ........
!! ! 那么由此可见,假设输出n=4,那么就会输出一个四行,四列的直角三角形,且每行的个数 与处于第几行 的值 相等。
代码如下:
#include
int 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.
注意:在第一部分和第二部分中间衔接的时候,星号数是依次减小。
总代码:
#include
int 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;
}
好好思考以后,肯定也有所收获了吧! 那就趁热打铁吧!
菱形图案_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/8b935f8ffe99445dbd42494febd13e45?tpId=107&tqId=33344&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D107%26type%3D107&difficulty=undefined&judgeStatus=undefined&tags=&title= (双击进入哦!)
相信大家看完以后,也看懂了!
那么这期的C语言入门刷题基础知识点就到这里啦!!
是不是觉得不够,内容太少?
那么就期待下期我们再见吧!!记得三连哦,别到时候找不到俺!