• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

C语言经典笔试题

C语言研究中心 CTO 23821次浏览 6个评论

1.以下程序的结果是什么?

int i = 1;
int main()
{
        int i = i;
        return 0;
}

A: main()函数里的i是一个未定义值

B: main()函数的i为1

C: 编译器不允许这种写法

D: main()里i的值为0

 

解答:当笔试者看到此代码时,可能会觉得古怪。虽然在C++中编译是可以通过的(显然是不合理)。当main()函数里的i从定义开始,外部的全局变量i就已经被屏蔽掉,所以main()函数里作为右值的i的值不会0也不会是1,与外部的i无关。而是一个未定义的符号。

答案:A

 

 

2.以下程序的输出结果是什么?

#include<stdio.h>
int main()
{
        int arr[]={11,12,13,14,15};
        int *ptr = arr;
        *(ptr++) += 100;
        printf("%d %d\n",*ptr,*(++ptr));
        return 0;
}

A:13 13

B:112 13

C :12 12

D:12 13

解析:本题主要考察指针以及栈的概念 。ptr首先指向数组arr的第一个元素,*(ptr++) += 100之后,arr中的0号元素即a[0]变成了111,别忘了ptr也向后挪了一位即指向1号元素,此时*ptr的值为12。问题来了:printf(“%d %d\n”,*ptr,*(++ptr))的输出结果竟然不是12 13 而是13 13 原因在于printf的两个参数压栈顺序为从右至左,故也先计算*(++ptr),所以ptr已经指向了arr[2],所以两次都是13

答案:A

 

3. 以下代码说法正确的是:

#include<stdio.h>
int main(void)
{
        char aChar;
        int aInt;
        aInt = aChar = -120;
        printf("%d\n",aInt);
        return 0;
}

A:一定输出-120

B:一定不能输出-120

C:可能输出-120

D:输出%d

 

解答:本题乍一看,-120木有问题! 再仔细一看 char类型表示的数据范围是-128~127,也没有溢出。应该没错咯。但本题考查的重点并非在此。重点在于aInt = aChar = -120;这句话,为什么呢?我们知道=号的意思是赋值,是从右往左运算,那第一步会将-120赋给aChar。第二步是aChar的值给aInt。对于第一步没有什么要说的。第二步呢就有个问题了。以32位系统常规平台来看,是将8字节数据的char类型变量放到32个字节的int变量里去,那这里就存在一个问题了!没错,那就是大小端存储导致的问题,即-120这个数字对应的八个位的二进制码是放到int变量的高位还是低位,所以结果自然不必多说了。

答案:C

 

C语言研究中心(www.dotcpp.com)

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言经典笔试题
喜欢 (82)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
(6)个小伙伴在吐槽
  1. 最后一道题 int类型是4个字节 不是32个字节 ,4个字节是32位。 这最基本的东西都不懂,还教别人。。。。
    aa2019-01-30 14:27 回复
    • 我发现这网站里很多错别字,读是能读通,但感觉知识变得不靠谱了
      哈哈笑2022-07-10 21:44 回复
      • 俺也发现了
        笑哈哈2022-09-02 18:48 回复
  2. 从没看懂过,从理解到过,从没学会过,基本一切都看不懂,就一辣鸡
    qzx2005147@163.com2019-03-14 18:16 回复
  3. 第二题不可移植,这么写本身就有问题,到底输出啥取决于编译器的行为了
    jones2019-12-31 10:46 回复
  4. “将8字节数据的char类型变量放到32个字节的int变量里去”里面应该是8位,32位吧,而不是字节
    程序员界的菜鸟2020-04-25 13:21 回复