(时间:120分钟 总分:100分)
一、判断题(每小题1分,共10分)
1、定义数组char c1[]={‘A’},c2[]={“A”},则数组c1与c2的长度都为1。 2、同一个程序文件中可同时有多个main()函数,运行时从第一个开始执行。 3、在函数内定义的变量称为全局变量。 4、在一个函数内不可以同时出现多个return语句。
5、若有语句:’A’/5;因为被除数和除数的类型不一致,编译时出错。
6、已知m和n都是正整型量,则不论m的值有多大,表达式(m+n)%n值永远小于n。 7、有三个表达式a+=1,++a和a++,若每个表达式在执行前a的值都为2,则执行完毕后,a 的值都变为3。
8、定义二维数组时,如果在定义时赋了初值,则第二维的大小可以不用指定。 9、continue语句只能用在for循环语句中,不能用在while循环语句中。 10、若有:int a=5;则语句--a和--5 的效果是一样的,结果都为4。
二、单项选择题(每小题2分,共40分)
1,下面哪个标识符是不合法的()
A) sum B) mus# C) true_ D)false5 2, 下面哪个不是定义整型变量的合法式子()
A) int a; B)long b; C)interger c; D)short d; 3,有语句:int a=0,b=2;则printf(“a=%d,b=%d”,a++,--b);的输出结果为() A)a=0,b=2 B)a=1,b=1 C)a=1,b=2 D)a=0,b=1 4,系统函数getchar()的功能是() A)在屏幕上输出一个字符 B)在屏幕上输出多个字符 C)从键盘获取一个字符 D)从键盘获取多个字符 5,从键盘输入一个整数值放入整型变量a中,下面哪个语句是正确的() A)scanf(“%a”,&a); B)scanf(“%d”,&a); C)scanf(“%c”,a); D)scanf(“%z”,a); 6,已知关系表达式的取值规则为:“满足”为1(真),“不满足”则为0(假)。据此,若有定义:int a=3,b=2,c=1;则表达式:a>b>c与ab?a:b值为() A)0 B)1 C)2 D)不确定 10,有如下语句: int i=0,j=5,k=0;; for( ;i<5;i++) for(j=0;j<5;j+=2) ++k;
(第1页)
printf(“k=%d”,k); 则执行结果为() A)k=0 B)1 C)15
D)因为第一个for语句后的括号中缺少一个表达式,所以出错 11,有如下语句: int i=1,sum=0; while(i<=3){sum=sum+i;i++;} 则执行结束后,sum的值为() A)6 B)4 C)2 D)0 12,若有语句:float a[5]={1,2,3,4 ,5};则a[5]的值为()
A)5 B)4 C)0 D)不确定
13,若有二维数组定义:double a[][3]={{1,2},{3,4}};则a数组中最多能存储多少个元素() A)12个 B)6个 C)4个 D)3个 14,若有如下代码: int a; float f1(){……} char f2(){……}
则下面关于变量a的有效范围的描述正确的是()
A) a在函数f1()和f2()中都可用 B) a在函数f1()和f2()中都不可用 C) a仅在函数f1()中可用,在f2()中不可用 D) a仅在函数f2()中可用,在f1()中不可用 15,以下哪个语句可用于定义符号常量PI() A)#define PI 3.14 B)#include PI 3.14 C)define PI 3.14 D)include PI 3.14 16,有以下程序: main()
{ int a,b,c=246; a=c/100%9; b=(-1)&& (-1);
printf(\"%d,%d\\n\ } 输出结果是( )
A) 2,1 B) 3,2 C) 4,3 D) 2,-1 17以下关于break语句的说法中不正确的是()
A) break语句可以出现在for循环语句中。 B) break语句可以出现在while循环语句中。 C) break语句可以出现在do{}while循环语句中。 D) break语句可以出现在任何语句中。 18,若有如下三个函数: int f1(){ int f2(){ void f3(){
int k; f3(); printf(“Excute f3()”); k=f2(); } }
}
则以下说法中不正确的是() A)f1()是主调函数 B)f2()是主调
(第2页)
函数
C)f2()是被调函数 函数
*(p+3)+=2;
printf(“%d,%d”,*p,*(p+2)); D)f3()是主调
}
19,以下程序的输出结果是( ) 4、以下程序的输出结果是 【4】 。 int d=1 ; #define MCRA(m) 2*m fun(int p) #define MCRB(n,m) 2*MCRA(n)+m
{ static int d=5.7;
main()
d+=p ;
{ int i=2,j=3;
printf(\"%d \
printf(\"%d\\n\return(d); }
} main( )
5、以下函数的功能是删除字符串s中的所有数字字{ int a=3;
符。请填空。 printf(\"%d \\n\
A).6 9 9 B).6 6 9 C).6 15 15 viod dele(char *s) D).6 6 15 { int n=0,i; 20, 有以下程序 for(i=0;s[i];i++) #include “stdio.h” if(___【5】_____) s[n++]=s[i]; main()
s[n]=____ 【6】____;
{ char str[ ][20]={\"Hello\ *p=str;
} printf(\"%d\\n\
}
程序运行后的输出结果是
A)0 B)5 C)7 D)20
四、编程题(共38分)
1、输入一个字符,请判断是字母、数字还是特殊字符。若是小写(大写)英文字母,则输出相应的大写(小写)字母及其ASCII码值。(8分) 1、
2、杨辉三角形(要求打印出10行如下图)(10分)
三、填空题(每空2分,共12分)
1、若有以下程序
main()
{ int p,a=5; if(p=a!=0)
printf(\"%d\\n\ else
printf(\"%d\\n\}
执行后输出结果是 【1】 。 2、若有以下程序 main() { int
a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24}, {-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++)
{ if(a[i][j]<0) continue; if(a[i][j]==0) break; s+=a[i][j]; } }
printf(\"%d\\n\}
执行后输出结果是 【2】 。 3、以下程序输出结果是【3】
main()
{ int a[ ]={1,2,3,4,5,6}, *p; p=a;
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
1 5 10 10 5 1 „„„„„„„„„„„„ 3、编一个函数fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。(20分)
《C语言程序设计》模拟试题2
(时间:120分钟 总分:100分) 一、选择题(本题共15道小题,每题2分,共30分。) 1. 以下程序运行后,输出结果是 main( )
(第3页)
{ char *s=\"abcde\"; s+=2; printf(\"%ld\\n\",s); }
A)cde B)字符c的ASCII码值 C)字符c的地址 D)出错
2. 下面程序的运行结果是 main()
{ char ch[7]={\"65ab21\int i,s =0
for(i=0;ch[i]>='0'&&ch[i]<'9';i+=2) s=10*s+ch[i]-'0' printf(\"%d\\n\",s);
}
A)12ba56 B)6521 C)6 D)62
3. 若有说明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是 A
)
*p=&a;
scanf(\"%lf\
B)p=(double*)malloc(8);scanf(\"%f\
C) p=&a;scanf(\"%lf\ D)p=&a; scanf(\"%le\
4.若k是int型变量,且有下面的程序片段: k=-3
if(k<=0) printf(\"####\") else printf(\"&&&&\"); 上面程序片段的输出结果是 A) #### B) &&&&
C)
D) 有语法错误,无输出结果 5. 以下程序运行后,输出结果是 #include #define S(x) PT*x*x main( ) { int a=1,b=2; printf(\"%4.1f\\n\",S(a+b)) } A)49.5 B)9.5 C)22.0 D)45.0 6. 当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为 if(aA)1 B)2 C)3 D)6 7. 执行以下程序后,y的值是 main ( ) { int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y + = * (p + x); printf(\"%d\\n\ } A) 17 B) 18 C) 19 D) 20 8.若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是 A) i= *p; B) *p=*&j; C) i=&j; D) i=* *p; 9. 执行语句:for(i=1;i++<4;)后;变量i的值是 A)3 B)4 C)5 D)不定 10. 两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 main( ) { int x; scanf(\"%d\ if(x + + >5) printf(\"%d\ else printf(\"%d\\n\ } A) 7和5 B) 6和3 C) 7和4 D) 6和4 11. 有以下程序 ####&&&& int fun(int x,int y,int *cp,int *dp) {*cp=x+y; *dp=x-y;} main() { int a,b,c,d; a=30;b=50; fun(a,b,&c,&d); printf(\"%d,%d\\n\} 输出结果是 A)50,30 B)30,50 C)80,-20 D)80,20 12. 设有数组定义: char array [ ]=\"China\"; 则数组 array所占的空间为 A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节 13. 设j为int型变量,则下面for循环语句的执行结果是 for(j=10;j>3;j--) { if(j%3) j--; --j; --j; (第4页) printf(\"%d\ } A)6 3 B)7 4 C)6 2 D)7 3 14. 设C语言中,一个int 型数据在内存中占2个字节,则unsigned int 型数据的取值范围为: A) 0-255 B) 1-32767 C) 0-65535 D) 0-2147483647 15. 设有如下定义: int (*ptr)[ 5]; 则以下叙述中正确的是 A) ptr是指针变量,指向5个int型数据 B) ptr是指针变量,指向包含int型数据的一维数组 C) ptr是一维数组,包含5个元素,每个元素为int型 数据的指针变量 D) ptr是一个数组名,该数组包含有5个指针类型的 数据 二、判断题(本题共10道小题,共10分。) 1. 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数( ) 2. 全局变量使得函数之间的\"耦合性\"更加紧密,不利于模块化的要求( ) 3. 若调用一个函数,且此函数中没有return语句,则返回一个不确定的值( ) 4. 用户若需要调用标准库函数,调用前必须重新定义( ) 5. 函数调用:strcat(strcpy(str1,str2),str3)的功能是将串str2复制到串str1中后再将串str3连接到串str1之后( ) 6. 在实际编程中,do-while循环完全可以用for循环替换( ) 7. C程序的注释只能是一行( ) 8. 自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式( ) 9. 在函数内的复合语句中定义的变量在本函数范围内有定义( ) 10. 一个变量在内存中占据一定的存储单元( ) 三、填空题(每空1分,共10分。) 1. C语言数组的下标总是从__________开始,不可以为负数;构成数组各个元素具有相同的__________。 2. 在C语言中(以16位PC机为例),一个char数据在内存中所占字节数为_______,一个int数据在内存中所占字节数为_______,一个long数据在内 存中所占字节数为_______,一个float数据在内存中所占字节数为_______。 3. C程序是由________构成的,一个C程序中至少包含________ 。因此,________是C程序的基本单位。 4. 假定一个二维数组为a[M][N],则a[i]的地址值(以字节为单位)为 __________。 四、读程序写结果题(本题共5道小题,每题3分,共15分。) 1、有以下程序 float fun(int x,int y) { return(x+y); } main() {int a=2,b=5,c=8; printf(\"%3.0f\\n\ } 程序运行后的输出结果是____________。 2、以下程序运行后的输出结果是_______________ 。 main() { char s[ ]=\"9876\ for( p=s ; p 4、以下程序运行后的输出结果是 。 main() {int x=15; while(x>10&&x<50) { x++; if(x/3){x++; break;} else continue; }printf(\"%d\\n\ } 5、以下程序运行后的输出结果是 。 void fun(int x,int y) {x=x+y;y=x-y;x=x-y; printf(\"%d,%d,\ main() {int x=2,y=3; fun(x,y); printf(\"%d,%d\\n\ } 五、编程题(本题共2道小题,共35分。) 1. 计算1-1/2+1/3-1/4-...+1/99-1/100的值,并显示出来。(10分) 2. 从键盘输入一个5*5整型数组赋值,找出其中的最小值并显示出来。(10分) (第5页) 3、求数组a[N]中的所有素数的和,定义函数isprime D) 用do-while语句构成的循环,在while后的 表达式为零时结束循环。 用来判断数组元素是否为素数。(注:素数是只能被 9.以下程序的输出结果是 1和本身整除且大于1的自然数)。(15分) A) 2 0 B) 3 1 C) 3 2 1 D) 2 1 0 main( ) 《C语言程序设计》模拟试题3 { int n=4; 一、选择题(每题2分,共40分) while(n--)printf(\"%d \",--n); 1. 若已定义x和y为double类型,则表达式x=1, } y=x+3/2 的值是 10.以下程序的输出结果是 A) 1 B) 2 C) 2.0 A) #*#*# B) ##### C) ***** D) 2.5 D) *#*#* 2. 在C语言中,不正确的int类型的常数是 main( ) A) 32768 B) 0 C) 037 { int i; D) 0xAF for(i=1;i<6;i++) 3. 语句:printf(\"%d\",(a=2)&&(b=-2));的输出结果 { if(i%2){ printf(\"#\");continue;} 是 printf(\"*\"); A) 无输出 B) 结果不确定 C) -1 D) 1 } 4. 能正确表示a和b同时为正或同时为负的逻辑表达 printf(\"\\n\"); 式是 } A) (a>=0‖b>=0)&&(a<0‖b<0) 11.设有数组定义: char array [ ]=\"China\"; 则数组 B) (a>=0&&b>=0)&&(a<0&&b<0) array所占的空间为 C) (a+b>0)&&(a+b<=0) D) a*b>0 A) 4个字节 B) 5个字节 C) 6个5. 以下程序的输出结果是 A) -1 1 B) 0 1 C) 1 0 D) 0 字节 D) 7个字节 0 12. 若已定义:int a[9],*p=a;并在以后的语句 main( ) 中未改变p的值,不能表示a[1] 地址的表达式 { int a=-1,b=1,k; 是 if((++a<0)&&!(b-- <=0)) A) a+1 B) a++ C) p+1 D) ++p printf(\"%d %d\\n\",a,b); 13. 若有以下定义和语句: else printf(\"%d %d\\n\",b,a); double r=99, *p=&r; } *p=r; 6. 以下循环体的执行次数是 则以下正确的叙述是 A) 3 B) 2 C) 1 A) 以下两处的*p含义相同,都说明给指针变量pD) 0 赋值 main() B) 在\"double r=99, *p=&r;\"中,把r的地址 { int i,j; 赋值给了p所指的存储单元 for(i=0,j=1; i<=j+1; i+=2, j--) C) 语句\"*p=r;\"把变量r的值赋给指针变量p printf(\"%d \\n\ D) 语句\"*p=r;\"取变量r的值放回r中 } 14.有如下程序段 7. 有以下程序 int *p,a=10,b=1 main() p=&a; a=*p+b; { int a,b,c=246; 执行该程序段后,a的值为 a=c/100%9; b=(-1)&&(-1); A) 12 B) 11 C) printf(\"%d,%d\\n\ 10 D) 编译出错 } 15. 以下程序的输出结果是 输出结果是: A) 2,1 B) 3,2 C) 4,3 A)6 B) 6789 C) '6' D) 789 main( ) D) 2,-1 { char a[10]={'1','2','3','4','5',8.以下叙述正确的是 '6','7','8','9',’\\0’},*p; A) do-while语句构成的循环不能用其它语句构 int i=8; 成的循环来代替。 p=a+i; B) do-while语句构成的循环只能用break语句 printf(\"%s\\n\",p-3); 退出。 } C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。 (第6页) 16. 下面程序把数组元素中的最大值放入a[0]中。则 int t(int x,int y,int cp,int dp) 在if 语句中的条件表达式应该是 { cp=x*x+y*y; A) p>a B) *p>a[0] C) *p>*a[0] dp=x*x-y*y; D) *p[0]> *a[0] } main( ) main( ) { int a[10]={6,7,2,9,1,10,5, { int a=4,b=3,c=5,d=6; 8,4,3},*p=a,I; t(a,b,c,d); for(i=0;i<10;i++,p++) printf(\"%d %d \\n\",c,d); if(________) *a=*p; } printf(\"%d\",*a); 3.以下程序的功能是:从键盘上输入若干个学生的成 } 绩,统计计算出平均成绩,并输出低于平均分的学生17.以下程序的输出结果是 成绩,用输入负数结束输入。请填空。 A) 5 2 B) 5 1 C) 5 3 D) 9 7 main( ) main( ) { float x[1000], sum=0.0, ave, a; { int i,x[3][3]={9,8,7,6,5,4,3, int n=0, i; 2,1},*p=&x[1][1]; printf(\"Enter mark:\\n\");scanf(\"%f\", for(i=0;i<4;i+=2)printf(\"%d \",p[i]); &a); } while(a>=0.0&& n<1000) 18. 以下程序的输出结果是 { sum+= (3) ; x[n]= (4) ; A) 12345678 B) 123456780 C) 147 258 n++; scanf(\"%f\",&a); 360 D) 123 456 780 } main( ) ave= (5) ; { char ch[3][4]={\"123\",\"456\",\"78\, printf(\"Output:\\n\"); *p[3]; int i; printf(\"ave=%f\\n\",ave); for(i=0;i<3;i++) p[i]=ch[i]; for (i=0;i #define f(x) x*x 一,单项选择题(每小题3分,共45分) main( ) 1,下面哪个标识符是不合法的() { int a=6,b=2,c; c=f(a) / f(b); A) sum B) mus# C) printf(\"%d \\n\",c); true_ D)false5 } 3, 当同时定义3个float型变量a,b,c时,下面 二、填空题(每空5分,共30分) 哪个式子是正确的() 1. 若想通过以下输入语句使a=5.0,b=4,c=3,则输 A)float a,b,c; B)float a,b;c; C)入数据的形式应该是 (1) 。 float a;b;c; D)float ,a,b,c; int b,c; float a; 3,在C语言中,合法的字符常量是() scanf(\"%f,%d,c=%d\",&a,&b,&c); A)“\\084” B)‘\\x43’ C) 2. 下列程序的输出结果是 (2) 。 ‘ab’ D)“\\0” (第7页) 4,设以下变量均为int类型,则值不等于7的表达 for(j=0;j<5;j+=2) ++k; 式是 。 printf(“k=%d”,k); A)(x=y=6,x+y,x+1) B)(x=y=6,x+y,y+1) C)则执行结果为() (x=6,x+1,y=6,x+y) D)(y=6,y+1,x=y,x+1) A)k=0 B)1 C)15 D)因为第一个for语5,有语句:int a=0,b=2;则句后的括号中缺少一个表达式,所以出错 printf(“a=%d,b=%d”,a++,--b);的输出结果为() 12,有如下语句: A)a=0,b=2 B)a=1,b=1 C) int i=1,sum=0; a=1,b=2 D)a=0,b=1 while(i<=3){sum=sum+i;i++;} 6,系统函数getchar()的功能是() 则执行结束后,sum的值为() A)在屏幕上输出一个字符 B)在屏 A)6 B)4 C)2幕上输出多个字符 D)0 C)从键盘获取一个字符 D)从键 盘获取多个字符 13,若有语句:float a[5]={1,2,3,4 ,5};则7,从键盘输入一个整数值放入整型变量a中,下面a[5]的值为() 哪个语句是正确的() A)5 B)4 C)0 A)scanf(“%a”,&a); B)scanf(“%d”,&a); D)不确定 C)scanf(“%c”,a); D)scanf(“%z”,a); 14,以下哪个语句可用于定义符号常量PI() 8,已知关系表达式的取值规则为:“满足”为1(真), A)#define PI 3.14 B)#include PI 3.14 “不满足”则为0(假)。据此,若有定义:int a=3,b=2,c=1;则表达式:a>b>c与aPI 3.14 为() 15,若有如下程序段,其中s、a、b、c均已定义为 A)0,0 B)0,1 C) 整型变量,c>0,且a、c均已赋值 1,0 D)1,1 for(s=a,b=1;b<=c;b++) s=s+1; 9,若有语句:int a=-1,b=0,c=1,d=2;则表达式: 则与上述程序段功能等价的赋值语句是: a||b&&c||d的值为() A)s=a+b; B)s=a+c; C)s=s+c; D)s=b+c; A)-1 B)0 C)1二、填空题(每空4分,共20分) D)2 (1) 若有以下程序 10,若有以下定义: int x,a,b; 则正确的switch 语句 main() { int p,a=5; 是() if(p=a!=0) printf(\"%d\\n\ A)switch(x) else printf(\"%d\\n\B)switch(x) } { case 1.0:printf(\"*\\n\"); { case 执行后输出结果是【1】。 1,2:printf(\"*\\n\"); (2)执行以下程序后,输出'#'号的个数是 【2】 case 2.0:printf(\"**\\n\"); case main() 3:printf(\"**\\n\"); { int i,j; for(i=1; i<5; i++) } } for(j=2; j<=i; j++) putchar('#'); } C)switch (a+b) (3)以下程序输出结果是【3】 D)switch (a+b); main() { case 1:printf(\"\\n\"); { case { int a[ ]={1,2,3,4,5,6}, *p; 1:printf(.\"*\\n\"); p=a; case 1+2:printf(\"**\\n\"); case *(p+3)+=2; 2:printf(\"**\\n\"); printf(“%d,%d”,*p,*(p+2)); } } } 11,有如下语句: (4)以下程序输出x,y,z三个数中的最小值,请填 int i=0,j=5,k=0;; (2)空使程序完整。 for( ;i<5;i++) (第8页) main ( ) { int x=4,y=5,z=8 ; int u,v; u = x 1、输入百分制成绩,要求输出成绩等级A、B、C、D、E,其中90分以上为A,80~90为B,70~79为C,60~69为D,60分以下为E。若超过100或小于0分则提示输入错误。 2、求1!+2!+3!+4! +…+n! 《C语言程序设计》中期测试题2 一、选择题(每小题3分,共45分) case 3:a+=2; default:a+=5; } } printf(\"%d\\n\ } A) 10 B) 20 C) 31 D) 32 7、当执行以下程序段时( )。 x=-1; do{ x=x*x; }while(!x); A)循环体将执行一次 B)循环体将执行二次 C)循环体将执行无限次 D)系统将提示有语法错误 8、若有以下程序: main() {int k=2,i=2,m; m=(k+=i*=k); printf(\"%d,%d\\n\执行后的输出结果是( )。 1、选项中合法的用户标识符是( )。 A) short B) _2Test C) 3Dmax D) 9、以下非法的赋值语句是______。 A) n=(i=2,++i); B) j++; C) hello.txt ++(i+1); D) x=j>0; 2、若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4; 10、以下选项中非法的表达式是( )。 后,c的值为( ) A)0<=x<100 B)i=j==0 C)(char)(65+3) D) A) 1.4 B) 1 C) 2.0 x+1=x+1 D) 2 11、在下列程序中,要求给i赋10,给j赋20,则 3、以下程序的输出结果是( )。 应该从键盘输入( ) 。 main() main( ) { int a=12,b=12; { int i,j; scanf(\"i=%d,j=%d\",printf(“%d \\n”, a--,++b); } &i,&j); printf(\"i=%d,j=%d\\n\ } A)10 10 B)12 12 C)11 13 D)12 13 A)10,20 B) 10 20 C)i=10,j=20 D) 4、C语言对嵌套if语句的规定是:else总是与( ) “i=10,j=20” 配对。 12、以下程序的输出结果是( )。 A)其之前最近的if B)第一个if C)缩main() 进位置相同的if D)其之前最近且不带else的if { int p=30; printf(\"%d\\n\ p%3)); } 5、执行语句for(i=1;i++<4;);后,变量i的值是 A)3 B) 1 C)30 D)0 ( )。 13、假定int类型变量占用两个字节,其有定义: A)3 B)4 C)5 D)不定 int x[10]={0,2,4};,则数组x在内存中所占 6、以下程序运行后,输出结果是()。 字节数是( )。 A) 3 B) 6 C) 10 D) main() 20 { int a=0,i; 14、诺a,b为int型变量,则执行以下语句后,b for(i=1;i<5;i++) 的值为( ). { switch(i) { case 0: a=1; b=10; do{b-=a;}while(b--<0); case 1: A)9 B)-2 C)-1 case 2:a+=3; (第9页) D)8 15、以下程序的输出结果是( )。 main( ) { int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(\"%d%d%d%d\\n\],a[3][0]); } A) 0650 B) 1470 C) 5430 D) 输出值不定 二、填空题(每空4分,共20分) (2)S111111 求......i!1!2!3!4!20!120S的值。(20分) 《C语言程序设计》中期测试题3 一、单项选择题(每小题3分,共30分) 1、选出下列标识符中不是合法的标识符的是( )。 A. hot_do B. cat1 C. _pri 1、以下程序段的运行结果是【1】。 D. 2ab main( ) 2、为了避免嵌套的条件分支语句if-else的二义 {int x=2000, y=2001; 性,C语言规定:C程序中的else总是与( ) printf(\"%d\\n\ 组成配对关系。 2、以下程序运行后的输出结果是【2】 。 A. 缩排位置相同的if B. 在其之前未配对的 main() if C.在其之前未配对的最近的if D.同一行上的 { int a=1,b=3,c=5; if if(c=a+b) printf(\"yes\\n\"); else 3、以下程序的输出结果是( )。 printf(\"no\\n\"); } main( ) 3、以下程序运行后的输出结果是【3】 { int a=5,b=6; printf(“%d %d\\n”, main() a--,++b); } { int arr[ ]={1,2,4,8,10,12}, *p=arr; A.5 6 B.5 7 C.4 6 D.4 7 p++; printf(\"%d\\n\ 4、设有如下定义: int x=10,y=3,z;则语句 4、设有以下程序: printf(\"%d\\n\的输出结果是 main() ( )。 { int n1,n2; A. 4 B. 3 C. 1 D. 0 scanf(\"%d\ 5、设整型变量a为5,使b不为2的表达式是 while(n2!=0) { n1=n2%10; n2=n2/10; ( )。 printf(\"%d\ A. b=a/2 B. b=6-(--a) C. b=a%2 D. } b=a>3?2:1 程序运行后,如果从键盘上输入1298;则输出 6、以下程序段的输出结果是( )。 结果为【4】 int a=5; float x=3.14; 5、有以下程序,若运行时从键盘输入:18,11<回 a*=x*(‘E’ - ‘A’); 车>,则程序的输出结果是___【5】____。 printf(“%f\\n”,(float)a); main() A. 62.000000 B. 62.800000 C. { int a,b; 63.000000 D. 62 printf(\"Enter a,b:\"); scanf(%d,%d\7、以下程序的输出结果是( )。 while(a!=b) { while(a>b) a-=b; main() while(b>a) b-=a; { int a=0,i; } printf(\"%3d%3d\\n\ for(i=0;i<4;i++) { switch(i) } { case 0: 三、编程题(35分) case 1: a+=3; break; 1、随机输入一个字符,判断其是英文字母、数字、 case 2: a+=2; 空格还是其他特殊字符。(15分) default: a+=5; 2、 (第10页) for(i=1,sum=0.0;i<11;i++) { (1) ; } (2) ; A. 18 B. 17 C. 16 D. 12 }printf(“average=%f\\n”,sum/10); 8、若有定义:int a=5,b=2,c;,执行语句c=a/b+0.5;} 后,c的值为( ) 2、以下程序的功能是:从键盘上输入若干个学生的A. 2 B. 2.0 C. 2.5 D. 3 成绩, 统计并输出最高成绩和最低成绩,当输入负9、以下程序执行后输出结果是( ) 数时结束输入. main() main() { int i=1,j=1,k=2; { float x,amax,amin; if((j++‖scanf(\"%f\k++)&&i++) printf(\"%d,%d,%d\\n\amax=x; amin=x; } while( (3) ) A) 1,1,2 B) 2,2,1 C) 2,2,2 D) { if(x>amax) amax=x; 2,2,3 (4) amin=x; 10、以下对二维数组a进行正确初始化的是( ) scanf(\"%f\(5) ); A. int a[2][3]={{1,2},{3,4},{5,6}}; }printf(\"\\namax=%f\\namin=%f\\n\B. int a[ ][3]={1,2,3,4,5,6}; } C. int a[2][ ]={1,2,3,4,5,6}; 四、编程题(共35分) D. int a[2][ ]={{1,2},{3,4}}; 1. 三个整数a、b、c,由键盘输入,输出其中最大二、读程序写结果题(每小题4分,共计20分) 的一个数。(15分) 1、float f=3.1415927; 2. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...printf(“%f,%3.3f”,f,f); 求出这个数列的前20项之和。(20分) 则输出结果是 (1) 。 2、int x=6, y=7; printf(“%d,”,x++); printf(“%d\\n”,++y); 输出结果是 (2) 。 3、a=3; a+=(a<1)?a:1; printf(“%d”,a); 输出结果是 (3) 。 4、for (a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1) { b+=3; continue;} b-=5; } 程序的输出结果a的值为 (4) 5、 int y=1, x, *p, a[ ]={2,4,6,8,10}; p=&a[1]; for(x=0;x<3;x++) y + = * (p + x); printf(\"%d\\n\ 程序的输出结果y的值是 (5) 三、程序填空题(每空3分,共15分) 1、从键盘上输入10个数,求其平均值。 main() { int i;float f,sum; } } printf(\"%d\\n\ 《C语言程序设计》模拟试题一 一、选择题(每题1.5分,共45分) 1. 以下选项中属于C语言的数据类型是 A) 复数型 B) 逻辑型 C) 双精度型 D) 集合型 2. 在C语言中,不正确的int类型的常数是 A) 32768 B) 0 C) 037 D) 0xAF 3. 语句:printf(\"%d\",(a=2)&&(b= -2));的输出结果是 A) 无输出 B) 结果不确定 C) -1 D) 1 4. 下列描述中不正确的是 A) 字符型数组中可以存放字符串 B) 可以对字符型数组进行整体输入、输出 C) 可以对整型数组进行整体输入、输出 D) 不能在赋值语句中通过赋值运算符\"=\"对字符型数组进行整体赋值 5. 设有如下定义:int x=l,y=-1;,则语句:printf(\"%d\\n\",(x--&++y));的输出结果是 A) 1 B) 0 C) -1 D) 2 6. 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是 A) c=b=a; B) (a=c) ‖(b=c) ; C) (a=c) &&(b=c); C) a=c=b; (第11页) 7. 以下程序的输出结果是 A) 10,1 9,2 B) 9,8 7,6 C) 10,9 9,0 D) 10,10 9,1 main( ) { int x=10,y=10,i; for(i=0;x>8;y=++i) printf(\"%d,%d \",x--,y); } 8. 以下程序的输出结果是 A) 5 2 B) 5 1 C) 5 3 D) 9 7 main( ) { int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1]; for(i=0;i<4;i+=2)printf(\"%d \",p[i]); } 9. 以下程序的输出结果是 A)6 B) 6789 C) '6' D) 789 main( ) { char a[10]={'1','2','3','4','5','6','7','8','9',0},*p; int i; i=8; p=a+i; printf(\"%s\\n\",p-3); } 10. 以下程序的运行结果是 A) 运行后报错 B) 6 6 C) 6 12 D) 5 5 #include \"stdio.h\" main( ) { int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12,}; int *p=a+5, *q=NULL; * q=*(p+5); printf(\"%d %d \\n\",*p,*q); } 11. 以下说法中正确的是 A) #define和printf都是C语句 B) #define是C语句,而printf不是 C) printf是C语句,但#define不是 D) #define和printf都不是C语句 12. 语句:printf(\"%d \\n\",12 &012);的输出结果是 A) 12 B) 8 C) 6 D) 012 13. 能正确表示a和b同时为正或同时为负的逻辑表达式是 A) (a>=0‖b>=0)&&(a<0‖b<0) B) (a>=0&&b>=0)&&(a<0&&b<0) C) (a+b>0)&&(a+b<=0) D) a*b>0 14. 以下程序的输出结果是 A) 2 0 B) 3 1 C) 3 2 1 D) 2 1 0 main( ) { int n=4; while(n--)printf(\"%d \",--n); } 15. 若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是 A) p+1 B) a+1 C) a++ D) ++p 16. 以下程序的输出结果是 A) 17,021,0x11 B) 17,17,17 C) 17,0x11,021 D) 17,21,11 main( ) { int k=17; printf(\"%d,%o,%x \\n\",k,k,k); } 17. 以下程序的输出结果是 A) -1 1 B) 0 1 C) 1 0 D) 0 0 main( ) { int a= -1,b=1,k; if((++a<0)&& ! (b-- <=0)) printf(\"%d %d\\n\",a,b); else printf(\"%d %d\\n\",b,a); } 18. 若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a; scanf(\"%ld\",p); B) p=(long *)malloc(8); scanf(\"%ld\",p); C) scanf(\"%ld\",p=&a); D) scanf(\"%ld\",&a); 19. 以下选项中,能定义s为合法的结构体变量的是 A) typedef struct abc B) struct { double a; { double a; char b[10]; char b[10]; } s; } s; C) struct ABC D) typedef ABC { double a; { double a; char b[10]; char b[10]; } } ABC s; ABC s; 20. 下面程序把数组元素中的最大值放入a[0]中。则在if 语句中的条件表达式应该是 A) p>a B) *p>a[0] C) *p>*a[0] D) *p[0]> *a[0] main( ) { int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,I; for(i=o;i<10;i++,p++) (第12页) if(________) *a=*p; printf(\"%d\",*a); } 21. 以下程序的输出结果是 A) 6 9 9 B) 6 6 9 C) 6 15 15 D) 6 6 15 int d=1; fun(int p) { static int d=5; d+=p; printf(\"%d \",d); return(d); } main( ) { int a=3; printf(\"%d \\n\",fun(a+fun(d))); } 22. 以下程序的输出结果是 A) 123456780 B) 123 456 780 C) 12345678 D) 147 main( ) { char ch[3][4]={\"123\",\"456\",\"78\, *p[3]; int i; for(i=0;i<3;i++) p[i]=ch[i]; for(i=0;i<3;i++) printf(\"%s\",p[i]); } 23. 以下程序的输出结果是 A) 1 B) 4 C) 7 D) 5 #include int a[3][3]={1,2,3,4,5,6,7,8,9,},*p; main( ) { p=(int*)malloc(sizeof(int)); f(p,a); printf(\"%d \\n\",*p); } f(int *s, int p[][3]) { *s=p[1][1]; } 24. 以下程序的输出结果是 A) 9 B) 6 C) 36 D) 18 #define f(x) x*x main( ) { int a=6,b=2,c; c=f(a) / f(b); printf(\"%d \\n\",c); } 25. 以下程序的输出结果是 A)4 2 1 1 B) 0 0 0 8 C) 4 6 7 8 D) 8 8 8 8 main( ) { char *s=\"12134211\"; int v[4]={0,0,0,0},k,i; for(k=0;s[k];k++) { switch(s[k]) { case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; } for(k=0;k<4;k++) printf(\"%d \",v[k]); } 26. 以下程序的输出结果是 A) AfghdEFG B) Abfhd C) Afghd D) Afgd #include main( ) { char *p1,*p2,str[50]=\"ABCDEFG\"; p1=\"abcd\"; p2=\"efgh\"; strcpy(str+1,p2+1); strcpy(str+3,p1+3); printf(\"%s\",str); } 27. 以下程序的输出结果是 A) #*#*# B) ##### C) ***** D) *#*#* main( ) { int i; for(i=1;i<6;i++) { if(i%2){printf(\"#\");continue;} printf(\"*\"); } printf(\"\\n\"); } 28. 若有以下定义和语句: double r=99, *p=&r; *p=r; 则以下正确的叙述是 A) 以下两处的*p含义相同,都说明给指针变量p赋值 B) 在\"double r=99, *p=&r;\"中,把r的地址赋值给了p所指的存储单元 C) 语句\"*p=r;\"把变量r的值赋给指针变量p D) 语句\"*p=r;\"取变量r的值放回r中 29. 以下程序的输出结果是 A) 编译不通过,无输出 B) aceg C) acegi D) abcdefghi main( ) { int i; for(i='A';i<'I';i++,i++) printf(\"%c\",i+32); printf(\" \\n\"); } 30. 有以下程序 #include main() { int a,b,c=246; a=c/100%9; b=(-1)&&(-1); (第13页) printf(\"%d,%d\\n\ } 输出结果是 A) 2,1 B) 3,2 C) 4,3 D) 2,-1 二、填空题(每空2分,共30分) 1. 若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是 (1) 。 int b,c; float a; scanf(\"%f,%d,c=%d\",&a,&b,&c); 2. 下列程序的输出结果是 (2) 。 #include main( ) { char b[30],*chp; strcpy(&b[0],\"CH\"); strcpy(&b[1],\"DEF\"); strcpy(&b[2],\"ABC\"); printf(\"%s \\n\",b); } 3. 下列程序的输出结果是 (3) 。 int t(int x,int y,int cp,int dp) { cp=x*x+y*y; dp=x*x-y*y; } main( ) { int a=4,b=3,c=5,d=6; t(a,b,c,d); printf(\"%d %d \\n\",c,d); } 4. 下列程序中字符串中各单词之间有一个空格,则程序的输出结果是 (4) 。 #include main( ) { char strl[]=\"How do you do\", *p1=strl; strcpy(strl+strlen(strl)/2,\"es she\"); printf(\"%s \\n\",pl); } 5. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。 main( ) { float x[1000], sum=0.0, ave, a; int n=0, i; printf(\"Enter mark:\\n\");scanf(\"%f\",&a); while(a>=0.0&& n<1000) { sum+ (5) ; x[n]= (6) ; n++; scanf(\"%f\",&a); } ave= (7) ; printf(\"Output:\\n\"); printf(\"ave=%f\\n\",ave); for (i=0;i 6. 有以下定义和语句,则sizeof(a)的值是 (9) ,而sizeof(a.share)的值是 (10) struct date{ int day; int month; int year; union{int share1 float share2; }share; }a; 7. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件文件中形成文本文件,并将字符的个数写到文件尾部,请填空。 #include { FILE *fp; char ch,fname[32]; int count=0; printf(\"Input the filename :\"); scanf(\"%s\",fname); if((fp=fopen( (11) ,\"w+\"))==NULL) { printf(\"Can't open file:%s \\n\",fname); exit(0);} printf(\"Enter data:\\n\"); while((ch=getchar())!=\"#\"){ fputc(ch,fp); count++;} fprintf( (12) ,\"\\n%d\\n\", count); fclose(fp); } 8. 以下函数creatlist用来建立一个带头节点的单链表,链表的结构如下图所示,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回,链表最后一个节点的next域放入NULL,作为链表结束标志。data为字符型数据域,next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。 struct node { char data; struct node * next; }; ······ (13) creatlist( ) { struct node * h,* s,* r; char ch; h=(struct node *)malloc(sizeof(struct node)); r=h; ch=getchar( ); { s=(struct node *)malloc(sizeof(struct node)); s->data= (14) ; r->next=s; r=s; ch=getchar( ); } r->next= (15) ; (第14页) return h; } 三、编程题(第1题10分,第2题15分,共25分) 一、选择题 二、填空题 (1) 5.0,4,c=3 (2) CDABC (3) 5 6 (4) How does she (5) =a (6) a (7) sum/n (8) x[i] else y=-1; 7. 以下循环体的执行次数是 A) 3 B) 2 C) 1 D) 0 main() { int i,j; for(i=0,j=1; i<=j+1; i+=2, j--)printf(\"%d \\n\ } 《C语言程序设计》模拟试题二 8. 以下叙述正确的是 一、选择题(每题1.5分,共45分) A) do-while语句构成的循环不能用其它语句构 1. 设有 int x=11; 则表达式 (x++ * 1/3) 的值是 成的循环来代替。 A) 3 B) 4 C) 11 B) do-while语句构成的循环只能用break语句 D) 12 退出。 2. 下列程序的输出结果是 C) 用do-while语句构成的循环,在while后的 A) 3 B) 3.2 C) 0 表达式为非零时结束循环。 D) 3.07 D) 用do-while语句构成的循环,在while后的 main() 表达式为零时结束循环。 { double d=3.2; int x,y; 9. 下列程序执行后的输出结果是 x=1.2; y=(x+3.8)/5.0; A) G B) H C) I printf(\"%d \\n\ D) J } main() 3. 下列程序执行后的输出结果是(小数点后只写一 { int x='f'; printf(\"%c 位) \\n\ A) 6 6 6.0 6.0 B) 6 6 10. 执行下面的程序段后,变量k中的值为 6.7 6.7 A) 不定值 B) 33 C) 30 C) 6 6 6.0 6.7 D) 6 6 D) 10 6.7 6.0 int k=3, s[2]; main() s[0]=k; k=s[1]*10; { double d; float f; long l; int i; 11. 若已定义: i=f=l=d=20/3; int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a,i; printf(\"%d %ld %f %f \\n\ 其中 0≤i≤9, 则对a数组元素不正确的引用 } 是 4. 下列变量定义中合法的是 A) a[p-a] B) *(&a[i]) C) p[i] A) short _a=1-.le-1; B) D) a[10] double b=1+5e2.5; 12. 下列程序执行后的输出结果是 C) long do=0xfdaL; D) float A) 6 B) 7 C) 8 2_and=1-e-3; D) 9 5. 设 int x=1, y=1; 表达式(!x||y--)的值是 void func(int *a,int b[]) A) 0 B) 1 C) 2 { b[0]=*a+6; } D) -1 main() 6. 与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是 { int a,b[5]; A) if (x>0) y=1; B) if(x) a=0; b[0]=3; else if(x<0)y=-1; func(&a,b); printf(\"%d \\n,b[0]); if(x>0)y=1; } else y=0; 13. 下列程序的运行结果是 else if(x<0)y=-1; A) a=%2,b=%5 B) a=2,b=5 C) a=d, b=d D) a=%d,b=%d else y=0; #include C) y=-1 D) y=0; main() if(x) { int a=2,c=5; if(x>=0) printf(\"a=%d,b=%d\\n\ if(x>0)y=1; 14. 下列程序执行后的输出结果是 if(x>0)y=1; (第15页) A) 3 B) 6 C) 9 { char x=0xFFFF; printf(\"%d \\n\ D) 随机数 22. 若有定义: float w; int a, b; 则合法的switch main() 语句是 { int a[3][3], *p,i; A) switch(w) B) p=&a[0][0]; switch(a); for(i=p; i<9; i++) p[i]=i+1; { case 1.0: printf(\"*\\n\"); { case printf(\"%d \\n\ 1 printf(\"*\\n\"); } case 2.0: printf(\"**\\n\"); 15. 设有数组定义: char array [ ]=\"China\"; 则数case 2 printf(\"**\\n\"); 组 array所占的空间为 } } A) 4个字节 B) 5个字节 C) 6个 C) switch(b) D) 字节 D) 7个字节 switch(a+b); 16. 下列程序的输出结果是 { case 1: printf(\"*\\n\"); A) 4 B) 6 C) 8 { case 1: printf(\"*\\n\"); D) 10 default: printf(\"\\n\"); int b=2; case 2: printf(\"**\\n\"); int func(int *a) case 1+2: printf(\"**\\n\"); { b += *a; return(b);} default: printf(\"\\n\"); main() } } { int a=2, res=2; 23. 以下程序段的执行结果是 res += func(&a); A) a=12 y=12 B) a=12 printf(\"%d \\n\ y=12 } a=14 y=16 a=16 17. 下列程序的输出结果是 y=28 A) 4 B) 3 C) 2 a=16 y=20 D) 1 a=18 y=24 main() C) a=12 y=12 D) a=12 { int i, j, m=0, n=0; y=12 for(i=0; i<2; i++) a=14 for(j=0; j<2; j++) y=26 if(j>=i) m=1; n++; a=14 printf(\"%d \\n\ y=44 } int a, y; 18. 下列程序的输出结果是 a=10; y=0; A) 5 B) 6 C) 7 do D) 8 { a+=2; y+=a; struct abc printf(\"a=%d y=%d\\n\ { int a, b, c; }; if(y>20) break; main() }while(a==14); { struct abc s[2]={{1,2,3},{4,5,6}}; „ int t; 24. 若有以下调用语句,则不正确的fun函数的首部 t=s[0],a+s[1],b; 是 printf(\"%d \\n\ A) void fun(int m, int x[]) B) void } fun(int s, int h[41]) 19. 设 int b=2;表达式(b>>2)/(b>>1)的值是 C) void fun(int p, int *s) D) void A) 0 B) 2 C) 4 fun(int n, int a) D) 8 main() 20. 在C程序中,可把整型数以二进制形式存放到文 { „ 件中的函数是 int a[50],n; A) fprintf函数 B) fread函数 C) „ fwrite函数 D) fputc函数 fun(n, &a[9]); 21. 下列程序执行后的输出结果是 „ A) -32767 B) FFFE C) -1 } D) -32768 25. 语句printf(\"a\\bre\\'hi\\'y\\\\\\bou\\n\");的输出 main() 结果是 (第16页) A) a\\bre\\'hi\\'y\\\\\\bou B) A) hello good B) hg C) hel a\\bre\\'hi\\'y\\bou D) hellogood C) re'hi'you D) main()(int argc, char *argv[]) abre'hi'y\\bou { int i; (说明:'\\b'是退格符) if(argc<-0)return; 26. 请选出正确的程序段 for(i=1;i 序段中正确的是 值,使s指向最后一个存储单元 a[4]的语句是 A) char a[11], *p; strcpy(p=a+1,&st[4]); (2) 。 B) char a[11]; strcpy(++a, st); 2)若指针s指向存储单元a[2],p指向存储单元 C) char a[11]; strcpy(a, st); a[0],表达式s-p的值是 (3) 。 D) char a[], *p; strcpy(p=&a[1],st+2); 3. 下面函数用来求出两个整数之和,并通过形参传回 28. 下列程序执行后的输出结果是 两数相加之和值,请填空。 A) you&me B) you C) me int add(int x, int y, (4) z) D) arr { (5) =x+y; } main() 4. 下面程序的功能是:计算1到10之间奇数之和及偶 { char arr[2][4]; 数之和,请填空。 strcpy(arr,\"you\"); #include main() arr[0][3]='&'; { int a, b, c, i; printf(\"%s \\n\ a=c=0; } for(i=0;i<10;i+=2) 29. 下列程序执行后的输出结果是 { a+=i; A) hello B) hel C) hlo (6) ; D) hlm c+=b; void func1(int i); } void func2(int i); printf(\"偶数之和=%d\\n\ char st[]=\"hello,friend!\"; printf(\"奇数之和=%d\\n\ void func1(int i) } { printf(\"%c\ 5. 下面程序的功能是:输出100以内能被3整除且个 if(i<3){i+=2;func2(i);} 位数为6的所有整数,请填空。 } #include main() { printf(\"%c\ { int i, j; if(i<3){i+=2;func1(i);} for(i=0; (7) ; i++) } { j=i*10+6; main() if( (8) ) continue; { int i=0; func1(i); printf(\"\\n\");} printf(\"%d\ 30. 假定下列程序的可执行文件名为prg.exe,则在该 } 程序所在的子目录下输入命令行: prg hello good< } 回车>后,程序的输出结果是 (第17页) 6. 下面程序的功能是:将字符数组a中下标值为偶数 } 的元素从小到大排列,其它元素不 (16)A (17)C (18)A (19)A (20)B (21)A (22)C (23)D (24)A (25)A 变。请填空。 (26)D (27)A (28)B (29)B (30)C (31)B (32)D (33)B (34)A (35)A #include #include 《C语言程序设计》模拟试题三 puts(a); 一、选择题(每题1.5分,共45分) printf(\"\\n\"); 1. 若变量已正确定义并赋值,下面符合C语言语法的 } 表达式是 7. 以下程序的运行结果是 (11) A) a:=b+1 B) a=b=c+2 C) int #include 18.5%3 D) a=a+7=c+b main() 2. C语言中运算对象必须是整型的运算符是 { int k=4, m=1, p; A) %= B) / C) p=func(k,m); printf(\"%d,\ = D) 〈= p=func(k,m); printf(\"%d \\n\ 3. 若已定义x和y为double类型,则表达式x=1, } y=x+3/2 的值是 func(int a, int b) A) 1 B) 2 C) { static int m=0, i=2; 2.0 D) 2.5 i+=m+1; 4. 若变量a、i已正确定义,且i已正确赋值,合法 m=i+a+b; 的语句是 return m; A) a==1 B) ++i; C) } a=a++=5; D) a=int(i); 8. 以下程序的功能是:将无符号八进制数字构成的字 5. 若有以下程序段, 符串转换为十进制整数。例如,输入的字符串为:556, int c1=1,c2=2,c3; 则输出十进制整数366。请填空。 c3=1.0/c2*c1; #include 则执行后,c3中的值是 main() A) 0 B) 0.5 C) 1 { char *p, s[6]; D) 2 int n; 6. 有如下程序 (12) ; main0 gets(p); { int y=3,x=3,z=1; n=*p-'0'; printf(“%d %d\\n”,(++x,y++),z while( (13) !='\\0')n=n*8+*p-'0'; +2); printf(\"%d \\n\ } } 运行该程序的输出结果是 9. 函数 void fun(float *sn, int n)的功能是:根 A) 3 4 B) 4 2 C) 4 据以下公式计算S,计算结果通过形参指针sn传回;n 3 D) 3 3 通过形参传入,n的值大于等于0。请填空。 7. 能正确表示逻辑关系:“a≥=10或a≤0”的C语S=1-1/3+1/5-1/7+„1/(2n+1) 言表达式是 void fun( float *sn, int n) A) a>=10 or a<=0 B) a>=0|a<=10 C) { float s=0.0, w, f=-1.0; a>=10 &&a<=0 D) a>=10‖a<=0 int i=0; 8. 有如下程序 for(i=0; i<=n; i++) main() { f= (14) * f; { int x=1,a=0,b=0; w=f/(2*i+1); switch(x){ s+=w; case 0: b++; } case 1: a++ (15) =s; case 2: a++;b++ (第18页) } printf(“a=%d,b=%d\\n”,a,b); } 该程序的输出结果是 A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2 9. 有如下程序 main() { float x=2.0,y; A) 987 B) 876 C) 8765 D) 9876 14. 设有说明语句:char a=’\\72’;则变量a A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法 15. 有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5); 该函数调用语句中,含有的实参个数是 A) 3 B) 4 C) 5 if(x<0.0) y=0.0; else if(x<10.0) y=1.0/x; else y=1.0; printf(“%f\\n”,y); } 该程序的输出结果是 A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000 10. 有如下程序 main() { int a=2,b=-1,c=2; if(aif(b<0) c=0; else c++; printf(“%d\\n”,c); } 该程序的输出结果是 A) 0 B) 1 C) 2 D) 3 11. 有如下程序 main() { int i,sum; for(i=1;i<=3;sum++) sum+=i; printf(“%d\\n”,sum); } 该程序的执行结果是 A) 6 B) 3 C) 死循环 D) 0 12. 有如下程序 main() { int x=23; do { printf(“%d”,x--);} while(!x); } 该程序的执行结果是 A) 321 B) 23 C) 不输出任何内容 D) 陷入死循环 13. 有如下程序 main() { int n=9; while(n>6) {n--;printf(“%d”,n);} } 该程序段的输出结果是 D) 有语法错 16. 有如下程序 int func(int a,int b) { return(a+b);} main() { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%\\d\\n”,r); } 该程序的输出的结果是 A) 12 B) 13 C) 14 D) 15 17. 有如下程序段 int *p,a=10,b=1 p=&a; a=*p+b; 执行该程序段后,a的值为 A) 12 B) 11 C) 10 D) 编译出错 18. 对于基类型相同的两个指针变量之间,不能进行的运算是 A) < B) = C) + D) - 19. 以下函数返回a所指数组中最小的值所在的下标值 fun(int *a, int n) { int i,j=0,p; p=j;3、若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为___________。