C语言程序设计模拟试题三及答案
一、选择题(本题共20道小题,每题2分,共40分。)
1. 若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a; scanf("%lf",p);
B) p=(double*)malloc(8);scanf("%f",p);
C) p=&a;scanf("%lf",a);
D) p=&a; scanf("%le",p);
答案:D
解析:
选项A:此项中 *p是指针指向单元的值引用,&a是a单元的地址,故此项错误。
选项B:scanf中的格式控制符对双精度变量而言是"%lf",而非选"%f",此项错误。选项c:scanf函数的地址表列中不能写成a,此项错误。
选项D:指针p首先指向a单元,再通过键盘以科学计数格式赋值浮点数,此项正确。
2.  两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是
int main( )
{ int x;
scanf("%d",&x);
if(x + + >5) printf("%d",x);
else        printf("%d\n",x - -);    }
A) 7和5      B) 6和3    C) 7和4    D) 6和4
答案:A
解析:当输入为6时,即x=6,∵++在x后,∴先取x=6与5比较,再取x=6+1=7,6>5成立,输出x=7;同理,当输入为4时,输出x=5。本题考察++,--的优先级与结合性。
3. 下面程序的输出是
A) xyzabcABC    B) zabcABC        C) yzabcABC      D) xyabcABC
#include<stdio.h>
#include<string.h>
int main()
{
char *p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n", str);
}
答案:D
解析:strcat将p2字符串连在p1字符串尾,产生新字符串:abcABC,在讲连接后的值赋在str[2]处,即a将z覆盖,产生新的字符组元素:xyabcABC。本题考察字符串函数应用.
4. 若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='a',d,g;
则数值为4的表达式是
A)a[g-c]              B)a[4]
C)a['d'-'c']            D)a['d'-c]
答案:D
解析:数值为4的元素的位置在数组内下标为3,∵c=a,d的减去a的得3.
5. 以下叙述中不正确的是
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量
答案:D
解析:c语言在函数中说明的变量为局部变量,只在函数内起作用,不会影响到其他函数。在不同函数中使用相同的变量名不代表是同一变量,A)正确;在函数定义时声明的参数只在函数内部起作用,是函数的局部变量,B)正确;在一个函数中定义的变量是这个函数的局部变量,所以只在函数内部起作用,C)正确;复合语句中定义的变量其作用域是这个复合语句,不会扩大到整个函数,所以D)错误。可参考《c语言程序设计新视角》函数变量的有效范围问题.
6. 请选出以下程序段的输出结果
#include<stdio.h>
#define MIN(x,y)  (x)<(y)? (x):(y)
int main()
{
int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%d\n",k);
明解c语言return 0;
}
A) 15          B) 100          C) 10            D)150
答案:A
解析:执行MIN(i,j),∵i=10<j=15,∴MIN(i,j)=10,∴k=100.
7.在C语言中,用于实现打开文件的库函数是()。
A) fclose()B) fopen()C) fseek()D) rewind() 答案:B
解析:本题考查c语言文件操作函数,答案为B
8. 设有以下语句:
struct st {int n; struct st *next;};
static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则表达式_____的值是6。
A)p + + ->n    B) p->n + +    C) (*p).n + +      D) + + p->n
答案:D
解析:a是先取a[0]的值5然后p自增指向a[1]的n值为7
b是直接取a[0]的5,未经过++运算
c也是直接取a[0]的5,未经过++运算
d是先取a[0]的5再自增为6
9. C语言中形参的缺省存储类别是
A)自动(auto)  B)静态(static)
C)寄存器(register)    D)外部(extern)
答案:A
解析:在函数体内声明的变量,在默认情况都是auto型。参考查询《c语言程序设计新视角》变量存储类别。
10. 执行下面的程序段后,变量k中的值为
int  k=3, s[2];
s[0]=k;  k=s[1]*10;
A) 不定值    B) 33              C) 30            D) 10
答案:A
解析:如题,s[0]=k=3,而s[1]并未初始化,则其内存储的是系统随机给的整数值,通常是负数,因而k也为不定值。
11. 已知字母A的ASCII码为十进制的65,下面程序的输出是
int main()
{
char ch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);
return 0;
}
A) 67,D        B) B,C
C) C,D          D) 不确定的值
答案:A
解析:ch1的ASCⅡ值为65+2对应到字母C,输出格式中ch1以整数形式输出67;ch2的ASCⅡ值为65+3对应到字母D,输出格式中ch2以字符形式输出D.可以参考《c语言程序设计新视角》输出格式说明符。
12.  语句:printf("%d \n",12 &012);的输出结果是
A) 12    B) 8    C) 6  D) 012
答案:B
解析:012表示八进制,,二进制表示001010,所以12&012=1100&001010(二进制)=1000(二进制)=8.
13. 以下说法中正确的是
A) C语言程序总是从第一个的函数开始执行
B) 在C语言程序中,要调用的函数必须在int main()函数中定义
C) C语言程序总是从int main()函数开始执行
D) C语言程序中的int main()函数必须放在程序的开始部分
答案:C
解析:c语言程序总是main()函数开始执行,其他子函数通过主函数调用而执行。可以参考《c语言程序设计新视角》中函数部分章节。
14. 以下程序运行后,输出结果是
int main( )
{
char *s="abcde";
s+=2;
printf("%ld\n",s);
return 0;
}
A)cde    B)字符c的ASCII码值      C)字符c的地址      D)出错
答案:C
解析:s为指针变量,其值为地址,为”abcde”字符串的首地址即a的地址,s+=2等价于s=s+2,即s的值为字符串中a向后移两位对应元素c的地址。
15. 设x和y均为int型变量,则执行下的循环后,y值为
for(y=1,x=1;y<=50;y++)
{
if(x>=10)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
A)2    B)4    C)6    D)8
答案:C
解析:①x=1不满足x>=10,∴继续向下执行,x%2=1,满足第二个if,∴x=x+5=6,y=2进行第二次循环;
②x=6不满足x>=10,∴继续向下执行,x%2=0,不满足第二个if,继续执行x=3,y=3进行第三次循环;
当进行到第六次循环时,x=11满足x>=10跳出循环,此时y=6。
16. 当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为
if(a<b)
if(c<d)x=1;
else if(a<c)
if(b<d)x=2;
else x=3;
else x=6;
else x=7;
A)1  B)2  C)3  D)6
答案:B
解析:如果if-else语句掌握熟练可直接分析程序做题目。否则,先将if和else配对(题目上红数字即为配对情况)
如果a<b成立则执行x=7;否则如果c<d成立则x=1;否则,当a<c成立x=6,否则,当b<d 成立则x=2,否则x=3;由题目可见,a<b不成立,c<d不成立,而a<c成立,因此输出x=2
17. 若b是int型变量,则表达式b=25/3%3的值为
A)7            B)8              C)6          D)2
答案:D
解析:运算级/与%自左向右,25/3=8,8%3=2,可以参考《c语言程序设计新视角》运算符相关知识。
18. 设C语言中,一个int 型数据在内存中占2个字节,则unsigned int 型数据的取值范围为:
A)  0-255
B)  1-32767
C)  0-65535
D)  0-2147483647
答案:C
解析:c语言中int 取值范围为-32768到32767之间,unsigned int为无符号整型,取值无赋值,因而为0到32767.
19. 下面的程序
int main()
{
int x=3,y=0,z=0;
if(x=y+z)printf("* * * *");
else    printf("# # # #");
return 0;
}
A) 有语法错误不能通过编译
B) 输出* * * *。
C) 可以通过编译,但是不能通过连接,因而不能运行。
D) 输出# # # #。
答案:D
解析:由题,x=3不等于y+z=0所以执行else语句,输出# # # #。
20. 若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是
A)3 B)4 C)5 D)6
答案:A
解析:本题考查子函数中形参个数,因为fun()函数默认返回一个数,所以在最外层的fun ()函数中有三个形式参数。本题需注意函数的套用,相关知识点可以参考《c语言程序设计新视角》中函数部分。
二、填空题(本大题共7小题,每题2分,共14分。)
1. 若有定义:double x[3][5],则x数组中行下标的下限为_________,列下标的下限为__________。
答案:2,4

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。