一、选择题
1、对for(表达式1; ;表达式3)可理解为( B )。
A、for(表达式1;0;表达式3) B、for(表达式1;1;表达式3)
C、for(表达式1;表达式1;表达式3) D、for(表达式1;表达式3;表达式3) 2、在C语言中, 一维数组的定义方式为:类型说明符 数组名( A )。
A、[整型常量表达式] B、[表达式] C、[整形变量] D、[整型表达式] 3、下面程序的运行结果是( B )。 #include char a[]=\"morning\ int i,j=0; for(i=0;i<7;i++) if (a[j]} A、mogninr B、mo C、morning D、mornin 4、下面程序段是输出两个字符串中对应相等的字符。请选择填空。 char x[]=\"programming\"; char y[]=\"Fortran\"; int i=0; while(x[i]!='\\0'&&y[i]!='\\0' if (x[i]==y[i]) printf(\"%c\ A )); else i++; A、x[i++] B、y[++i] C、x[i] D、y[i] 5、以下正确的说法是( B )。 A、用户若需调用标准库函数,调用前必须重新定义 B、用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C、系统根本不允许用户重新定义标准库函数 D、用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中 6、C语言规定,函数返回值的类型是由( D )。 A、return语句中的表达式类型所决定 B、调用该函数时的主调函数类型所决定 C、调用函数时系统临时决定 D、在定义该函数时所指定的函数类型所决定 7、在一个源文件中定义的全局变量的作用域为( D )。 A、本文件的全部范围 B、本程序的全部范围 C、本函数的全部范围 D、从定义该变量的位置开始至本文件结束 8、以下程序的运行结果是( C )。 #define MAX(A,B) (A)>(B)? (A):(B) #define PRINT(Y) printf(\"Y=%d\\ void main(void) { int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); PRINT(t); } A、Y=3 B、t=3 C、Y=7 D、t=7 9、下列选项中不会引起二义性的宏定义是( D )。 A、#define POWER(x) x*x B、#define POWER(x) (x)*(x) C、#define POWER(x) (x*x) D、#define POWER(x) ((x)*(x)) 10、以下关于文件包含的描述中正确的是( D )。 A、每个C程序必须包含预处理命令: #include B、#include后面的文件名用“双引号”括起和用〈尖括号〉括起完全等效 C、#include命令行可以出现在源程序中需要的任何地方 D、用#include所包含的文件称为头文件,必须以.h作为扩展名 11、若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的选项是( C )。 A、p1=&m; p2=&p1; B、p1=&m; p2=&n; *p1=*p2; C、p1=&m; p2=p1; D、p1=&m; *p2=*p1; 12、若有语句int a,*p; 则下列语句中,能够将变量a的地址赋给指针变量p的语句是( B )。 A、p=a; B、p=&a; C、*p=*a; D、*a=p; 13、下面程序段的运行结果是( B )。 char *s=\"abcde\"; s+=1; printf(\"%d\ A、bcde B、字符'b'的地址 C、字符'c'的地址 D、字符'b'的ASCII码 14、设有以下说明语句,则下面的叙述不正确的是( B )。 struct abc { int m; float n; } stype; A、struct是结构体类型的关键字 B、stype是用户定义的结构体类型名 C、m和n都是结构体成员名 D、stype是用户定义的结构体变量名 15、若有以下程序段,则下面表达式中值为20的是( D )。 struct com { int a; int *b; }; int x=10,y=20,z=30; struct com s[3]={{1010,&x},{1020,&y},{1030,&z}}; void main(void) { struct com *p; p=s; A、(p++)->b B、*(p++)->b C、(*P).b D、*(++p)->b 16、以下对枚举类型名ee的定义中正确的是( A )。 A、enum ee {A,B,C,D}; B、enum ee {'A','B','C','D'}; C、enum ee={A;B;C;D}; D、enum ee={'A'';'B';'C';'D'}; 17、当正常执行了文件关闭操作时,fclose函数的返回值是( C )。 A、-1 B、随机值 C、0 D、1 18、以下叙述不正确的是( D )。 A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 19、下面四个选项中,均是合法转义字符的选项是( B )。 A、'\\' '\\\\' '\\n' B、'\\\\' '\\017' '\\n' C、'\\018' '\\f' 'xab' D、'\\\\ 0' '\\101' 'x1f' 20、设以下变量均为int类型,则值不等于7的表达式是( C )。 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) 21、若有定义: int k=7; float a= 2.5, b=4.7; 则表达式a+k%3*(int)(a+b)%2/4的值是( A )。 A、2.500000 B、2.750000 C、3.500000 D、0.000000 22、下列常数中不能作为C语言的常量的是( D )。 A、0xA5 B、2.5e-2 C、3e2 D、0582 23、已有定义int a=-2;和输出语句:printf(\"%8x\;以下正确的叙述是( D )。 A、整型变量的输出格式符只有% d一种 B、%x是格式符的一种,它可以适用于任何一种类型的数据 C、%x是格式符的一种,其变量的值按十六进制输出,但%8x是错误的 D、%8x不是错误的格式符,其中数字8规定了输出字段的宽度 24、有输入语句:scanf(\"a=%d,b=%d,c=%d\;为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是( D )。(注: _表示空格) A、132 B、1,3,2 C、a=1_b=3_c=2 D、a=1,b=3,c=2 25、阅读以下程序,当输入数据的形式为:25,13,10正确的输出结果为( D )。 void main(void) { int x,y,z; scanf(\"%d%d%d\ printf(\"x+y+z=%d\\n\ } A、x+y+z=48 B、x+y+z=35 C、x+z=35 D、不确定值 26、下列运算符中优先级最高的是( B )。 A、< B、+ C、&& D、!= 27、若w=1,x=2,y=3,z=4,则条件表达式w A、num%2==1 B、!(num%2==0) C、!(num%2) D、num%2 29、设有以下程序段 int x=0,s=0; while(!x!=0) s+=++x; printf(\"%d\则( B )。 A、运行程序段后输出0 B、运行程序段后输出1 C、程序段中的控制表达式是非法的 D、程序段执行无限次 30、C语言中while和do-while循环的主要区别是( A )。 A、do-while的循环体至少无条件执行一次 B、while的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 D、do-while的循环体不能是复合语句 二、填空题 31、以下程序实现: 输入圆的半径r和运算标志m,按照运算标志进行指定计算。 标 志 运 算 a 面 积 b 周 长 c 二者均计算 #define pi 3.14159 void main(void) { char m; float r,c,a; printf(\"input mark a,c or b and r: \"); scanf(\"%c %f\ if ( ①m==’a’ ) { a=pi*r*r; printf(\"area is %f\ if ( ②m==’b’ ) { c=2*pi*r; printf(\"circle is %f\ if ( ③m==’c’ ) { a=pi*r*r; c=2*pi*r; printf(\"area and circle are %f %f\ } 32、下面程序的功能是将字符串b复制到字符串a。 #include\"stdio.h\" void main(void) { void f(char *s,char *t); char a[20],b[10]; scanf(\"%s\ f(a,b); puts(a); } void f(char *s,char *t) { int i=0; while( ( ①*t++ )!=0 ) ②*s=*t ; } 33、设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄。 struct man { char name[20]; int age; } person[]={\"li-ming\ void main(void) { int i,j,max,min; max=min=person[0].age; for(i=1;i<3;i++) if (person[i].age>max) ①max=person[i].age ; else if(person[i].age printf(\"%s %d\\n\ break; } } 34、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。 #include char c='a',t[50]; int n,k,j; gets(t); n= ①50 ; for(k=0;k printf(\"%d\ } 35、下面程序段的运行结果是:( ①231 )。 for(a=1,i=-1;-1<=i<1;i++) { a++; printf(\"%d\ } printf(\"%d\ 36、以下程序的运行结果是( ①01 )。 void main(void) { int x,y,z; x=3; y=z=4; printf(\"%d;\ printf(\"%d\\n\ } 37、以下程序的输出结果是( ①1110 )。 void main(void) { int x[6],a=0,b,c=14; do { x[a]=c%2; a++; c=c/2; } while(c>=1); for(b=a-1;b>=0;b--) printf(\"%d\ printf(\"\\n\"); } 38、若有以下定义和语句: int s[10][6], *p[10]; for(i=0;i<10;i++) p[i]=s[i]; 则在程序中可通过指针数组p,用*(p[i]+j)等四种形式引用数组元素s[i][j](假设i、j已正确说明并赋值);另三种形式分别是:( ①*(&p[0][0]+4*i+j) ),(*(p+i))[j]和*(*(p+i)+j)。 39、若有定义:int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k; 则下面程序段的输出是( ①24 )。 for(k=0;k<3;k++) q[k]=&a[k*4]; printf(\"%d\\n\ 40、若有定义: int a[3][2]={2,4,6,8,10,12};,则*(a[1]+1)的值是( ①8 )。 41、在C程序中,文件可以用( ①顺序 )方式存取,也可以用随机方式存取。 42、若有定义: int e=1,f=4,g=2; float m=10.5,n=4.0,k; 则计算赋值表达式 k=(e+f)/g+sqrt(n)*1.2/g+m后k的值是( ①13.7 )。 43、若s是int型变量,且s=6,则下面表达式的值为( ①1 )。 s%2+(s+1)%2 44、若a是int型变量,则计算表达式a=25/3%3后a的值为( ①2 )。 45、已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'-'3'的值为( ①102 )。 46、C语言中的实型变量分为两种类型,它们是( ①单精度 )型和双精度型(用汉字描述)。 47、若有说明char s[20];,如果想从键盘上把字符串:This is a book.输入到数组中,应当调用的函数是( ①get(s) ) 。 三、判断题 ( A、正确 B、错误) 48、逻辑运算符两侧的运算对象可以是任何类型的数据。 A 49、for循环只能用于循环次数已经确定的情况。 B 50、若有说明:int a[3][4]; 则a[1+1][0]是对a数组元素的正确引用。 A 51、对于比较复杂的函数,其内部可以嵌套其它函数。 B 52、使用宏来代替与其功能相同的函数可以减少可执行程序的空间尺寸。 B 53、定义int *p,a=5;将a的地址赋值给指针变量p,可用如下赋值语句*p=a。A 54、若以 \"a+\"方式打开一个已经存在的文件,则原有文件的内容不被删除,位置指针移到文件尾部,可以添加和读取数据。 A 55、利用函数调用fseek(fp,0L,0)可以将文件的位置指针移到文件的尾部。 B 56、C语言的运算符按运算对象的数目可以分为单目、双目和三目运算符三类。A 57、表达式i++与++i在任何场合功能完全相同。 B 四、编程题 58、编写代码:从键盘输入一个整数,然后在一给定的整数数组中进行查找,若找到此数则将其删除,否则给出没有找到的信息。将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 #include { int a[10]={1,2,3,4,5,5,4,3,2,1},x,i,k=0; scanf(“%d”,&x); for(i=0;i<10;i++) { if(a[i]==x) { k++; for(j=i;j<10-k;j++) a[j]=a[j+1]; a[10-k]=0; } } if(k==0) printf(“no find”); } 59、编写函数int FindFact(int n,int fact[]),找出整数n的全部因子,并将它们存放到数组fact中,返回其因子个数。将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 int FindFact(int n,intfact[ ]) { int m=0,i; for(i=1;i<=n;i++) if(n%i==0) { fact[m]=i; m++;} return m; } 全国高校计算机等级考试(二级C)模拟五试题 一、选择题 1、以下不属于C语言关键字的是( B )。 A、 case B、byte C、enum D、sizeof 2、以下C程序正确的运行结果是( D )。(注: _ 表示空格,^表示换行) void main(void) { int y=2456; printf(\"y=%3o\\n\ printf(\"y=%8o\\n\ printf(\"y=%#8o\\n\ } A、 y=_ _ _ _2456^y=_ __ _ _2456^y=#######2456 B、y=_ _ _ _4630^y=_ _ _ _4630^y=#######4630 C、 y=2456^y=_ _ _ _2456^y=02456 D、y=4630^y=_ _ _ _4630^y=_ _ _04630 3、以下能正确地定义整型变量a,b和c并为其赋初值5的语句是( C )。 A、 int a=b=c=5; B、 int a,b,c=5; C、int a=5,b=5,c=5; D、a=b=c=5; 4、设变量y为float类型,x为int类型,则以下能实现将y中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( B )。 A、 y=(y*100+0.5)/100.0; B、 x=y*100+0.5,y=x/100.0; C、y=y*100+0.5/100.0; D、y=(y/100+0.5)*100.0; 5、以下程序的输出结果是( C )。 void main(void) { int a=100,x=10,y=20,ok1=5,ok2=0; if (x if (! Ok1) a=1; else if (ok2) a=10; a=-1; printf(\"%d\\n\ } A、 1 B、0 C、-1 D、值不确定 6、若a=-14,b=3,则条件表达式 a7、若有语句int a=1,b=2,c=3;则以下值为0的表达式是( D )。 A、 'a'&&'b' B、a<=b C、 a>b || b printf(\"%d,%d\ A、20,7 B、6,12 C、20,8 D、8,20 9、下面程序的运行结果是( D )。 #include int y=10; do { y--; } while(--y); printf(\"%d\\n\ } A、 -1 B、 1 C、 8 D、0 10、若i为整型变量, 则以下循环执行次数是( B )。 for(i=2; i==0;) printf(\"%d\ A、 无限次 B、0次 C、 1次 D、2次 11、有两个字符数组a、b,则以下正确的输入语句是( B )。 A、gets(a,b); B、scanf(\"%s%s\ C、scanf(\"%s%s\ D、gets(\"a\");gets(\"b\"); 12、当运行以下程序时, 从键盘输入: aa_bb cc_dd ee 则下面程序的运行结果是( A )。 #include { char a1[5],a2[5],a3[5],a4[5]; scanf(\"%s%s\ gets(a3); gets(a4); puts(a1); puts(a2); puts(a3); puts(a4); } (注:_表示空格,^表示换行) A、 aa^bb^^cc_dd^ee B、aa^bb^cc^dd C、 aa^bb^cc_dd D、aa_bb^cc^dd^ee 13、求字符串长度的函数是( D )。 A、strcat B、strcpy C、strcmp D、strlen 14、以下不正确的说法为( D )。 A、在不同函数中可以使用相同名字的变量 B、形式参数是局部变量 C、在函数内定义的变量只在本函数范围内有效 D、在函数内的复合语句中定义的变量在本函数范围内有效 15、以下程序的正确运行结果是( D )。 #define MAX 10 int a[MAX],i; void main(void) { printf(\"\\n\"); sub1(); sub3(a); sub2(); sub3(a); } sub1() { for(i=0;i for(i=0;i for(i=0;i A、0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 B、 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18 C、0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 D、0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 16、函数用return语句返回计算20!的结果,此函数的类型应说明为( B )。 A、 int B、long C、 unsigned long D、其它三项说法都不对 17、下面对枚举变量的定义中,正确的是( D )。 A、 enum color {red,blue,green;} a,b; B、enum color= {red,blue,green} a,b; C、enum color= {\"red\ D、enum color {red,blue,green} a,b; 18、若有以下定义: #define N 2 #define Y(n) ((N+1)*n) 则执行语句\"z=2*(N+Y(5));\"后的结果为( B )。 A、 语句有错误 B、z=34 C、 z=70 D、z无定值 19、以下程序的输出结果是( B )。 #include #define PRINT(a) printf(\"%d\ void main(void) { int x=2; PRINT(x*F(3)); } A、 10 B、13 C、11 D、报错 20、若有语句int *point,a=4;和point=&a; 下面均代表地址的一组选项是( D )。 A、a, point, *&a B、&*a, &a, *point C、*&point, *point, &a D、&a, &*point, point 21、设有语句:int k=1,*p1=&k,*p2=&k; 以下不能正确执行的赋值语句是( A )。 A、p1=k B、p1=p2 C、 *p1=*p2 D、k=*p1+*p2 22、以下能正确读入字符串的程序段是( B )。 A、char *p; scanf(\"%s\ B、char str[10];scanf(\"%s\ C、char str[10],*p;p=str;scanf(\"%s\ D、char str[10],*p=str;scanf(\"%s\23、根据下面的定义,能输出字符串“Li”的语句是( C )。 struct person { char name[10]; int age; } class[10]={\"Zhang\ \"Li\ \"Ma\ \"Huang\ }; A、 printf(\"%s\\n\ B、printf(\"%s\\n\ C、printf(\"%s\\n\ D、printf(\"%s\\n\ 24、以下对c语言用体类型数据的叙述正确的是( D )。 A、 可以对共有体变量名直接赋值 B、结构体类型定义中不能出现共用体类型的成员 C、共用体类型定义中不能出现结构体类型的成员 D、对共用体中的某个成员赋值后,一般将会改变其它成员的值 25、若调用fputc函数输出字符成功,则函数的返回值是( A )。 A、 所输出的字符 B、 -1 C、0 D、EOF 26、函数rewind(fp)的作用是( A)。 A、 使文件位置指针重新返回文件的开头 B、将文件位置指针返回到前一个字符的位置 C、 使文件位置指针指向文件的末尾 D、使文件位置指针自动移至下一个字符位置 27、在C语言中,5种基本数据类型的存储空间长度的排列顺序为( A )。 A、 char A、 -10 0x8f -018 B、 0abc -017 0xc C、0010 -0x11 0xf1 D、0a12 -0x123 -0xa 29、在C语言中,要求运算数必须是整型的运算符是( D )。 A、 / B、++ C、!= D、% 30、若有代数式如下,则正确的C语言表达式是( B )。 2lnxcosx ──── A、 2*ln(x)*cos(x)/3*x B、2*ln(x)*cls(x)/(3*x) C、 2*log(x)*cos(x)/3*x D、2*log(x)*cos(x)/(3*x) 二、填空题 31、以下函数f1用递减法求两个整数a和b的最大公约数。 f1(int a, int b) { int i,j,m,n; if(a>b) { m=a;a=b; ①b=m ; } i=a;j=b; for(i=a;i>0;i--) { if (a%i!=0) ②continue; if ( ③j%i==0 ) break; } return i; } 32、下面程序的功能是用公式:π×π/6=1/(1×1)+1/(2×2)+1/(3×3)+...... 求π的近似值, 直到最后一项的值小于10e-6为止。 #include #include { long i=1; double pi=0; while ( ①pi>=10e-6) { pi= pi+1/(i*i)② ; i++; } pi=sqrt(6.0*pi); printf(\"pi=%10.6f\\n\ } 33、下面程序的功能是输出以下9*9阶方阵。 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 2 3 3 3 3 3 2 1 1 2 3 4 4 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 4 4 3 2 1 1 2 3 3 3 3 3 2 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 #include void main(void) { int a[10][10], n,i,j,m; scanf(\"%d\ if (n%2==0) m=n/2; else ( ①m=n/2+1 ) ; for(i=0;i a[ ( ②n-i-1 ) ][j]=i+1; a[j][i]=i+1; a[j][ ( ③n-i-1 ) ]=i+1; } for(i=0;i for(j=0;j 34、以下程序的功能是:从键盘输入若干字符,统计出主函数调用count函数的次数,用字符“!”作为结束输入的标志。 #include void count(char ch); char ch1; while(1) { scanf(\"%1s\ count(ch1); if(ch1=='!') ①break ; } } void count(char ch) { static int k=0; k++; if (ch=='!') printf(\"The items of call the function:%d\ ② k ); 35、下面程序的运行结果是( 7 )。 void main(void) { int num_list[]={6,7,8,9},k,j,b,u=0,m=4,w; w=m-1; while(u<=w) { j=num_list[u]; k=2; b=1; while(k<=j/2&&b) b=j%++k; if (b) printf(\"%d\\n\ else { num_list[u]=num_list[w]; num_list[w--]=j; } } } 36、以下程序的运行结果是:( 11 )。 #include int a=2,b=3,c; c=B(a+b); printf(\"%d\ } 37、以下程序的运行结果是( #& )。 void main(void) { int a=2,b=7,c=5; switch (a>0) { case 1: switch (b<0) { case 1:printf(\"?\");break; case 2:printf(\"!\");break; } case 0: switch (c==5) { case 0:printf(\"*\");break; case 1:printf(\"#\");break; default:printf(\"#\");break; } default:printf(\"&\"); } printf(\"\\n\"); } 38、设有以下结构体类型: struct st { char name[8]; int num; float s[4] } student[50] 并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整。 fwrite(student,( ( 800 ) ),1,fp); 39、若有定义:char c='\\010'; 则变量C中包含的字符个数为( 1 )。 40、在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为1;一个int型数据在内存中所占的字节数为( 2 )。 41、在C语言中,一个float型数据在内存中所占的字节数为4个字节;一个double型数据在内存中所占的字节数为( 8 )个字节。 42、若有定义:double x[3][5];则x数组中行下标的下限为0,列下标的上限( 4)。 43、若有以下定义和语句: int a[2][3]={0},(*p)[3]; p=a; 则p+1代表的是元素( a[0][1] )的地址 44、执行以下程序段后,s的值是( 16 ) int a[]={5,3,7,2,1,5,3,10},s=0,k; for(k=0;k<8;k+=2) s+=*(a+k); 45、若有定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是8, *(*(a+1)+1))的值是( 10 )。 46、若有定义:int a[]={1,2,3,4,5,6},*p=a;,则*(p+2)的值是3,*(a+4)的值是( 5 )。 47、下面程序用变量count统计文件中字符的个数。每次从文件中读入一个字符。 #include FILE *fp; long count=0; if ( (fp=fopen(\"letter.dat\ ( \"r\" ) )))==NULL ) { printf(\"cannot open file\\n\"); exit(0); } while ( !feof(fp) ) { fgetc(fp);count++} printf(\"count=%ld\ fclose(fp); } 三、判断题 (A、正确 B、错误) 48、调用函数fgets(str,n,fp),读入结束后,系统自动在str末尾加上结束标记0。A 49、C语言中,有时不同类型的变量可以进行混合运算。A 50、题干: 字符输入函数getch()是“可回显”字符输入函数。B 51、break语句也可以用在由if...goto构成的循环中。B 52、循环体中continue语句的作用是结束整个循环的执行。B 53、字符串作为一维数组存放在内存中。A 54、有两种方法可以终止函数的运行,并返回调用它的调用语句。一种是遇到}后即可返回,另一种是使用return语句。B 55、预处理命令是在程序编译阶段由编译器进行处理的。B 56、数组名可以代表该数组的起始地址。A 57、写文件后必须关闭,否则会丢失数据。A 四、编程题 58、编写代码:打印形如下面的杨辉三角形(要求行数可以变化,且使用二维数组存放数据)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1将代码以 cfile.cpp 为名保存在 #define N 10 main() { int a[N][N]={0},i,j,n; for(i=0;i a[i][j]=a[i-1][j-1]+a[i-1][j]; } printf(“\\nPlease input the number of rows(1~10):”); scanf(“%d”,&n); for(i=0;i printf(\"\\n\"); } } 59、编写代码:设计一个函数 int digit(long n,int k),返回整数n的第k位。例如: digit(3456,6)=0将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 int digit(long n,int k) return n; { } int i,m=1; int digit(long n,int k) for(i=1;i<=k;i++) { m=m*10; int i; n=n%m; for(i=1;i int i,m=1; for(i=1;i 全国高校计算机等级考试(二级C)模拟一试题 一、选择题 1、设有语句:int k, *p; 以下能正确执行的赋值语句是(D )。 A、k=p B、k=&p C、P=K D、p=&k 2、以下运算符中优先级最高的运算符是( A )。 A、! B、&& C、|| D、< 3、求字符串长度的函数是( D )。 A、strcat B、strcpy C、strcmp D、strlen 4、下面程序段的运行结果是( A )。 char x[5]=“ab\\0c\\0”; printf(\"%s\说明:“\\0”中的“0”是数字零。 A、ab B、abc C、ab\\0 D、ab\\0c\\0 5、若有说明语句: int a[2][4]; 则对数组a元素的正确引用是( D )。 A、a[2] B、a[4] C、a[2][4] D、a[1][3] 6、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( B )。A、float型 B、int型 C、long型 D、double型 7、用数组名作为函数调用的实参时,传递给虚参的是( A )。 A、数组的首地址 B、数组第一个元素的值 C、数组中全部元素的值 8、以下程序的输出结果是( D )。 #include y=F(2); printf(“y=%d”,y); } A、2 B、y=2 C、6 D、y=6 9、以下程序的输出结果是( A )。 #include void main(void) { int x,y=50,z; a.x=10; a.y=20; z=a.x+y; printf(“%d”,z); 17 D、数组元素的个数 } A 、60 B 、10 C、0 D、20 10、语句 fopen(“file.dat”,”r”); 的功能是( A )。 A、按照“读”方式打开文件 B、按照“写”方式打开文件 C、按照“读写”方式打开文件 D、按照“追加”方式打开文件 11、关闭文件的语句是( D )。 A、fread B、fwrite C、fprintf D、fclose 12、下面求余数的运算符是( C )。 A、 / B、^ C、% D、~ 13、下面对字符数组的描述中错误的描述是( C )。 A、字符数组可以存放字符串 B、字符数组的字符可以整体输入、输出 C、可以在赋值语句中通过赋值运算符\"=\"对字符数组整体赋值 D、可以用关系运算符对字符数组中的字符进行比较 14、下面正确的字符常量是( C )。 A、300 B、'ab' C、'!' D、\"a\" 15、下面关于main函数与其它子函数之间的位置关系的叙述中正确的是( C )。 A、main函数必须是程序中的第一个函数 B、main函数如果程序中有多个函数,则不能位于最前面 C、main函数可以在任何位置 D、main函数必须是程序中最后一个函数 16、设float x=12.8,y=8.6;则(int)(x+y)的结果为( B )。 A、20 B、21 C、21.4 D、22 17、一个C程序的执行是从( A )。 A、本程序的main函数开始,到main函数结束 B、本程序的第一个函数开始,到本程序的最后一个函数结束 C、本程序的main函数开始,到本程序的最后一个函数结束 D、本程序的第一个函数开始,到本程序main函数结束 18、以下关于函数的实参与虚参(又称形参)的叙述中不正确的说法是( B )。 A、实参可以是常量、变量或表达式 B、虚参可以是常量、变量或表达式 C、虚参应与其对应的实参类型应当尽量一致 D、虚参为指针时,与其对应的实参只能是表示地址的表达式 19、下面关于注释语句的叙述中正确的叙述是( C )。 A、注释语句必须单独占用一行 B、注释语句必须在语句行的末尾 C、注释语句可以跨行使用 D、注释语句不能单独占用一行 20、以下表达式不等价的一组是( A )。 A、a!=b 与 a=a!b B、a|=b 与 a=a|b C、a+=b 与 a=a+b D、a-=b 与 a=a-b 21、若有以下类型说明语句: char a; int b; float c; double d; 则表达式a*b+d-c的运算结果的类型为( D )。 A、float B、char C、int D、double 22、设C语言中,unsigned int型数据的取值范围为( A )。 A、0~65535 B、0~32767 C、1~65535 D、1~32767 23、在任何时候,都能正确计算两个数之差的宏定义是( D )。 A、#define SUB(x,y) (x-y) B、#define SUB(x,y) (x)-(y) C、#define SUB(x,y) x-y D、#define SUB(x,y) ((x)-(y)) 24、以下不正确的说法为( C )。 A、在不同函数中可以使用相同名字的变量 B、虚参视同函数的局部变量 18 C、在函数内的复合语句中定义的变量在本函数范围内有效 D、在函数内定义的变量只在本函数范围内有效 25、!E 等价于( B )。 A、E!=0 B、E==0 C、E!=1 D、E==1 26、字符串比较大小的函数是( C )。 A、strcpy B、strlen C、strcmp D、strcat 27、若有说明语句: int a[ ][4]={1,2,3,4,5,6};,则数组的行数为( C )行。 A、6 B、4 C、2 D、1.5 28、C语言规定,函数返回值的类型由( B )。 A、return语句中的表达式类型所决定 B、在定义该函数时函数头所指定的函数类型所决定 C、调用该函数时的主调函数类型所决定 D、调用函数时由系统临时决定 29、非指针型变量做实参时,它和对应虚参之间的数据传递方式是( B )。 A、地址传递B、单向值传递C、双向值传递D、由用户指定传递方式 *30、建立子函数的主要目的之一是( B )。 A、提高程序的执行效 B、提高程序的可读性 C、减少程序所占磁盘空间 D、减少程序所占内存空间 二、填空题 31、下面程序段用来打印出正整数n以内能被3整除的所有正奇数。 scanf(\"%d\if (n<0) n= -n; for(i=1 ; i 32、下面程序的功能是输出数组中相邻两个数的和能被10整除的所有“数对”以及“数对”的个数。如:对于下面的数组:d[]={1,3,7,23,3,6,14,8,10} 将输出:(3,7) (7,23) (6,14) 3 对 #include int d[]={1,3,7,23,3,6,14,8,10,57,13,90}; int i,count,s count= ( 0 ) ; /* count为“数对”的个数计数器 */ for(i=0; i<11; i++) { s=d[i]+ ( d[i+1] ) ; /* 计算相邻两个数的和 */ if (s%10= =0) { printf(“(%d,%d) ”, d[i],d[i+1]); count=count + ( 1 ) ; } } printf(“%d 对”,count); 33、下面程序的功能是将字符串s中所有的字符c删除。 #include char s[80]; 19 int i,j; gets( ( s ) ); /* 输入字符串 */ j= ( 0 ) ; /* 计数器初始化 */ for(i=0;s[i]!='\\0';i++) if (s[i]!='c') { s[j]=s[i] j++; } s[j]=’\\0’ ; /* 写入字符串结束标志 */ puts(s); 34、下面程序的功能是从键盘输入的最多10个整数中,找出第一个能被7整除的数。若找到,打印此数后 退出循环;若未找到, 打印\"not exist\"。 #include int i,a; for(i=1; i<11; i++) { scanf(\"%d\ &a ) ); /* 输入一个整数 */ if (a%7= =0) { printf(\"%d\ ( break ) ; /* 退出循环 */ } } if ( ( i ) = =11 ) printf(\"not exist\\n\"); } 35、以下程序的运行结果是:( 150 ) #include int i,s,d[10]={21,33,45,7,3,113,67,75,83,26}; s=0; for(i=0; i<10; i+=2) if (d[i]%3!=0) s+=d[i]; printf(\"s=%d\ } 36、以下程序的运行结果是:( 5 ) #include int x,y,z; x=4; y=3; 20 z=12-sub(x,y) printf(\"z=%d\ } 37、以下程序的运行结果是:( 100 ) #include int x,*p; p=&x; *p=100; printf(\"x=%d\ } 38、相同类型的数据之集合称为( 数组 )。说明:填写两个汉字。 39、字符串“abc\\n”的长度是( 4 )。说明:填写一个阿拉伯数字。 40、若有定义: int a[3][2]={2,4,6,8,10,12};,则*(a[1]+1)的值是( 8 )。 41、二进制运算表达式:!(10001101) 的二进制值是( 0 )。 42、为了方便阅读程序,每行最好只书写( 1 )个语句。说明:填写一个阿拉伯数字。 43、与if语句配对构成双分支结构的关键字是( else )。说明:填写4个小写英文字母。 44、变量名的第一个字符必须是( 字母 )或下划线。说明:填写两个汉字。 45、字符常量要用( 单 )引号括起来。说明:填写一个汉字。 46、若有 int a=6,x=5; 则执行 x+=a; 后 x 的值为( 11 )。 47、表示另一个同类型变量之地址的变量称为( 指针 )变量。说明:填写两个汉字。 三、判断题(A、正确 B、错误) 48、&& 的优先级低于 || 的优先级。 B 49、若有定义int x,y; 则执行x=2/4*2和y=2/4.0*2后x和y的值相同。B 50、指针变量也应当遵循“先赋值后使用”的原则。 A 51、运算符“*”有时是单目运算符,有时又可能是双目运算符。 A 52、文件打开方式中的加号(如:“r+”)表示按照追加方式打开文件。B 53、C语言中,变量名中的英文字母一般不区分大小写。 B 54、逻辑表达式的值是一个非负整数。 A 55、break语句也能够结束由if„„goto构成的循环。 B 56、联合(又称共用体)中各个元素的类型可以不相同。 A 57、结构变量所占内存字节数等于其各个成员所占内存字节数的和。 A 四、编程题 58、编写代码: 计算1至50中能被7整除的所有自然数的和。将代码以 cfile.cpp 为名保存在 C:\\ata\\Temp\\420201\\454220040690\\dit\\GAE\\ziti 目录中。 #include int i,s=0; for(i=7;i<=50;i++) if(i%7= =0) s=s+i; printf(“%d\\n”,s); } 21 59、编写代码: 从键盘中输入三个整数a,b,x,判断 x 是否等于a,b之和。将代码以 cfile.cpp 为名保存在 C:\\ata\\Temp\\420201\\454220040690\\dit\\GAE\\ziti 目录中。 #include void main() { int a,b,x; printf(“please input two number a,b,x:”); scanf(“%d,%d,%d”,&a,&b,&x); if(x==a+b) printf(“\\n %d+%d is %d”, a,b,x); else printf(“\\n%d+%d is not %d”,a,b,x); } 全国高校计算机等级考试(二级C)模拟二试题 一、选择题 1、以下程序有语法性错误,有关错误原因的正确说法是( void main(void) { int S,k; void prt_char(); k=prt_char(G); } A、语句void prt_char();有错,它是函数调用语句,不能用void说明。 B、变量名不能使用大写字母。 C、 函数原型说明和函数调用语句之间有矛盾。 D、函数名不能使用下划线。 2、函数值作单向传递时以下正确的说法是( A )。 A、实参和与其对应的形参各占用的存储单元。 B、实参和与其对应的形参共用一个存储单元。 C、只有当实参和与其对应的形参同名时才共用存储单元。 D、形参是虚拟的,不占用存储单元。 3、若有宏定义#define Z(x,y) x*y ,则执行以下程序段后,z的值为( B )。 int z; z=Z(3+5,4); A、32 B、 23 C、17 D、20 4、若有宏定义如下: #define X 5 22 C )。 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出的结果为( D )。 int a; a=Y; printf(\"%d,\ printf(\"%d\\n\ A、 7,6 B、12,6 C、12,5 D、7,5 5、执行以下程序后,m的值是( D )。 #define MIN(x,y) (x)<(y)?(x):(y) void main(void)) { int i=12,j=8,m; m=10 * MIN(i,j); printf(\"%d\\n\ } A、 120 B、80 C、12 D、8 6、下面判断正确的是( C )。 A、char *a=\"china\";等价于char *a; *a=\"china\"; B、char str[10]={\"china\等价于char str[10];str[]={\"china\ C、char *s=\"china\";等价于char *s;s=\"china\"; D、char c[4]=\"abc\等价于char c[4]=d[4]=\"abc\"; 7、以下对指针变量的操作中,不正确的是(C D )。 A、 int a,*p,*q;p=q=&a; B、int a=6,*p,*q=&a; p=q; C、int a,b=6,*p;p=&a;b=*p; D、int a,*p,*q;q=&a;p=*q; 8、以下运算正确的程序段是( D )。 A、 char str1[]=\"12345\ B、char str[10], *st=\"abcde\"; strcat(str,st); C、char *st1=\"12345\ D、char str[10]=\"\9、以下程序的运行结果是( C )。 #include \"stdio.h\" void main(void) { struct date { int y,m,d; } today; printf(\"%d\\n\ } A、 2 B、 3 C、 6 D、出错 10、当说明一个共用体变量时系统分配给它的内存是( C )。 A、共用体中第一个成员所需内存量 B、共用体中最后一个成员所需内存量 C、 共用体成员中占内存量最大者所需的容量 D、共用体中各成员所需内存量的总和 11、设有以下结构体类型数组的定义,且数组mini的10个元素都已赋值,若要将这些元素写到文件fp中,以下不正确的形式是( B )。^struct abc ^{ ^int a; char b; float c[4]; ^} ^mini[10];(^表示换行) 23 A、fwrite(mini,10 *sizeof(struct abc),1,fp); B、fwrite(mini,5 * sizeof(struct abc),5,fp); C、for(i=0;i<10;i++) ^fwrite(mini,sizeof(struct abc),1,fp); D、fwrite(mini,sizeof(struct abc),10,fp); *12、函数fgets(string,m,fp)的作用是( D )。 A、从fp所指向的文件中读取长度不超过m的字符串,存入由指针string指向的内存区域 B、从fp所指向的文件中读取长度为m的字符串,存入由指针string指向的内存区域 C、从fp所指向的文件中读取m个字符串,存入由指针string指向的内存区域 D、从fp所指向的文件中读取长度不超过m-1的字符串,存入由指针string指向的内存区域 13、一个C语言程序是由( B )。 A、一个主程序和若干子程序组成 B、若干函数组成 C、若干过程组成 D若干子程序组成 14、下面四个选项中,均是合法整型常量的选项是( A )。 A、160 -0xff 011 B、-0xcdf 01a 0xe C、-01 986,012 0668 D、-0x48 a2e5 15、已知各变量的类型说明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是( A )。 A、a+=a-=(b=4)*(a=3); B、a=a*3=2; C、x%(-3); D、y=float(i); 16、下面不正确的字符常量是( D )。 A、 '\\X17' B、'\\70' C、'\\\\' D、\"\\n\" 17、以下能正确定义整型变量x,y和z并为其赋初值5的语句是( C )。 A、 int x=y=z=5; B、int x,y,z=5; C、int x=5,y=5,z=5; D、x=y=z=5; 18、以下C程序正确的运行结果是( C )。(注: _ 表示空格) void main(void) { long y=-43456; printf(\"y=%-8ld\\n\ printf(\"y=%-08ld\\n\ printf(\"y=%08ld\\n\ printf(\"y=%+8ld\\n\ } A、y=_-43456^y=-_43456^y=-0043456^y=-43456 B、y=-43456^y=-43456^y=-0043456^y=+_-43456 C、y=-43456^y=-43456^y=-0043456^y=__-43456 D、y=_-43456^y=-0043456^y=00043456^y=+43456 19、根据题目中给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( B )。 void main(void) { int x; float y; printf(\"enter x,y:\") 输入语句 输出语句 } 输入形式 enter x,y:2 3.4 输出形式 x+y=5.40 A、scanf(\"%d, %f\ B、scanf(\"%d%f\ 24 0x C、scanf(\"%d%f\ D、scanf(\"%d%3.1f\ 20、若有以下变量说明和数据的输入方式,则正确的输入语句为( B )。 (注:'_'代表空格) 变量说明: float x1, x2; 数据的输入方式: 4.25<回车> 3.5 <回车> A、scanf(\"%f,%f\ B、scanf(\"%f%f\ C、scanf(\"%3.2f %2.1f\ D、scanf(\"%3.2f%2.1f\21、以下程序的输出结果是( B )。 void main(void) { int x=2, y=-1,z=2; if (x A、 3 B、 2 C、 1 D、0 22、设有说明语句int x,a,b,c;则以下不合法的if语句是 。( C ) A、if(a==b) x++; B、if(a<=b) x++; C、if(a<>b) x++; D、if(a>=b) x++; 23、语句while(!y);中的表达式!y等价于( A )。 A、y==0 B、y!=1 C、 y!=0 D、y==1 24、下面程序段的运行结果是( A )。 int a=1,b=2,c=2,t; while(aA、1, 2, 0 B、2, 1, 0 C、1, 2, 1 D、2, 1, 1 25、若有如下语句 int x=3; do { printf(\"%d\\n\ } while(!(--x)); 则上面程序段( B )。 A、输出的是1 B、输出的是1和-2 C、输出的是3和0 D、是死循环 26、有一堆零件(100到200之间),如果分成4个零件一组的若干组, 则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。 下面程序是求这堆零件总数, 请选择填空。 #include int i; for(i=100;i<200;i++) if ((i-2)%4==0) if (! ((i-3)%7)) 25 if ( ( D ) ) printf(\"%d\ } A、 i%9=5 B、 i%9!=5 C、(i-5)%9!=0 D、i%9= =5 27、下述对C语言字符数组的描述中错误的是( C )。 A、 字符数组可以存放字符串。 B、字符数组的字符可以整体输入、输出。 C、 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值。 D、可以用关系运算符对字符数组中的字符进行比较。 28、下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。 #include char s[80],c1=' ',c2; int i=0,num=0; gets(s); while(s[i]!='\\0') { c2=s[i]; if (i>0) c1=s[i-1]; if ( ( C ) ) num++; i++; } printf(\"These are %dwords.\\n\ } A、 c1==' '&&c2==' ' B、c1!=' '&&c2==' ' C、c1==' '&&c2!=' ' D、c1!=' '&&c2!=' ' 29、若二维数组y有m列,则在y[i][j]前的元素个数为( B )。 A、 j*m+i B、 i*m+j C、i*m+j-1 D、i*m+j+1 30、以下正确的函数形式是( D )。 A、 double fun(int x,int y) { z=x+y;return z;} B、fun(int x,y) { int z; return z;} C、fun(x,y) { int x,y; double z; z=x+y; return z;} D、double fun( int x,int y) {double z; z=x+y; return z; } 二、填空题 31、以下程序对输入的两个整数,按从大到小顺序输出。请在( )内填入正确内容。 void main(void) { int x,y,z; scanf(\"%d %d\ if ( ( x z=x; ( x=y; y=z; ) ; } printf (\"%d,%d\ } 32、下面程序的功能是求11的11次方的个、十、百位上的数字之和。 #include 26 void main(void) { int i,( ① s=1 ),m=0; for (i=1;i<=11;i++) s=s*11%1000; do { m+= ( ② s%10 ) ; s= ( ③ s/10 ) ; } while(s); printf(\"m=%d\\n\ } 33、下面程序用来求n(包括n,n>2)以内的所有质数。 #include #include int i,j,p,n; scanf(\"%d\ if(n<3) exit(0); printf(\"%d \ ①n ); for(j=3; ②j p=(int)sqrt(j)+1; for(i= ③2 ;i if (j%i ④==0 ) break; if (⑤i==p ) printf ( “%d”, j); } } 34、下面程序的运行结果是( 1;-2 )。 #include while(y--!=-1) { do { a*=y; a++; } while(y--); } printf(\"%d;%d\ 27 } 35、下面程序的运行结果是:( 20 )。 void main(void) { int a[]={0,1,2,3,4,5,6,7,8,9}; int s,i,*p; s=0; p=&a[0]; for(i=0;i<10;i+=2) s+=*(p+i); printf(\"%d\ } 36、以下程序的运行结果是( 1,0 )。 void main(void) { int x,y,z; x=1; y=1; z=0; x=x||y && z; printf(\"%d;%d\ } 37、在C语言中, 二维数组元素在内存中的存放顺序是( A )。 A 38、执行以下程序段后,m的值是( 6 ) int a[]={7,4,6,3,10},m,k,*ptr; m=10; ptr=&a[0]; for(k=0;k<5;k+=2) m=(*(ptr+k) printf(\"%d\则输出结果是( 8 )。 40、执行以下程序段后,s的值是( 16 )。 int a[]={5,3,7,2,1,5,3,10},s=0,k; for(k=0;k<8;k+=2) s+=*(a+k); 41、定义联合类型的关键字是( union )。 42、若fp为文件指针,且文件已正确打开文件含有两个字节数据,i为long型变量,则以下程序段的输出结果是( 2 )。 fseek(fp, 0, SEEK_END) i=ftell(fp); printf(\"i=%ld\\n\ 43、表达式pow (2.8,sqrt(double(x))) 值的数据类型为( 双精度 )型。 44、设有定义: unsigned int a=369; 试写出能将a中高、低字节内容 对调的赋值语句是( a%256*256+a/256 );(注: 不借助于其他变量) 28 45、在C语言中,最大整型数是( 4294967295 )。 46、在C语言中,格式化输入操作是由库函数scanf完成的,格式化输出操作是由库函数( printf )完成的。 三、判断题:(A、正确 B、错误) 47、从形式上看,在函数体内出现调用自身的语句时,它就是递归函数。 A 48、宏定义是用宏名代替一个字符串,如:#define PI 3.14159;因为宏定义是C语句,所以在行末要加分号B 49、数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。A 50、文件应当先打开后使用。 A 51、函数fgets(str,n,fp)的功能是从fp所指的文件中读入n个字符放入str中。B 52、C语言中,标识符的第一个字符可以是数字。 B 53、使用scanf函数为字符数组赋值时,也应该在数组名前加上地址符&。 B 54、算术运算符的优先级高于任何一个关系运算符的优先级。 A 55、do-while和for循环均是先执行循环体,后判断表达式。 B 56、若有说明:int a[3][4]={0},则只有元素a[0][0]可得到初值0。 B 四、编程题: 57、编写代码:使用循环语句设计一个程序,打印n行形如下图的图形。 AAAAAA AAAAAA AAAAAA将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 #include printf(“A”); printf(“\\n”); } } 58、编写代码:随机生成n个100以内(不含100)的正整数赋给数组a(不使用元素a[0]),再将下标为奇数的元素和下标为偶数的元素分别按升序排序,并输出排序前和排序后数组的值。 例如,若数组的值为:50, 32, 9 #include int i,j,a[101],m,t; randomize( ); for(i=1;i<=100;i++) a[i]=random(100); printf(“Before sorted,the arrary is:\\n”); for(i=1;i<=100;i++) printf(“%3d”,a[i]); for(i=1;i<99;i+=2) { m=i; 29 AAAAAA for(j=i;j<100;j+=2) if(a[j]for(i=2;i<100;i+=2) { m=i; for(j=i;j<=100;j+=2)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务