C语言程序设计期末考试题及其答案.doc
. .一、单项选择题本大题共20题,每题2 分,共40分1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑B、能够编制出功能复杂的程序C、C语言可以直接对硬件进展操作D、C语言移植性好2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和假设干子程序组成 B、函数组成 C、假设干过程组成 D、假设干子程序组成4、一个算法应该具有“确定性等5个特性,对另外4个特性的描述中错误的选项是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性5、设变量a是整型,f是实型,i是双精度型,那么表达式10+a+i*f值的数据类型 为 ( ) A、int B、float C、double D、不确定6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码7、有如下程序,输入数据:12345M678cR后<CR>表示回车,x的值是( ) 。 #include<stdio.h> main() int x; float y; scanf("%3d%f",&x,&y); A、12345 B、123 C、45 D、345 8、假设有以下定义int a,b; float x,那么不正确的赋值语句是( ) A、a=1,b=2 B、b+; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( ) #include<stdio.h> int i=10,j=10; printf("%d,%dn",+i,j-); A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是 ( ) #include<stdio.h> main() char c1='A',c2='Y' printf("%d,%dn",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、以下运算符中优先级最高的是( ) A、 B、十 C、% D、!12、设x、y和z是int型变量,且x3,y4,z5,那么下面表达式中值为0是( ) 。A、x&&y B、 xy C、 xy+z&&y-z D、!(xy)!z 1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、ac1fz B、(c1a)&&(c1z) C、 (a=c1) (zc1) D、(c1a)&&(c1z) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、1 C、2 D、3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况B、for循环是先执行循环体语句,后判定表达式C、 在for循环中,不能用break语句跳出循环体D、for循环体语句中,可以包含多条语句,但要用花括号括起来16、下面程序的运行结果是( ) #include<stdio.h> main() int num=0; while(num<=2) num+; printf(“%d ,num); A、 1 B、1 2 C、1 2 3 D、1 2 3 4 17、以下描述正确的选项是( ) A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。B、 do-while循环由do开场,用while完毕,在while表达式后面不能写分号。C、在do-while循环体中,一定要有能使while后面表达式的值变成零“假的操作。D、do-while循环中,根据情况可以省略while。18、以下对一维整形数组a的正确说明是 ( ) A、int a(10); B、int n=10,an; C、int n; D、int a10; scanf(“%d,&n); int an; 19、以下对二维数组a的正确说明是 ( ) A、inta3; B、float a(3,4); C、double a14; D、float a(3)(4); 20、假设二维数组a有m列,那么在aj前面的元素个数为 ( ) A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1二、填空题本大题共10空,每空2分,共20分1、构造化设计中的三种根本构造是_ 2、在C语言中的实型变量分为两种类型,它们是_ _ 和_ 3、当a=5,b=4,c=2时,表达式a>b!= c的值是_ 4、以下程序运行后的输出结果是_ #include<stdio.h> main() int i,j; for(i=4;i>=1;i-) printf("*"); for(j=1;j<=4-i;j+) printf("*"); printf("n"); 5、假设有定义:int a34=1,2,0,4,6,8,10;那么初始化后,a12得到的初值是_ a21得到的初值是_ 6、在C语言中,二维数组元素的内存中的存放顺序是_ 三、程序分析题本大题共2题,每题4分,共8分,描述程序功能并写出程序执行结果1、#include<stdio.h> main() int a,s,n,count; a=2;s=0;n=1;count=1; while(count<=7) n=n*a; s=s+n; +count; printf(“s=%d,s); 2、#include<stdio.h> main() int a=33=1,3,5,7,9,11,13,15,17,sum=0,i,j; for (i=0;i<3;i+) for(j=0;j<3;j+) if (i=j) sum=sum+aj; printf(“sum=%dn,sum); 四、编程题本大题共4题,每题8分,共32分1、编写摄氏温度、华氏温度转换程序。要求:从键盘输入一个摄氏温度,屏幕就显示对应的华氏温度,输出取两位小数。转换公式:F=C+32×9/5 。2、试编程判断输入的正整数是否既是5又是7的正倍数。假设是,那么输出yes;否那么输出no。3、判断数m是否为素数只能被1和它本身整除的整数? 4、对15个数进展排序,按从小到大的顺序输出。?C语言程序设计?期末考试试卷A卷评分标准及标准答案 一、单项选择题本大题共20题,每题2 分,共40分1、B 2、 D 3、B 4、B 5、C 6、D 7、B 8、 B 9、 A 10、D 11、C 12、D 13、D 14、C 15、D 16、C 17、C 18、D 19、C 20B 二、填空题本大题共10空,每空2分,共20分1、顺序构造 分支构造 循环构造 2、单精度型(或:float型) 双精度型(或;double型 3、1 4、 * * * * * * * * * * 5、0 6 6、按行主顺序存放三、程序分析题本大题共2题,每题4分,共8分能正确表达出题目的含义、要求,即可得分,局部正确可按比例得分,否那么不得分。1、功能:求S=0+2+4+8+16+32+64+128 和。输出结果:s=254 2、功能:出矩形阵a的主对角线上的元素之和。输出结果:27 四、编程题本大题共4题,每题8分,共32分 能正确表达出题目的含义、要求,且格式正确,即可得总分值,不要求形式完全一样。局部正确可按比例得分,否那么不得分。1、#include<stdio.h> main() float c,f; printf("input c:"); .2分scanf("%f",&c); .2分f= (c+32.0)*9.0/5.0; .2分printf("F=%.2f n",f); .2分 2、#include<stdio.h> main() int x; scanf("%d",&x); .2分 if(x%5=0&&x%7=0) .2分 printf("yes");.2分else printf("no");.2分 3、# include<stdio.h> # include<math.h> main() int m,i,k; scanf("%dn",&m); k=sqrt(m); .2分 for(i=2;i<=k;i+).2分if(m%i=0) break; .2分 if(i>k) printf("m is a prime number!n");.2分 4、# include<stdio.h> main() int i,j,a15,t; printf("input 15 numbers:n"); for(i=0;i<15;i+) scanf("%d",&a); .2分for(j=0;j<15;j+).2分for(i=0;i<15-j;i+).2分if(ai>ai+1) t=ai;ai=ai+1;ai+1=t; .2分for(i=0;i<15;i+) printf("%6d",a)一 选择题1以下关于运算符优先顺序的描述中正确的选项是 C 。 A关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 B逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符 C赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符 D算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符2以下选项中合法的变量名是_C_ A #define B int C a594_3 D abs(x)3以下正确的描述是 A 。 A break语句的作用是完毕整个循环的执行B在C程序中,注释说明只能位于一条语句的后面C 在循环体内使用break语句或continue语句的作用一样 D 从多层循环嵌套中退出时, 只能使用goto语句4以下说法正确的选项是C A#define 和 printf 都是 C 语句。 B#define 是C语句,而printf不是。 C假设程序中要调用数学函数,必须在文件开头输入语句 #include “math.h D #define 和 printf 都不是 C 语句。5下面的函数定义正确的选项是_D_A float fun (float x ; float y) return x*y; B float fun (float x,y) return x*y;C float fun (x,y) int x,y;return x*y; D int fun (int x, int y) return x*y;6执行下面语句后的输出为( D ) int i=-1;if (i<=0) printf(“*n) else printf(“%n) A). * B). % C). %c D). 有语法错误,不能正确执行7以下程序的输出结果是( A ) void main( ) int k=17; printf("%d, %o, %x n ", k, k, k ); A). 17, 21, 11 B). 17, 17, 17 C). 17, 0x11, 021 D). 17, 21, 18以下不正确的表达是 C A#define是宏定义命令 B宏定义只是做简单的置换,不做正确性检查 C宏定义是C语句,必须在行末加分号 Dprintf是C语句,但#define不是。9一个C语言程序是由 D A) 一个主程序和假设干子程序组成 B)假设干子程序组成C) 假设干过程组成 D) 函数组成10C语言规定,在一个源程序中,main()函数的位置 C 。 A.必须在最开场 B.必须在最后 C.可以任意 D.必须在系统调用的库函数的后面11以下对二维数组a的正确说明是 C 。 A) int a3; B) floatf a(3,4); C) char a13; D) float a(3)(5); 12假设有说明: int a32=10;那么下面正确的表达是 A A只有元素a00可得到初值10 B此说明语句不正确:。 C数组a中各元素都可得到初值,但其值不一定为0。 D数组a中每个元素均可得到初值10 13以下表达不正确的选项是 C 。 A) 一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的根本组成单位是语句D) 只能在循环体内和switch语句体内使用break语句14为了防止在嵌套的条件语句If一else中产生二义性,C语言规定else子句总是与 B 配对。 A) 缩排位置一样的if B) 其之前最近的未配对的if C) 之后最近的if D) 同一行上的if15 能正确表示a和b同时为正或同时为负的逻辑表达式是( 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)&&(a-b<=0)16x =5,ch='A',y=0,那么表达式(x > = y && ch<'a'&&!y) 的值是 C A) 0 B) 语法错C) 1 D) "假" 17 以下关于单目运算符+、-的表达中正确的选项是 D A) 它们的运算对象可以是任何变量和常量B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量D) 它们的运算对象可以是char型变量、int型变量和float型变量18下面的程序( B ) void main() int x=3; do printf(“%dn,x-=2); while(!(-x); A). 输出的是1 B). 输出的是1和-2 C). 输出的是3和0 D). 是死循环19如下程序:void main( ) int a=6; printf(“%dn,(a+=3,2*a); 执行后,输出结果是( D )A) 9 B) 6 C) 2 D) 1820假设有以下说明和语句,请选出哪个是对C数组元素的正确引用( D ) int c45, (*cp)5; cp=c; A). cp+1 B). *(cp+3) C). *(cp+1)+3 D). *(*cp+2)21下面程序的输出是(B ) main() int x=023;printf("%dn", -x); A). 17 B). 18 C). 23 D). 2422执行以下程序的结果是( B ) main() float x=1,y; y=+x*+x; printf(“%fn,y); A). 9.000000 B). 6.000000 C). 1.000000 D). 程序有错误23下面程序的输出是( A) main() int a10=1,2,3,4,5,6,7,8,9,10, *p=a;printf("%dn", *(p+2) ); A). 3 B). 4 C). 1 D). 224执行下面程序中的输出语句后,a的值是(B ) main() int a; printf("%dn", (a=3*5,a*4,a+5) ); A). 65 B). 20 C). 15 D). 1025下面程序的输出是( C ) main() int a=-1, b=4, k; k=(a+<=0)&&(!(b-<=0); printf("%d %d %d n", k, a, b ); A). 0 0 3 B). 0 1 2 C). 1 0 3 D). 1 1 226设有如下的程序段: char str="Hello" char *ptr; ptr=str; 执行完上面的程序段后,*(ptr+5)的值为(B )A). '0' B). '0' C). 不确定的值 D). '0'的地址27在宏定义# define PI 3.14159中,用宏名PI代替一个( C) A).单精度数 B).双精度数C).常量 D).字符串28假设i是整型变量,pb是根本型为整型的指针变量,那么正确的赋值表达式是A A). pb=&i B). pb=i C). *pb=&i D). *pb=*i29 有以下程序段int m=0,n=0;char c=d;scanf("%d%c%d",&m,&c,&n);printf("%d,%c,%dn",m,c,n);假设从键盘上输入:6D6<回车>,那么输出结果是C A) 0,d,6B) 6,d,6C) 6,D,6D) 6,D,030printf函数中用到格式符%-7s ,其中数字7表示输出的字符串占用7列。如果字符串长度小于7,那么输出按方式 A A) 从左起输出该字串,右补空格 B) 按原字符长从左向右全部输出 C) 右对齐输出该字串,左补空格 D) 输出错误信息31以下能正确地定义整型变量a,b和c 并为其赋初值3的语句是 A A) int a=3,b=3, c= 3; B) int a,b, c= 3; C) a= 3,b=3,c=3; D) a= b= c=3; 32 以下程序的输出结果是( D ) void main( ) int x=6,y=6,i; for(i=2;x>4;y=+i)printf("%d,%d ",x-,y);A) 5,5 5,3 B) 6,6 2,3 C) 6,5 5,2 D) 6,6 5,333以下程序的输出结果是( B ) void main( ) int w=4; int fun(int k); fun(w);printf("n"); fun(int k) if(k>0) fun(k-1); printf("%d ",k); A) 4 3 2 1 B) 0 1 2 3 4 C) 1 23 4 D) 4 3 2 1 034下面程序的输出是( B)main() int x=023;printf("%dn", -x); A). 17 B). 18 C). 23 D). 2435以下程序的输出结果是(C )main() char ch34= "123","456","78",*p3; int i; for(i=0;i<3;i+) pi=chi; for(i=0;i<3;i+) printf("%s",pi); A). 123456780 B). 123 456 780 C). 12345678 D). 14736下面程序的输出结果为( B ) char *alpha6="ABCD","EFGH","IJKL", "MNOP","QRST","UVWX" char *p; void main( ) int i; p=alpha; for(i=0;i<4;i+) printf("%c",(*p)i); printf("n"); A). EIMC B). ABCD C). EFGH D). AEIM37根据下面的定义,能打印出字母M的语句是(D ) struct person char name9; int age; struct person class10= "John",17, "Paul",19,"Mary",18, "Adam",16 A). printf("%cn",class3.name); B). printf("%cn",class3.name1);C). printf("%cn",class2.name1); D). printf("%cn",class2.name0);38 有以下程序void main( )intp7=11,13,14,15,16,17,18,i=0,k=0;while(i<7&&pi%2) k=k+pi; i+;printf("%dn",k);执行后输出结果是 D A) 58B) 56C) 45D) 2439 以下程序的输出结果是( A ) void main( ) int i,x33=9,8,7,6,5,4,3,2,1,*p; p=&x11; for(i=0;i<6;i+=3) printf("%d ",pi); A) 5 2 B) 5 1 C) 5 3 D) 9 740以下程序的输出结果是(A ) # include <string.h>void main( ) char *a=abcdefghi; void fun( char *s );fun(a); puts(a);void fun(char *s ) int x,y; char c;for(x=0,y=strlen(s)-1;x<y;x+,y-) c=sy;sy=sx;sx=c; A). ihgfedcba B). abcdefghiC). abcdedcba D).ihgfefghi41void main( ) int i,a=5,6,9,11; for (i=0;i<4;i+) if (ai%2=0) continue; printf("%d ",ai); 执行后输出结果是( C )A) 编译出错B 6C) 5 9 11D) 5 6 9 1142以下对数组的定义正确的选项是( D )A int x(10); B int x5=0,1,2,3,4,5;C int n=10; xn; D int x = 0,1,2,3,4;43. 以下表达中不正确的选项是( B )Aswitch是多分支构造语句B) continue语句的作用是使程序的执行流程跳出包含它的所有循环C) break 语句只能用在循环体内和switch语句体内D 在循环体内使用break语句和continue语句的作用不一样44如下程序:void main( )inti=1,j=2,k=3;if(j+| k+)&&i+) printf("%d,%d,%dn",i,j,k);执行后输出结果是( D )A) 1,2,3B) 2,2,4C) 2,3,4D) 2,3,345以下表达中,不正确的选项是( C )A 算法应该具有有穷性、确定性以及有效性等特点B) 算法可以用传统流程图、N-S流程图以及伪代码等形式来描述C) 根本构造只有顺序、选择、循环3种构造D 构造化程序设计的思想是自顶向下、逐步细化、模块化设计以及构造化编码46在C语言中,函数返回值的类型最终取决于( D )A) 函数定义时形参的类型 B)return语句中表达式值的类型C) 调用函数时主函数所传递的实参类型 D)函数定义时在函数首部所说明的函数类型47 以下程序的输出结果是( C ) void main() int i; for(i='a'i<'i'i+,i+)printf("%c",i-32); printf("n"); A) 编译不通过,无输出 B) aceg C) ACEG D) ABCDEFGI48假设有以下的说明: struct person char name20; int age; char sex; a="li ning",20,'m',*p=&a; 那么对字符串li ning的引用方式不可以是(B ) A). (*p).name B). p.name C). a.name D). p->name49下面的程序输出是( B) int m=13; int fun2(int x,int y) int m=3; return(x*y-m); main() int a=7,b=5;printf("%dn",fun2(a,b)/m); A). 1 B). 2 C). 7 D). 1050下面的程序输出是( A) main() int x=100,a=10,b=20,ok1=5,ok2=0;if(a<b) if(b!=15) if(!ok1) x=1; else if(ok2) x=10;x=-1; printf("%d n", x ); A). -1 B). 0 C). 1 D). 不确定的值51假设有以下定义: int a =1,2,3,4,5,6,7,8,9,10, *p=a; 那么值为3的表达式是 A A). p+=2,*(p+) B). p+=2,*+p C). p+=3,*p+ D). p+=2, +*p52下面程序的输出是( A ) int aa33= 2,4,6 ;void main() int i, *p=&aa00; for(i=0;i<2;i+) if(i=0)aaii+1= *p+1; else +p; printf("%d", *p ); A). 23 B). 26 C). 33 D). 3653下面程序的输出是( D ) void prtv(int *x) printf("%dn", +*x ); void main() int a=25; prtv(&a); A. 23 B. 24 C. 25 D. 2654 以下程序的运行结果是( B ) void main( ) char a10='1','2','3','4','5','6','7','8','9','0' char *p; int i=8; p=a+i;printf("%sn",p-2); A) 6 B) 789 C) '6' D) 67855执行以下3条语句之后,那么k的值是_C_ int x=4,y=7 x+ y+=2 k=y%x;A 1 B 2 C4 D356以下程序段 for ( k = 0, m = 4; m ; m - = 2 ) for( n = 1; n< 4 ; n+) k+;循环体语句 k +;执行的次数是_C_ A16 B12 C 6 D 857在C语言中(以16位PC机为例),5种根本数据类型的存储空间长度的排列顺序为 C A) char=int<1ong int<=float<double B) char< int <1ong int=float=doubleC) char<int <1ong int<=float<double D) char=int =1ong int<=float<double 58字母A的ASCII码为十进制数65,且c2为字符型,那么执行语句c2='d'十'1'一'3'后,c2中的值为 A A)b B) 68 C) 不确定的值 D) f59表达式18/4*sqrt(4.0)/8值的数据类型为: C A) int B)float C)double D)不确定 60能正确表示"当x 的取值在1,10和50,60X围内为真,否那么为假"的表达式是 C 。 A) (x>=1) && (x<=10) &&(x> =50) && (x<=60) B) (x>=1) | (x<=10) | (x>=50) | (x<=50) C) (x>=1) && (x<=10) | (x>= 50) && (x<=60) D) (x > =1)| (x< =10) && (x> =50) | (x<=60) 61以下程序的输出结果是( D ) # include <string.h>main() char *p1,*p2,str50="ABCDEFG"p1="abcd" p2="efgh"strcpy(