您好,欢迎来到九壹网。
搜索
您的当前位置:首页计算机等级考试(二级C)试题

计算机等级考试(二级C)试题

来源:九壹网
全国高校计算机等级考试(二级C)模拟四试题

一、选择题

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 void main(void) {

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,则条件表达式w28、若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是( C )。

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].ageif (person[i].age!=max ③&& person[i].age!=min) {

printf(\"%s %d\\n\ break;

} }

34、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。 #include #include void main(void) {

char c='a',t[50]; int n,k,j; gets(t);

n= ①50 ;

for(k=0;kif ( ②t[k]==c ) { j=k;break; } else j=-1;

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 void main()

{

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 (xif (y!=10)

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 || bwhile(x<15) y++,x+=++y;

printf(\"%d,%d\

A、20,7 B、6,12 C、20,8 D、8,20 9、下面程序的运行结果是( D )。 #include void main(void) {

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 void main(void)

{

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;iint a[MAX],i,max; max=5;

for(i=0;iint 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 F(y) 8.19-y

#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、 char28、下面四个选项中,均是正确的八进制数或十六进制数的选项是( C )。

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 void main(void)

{

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;ia[i][j]=i+1;

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 main(void) {

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 #define B(x) x*x void main(void) {

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 void main(void) {

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;ifor(j=1;j<=i;j++)

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{for(j=0;j<=i;j++) printf(\"%8d\

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;iint digit(long n,int k) {

int i,m=1;

for(i=1;idigit(123456,3)=4

全国高校计算机等级考试(二级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 #define F(y) 8-y void main(void) { int x,y;

y=F(2);

printf(“y=%d”,y); }

A、2 B、y=2 C、6 D、y=6 9、以下程序的输出结果是( A )。 #include struct { int x,y; } a;

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 ; iif ( i%2!=0 && i%3 ( ==0 ) ) printf(\"%d \ ( i ) );

32、下面程序的功能是输出数组中相邻两个数的和能被10整除的所有“数对”以及“数对”的个数。如:对于下面的数组:d[]={1,3,7,23,3,6,14,8,10} 将输出:(3,7) (7,23) (6,14) 3 对 #include void main(void) {

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 void main(void) {

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 void main(void) {

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 void main(void) {

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 #define sub(x,y) x-y void main(void) {

int x,y,z; x=4; y=3;

20

z=12-sub(x,y) printf(\"z=%d\

}

37、以下程序的运行结果是:( 100 ) #include void main(void) {

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 void main() {

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 (xprintf(\"%d\\n\ }

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 void main(void) {

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 void main(void) {

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 void main(void) {

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 ;iif (j%i ④==0 ) break; if (⑤i==p ) printf ( “%d”, j); }

}

34、下面程序的运行结果是( 1;-2 )。 #include void main(void) { int y,a; y=2; a=1;

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)int a[5]={9,8,7,6,5}, *p; p=&a[3];

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 void main() { int i ,s,n; scanf(“%d”,&n); for(i=0;i<=n;i++) {for (s=1;s<=6;s++)

printf(“A”);

printf(“\\n”); } }

58、编写代码:随机生成n个100以内(不含100)的正整数赋给数组a(不使用元素a[0]),再将下标为奇数的元素和下标为偶数的元素分别按升序排序,并输出排序前和排序后数组的值。 例如,若数组的值为:50, 32, 9 #include #include void main() {

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)

if(a[j]printf(“After sorted,the arrary is:\\n”); for(i=1;i<=100;i++) printf(“%3d”,a[i]); }

\" \"

全国高校计算机等级考试(二级C)模拟三试题

一、选择题

1、下面关于字符串常量与字符常量的叙述中正确的叙述是( D )。 A、字符串常量可以不含任何字符,字符常量也可以不含任何字符 B、字符串常量可以含有多个字符,字符常量也可以含有多个字符 C、字符串常量可以含有多个字符,字符常量可以不含有任何字符

D、字符串常量可以不含任何字符,字符常量必须恰好含有一个字符

2、若有以下说明和语句,则对结构体变量std中成员id的引用方式正确的是( A )。 struct work { int id;

int name; } std;

A、std.id B、std->id C、id D、(*std).id

3、设m>0,下面关于数据输出宽度控制的叙述中正确的叙述是( D )。 A、%-md 按m列居中输出整数 B、%md 按m列居中输出整数 C、%-md 按m列右靠齐输出整数 D、%-md 按m列左靠齐输出整数

4、设a=4,b=5, f=(a==3) + (b==5), 则f的值是( D )。 A、8 B、9 C、17 D、1

5、下面关于if语句的叙述中正确的叙述是( C )。 A、if语句不可以带else分支

B、if语句的子语句不可以再是if语句 C、if语句的控制条件必须用圆括号括起来 D、if语句只能处理一个分支

6、下面关于switch语句中case所携带常量的叙述中正确的叙述是( C )。 A、每个case所携带的常量不能是零

30

B、case所携带的常量必须介于1-9之间 C、case所携带的常量不能是实数

D、case所携带的常量不能是负数

7、若i=4,则赋值语句j=++i;执行后,i和j的值分别为( B )。

A、4,5 B、5,5 C、5,4 D、4,4

8、若有语句: char s1[10],s2[10]=\"books\则能将字符串s2赋给s1的正确语句是( A )。 A、strcpy(s1,s2); B、strcpy(s2,s1); C、s1=s2; D、s2=s1; 9、设有程序段: int x=10;

while(x==0) x=x-1;

则下面描述中正确的是( B )。 A、B、不循环C、D、

10、下面关于二维数组定义的语句中,正确的是( A )。

A、int a[][100]; B、int a[100][]; C、int a[][]; D、int a[100,100];

11、在一批含有许多相同数据 100 的有序数据中采用二分查找法找到数据100 的位置( C )。 A、是位于最前面的 B、是位于最后面的 C、多数情况下是位于首尾之间的 D、是位于正中间的 12、设有语句如下: int x=5,y;

y=x/3;

则y的值是( A )。

A、1 B、2 C、1.6 D、1.66666„„6 13、下面关于文件的叙述中正确的叙述是( A )。

A、无论按照何种方式打开文件,对其处理完毕后都应关闭 B、按照“写”方式打开的文件如果未写入数据则可以不关闭 C、按照“随机”方式打开的文件可以不关闭 D、按照“读”方式打开的文件可以不关闭 14、设有语句如下:

int x=3,y=0;

则下面值为1的表达式是( B )。

A、x && y B、x || y C、~x D、y<<1 15、下面能够做变量名的是( B )。

A、a+b B、a_b C、a-b D、3ab 16、设有如下定义: struct

{

int a; char s[10];

} x;

则变量x所占内存字节数是( D )。

A、2 B、10 C、11 D、12

17、在C语言中,要求运算数必须是整型数的运算符是( D )。 A、/ B、++ C、!= D、%

18、若有代数式3ae/bc,则不正确的C语言表达式是( C )。

A、a/b/c*e*3 B、3*a*e/b/c C、3*a*e/b*c D、a*e/c/b*3

19、设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为( A )。

31

A、-32768~32767 B、0~32767 C、0~65535 D、-32767~32768 20、设有float x=16.8,y=8.9;则(int)(x+y)的结果为( A )。 A、25 B、26 C、24 D、25.7

21、若有说明语句: char ch1='\\065'; 则ch1中含有( D )个字符。

A、4 B、3 C、2 D、1

22、已知字母A的ASCII码为65,变量ch1为字符型,则执行语句ch1='A'+'6'-'3';后,ch1中的值是( A )。 A、'D' B、65 C、一个不确定值 D、'C' 23、以下运算符中优先级最高的运算符是( C )。 A、+ B、- C、* D、<

24、若有定义: int k=7; float a=2.6, b=4.7; 则表达式a+k%3的值是( A )。 A、3.6 B、3.2 C、3 D、4

25、以下能正确定义整型变量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; 26、表达式11%2*3的值是( A )。 A、3 B、5 C、6 D、16.5

27、对于任何a,下面各表达式中其值为0的表达式是( B ) A、a + a B、a – a C、a * a D、a /a

28、声明字符型变量a,b,c的正确语句是( B )。

A、char a,char b,char c; B、char a,b,c; C、char a;b;c; D、char a,b;c; 29、下面关于赋值号左、右两边量的叙述中正确的叙述是( D )。 A、左边可以是表达式,右边可以是变量。如 x+3=y;

B、左边可以是表达式,右边也可以是表达式。如 x+3=y+7; C、左边可以是变量,右边可以是表达式。如 x=y; 或 x+3=y; D、左边只能是变量,右边可以是表达式。如 x=y+4;

30、下面关于变量名的叙述中正确的叙述是( C )。 A、程序编译后变量名越长它所占用的内存空间越大 B、变量名中应当含有数字

C、变量名应当取得有一定意义,方便阅读,如一般用count作计数器 D、变量名由多个单词构成时应当用减号将它们连接起来

二、填空题

31、下面的程序段求n的阶乘s。 int i,n;

scanf(\"%d\

s= ( 1 ); for(i=1;i<=n;i++)

s= ( i*s );

printf(\"%d\

32、下面的程序判断整数n是否为质数(即素数)。 void main(void) {

int i,n;

scanf(\"%d\ ( &n ) ); for(i=2;i< ( n ) ;i++) if (n%i== ( 0 ) ) break; if (i==n) printf(\"是质数\");

32

else printf(\"不是质数\");

33、有一个形如aabb的四位数n,如2233,7744等,且n是一个完全平方数。请求出满足条件的所有四位数n。

#include void main(void) {

int n, x ; int n1,n2,n3,n4; for(x=32;x<100;x++)

{

n= x*x; /* 由x构造n */

n1= ( n/1000 ) ; /* 分离出n的千位 */ n2=(n-1000*n1)/100; /* 分离出n的百位 */ n3=n/10%10; /* 分离出n的十位 */ n4=n%10; /* 分离出n的个位 */ if (n1==n2 && n3==n4) printf(\"%6d\ n ) ); }

}

34、下面的程序统计数组d中奇数的个数count。 void main(void) {

int i,count;

int d[100];

for(i=0;i<100;i++)

scanf(\"%d\

( count=0 ) ; /* 奇数个数计数器初始化 */ for(i=0;i<100;i++)

if (d[i]%2== ( 1 ) ) count++; printf(\"%d\ ( count ) ); }

35、以下程序的运行结果是:( 10 ) #include void main(void) {

int x=10,*p; p=&x;

printf(\"%d \

}

36、以下程序的运行结果是:( 16 ) #include void main(void) {

int i,s=0;

for(i=1;i<8;i+=2) s+=i;

printf(\"s=%d\

33

}

37、以下程序的运行结果是:( 900 ) #include void main(void) {

int abc(int x); int x; x=abc(30); printf(\"%d\ } int abc(int x) {

int y; y=x*x; return y;

}

38、经常使用的数组有一维数组和( 二 )维数组。说明:用中文小写数字填写,如七、八。 39、实型变量可以分为单精度变量和( 双精度 )变量两种。说明:填写三个汉字。 40、在一个C源程序中,注释语句两侧的分界符分别为 /* 和( */ )。

41、C语言中整型数分为有符号的整型数和( 无符号 )的整型数两类。说明:填写三个汉字。 42、设有定义: int a=7,b; 则执行语句 b=a/2后,变量b的值是( 3 )。 43、若a=6,b=4,则表达式!(a-b)的值是( 0 )。

44、若有int a=6,b=4,则表达式 a&b 的值是( 4 )。说明:将运算结果转换为十进制数。 45、for(......) 循环语句的括号中含有( 3 )个表达式。说明:用阿拉伯数字填写。 46、复合语句必须用 { 和 ( } )来表示。

47、文件在使用之前必须先( 打开 )它。说明:填写两个汉字。

三、判断题 (A、正确 B、错误)

48、语句x-=y+8等价于x=x-y+8。 B 49、在赋值语句中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。A 50、x!=0 等价于 x=1。 B 51、字符数组中的一个元素存放一个字符。 A 52、在对数组进行初始化时,可以只对部分数组元素赋初值。 A 53、在C程序中,每行只允许写一条语句。 B 54、循环体若包含两个及两个以上的语句,应当用大括号括起来。 A 55、在循环语句中使用break语句可以终止循环。 A 56、简单的c语言源程序不需要主函数。 B 57、C语言的运算符可以分为单目、双目和三目运算符三类。 A

四、编程题

58、编写代码:求前n个正整数的平方和(如样张所示)。将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 #include void main() {int i,n,s; s=0;

scanf(“%d”,&n);

34

for(i=1;i<=n;i++) s+=i*i;

printf(“%d”,s);}

59、编写代码:在屏幕上显示n行形如样张所示的图形。将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 #include void main() { int n,i,j; scanf(“%d”,&n); for(i=0;iprintf(“A”); printf(“\\n”); } }

全国高校计算机等级考试(二级C)模拟四试题

一、选择题

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 void main(void) {

char a[]=\"morning\ int i,j=0;

for(i=0;i<7;i++) if (a[j]35

a[j]=a[7]; a[7]=a[j];

puts(a); }

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;

36

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,从键盘输入数

37

据的正确形式应当是( 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,则条件表达式wA、4 B、3 C、2 D、1

28、若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是( C )。

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\

38

}

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].ageif (person[i].age!=max ③&& person[i].age!=min) {

printf(\"%s %d\\n\ break; }

}

34、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。 #include #include void main(void) {

char c='a',t[50]; int n,k,j; gets(t);

n= ①50 ;

39

for(k=0;kif ( ②t[k]==c ) { j=k;break; } else j=-1; 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程序中,文件可以用( ①顺序 )方式存取,也可以用随机方式存取。

40

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

void main()

{

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”); }

41

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 (xif (y!=10) 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,则条件表达式 a42

A、 -14 B、-13 C、 3 D、4

7、若有语句int a=1,b=2,c=3;则以下值为0的表达式是( D )。

A、 'a'&&'b' B、a<=b C、 a>b || bwhile(x<15) y++,x+=++y; printf(\"%d,%d\

A、20,7 B、6,12 C、20,8 D、8,20 9、下面程序的运行结果是( D )。 #include void main(void) {

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 void main(void)

{

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 )。

43

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{

int a[MAX],i,max; max=5;

for(i=0;isub3(int a[]) {

int i;

for(i=0;iprintf(\"\\n\"); }

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 F(y) 8.19-y

44

#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、 char28、下面四个选项中,均是正确的八进制数或十六进制数的选项是( C )。

A、 -10 0x8f -018 B、 0abc -017 0xc C、0010 -0x11 0xf1 D、0a12 -0x123 29、在C语言中,要求运算数必须是整型的运算符是( D )。 A、 / B、++ C、!= D、% 30、若有代数式如下,则正确的C语言表达式是( B )。 2lnxcosx

45

-0xa ────

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 void main(void) {

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;

46

else ( ①m=n/2+1 ) ; for(i=0;ia[i][j]=i+1;

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 main(void) {

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;

47

if (b) printf(\"%d\\n\ else

{

num_list[u]=num_list[w]; num_list[w--]=j; } }

}

36、以下程序的运行结果是:( 11 )。 #include #define B(x) x*x void main(void) {

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]

48

} 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 void main(void)

{

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

49

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;ifor(j=1;j<=i;j++)

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;iprintf(\"\\n\"); }

}

59、编写代码:设计一个函数 int digit(long n,int k),返回整数n的第k位。例如:digit(3456,6)=0将代码以 cfile.cpp 为名保存在 #SubPath# 目录中。 int digit(long n,int k) }

{

int digit(long n,int k) int i,m=1;

{ for(i=1;i<=k;i++) int i;

m=m*10; for(i=1;in=n%m; n=n/10; m=m/10; n=n%10; n=n/m return n; return n; } }

int digit(long n,int k) {

int i,m=1;

for(i=1;i50

digit(123456,3)=4

51

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务