题目一
描述
据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。
输入描述:
多组输入,每行输入包括一个整数表示的智商。
输出描述:
针对每行输入,输出“Genius”。
代码如下
#include<stdio.h> int main() { int iq=0; while(scanf("%d",&iq)!=EOF) { if(iq>=140) printf("Genius\n"); } return 0; }
这里又两个需要注意的点
1 使用scanf的时候后面要输入的是一个地址
2 后面的不等于EOF意思是到文件结束为止一直循环
EOF实际上就是-1 使用ctrl+z可以模拟文件结束从而退出
题目二
描述
将一个四位数,反向输出。
输入描述:
一行,输入一个整数n(1000 <= n <= 9999)。
输出描述:
针对每组输入,反向输出对应四位数。
代码如下
#include<stdio.h> int main() { int n=0; scanf("%d",&n); while(n) { printf("%d", n%10); n = n/10; } return 0; }
这一题巧妙的运用了n / 和%的关系
第一次看到这个题解的时候加深了很多理解
题目三
描述
给定秒数 seconds ,把秒转化成小时、分钟和秒。
数据范围: 0 < seconds < 100000000\0<seconds<100000000
输入描述:
一行,包括一个整数,即给定的秒数。
输出描述:
一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。
```c #include<stdio.h> int main() { int i=0; int h=0; int m=0; int s=0; scanf("%d",&i); h=i/3600; m=(i-3600*h)/60; s=(i-3600*h-60*m)%60; printf("%d %d %d",h,m,s); return 0; }
我一开始的解法是这样子 这样子写的有点复杂了
其实我们可以把3361看作是一个60进制的三位数字
要求60进制的最高位只需要整除3600就可以
要求最低位只需要模上一个60就可以
要求中间的位数只需要整除一个60之后再取模
代码如下
#include <stdio.h> int main() { int sec = 0; scanf("%d", &sec); int h = sec/60/60; int m = sec/60%60; int s = sec%60; printf("%d %d %d\n", h,m,s); return 0; }
通过这么几道题目对于/ %和进制有了一个更深的理解
题目四
描述
从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。
输入描述:
一行,连续输入5个整数(范围0~100),用空格分隔。
输出描述:
一行,输出5个数的平均数(保留一位小数)。
int main() { int i = 0; int n = 0; int sum = 0; double avg = 0.0; int arr[5] = { 75,80,43,67,96 }; for (i = 0; i < 5; i++) { sum += arr[i]; } avg = sum / 5.0; printf("%.1f", avg); return 0; }
这里要注意的是 保留一位小时后面输出要用 '%.1f’的格式
以及 avg求平均数的时候后面要除以5.0才可以
#include <stdio.h> int main() { int i = 0; int sum = 0; int input = 0; for(i=0; i<5; i++) { scanf("%d", &input); sum += input; } printf("%.1f\n", sum/5.0); return 0; }
不使用数组的解法如上
因为我们需要的数据值是一个sum
题目五
请问上面这段代码的执行结果是?
正确答案是一直死循环打印5
因为其中的条件是i=5;
对于5进行一个赋值 在循环内部改变了代码的条件 所以说会进入一个死循环