admin 管理员组文章数量: 887021
2024年1月25日发(作者:drink过去式过去分词怎么读)
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("%dn",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
#include
int main()
{
char *p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%sn", 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]
1
答案:D
解析:数值为4的元素的位置在数组内下标为3,∵c=a,d的减去a的得3.
5. 以下叙述中不正确的是
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量
答案:D
解析:c语言在函数中说明的变量为局部变量,只在函数内起作用,不会影响到其他函数。在不同函数中使用相同的变量名不代表是同一变量,A)正确;在函数定义时声明的参数只在函数内部起作用,是函数的局部变量,B)正确;在一个函数中定义的变量是这个函数的局部变量,所以只在函数内部起作用,C)正确;复合语句中定义的变量其作用域是这个复合语句,不会扩大到整个函数,所以D)错误。可参考《c语言程序设计新视角》函数变量的有效范围问题.
6. 请选出以下程序段的输出结果
#include
#define MIN(x,y) (x)<(y)? (x):(y)
int main()
{
int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%dn",k);
return 0;
}
A) 15 B) 100 C) 10 D)150
答案:A
解析:执行MIN(i,j),∵i=10 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,未经过++运算 2 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,%cn",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()函数必须放在程序的开始部分 3 答案:C 解析:c语言程序总是main()函数开始执行,其他子函数通过主函数调用而执行。可以参考《c语言程序设计新视角》中函数部分章节。 14. 以下程序运行后,输出结果是 int main( ) { char *s="abcde"; s+=2; printf("%ldn",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 if(c else if(a if(b else x=3; else x=6; else x=7; A)1 B)2 C)3 D)6 答案:B 解析:如果if-else语句掌握熟练可直接分析程序做题目。否则,先将if和else配对(题目上红色数字即为配对情况) 如果a 4 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 5 解析:数组下标从0开使,因而下限为数组长度-1. 2. 设有说明语句"int a[3][4]={{1,2},{3,4,5},{6,7,8}};"则a[0][2]的初始化值为_____________,a[2][2]的初始化值为______________。 答案:0,8 解析:a[0]={1,2},a[0][2]初始化但未赋值为0,a[2]={6,7,8},a[2][2]=8,注意数组下标是从0开始的。 3. 表达式7/2的结果是____________。表达式7%2的结果是____________。 答案;3,1 解析:/为除后取整符号,%为除后取余符号。 4. 若已知a=1.5,b=15,c=1,则表达式a*b&&c的运算结果是____________。 答案:1 解析:首先知道 这几个符号的优先级算术运算符的优先级高于&&,所以先算乘法。a*b>0为真,c=1为真,最后结果为真,用“1”表示 5. C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为______________。 答案:字母数字或下划线 解析:C语言标识符命名规则。 6. 定义int a[]={1,2,3,4,5,6},*p=a;表达式(*++p)++的值是____________。 答案:3 解析:开始,p为指向数组起始地址即1的地址的指针,表达式(*++p)++先算括号内的值:++为自右向左运算,所以p变为指向2,*为取指向地址的值即2,最后经过++的运算后变为3 7. 已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应scanf("%d,%d,%d",&i,&j,&f)调用语句的数据输入形式是__________ 答案:10,12,410.34 解析:scanf中“”内以“,”隔开,所以输入应与其保持一致,依然用“,”隔开。 三、判断题(本大题共7小题,每题2分,共14分。) 1. 在实际编程中,do-while循环完全可以用for循环替换( ) 答案:对 解析:do-while与for都是用作循环的三种手段,因其都具有循环三要素即循环初始条件,判断条件,循环增量,所以可以相互替代。 2. do-while循环中,根据情况可以省略while( ) 答案:错误 6 解析:do-while循环中 do和while必须同时出现。 3. 若调用一个函数,且此函数中没有return语句,则返回一个不确定的值( ) 答案:对 解析:实际在编码中,如果函数的定义返回类型并非void而函数体中又无return语句,编译器就会自动报错,正确的应该在那句话前加一个前提:“函数有返回类型”,即函数返回类型不能是void 4. 函数调用:strcat(strcpy(str1,str2),str3)的功能是将串str2复制到串str1中后再将串str3连接到串str1之后( ) 答案:对 解析:根据字符串库函数strcat和strcpy功能得知前一个是连接,后一个是复制。 5. 自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式( ) 答案:对 解析:c语言自增运算或减运算符使用规则 6. 全局变量使得函数之间的"耦合性"更加紧密,不利于模块化的要求( ) 答案:对 解析:全局变量在程序中的作用规则 7. 函数的定义可以嵌套,但函数的调用不可以嵌套( ) 答案:错 解析:函数的调用仍可嵌套。 四、程序分析题(用列表法列出关键变量在运行过程中的值) (本题共3道小题,每题4分,共12分。) 1. 设有以下程序: int main() { int n1,n2; scanf("%d",&n2); while(n2!=0) //(1) { n1=n2%10; //(2) n2=n2/10; //(3) printf("%d",n1); } return 0; } 程序运行后,如果从键盘上输入6734;则输出结果为_________。 答案:4376 解析: (1)n2 6734 673 67 6 7 (2)n1 (3)n2 4 673 3 67 7 6 6 0 2. 以下程序输出的最后一个值是__________。 int ff(int n) { static int f=l; f=f*n; return f; } int main() { int i; for(I=1;I<=5;I++ printf("%dn",ff(i)); return 0; } 答案:120 解析:i=1,ff(i)=1,ff中i=1; i=2,ff(i)=2,ff中i=2; i=4,ff(i)=24,ff中i=4; i=5,ff(i)=120,ff中i=5; i=6,不满足循环条件,退出循环,最后一个值为120,本题考查子函数中static i=3,ff(i)=6,ff中i=3; 变量的作用域问题。 3. 下列程序的输出结果是___________。 int ast(int x,int y,int * cp,int * dp) { *cp=x+y; *dp=x-y; } int main() { int a,b,c,d; a=4;b=3; ast(a,b,&c,&d); printf("%d %dn",c,d); return 0; } 答案:7,1 解析:a=4,b=3,调用ast,*cp=7,*dp=1,注意实参中后两项是c、d的地址,因而*cp、*dp为分别指向c,d的指针,所以c,d分别赋以7,1.本题考查函数间信息传递(传递地址)情形,可以参考《c语言程序设计新视角》函数间信息的传递部分内容。 五、编程题(本大题共2小题,每题10分,共20分) 1. 打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 8 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 答案 1. int main() {int i,j; int a[10][10]; printf("n"); for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1; ……………………………(1) for(i=2;i<10;i++) for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; ……………………………(2) for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%5d",a[i][j]); …………………………………注意 printf("n"); } } 解析:本题考查杨辉三角,首先应清楚杨辉三角数表规律 (1)第一列与对角线上元素全为1。 (2)其余元素为上一行正对元素与正对元素的前一个元素之和。 然后考虑数据的存储用二维数组,二维数组以行优先进行存储,注意循环嵌套的顺序以及循环三要素。最后进行输出,《c语言程序设计新视角》输出格式内容描述。 2. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。 答案: #include int main() { int i,j,k,m,t=0,n=0; int a[10]; int b[1024]; for(m=2;m<1000;m++) { for(i=1,j=1;i<=m/2;i++) { if (m%i==0) { b[j]=i; j++; } } for(k=1;k 9 t=t+b[k]; if(m==t) { a[n]=m; n++; } t=0; } for(i=0;i printf("%dn",a[i]); return 0; } 解析:本题考查1000以内完数,首先应清楚完数特点如题一个数如果恰好等于它的因子之和,进而考虑获得因子的方法:模为零。然后考虑因子存放在数组中,接着将得到的因子数组中的元素相加,看是否等于被除数,若满足条件,将其放入完数数组中。最后将完数数组中的元素输出。 10
版权声明:本文标题:C语言程序设计模拟试题三及答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706174132h502955.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论