c语言易错题(上)

简介: c语言易错题(上)

题目一


描述

据说智商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


题目五

cbae65ceda444ebe8bdb3ee0d590a73b.png


请问上面这段代码的执行结果是?

正确答案是一直死循环打印5

因为其中的条件是i=5;

对于5进行一个赋值 在循环内部改变了代码的条件 所以说会进入一个死循环

相关文章
|
6月前
|
C语言
【C语言】错题本(3)
【C语言】错题本(3)
34 0
|
6月前
|
C语言
【C语言】错题本(2)
【C语言】错题本(2)
34 0
|
6月前
|
C语言
【C语言】错题本(1)
【C语言】错题本(1)
52 0
|
存储 编译器 C语言
C语言错题之 10
C语言错题之 10
118 0
|
3月前
|
机器学习/深度学习 存储 C语言
【C语言篇】C语言常考及易错题整理DAY1
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平 行关系;输出语句这里,考虑局部优先的原则。
166 1
|
3月前
|
C语言
【C语言篇】C语言常考及易错题整理DAY3
基本数据类型的等级从低到高如下:char int long float double运算的时候是从低转到高的,表达式的类型会自动提升或者转换为参与表达式求值的最上级类型。
20 0
|
3月前
|
存储 人工智能 大数据
【C语言篇】C语言常考及易错题整理DAY2
p是一个指针数组,p[i] = &a[i*3]相当于是把数组a每3个一组分开并把每组的首地址存在p数组,此时p类似一个4行3列的二 维数组,p[3][2]就是4行第3个元素12。
54 0
|
6月前
|
存储 C语言
【C语言】错题本(4)
【C语言】错题本(4)
36 0
|
存储 C语言
C语言错题之 8
C语言错题之 8
67 0
|
C语言
C语言错题之 5
C语言错题之 5
51 0