15个C语言“谜题”,有你知道的吗?

本文整理了15个C语言编程中的常见迷惑性问题,包括逗号表达式、数组定义、while与do-while的区别等,每个问题都有详细的解析,帮助读者避免编程陷阱,提升C语言技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

嗨,这里是狐狸~~​

 15个C语言的迷题​

1、下面的程序并不见得会输出 HelloWorld,你知道为什么吗?

2、下面的程序看起来是正常的,使用了一个逗号表达式来做初始化。可惜这段程序是有问题的。你知道为什么呢?

3、下面的程序会有什么样的输出呢?

3、根据考试成绩的等级打印出百分制数段。

4、忽视了while和do-while语句在细节上的区别

5、定义数组时误用变量

7、请问下面的程序会有什么潜在的危险?

8、请问下面的程序输出什么?

9、在定义数组时,将定义的“元素个数”误认为是可使的最大下标值

10、请问下面的程序输出是什么?(绝对不是10)

11、下面的输出是什么?

12、下面的C程序是合法的吗?如果是,那么输出是什么?

13、请问下面的程序输出什么?(假设:输入 Hello, World)

14、在不应加地址运算符&的位置加了地址运算符。

15、 同时定义了形参和函数中的局部变量

总结​


青春如梦,岁月如花,流水似年,稍纵即逝。

嗨,这里是狐狸~~

今天是2022年的1月12日,距离过年还有18天,时间过得飞快,过了腊八就是年,学生们大都已经放假了吧,最近听了一句话,都说现在年越来越没有年味了,其实不然,只是快乐的人不再是你们了。

今天给大家来点不一样的,C语言的谜题库,一些迷惑性大的错题给大家做一个总结,应该会有大家常常放错的地方,希望看完之后,大家至少对于这些问题不会再犯错。

 15个C语言的迷题

1、下面的程序并不见得会输出 HelloWorld,你知道为什么吗?

#include
#include
int main()
{
    while(1)
    {
        fprintf(stdout,"HelloWorld");
        fprintf(stderr,"HelloWorld");
        sleep(1);
    }
    return 0;
}

参考答案:stdout和stderr是不是同设备描述符。stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入,

1)遇到回车

2)缓冲区满

3)flush被调用。而stderr则不会。

2、下面的程序看起来是正常的,使用了一个逗号表达式来做初始化。可惜这段程序是有问题的。你知道为什么呢?

#include

int main()
{
    int a = 1,2;
    printf("a : %d\n",a);
    return 0;
}

参考答案:这个程序会得到编译出错(语法出错),逗号表达式是没错,可是在初始化和变量声明时,逗号并不是逗号表达式的意义。这点要区分,要修改上面这个程序,你需要加上括号: int a = (1,2);

3、下面的程序会有什么样的输出呢?

#include
int main()
{
    int i=43;
    printf("%d\n",printf("%d",printf("%d",i)));
    return 0;
}

参考答案:程序会输出4321,你知道为什么吗?要知道为什么,你需要知道printf的返回值是什么。printf返回值是输出的字符个数。

3、根据考试成绩的等级打印出百分制数段。

switch(grade)

{ case 'A':printf("85~100\n");

case 'B':printf("70~84\n");

case 'C':printf("60~69\n");

case 'D':printf("<60\n");

default:printf("error\n");

参考答案:由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如

 

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值