c语言综合练习题及答案.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec语言综合练习题及答案c语言综合练习题及答案模拟试题一一、 选择题(本大题30分,每小题2分)1.下列说法正确的是 。A) main函数必须放在C程序的开头B) main函数必须放在C程序的最后C) main函数可以放在C程序的中间部分,但在执行C程序时是从程序开头执行的D) main函数可以放在C程序的中间部分,但在执行C程序时是从main函数开始的2.在下面几组数据类型中, 全为最常用的基本数据类型的是哪一组: 。 A)整型 实型 字符型 B)整型 数组 指针C)数组 结构体 共用体 D)指针 逻辑型 空类型3.若有说明语句:char c= 64 ; 则变量C包含: 。A)1个字符 B)2个字符 C)3个字符 D)说明不合法,C值不确定4.设有如下定义和执行语句,其输出结果为: 。 int a=3,b=3; a = -b + 1; printf(“%d %d”,a,b); A)3 2 B)4 2 C)2 2 D)2 35.C语言中,运算对象必须是整型数的运算符是 。 A)% B) C)% 和 D)*6.能正确表示x的取值范围在0,100和-10,-5内的表达式是 。A)(x<=-10)|(x>=-5)&&(x<=0)|(x>=100)B)(x>=-10)&&(x<=-5)|(x>=0)&&(x<=100)C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100)D)(x<=-10)|(x>=-5)&&(x<=0)|(x>=100)7.程序段如下int k=0;while(k+<=2); printf("last=%dn",k);则执行结果是last= 。A)2 B)3 C)4 D)无结果8.下面有关for循环的正确描述是 。A)for循环只能用于循环次数已经确定的情况B)for循环是先执行循环体语句,后判断表达式C)在for循环中,不能用break语句跳出循环体D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来9.若二维数组a有m列,则aIj元素前的数组元素个数为: 。A)j*m+i B)i*m+j C)i*m+j-7 D)i*m+j+110.C语言中变量的指针指的是: 。A)变量类型 B)变量值 C)变量值 D)变量地址11.设有两字符串“Beijing”、“China”分别存放在字符数组str110,str210中,下面语句中能把“China”连接到“Beijing”之后的为: 。A)strcpy(str1,str2);B)strcpy(str1, “China”);C)strcat(str1,“China”)D)strcat(“Beijing”,str2);12.以下程序的运行结果是: 。main( ) int a=2, i ; for(i=0;i<3;i+) printf(“%4d”,f(a) ) ; f( int a) int b=0,c=3;b+; c+; return(a+b+c); A)7 10 13 B)7 7 7C)7 9 11 D)7 8 913.在C语言程序中,若未在函数定义时说明函数类型,则函数默认的类型为: 。 A)void B)double C)int D)char14.在说明一个结构体变量时系统分配给它的存储空间是 。A) 该结构体中第一个成员所需存储空间B) 该结构体中最后一个成员所需存储空间C) 该结构体中占用最大存储空间的成员所需存储空间D) 该结构体中所有成员所需存储空间的总和15.使用fseek函数可以实现的操作是 。A) 改变文件的位置指针的当前位置B) 文件的顺序读写C) 文件的随机读写D) 以上都不对 二、判断题(本大题10分,每小题1分)1、C程序可以由若干个源文件组成,因此最小的功能单位是源文件,最小编译单位的是函数。( )2、C程序有三种结构化程序设计方法,分别顺序结构、选择结构和循环结构。( )3、在if语句中,if子句与else子句都可以单独使用,构成了if语句的两种缺省形式。( )4、for语句作为循环控制语句时,其括号内各个表达式及其后的分号都可缺省。( )5、C程序中函数不可以嵌套定义但可以嵌套调用。( )6、字符串可以用来给数组赋值,在C程序的执行语句中可以直接用字符串给数组名赋值。 ( )7、数组名也可作为函数参数使用,此时数组名代表数组的起始地址。( )8、在函数内的复合语句中定义的变量在本函数范围内有效。( )9、声明一个结构体类型的一般形式为struct 结构体名 成员表列;。( )10、ANCI C规定了标准输入输出函数库,用fseek()函数来实现打开文件。( )三、程序填空题(本大题12分,每小题2分)1.下面程序可求出11000的自然数中所有的完数(因子和等于该数本身的数)请填空。main( ) int m, n, s;for(m=2;m<1000;m+) _(1)_;for(n=1;n<=m/2;n+)if(_(2)_) s+=n;if(_(3)_) printf(“%dn”, m); 2. 用起泡法对十个数由大到小排序。main( ) int a11, i, j, t; printf(“input 10 numbers: n”); for(i=1;i<11;i+) scanf(“%d”,&ai); printf(“n”); for (j=1;j<=9;j+)for(i=1; _(1)_; i+)if (_(2)_)t=ai; ai=ai+1; _(3)_ ; printf(“the sorted numbers: n”); for ( i=1; i<11; i+) printf(“%d”,ai);四、写出下面程序的执行结果(本大题24分,每小题4分)1.#include<stdio.h> main( ) char c=A+10-5;printf(“c=%cn”,c); 2.#include<stdio.h> main( ) int a,b,c; a=1;b=2;c=3;if(a>b)if(a>c) printf(“%dn”,a); else printf(“%dn”,b); printf(“overn”); 3. main( ) char a66, i, j; for(i=0;i<6;i+) for(j=0;j<6;j+) if ( i<j )aij= #;else if(i=j) aij= ;else aij= * ; for(i=0;i<6;i+) for(j=0;j<6;j+) printf(“%c”,aij); printf(“n”);4.main( ) int i=2, x=5, j=7; fun (j,6); printf(“i=%d; j=%d; x=%dn”, i, j, x ) ; fun (int i, int j ) int x=7; printf(“i=%d; j=%d; x=%dn”, i, j, x) ;5. # include <stdio.h> main ( ) int i, j; int p,q; i=2; j=10; p=&i; q=&j; p=10; q=2; printf(i=%d, j=%dn , i, j); 6. struct stru int x; char c; ;main( ) struct stru a=10, x,*p=&a; func (p); printf ( “%d,%c”, a.x, a.c); func (struct stru *b)b->x=20; b->c=y; 五、编程题(本大题24分,第一题7分,第二题8分,第三题9分)1.把输入的整数(最多不超过5位)按输入顺序的反方向输出,例如,输入数是12345,要求输出结果是54321,编程实现此功能。2.编一程序,从键盘输入10个整数并保存到数组,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。3.编写一个函数计算一个字符串的长度,输入输出在主函数内完成。(使用指针)模拟试题二一、选择题(本大题30分,每小题2分)1.C语言中不能用来表示整常数的进制是 。 A)十进制 B)十六进制 C)八进制 D)二进制2.C语言规定标识符由 等字符组成。A)字母 数字 下划线 B)中划线 字母 数字)字母 数字 逗号 )字母 下划线 中划线 3.若有如下定义:int a=2,b=3; float x=3.5,y=2.5; 则表达式:(float)(a+b)/2+(int)x%(int)y的值是 。A)2.500000 B)3.500000 C)4.500000 D)5.0000004.以下表达式: 2+a+i*f, 其中i为整型变量,f为float型变量,则表达式的最终数据类型为 。A)int B)float C)char D)double 5.有如下语句: printf(“%s,%5.3sn”,“COMPUTER”,“COMPUTER”);执行语句后的最终结果为 。A)COMPUTER ,CMP . B)COMPUTER, CMP.C)COMPU, CMP. D)COMPU, CMP .6.以下if语句中语法错误的是 。A)if (a>b)printf(“%f”,a); B)if(a>b)printf(“%f”,a);else printf(“%f”,b);C)if(a>b)printf(“%f”,a) D)if(a>b)printf(“%f”,b);else printf(“%f”,b); else printf(“%f”,a);7.能表示整数x符合下面两个条件的语句是 。(1)“能被4整除,但不能被100整除”.(2)能被4整除,又能被400整除.A)(x%4=0&&x%100!=0)|x%400=0B)(x%4=0|x%100!=0)&&x%400=0C)(x%4=0&&x%400!=0)|x%100=0D)(x%100=0|x%4!=0)&&x%400=08.循环语句中的for语句,其一般形式如下:for(表达式1;表达式2;表达式3) 语句其中表示循环条件的是 。A)表达式1 B)表达式2 C)表达式3 D)语句9.以数组作为函数的参数时传递的数组的首地址,那么实参数组与形参数组之间的数据传递方式为 。A)地址传递 B)单向值传递 C)双向值传递 D)随机传递10.将字符串str2连接到字符串str1中应使用 。A)strcpy(str1,str2) B)strcat(str1,str2) C)strcmp(str1,str2) D)strcat(str2,str1)11.若有以下定义:int a10,*p=a; 则*(p+3)表示的是 。A)元素a3的地址 B)元素a3的值C)元素a4的地址 D)元素a4的值12.若有如下语句: int *p1,*p2; 则其中int所指的是 。A)p1的类型 B)*p1和*p2的类型 C)p2的类型 D)p1和p2所能指向变量的类型13.若有如下说明:int a10=1,2,3,4,5,6,7,8,9,10;char b=a,d,e;则数值为4的表达式是 。A)a4 B)ad-b C)ad-b D)ae-b14.有如下程序段,在Turbo C环境下运行的结果为 。main( ) int i=2,p,k=1; int f(int a,int b) p=f(i,+k); int c; printf(“I=%d,p=%d”,k,p); if(a>b) c=1; else if (a=b) c=0; else c=-1; return(c); A)1,0 B)2,0 C)2,-1 D)1,115.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是 。 A) EOF B) 0 C) 非零值 D) NULL二、判断题(本大题10分,每小题1分)1.在每个C语言的程序中都必须并且只能有一个main函数。( )2.在C语言中,整型数据与字符型数据在任何情况下都可以通用。( )3.在C语言程序中,AHP和ahp分别代表两个不同的标识符。( )4. 在if语句中,不可以没有else子句。( )5.C语言规定,简单变量做实参时,与其对应的形参之间是单向的值传递。( )6. for语句作为循环控制语句时,括号内的分号是用来分开表达式的,因此要根据需要加分号。( )7. 数组名也可作为函数参数使用,此时是地址传递。( )8. C程序有三种结构化程序设计方法,分别嵌套结构、选择结构和循环结构。( )9.数组在定义时没有必要指定数组的长度,其长度可以在程序中根据元素个数再决定。( )10.在定义指针型变量时指定的基类型为该指针变量所能指向的变量类型。( )三、程序填空题(本大题12分,每小题2分)1.输入3个实数 a, b, c要求按从大到小的顺序输出三数.main( ) float a,b,c,t; scanf(“%f,%f,%f”,&a,&b,&c); if (a<b) t=a; (1) ; b=t; if( (2) ) t=a; a=c; c=t; if(b<c) (3) b=c; c=t;printf(“%f,%f,%f”,a,b,c);2.打印以下杨辉三角形.(要求打印出10行) main( ) int a1010,i, j ; 1 for( i=0;i<10;i+) 1 1 (4) (5) 1 2 1for( i=2; i<10; i+ ) - 1 3 3 1 for(j=1; j<i ; j+ ) 1 4 6 4 1 aij = (6) ; for(i=0; i<10; i+) for( j=1; j<=i; j+) printf(“%5d”,aij); printf(“n”); 四、写出下面程序的执行结果(本大题24分,每小题4分)1.main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12, b43; int i, j; for (i=0;i<3;i+ )for (j=0;j<4;j+ ) bji=aij; for ( i=0;i<4;i+ ) for ( j=0;j<3;j+ ) printf( “%5d”,bij ); printf( “n” ); 2.main( ) int a21,i,j,n=0; for(i=2;i<20;i+ )ai=i;for ( i=2;i<10;i+ )if (ai=0) continue; for (j=i+1;j<=20;j+) if (aj%ai=0) aj=0;for ( i=2;i<=20;i+ ) if (ai!=0) printf(“%4d”,ai); n=n+1; if (n%4=0) printf(“n”);3. float fac(int n) float f ; if(n<0)printf(“n<0,dataerror!”); f=-1; else if (n=0|n=1) f=1; else f=fac(n-1)*n; return(f); main( )int n ;float y ;printf(“input a integer number:”);scanf(“%d”,&n);y=fac(n);printf(“%d!=%5.0f”, n,y); 假如在运行程序时输入5 ,写出程序的运行情况及最终结果: 。4.main()int i=10,j=0;doj=j+i;i-;while(i>2);printf("%dn",j);5. # include <stdio.h>main ( ) int p; p=&i; p=2; p+; p=5; printf(%d, p); p; printf(%dn , p); 6. #include <stdio.h>void f(int c) int a=0; static int b=0; a+; b+; printf("%d: a=%d, b=%dn", c, a, b);void main(void) int i; for (i=1; i<=3; i+) f( i );五、编程题(本大题24分,第一题7分,第二题8分,第三题9分)1. 已知三角形的三边长,试编程求三角形的面积. 要求:三边长从键盘输入,要考虑数据输入是否正确,能否构成三角形等情况.假设三边分别为: a, b, c, s=1/2 (a+b+c), area= s(s-a)(s-b)(s-c)2.有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13, 试编程求数列前20项的和.3. 输入10个学生的成绩,分别用函数实现: (1)求平均成绩;(2)按分数高低进行排序并输出。模拟试题三一、选择题(本大题30分,每小题2分)1.下列有关C程序的说法中,正确的是: 。A) 一个C程序中只能有一个主函数且位置任意;B) 一个C程序中可有多个主函数且位置任意;C) 一个C程序中只能有一个主函数且位置固定;D) 一个C程序中可以没有主函数。2.以下叙述中不正确的是: 。A)在C程序运算符中,逗号运算符优先级最低;B)C程序中,AHP和ahp代表两个不同的变量;C)C程序中,整数和实数在内存中存放形式相同;D)在C程序中, %是只能用于整数运算的运算符.3.已知ch是字符型变量,下面不正确的赋值语句是: 。 A)ch=0 B)ch=a+bC)ch=7+9 D)ch=7+94.设有如下定义int x=10,y=5,z;则语句printf("%dn",z=(x+=y,x/y);的输出结果是 。A)1 B)0 C)4 D)35.设有如下定义:char ch=z,则执行下面语句后变量ch是值为: 。ch=(A<=ch&&ch<=Z)?(ch+32):chA)A B)a C)Z D)z6.若x和y都为float型变量,且x=3.6, y=5.8 执行下列语句后输出结果为: 。 printf(“%f”,(x,y);A)3.600000 B)5.800000 C)3.600000,5.800000 D)输出符号不够,输出不正确值7.设有两字符串“Beijing”、“China”分别存放在字符数组str110,str210中,下面语句中能把“China”连接到“Beijing”之后的为: 。A)strcpy(str1,str2);B)strcpy(str1, “China”);C)strcat(str1,“China”)D)strcat(“Beijing”,str2);8.以下对一维整型数组a的正确说明是 。A)int a(10); B)int n=10,an;C)int n; scanf(“%d”,&n); int an;D)#define SIZE 10 int aSIZE; 9.设有如下程序段,则其执行结果为: 。static int a = 1,2,3,4 , *p ; int i;p=a; (p+3) + =2; printf(“%d”,*(p+3) );A)0 B)6 C)a3地址 D)不正确的值10.若I为整型变量,则下列程序段的运行结果为 。I=322;if(I%2=0) printf(“#”)else printf(“*”);A)# B)#*C)* D)有语法错误,无法输出结果11.已知 int x=30,y=50,z=80;以下语句执行后变量x、y、z的值分别为: 。 if (x>y|x<z&&y>z) z=x; x=y; y=z;A)x=50, y=80, z=80 B)x=50, y=30, z=30C)x=30, y=50, z=80 D)x=80, y=30, z=5012.下面程序段的运行结果是: 。 x=y=0; while(x<15) y+, x+=+y; printf(“%d, %d”, y, x);A)20, 7 B)6, 12 C)20, 8 D)8, 20 13.若有语句 int *point , a =45; point = &a; 下面均代表同一变量地址的一组选项是: 。A)&a point *&a B)&*a &a *point C)point &point &a D) &a, &*point point 14.以下程序的运行结果是: 。main( ) int a=2, i ; for(i=0;i<3;i+) printf(“%4d”,f(a) ) ; f( int a) int b=0; static int c=3b+; c+; return(a+b+c); A)7 10 13 B)7 7 7C)7 9 11 D)7 8 915.若有如下定义: int a33=1,2,3,4,5,6,7,8,9,i ; 则下列语句的输出结果是: 。for (i=0;i<=2;i+) printf(“%d”,ai2-i);A)3 5 7 B)3 6 9C)1 5 9 D)1 4 7二、判断题(本大题10分,每小题1分)1.C语言本身没有输入输出语句,输入输出操作都是通过调用库函数来实现的。( )2.在C语言中,int、char和short三种类型数据在内存中所占用的字节数都是由用户自己定义的。( )3.在C程序中一行内可以写几个语句,一个语句可以分写在多行上。因此,并不是每一条C语句都必须有一个分号的。( )4.在C语言的if语句中,用作条件判断的表达式只能是关系和逻辑表达式。( )5.在C语言中break和continue都是循环中途退出语句,其中break语句用来跳出一层循环结构;continue语句用来结束一次循环。( )6.C语言中while和do-while循环的主要区别是while语句的循环体至少会被执行一次,而do-while语句的循环体则可能一次也不执行。( )7.数组首地址不仅能通过数组中第一个元素的地址表示,也可以通过数组名来表示。( )8.在C语言中,只有在两个字符串所包含的字符个数相同时,才能比较大小。如字符串“That”与“The”就不能进行大小比较。( )9.函数的返回值类型是由函数的类型和return语句中表达式的类型共同决定的,当这两类型不一致时最终起决定作用的是return中表达式的类型。( )10.定义指针变量时指定的类型称为基类型,基类型是指针变量所指向变量的类型,因此指针变量被定义之后都只能指向某一类型的变量。( )三、程序填空题(本大题12分,每小题2分)1.输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请填空: main( ) char ch; scanf(“%c”,&ch); if ( (1) ) ch=ch+32; else if(ch>a&&ch<z) ((2));printf(”%cn”,ch); 2. 以下程序是求矩阵a , b的和,结果存入矩阵c中并按矩阵形式输出。请填空: main( ) int a34 = 7, 5, -2, 3 , 1, 0, -3, 4 , 6, 8, 0, 2 ; int b34 = 5, -1, 7, 6 , -2, 0, 1, 4 , 2, 0, 8, 6 ; int i, j, c34; for ( i=0; i<3; i+ )for ( j=0; j<4; j+ ) cij = _(3)_ ; for ( i=0; i<3; i+ ) for ( j=0; j<4; j+ ) printf ( “%3d”, cij ) ; _(4)_ ; 3.以下程序使用递归法求n!,请填空:float fac( int n) float f; if(n<0) printf(“n<0” data error); f=-1; else if(n=0|n=1) f=1; else f= (5) ;return( f ); main( ) int n; float y;printf(“input a integer number”);scanf(“%d”,&n);y= (6);printf(“%d! = %15.0f”, n, y ); 四、写出下面程序的执行结果(本大题24分,每小题4分)1.main( ) float a=3.14, b=3.14159; printf(“%f, %5.3fn”,a,b); 2.main( ) char a55,i,j; for(i=0;i<5;i+)for(j=0;j<5;j+)if(i=0 |i+j=4) aij='*'else aij=' ' for(i=0;i<5;i+)for(j=0;j<5;j+) printf("%c",aij);printf("n"); 3.main( ) int x, i ; for( i=1,x=1; i<=50; i+ ) if(x>=10) break;if(x%2=1) x+=5;continue;x - = 3;printf(“%dn”, i ); 4.func( int x, int y) int z; z=a+b;return(z); main( ) int a=6, b=7, c=8, r; r=func( ( a-, b+, a+b), c-) printf(“%d”, r) ; 5.#include <STDIO.H>void increment(void);void main(void) increment(); increment();void increment(void) static int x = 8; x +; printf("x = %dn", x);6. #include <stdio.h>void main(void) static char a="ABCDEFGH",b="abCDefGh"char *p1,*p2;int k;p1=a; p2=b;for(k=0;k<=7;k+) if (*(p1+k)=*(p2+k) printf("%c",*(p1+k); printf("n"); 五编程题(共30分)1.有一函数,其函数关系如下,试编程求对应于每一自变量的函数值。 x2 (x<0) y = -0.5x+10 (0x<10) x- (x10)2.若有如下公式: + + +。+ 试根据上述公式编程计算 的近似值(精确到10-6)。3.编一程序,首先将一个包含10个数的数组按照升序排列,然后将从一指定位置m开始的n个数按照逆序重新排列,并将新生成的相互组输出。要求使用指针控制方法实现上述功能。模拟试题四一、选择题(本大题30分,每小题2分)1.在C语言中,反斜杠符是 。 A)n B)t C)v D) 2.表达式 18/4*s