- 0
- 0
- 约6.45千字
- 约 13页
- 2026-01-31 发布于山东
- 举报
2026年c语言竞赛试题
第一部分单选题(50题)
1、do-while循环的语法格式正确的是?()
A.do语句;while(条件);
B.do{语句}while(条件)
C.do语句while(条件);
D.do;语句;while(条件);
【答案】:答案解析:do-while格式为“do循环体;while(条件);”,循环体可是单条语句或代码块,B缺少分号,C缺少分号,D循环体为空,故选A。
2、以下指针运算正确的是?()
A.inta=10,*p=a;p++;
B.inta=10,*p=a;p=a;
C.inta=10,*p=a;p=5;
D.inta=10,*p=a;*p=a;
【答案】:答案解析:A指针p自增(指向a的下一个地址),B不能将int值赋给指针,C不能取常量地址,D不能将地址赋给int变量,故选A。
3、以下关于数组越界的说法正确的是?()
A.编译时会报错
B.运行时一定会崩溃
C.可能导致程序错误
D.无影响
【答案】:答案解析:数组越界属于未定义行为,编译时不报错,运行时可能正常或崩溃,故选C。
4、表达式5324的结果是?()
A.0
B.1
C.真
D.假
【答案】:答案解析:53为真(1),24为真(1),逻辑与结果为1,故选B。
5、以下函数参数传递方式中,能修改实参值的是?()
A.值传递
B.地址传递
C.都能
D.都不能
【答案】:答案解析:值传递修改的是形参(副本),不影响实参;地址传递通过指针修改实参值,故选B。
6、以下函数定义中,参数为两个int类型的是?()
A.voidfun(inta,floatb){}
B.voidfun(inta,intb){}
C.voidfun(floata,intb){}
D.voidfun(inta,charb){}
【答案】:答案解析:B中两个参数均为int类型,其余选项参数类型不匹配,故选B。
7、以下关于指针数组的定义正确的是?()
A.int*arr[5];
B.int(*arr)[5];
C.intarr[5];
D.intarr[];
【答案】:答案解析:A是指针数组(5个int指针),B是指向数组的指针,C是普通数组,D缺少长度,故选A。
8、以下哪个函数用于输出字符串?()
A.putchar()
B.printf()
C.gets()
D.scanf()
【答案】:答案解析:printf()可输出字符串(如printf(hello);),putchar()输出单个字符,故选B。
9、若inti=0;执行while(1){printf(%d,i);i++;if(i==3)break;}输出结果是?()
A.012
B.0123
C.无限循环
D.无输出
【答案】:答案解析:while(1)无限循环,i=3时break,输出012,故选A。
10、以下关于main函数的说法错误的是?()
A.程序从main开始执行
B.main函数可带参数
C.main函数必须有返回值
D.main函数可调用其他函数
【答案】:答案解析:main函数可声明为void(无返回值),C说法错误,A、B、D正确,故选C。
11、函数调用时,实参的顺序必须与形参的顺序?()
A.一致
B.相反
C.无关
D.部分一致
【答案】:答案解析:实参和形参需按顺序一一对应(类型、个数、顺序匹配),否则可能导致逻辑错误,故选A。
12、若inta[4]={10,20,30,40};则*(a+2)的值是?()
A.20
B.30
C.40
D.10
【答案】:答案解析:a+2是第三个元素地址,*(a+2)=a[2]=30,故选B。
13、若inti;执行for(i=0;i5;i++)printf(%d,i);输出结果是?()
A.01234
B.12345
C.012345
D.无输出
【答案】:答案解析:for循环初始化i=0,条件i5(成立时执行),每次循环后i++,执行5次,输出01234,故选A。
14、函数参数传递中,值传递适用于?()
A.简单变量,无需修改实参
B.数组,需修改元素
C.指针,需修改实参
D.结构体,需修改成员
【答案】:答案解析:值传递用于简单变量(不修改实参),地址传递用于需修改实参的场景,故选A。
15、若inti=1;执行do{printf(%d,i);i++;}while(i=3);输出结果是?()
A.123
B.1234
C.012
D.无输出
【答案】:答案解析:do-while先执行一次(输出1,i=2),再判断,共执行3次,输出123,故选A。
16、以下定义指向字符串的指针正确的是?(
原创力文档

文档评论(0)