题目汇总
No.1
学生基本信息输入输出
题目理解
- 这个题目本质上其实并不难,考察的点就在于scanf输入的格式要和题目要求的格式是一样的,同时输出的格式也需要按照题目给出来的格式来进行相应的一个输出的操作,但是这个题目,我一开始写的问题在于,最开始我写的代码是这样的:
#include<stdio.h>
int main()
{
int id=0;
double a,b,c=0;
scanf("%d;%lf,%lf,%lf",&id,&a,&b,&c);
printf("The each subject score of No. %d is %.2lf, %.2lf, %.2lf.",id,a,b,c);
return 0;
}
- 但是上面的那种代码,,并没有办法完全通过所以的测试用例,如下所示:
- 可以看出来问题在于没有进行四舍五入的操作
- 测试时发生了一些错误:原因是浮点型小数用的是double型变量定义的导致输出时发生了四舍五入的错误,问题在于:注意:小数在内存中可能不能精确保存;float类型对应的浮点型数据为%f;double类型对应的浮点型数据为%lf,.控制输出小数的精确度用%.mf,m为小数点后的位数;eg:保留小数点后两位:%.2f
- 把double改成float就行了
代码展示
#include<stdio.h>
int main()
{
int id=0;
float a,b,c=0;
scanf("%d;%f,%f,%f",&id,&a,&b,&c);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",id,a,b,c);
return 0;
}
No.2
打印有规律的字符(牛牛的字符菱形)
题目理解:
- 这种打印图形的题目,一般都是需要找规律的,那么其实这个图形的规律也是蛮好找的,这个图形整体的规律其实就是以中间的那一行作为分界线,然后上下部分的内容分别就是对称的了,所以可以通过几个不同的部分来进行一个打印的操作就是可以的了
代码展示
#include<stdio.h>
int main()
{
char ch=0;
scanf("%c",&ch);
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if((i==0||i==4)&&j==2)
printf("%c",ch);
else if(i==2)
printf("%c",ch);
else if ((i == 1||i==3) && (j > 0 && j < 4))
printf("%c",ch);
else
printf(" ");
}
printf("\n");
}
return 0;
}
No.3
出生日期输入输出
题目理解
- 这个题目考察的点其实也不难,综合来看,其实也是在考察scanf这个函数和printf这个函数相关的细节,其中题目的备注里面也给了一些知识点,比如scanf函数是可以指定输入的宽度的,然后不使用的位置也是可以自动填0的,就是%02d这种来进行一个自动填充的操作
代码展示
#include<stdio.h>
int main()
{
int a=0;
int b=0;
int c=0;
scanf("%4d%2d%2d",&a,&b,&c);
printf("year=%4d\nmonth=%02d\ndate=%02d",a,b,c);
return 0;
}
No.4
十六进制转十进制
题目理解
- 对于这个题目的求解,我们可以直接将十六进制数字赋值到a
代码展示
#include<stdio.h>
int main()
{
int a=0xABCDEF;
printf("%15d",a);
return 0;
}
No.5
实现四舍五入
题目理解
- 这个题目考察的点其实也很明显,就是题目里面所提到的四舍五入相关的东西,大四这里的四舍五入有一个比较特殊的点就是这里其实是需要区分正负的,正数的四舍五入和负数的四舍五入其实就是不一样的,所以这里首先就是需要注意我们在进行四舍五入的时候是需要区分正负的,然后知道这个点之后,这个题目就好处理很多了
代码展示
#include<stdio.h>
int main()
{
float a=0;
scanf("%f",&a);
if(a>0)
{
a=a+0.5;
printf("%d",(int)a);
}
else
{
a=a-0.5;
printf("%d",(int)a);
}
return 0;
}