易错题25道

本文列举了多个C/C++编程中的易错题目,包括switch-case语句、指针、预处理运算符、循环与递增、数组与指针等知识点,通过实例解析错误原因并提供正确答案,帮助读者理解和避免常见编程陷阱。

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

1.若int i=10;执行下列程序后,变量i的正确结果是( D)//需要break 才会跳出,否则一直执行到最后
case 9:i+=1;
case 10:i+=1;
case 11:i+=1;
default:i+=1;
}

A: 10
B: 11
C: 12
D: 13

2.struct st
{int x;
int *y;
}*p;
int dt[4]={10, 20, 30, 40};
struct st aa[4]={50, &dt[0], 60, &dt[1], 70, &dt[2], 80, &dt[3]};
main()
{p=aa;
printf(“%d “, ++p->x);//->的运算级比++的运算级高=++(->)p
printf(“%d “, (++p)->x); //p的指向改变,指向下一位了
printf(“%d\n”, ++(*p->y));
}
51.60.21

执行下列语句后a和b的值分别为( C)。
int a, b, c;
a=b=c=1;
++a|| ++b && ++c; // ||前面条件符合时,后面的不用计算 && 前面的条件不符合时,后面的条件不用计算(短路原则)

A: 错误 1
B: 2 2
C: 2 1
D: 1 1

  1. 以下程序的输出结果是( D )
    main()
    {
    int x=0,y=0,z=0;
    if(x=y+z) //=为赋值符号,故条件为x!=0;
    printf("***");
    else
    printf("###");
    }

A: 有语法错误,不能通过编译
B: 输出:***
C: 可以编译,但不能通过连接,所以不能运行
D: 输出:###

5.有以下程序段
int k=0;
while(k=1) k++;
while循环执行的次数是( )。

A: 无限次
B: 有语法错,不能执行
C: 一次也不执行
D: 执行1次
//=为赋值符号,==才为判断关系符

6.对下述程序,正确的判断是(A )
main()
{
int x,y;
scanf("%d,%d",&x,&y);
if(x>y)
x=y;y=x; //有多条语句且下面有else时 要加花括号{}
else
x++;y++;
printf("%d,%d",x,y);
}

A: 有语法错误,不能通过编译
B: 若输入3和4,则输出4和5
C: 若输入4和3,则输出3和4
D: 若输入4和3,则输出4和5
7.main()
{
int i,j,x=0;
for(i=0;i<2;i++) //循环2次
{
x++;
for(j=0;j<=3;j++) //循环4次
{
if(j%2)continue; //2次跳过
x++; //实际加了2次
}
x++;
}
printf (“x=%d\n”, x);
}

一共加了(1+2+1)×2=8次,所以x=8

8.设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是(B )。//p=&a[0]+1就是a[0]的地址加1,并赋值给p,
这样p指向的就是a[1],所以
p的值就是3了
A:2
B:3
C:4
D:&a[0]+1

9.对于以下结构定义,++p->str中的++加在(A)

struct {
int len;
char *str;
} *p;
A:指针str上
B:指针p上
C:str指的内容上
D:以上均不是
->的优先级高于++,该表达式等价于++ (p->str)所以,++作用于p的成员变量str上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值