C语言错题集

a++和++a区别

1.执行下列程序段后,变量a,b,c的值分别是 ()

   int x=10,y=9;

   int a,b,c;

   a=(--x==y++)?--x:++y;

   b=x++;

   c=y;
  • A a=9,b=9,c=9
  • B a=9,b=10,c=9
  • C a=1,b=11,c=10
  • D a=8,b=8,c=10

答案:D

解析:

a=(--x==y++)?--x:++y;
x = 10;                          x = 9                       x = 8
       ----(--x==y++为真)------>         -----(执行--x)----->           a = 8
y = 9;                           y = 10                      y = 10

b = x++;    8
c = y;      10

错误原因:

不知道在同一个表达式内++a和a++依旧严格执行先后逻辑

++a ,a++与||运算的短路原则

2.以下程序的输出结果是( )。

main()
{
	int a = 0,b = 0,c = 0;
	if(++a>0||++b>0) ++c;
	printf(“a = %d,b=%d,c=%d”,a,b,c);
}
  • A a=1,b=1,c=1
  • B a=0,b=0,c=0
  • C a=1,b=0,c=1
  • D a=1,b=1,c=0

答案:C

解析:

main()
{
	int a = 0,b = 0,c = 0;
	if(++a>0||++b>0) ++c;                 //-------> ++a = 1  ++b = 1 ++c = 1----->a = 1  b = 0 c = 1
	printf(“a = %d,b=%d,c=%d”,a,b,c);     //   a = 1 b = 0 c = 1
}

错误原因:

忽略了||运算的短路原则(一旦第一个条件为真,将不再执行后面判断语句,直接进入后面代码)

指针、内存空间、字符串常量区

1.下面的程序运行结果为( )。

 char *RetMenory(void)
    {
        char p[] = “hello world”;
         return p;
    }
  void Test(void)
    {
      char *str = NULL;
      str = RetMemory();
      puts(str);
   }
  • A 语法有错误,不能编译
  • B hello world
  • C 结果不可预知
  • D hello world+乱码

答案: C

解析:

 char *RetMenory(void)
    {
        char p[] = “hello world”;
         return p;                //------------->返回一个指向字符数组p的指针
    }                             //------------->函数调用结束,系统回收对应空间使用权
  void Test(void)
    {
      char *str = NULL;
      str = RetMemory();
      puts(str);                  //-------------->打印对应空间的字符串内容,但此时相应空间的内容系统可能进行更改
   }

错误原因:

对字符串数组、堆栈字符串常量区、指针概念理解不到位

函数

1.函数调用时,实参与形参的个数必须相同

  • A T
  • B F

答案:A

解析:无

错误原因:

对函数概念和场景应用不熟悉

1.在堆区创建一个结构体数组,数组名为student,成员包含姓名,学号,成绩(数据类型自己设定)。写一个程序,要求可以循环的从终端输入学生信息,当输入一行‘#’时表示完成输入。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印。





1.在堆区创建一个结构体数组,数组名为student,成员包含姓名,学号,成绩(数据类型自己设定)。写一个程序,要求可以循环的从终端输入学生信息,当输入一行‘#’时表示完成输入。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值