1、 . 计算机二级C语言五套模拟卷及答案 模拟试题一 一、 选择题〔本大题30分,每题2分〕 1.以下说法正确的选项是 。 E) main函数必须放在C程序的开头 F) main函数必须放在C程序的最后 G) main函数可以放在C程序的中间局部,但在执行C程
2、序时是从程序开头执行的 H) main函数可以放在C程序的中间局部,但在执行C程序时是从main函数开场的 2.在下面几组数据类型中, 全为最常用的根本数据类型的是哪一组: 。 A〕整型 实型 字符型 B〕整型 数组 指针 C〕数组 构造体 共用体 D〕指针 逻辑型 空类型 3.假设有说明语句:char c= ‘\64’ ; 那么变量C包含: 。 A〕1个字符 B〕2个字符 C〕3个字符 D〕说明不合法,C
3、值不确定 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 3 5.C语言中,运算对象必须是整型数的运算符是 。 A〕% B〕\ C〕% 和 \ D〕** 6.能正确表示x的取值X围在[0,100]和[-10,-5]内的表达式是 。 A〕〔x<=-10〕||〔x>=-5〕&&〔x<=0〕||〔x>=100〕 B〕〔x>=
4、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=%d\n",k); 那么执行结果是last= 。 A)2 B)3 C)4 D)无结果 8.下面有关for循环的正确描述是 。 A〕for循环只能用于循环次数已经确定的情况
5、B〕for循环是先执行循环体语句,后判断表达式 C〕在for循环中,不能用break语句跳出循环体 D〕for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 9.假设二维数组a有m列,那么a[I][j]元素前的数组元素个数为: 。 A〕j*m+i B〕i*m+j C〕i*m+j-113 D〕i*m+j+1 10.C语言中变量的指针指的是: 。 A〕变量类型 B〕变量值 C〕变量值 D〕变量地址 11.设有两字符串“Beijing〞、“China〞分别存放在字符数组str1[10],str2[10]中,下面语句中能
6、把“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
7、 B〕7 7 7 C〕7 9 11 D〕7 8 9 13.在C语言程序中,假设未在函数定义时说明函数类型,那么函数默认的类型为: 。 A〕void B〕double C〕int D〕char 14.在说明一个构造体变量时系统分配给它的存储空间是 。 E) 该构造体中第一个成员所需存储空间 F) 该构造体中最后一个成员所需存储空间 G) 该构造体中占用最大存储空间的成员所需存储空间 H) 该构造体中所有成员所需存储空间的总和 15.使用fseek函数可以实现的操作是
8、 。 E) 改变文件的位置指针的当前位置 F) 文件的顺序读写 G) 文件的随机读写 H) 以上都不对 二、判断题〔本大题10分,每题1分〕 1、C程序可以由假设干个源文件组成,因此最小的功能单位是源文件,最小编译单位的是函数。〔 〕 2、C程序有三种构造化程序设计方法,分别顺序构造、选择构造和循环构造。〔 〕 3、在if语句中,if子句与else子句都可以单独使用,构成了if语句的两种缺省形式。〔 〕 4、for语句作为循环控制语句时,其括号内各个表达式及其后的分号都可缺省。〔 〕 5、C程序中函数不可以嵌套定义但可以嵌套调用。〔 〕 6、
9、字符串可以用来给数组赋值,在C程序的执行语句中可以直接用字符串给数组名赋值。 〔 〕 7、数组名也可作为函数参数使用,此时数组名代表数组的起始地址。〔 〕 8、在函数内的复合语句中定义的变量在本函数X围内有效。〔 〕 9、声明一个构造体类型的一般形式为struct 构造体名 {成员表列};。〔 〕 10、ANCI C规定了标准输入输出函数库,用fseek()函数来实现翻开文件。〔 〕 三、程序填空题〔本大题12分,每题2分〕 1.下面程序可求出1~1000的自然数中所有的完数〔因子和等于该数本身的数〕请填空。 main( ) { int m, n, s; fo
10、r(m=2;m<1000;m++) { ____〔1〕____; for(n=1;n<=m/2;n++) if(__〔2〕___) s+=n; if(__〔3〕___) printf(“%d\n〞, m); } } 2.. 用起泡法对十个数由大到小排序。 main( ) { int a[11], i, j, t; printf(“input 10 numbers: \n〞); for(i=1;i<11;i++) scanf(“%d〞,&a[i]); printf(“\n〞); for (j=1;j<=9;j++) for(i=1; _〔1〕_
11、 i++)
if (__〔2〕___)
{t=a[i]; a[i]=a[i+1]; __〔3〕__ ;}
printf(“the sorted numbers: \n〞);
for ( i=1; i<11; i++)
printf(“%d〞,a[i]);
}
四、写出下面程序的执行结果〔本大题24分,每题4分〕
1.#include
12、int a,b,c;
a=1;b=2;c=3;
if(a>b)
if(a>c)
printf(“%d\n〞,a);
else printf(“%d\n〞,b);
printf(“over\n〞); }
3. main( )
{ char a[6][6], i, j;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{ if ( i 13、
{ for(j=0;j<6;j++)
printf(“%c〞,a[i][j]);
printf(“\n〞);}
}
4.main( )
{ int i=2, x=5, j=7;
fun (j,6);
printf(“i=%d; j=%d; x=%d\n〞, i, j, x ) ; }
printf(“i=%d; j=%d; x=%d\n〞, i, j, x) ;
5. # include 14、j; ﹡p=10; ﹡q=2;
printf(〞i=%d, j=%d\n 〞, 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位〕按输入顺序的 15、反方向输出,例如,输入数是12345,要求输出结果是54321,编程实现此功能。
2.编一程序,从键盘输入10个整数并保存到数组,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
3.编写一个函数计算一个字符串的长度,输入输出在主函数内完成。〔使用指针〕
模拟试题二
一、选择题〔本大题30分,每题2分〕
1.C语言中不能用来表示整常数的进制是 。
A〕十进制 B〕十六进制 C〕八进制 D〕二进制
2.C语言规定标识符由 等字符组成。
A〕字母 数字 下划线 B〕中划线 字母 数字
16、C〕字母 数字 逗号 D〕字母 下划线 中划线
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.000000
4.以下表达式: 2+’a’+i*f, 其中i为整型变量,f为float型变量,那么表达式的最终数据类型为 。
A〕int B〕float C〕char D〕do 17、uble
5.有如下语句:
printf(“%s,%5.3s\n〞,“PUTER〞,“PUTER〞);
执行语句后的最终结果为 。
A〕PUTER ,CMP . B〕PUTER, CMP.
C〕PU, CMP. D〕PU, 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 18、〞,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==0
B〕(x%4==0||x%100!=0)&&x%400==0
C〕(x%4==0&&x%400!=0)||x%100==0
D〕(x%100==0||x%4!=0)&&x%400==0
19、8.循环语句中的for语句,其一般形式如下:
for(表达式1;表达式2;表达式3) 语句
其中表示循环条件的是 。
A〕表达式1 B〕表达式2 C〕表达式3 D〕语句
9.以数组作为函数的参数时传递的数组的首地址,那么实参数组与形参数组之间的数据传递方式为 。
A〕地址传递 B〕单向值传递
C〕双向值传递 D〕随机传递
10.将字符串str2连接到字符串str1中应使用 。
A〕strcpy(s 20、tr1,str2) B〕strcat(str1,str2)
C〕strcmp(str1,str2) D〕strcat(str2,str1)
11.假设有以下定义:
int a[10],*p=a; 那么*(p+3)表示的是 。
A〕元素a[3]的地址 B〕元素a[3]的值
C〕元素a[4]的地址 D〕元素a[4]的值
12.假设有如下语句: int *p1,*p2; 那么其中int所 21、指的是 。
A〕p1的类型 B〕*p1和*p2的类型
C〕p2的类型 D〕p1和p2所能指向变量的类型
13.假设有如下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10};
char b=’a’,d,e;
那么数值为4的表达式是 。
A〕a[4] B〕a[d-b] C〕a[‘d’-b] D〕a[e-b]
14.有如下程序段,在Turbo C环境下运行的结果为 22、
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 23、 C〕2,-1 D〕1,1
15.假设fp是指向某文件的指针,且已读到此文件末尾,那么库函数feof(fp)的返回值是 。
A) EOF B) 0 C) 非零值 D) NULL
二、判断题〔本大题10分,每题1分〕
1.在每个C语言的程序中都必须并且只能有一个main函数。〔 〕
2.在C语言中,整型数据与字符型数据在任何情况下都可以通用。〔 〕
3.在C语言程序中,AHP和ahp分别代表两个不同的标识符。〔 〕
4. 在if语句中 24、不可以没有else子句。〔 〕
5.C语言规定,简单变量做实参时,与其对应的形参之间是单向的值传递。〔 〕
6. for语句作为循环控制语句时,括号内的分号是用来分开表达式的,因此要根据需要加分号。〔 〕
7. 数组名也可作为函数参数使用,此时是地址传递。〔 〕
8. C程序有三种构造化程序设计方法,分别嵌套构造、选择构造和循环构造。〔 〕
9.数组在定义时没有必要指定数组的长度,其长度可以在程序中根据元素个数再决定。〔 〕
10.在定义指针型变量时指定的基类型为该指针变量所能指向的变量类型。〔 〕
三、程序填空题〔本大题12分,每题2分〕
1.输入3个实数 a 25、 b, c要求按从大到小的顺序输出三数.
main( )
{ float a,b,c,t;
scanf(“%f,%f,%f〞,&a,&b,&c);
if (a 26、
for( i=0;i<10;i++) 1 1
{ 〔4〕 〔5〕 } 1 2 1
for( i=2; i<10; i++ ) - 1 3 3 1
for(j=1; j 27、[j]);
printf(“\n〞);}
}
四、写出下面程序的执行结果〔本大题24分,每题4分〕
1.main( )
{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}, b[4][3];
int i, j;
for (i=0;i<3;i++ )
for (j=0;j<4;j++ )
b[j][i]=a[i][j];
for ( i=0;i<4;i++ )
{ for ( j=0;j<3;j++ )
printf( “%5d〞,b[i][j] );
printf( “\n〞 ); }
28、
}
2.main( )
{ int a[21],i,j,n=0;
for(i=2;i<20;i++ )
a[i]=i;
for ( i=2;i<10;i++ )
{if (a[i]==0) continue;
for (j=i+1;j<=20;j++)
if (a[j]%a[i]==0) a[j]=0;}
for ( i=2;i<=20;i++ )
if (a[i]!=0) { printf(“%4d〞,a[i]); n=n+1;}
if (n%4==0) printf(“\n〞);
}
3. float fac(int n)
{ fl 29、oat 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.0 30、f〞, n,y);
} 假设在运行程序时输入5 ,写出程序的运行情况及最终结果: 。
4.main()
{int i=10,j=0;
do
{j=j+i;i--;
while(i>2);
printf("%d\n",j);
}
5. # include 31、{ int a=0;
static int b=0;
a++;
b++;
printf("%d: a=%d, b=%d\n", 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 32、), 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程序中可以没有主函数。
33、
2.以下表达中不正确的选项是: 。
A〕在C程序运算符中,逗号运算符优先级最低;
B〕C程序中,AHP和ahp代表两个不同的变量;
C〕C程序中,整数和实数在内存中存放形式一样;
D〕在C程序中, %是只能用于整数运算的运算符.
3.ch是字符型变量,下面不正确的赋值语句是: 。
A〕ch=‘\0’ B〕ch=‘a+b’
C〕ch=‘7’+‘9’ D〕ch=7+9
4.设有如下定义
int x=10,y=5,z;
那么语句printf("%d\n",z=(x+=y,x/y));
的输出结果是 34、 。
A)1 B)0 C)4 D)3
5.设有如下定义:char ch=’z’,那么执行下面语句后变量ch是值为: 。
ch=(‘A’<=ch&&ch<=‘Z’)?(ch+32):ch
A〕A B〕a C〕Z D〕z
6.假设x和y都为float型变量,且x=3.6, y=5.8 执行以下语句后输出结果为: 。
printf(“%f〞,(x,y));
A〕3.600000 B〕5.800000
C 35、〕3.600000,5.800000 D〕输出符号不够,输出不正确值
7.设有两字符串“Beijing〞、“China〞分别存放在字符数组str1[10],str2[10]中,下面语句中能把“China〞连接到“Beijing〞之后的为: 。
A〕strcpy(str1,str2);
B〕strcpy(str1, “China〞);
C〕strcat(str1,“China〞)
D〕strcat(“Beijing〞,str2);
8.以下对一维整型数组a的正确说明是 。
A〕int a(10);
36、
B〕int n=10,a[n];
C〕int n; scanf(“%d〞,&n); int a[n];
D〕#define SIZE 10 int a[SIZE];
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〕a[3]地址 D)不正确的值10.假设I为整型变量,那么以下程序段的运行结果为 。
I=322 37、
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 38、段的运行结果是: 。
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〕p 39、oint &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=3
b++; c++; return(a+b+c); }
A〕7 10 13 B〕7 7 7
C〕7 9 11 D〕7 8 9
40、
15.假设有如下定义:
int a[3][3]={1,2,3,4,5,6,7,8,9},i ;
那么以下语句的输出结果是: 。
for (i=0;i<=2;i++) printf(“%d〞,a[i][2-i]);
A〕3 5 7 B〕3 6 9
C〕1 5 9 D〕1 4 7
二、判断题〔本大题10分,每题1分〕
1.C语言本身没有输入输出语句,输入输出操作都是通过调用库函数来实现的。〔 〕
2.在C语言中,int、char和short三种类型数据在内存中所占用 41、的字节数都是由用户自己定义的。〔 〕
3.在C程序中一行内可以写几个语句,一个语句可以分写在多行上。因此,并不是每一条C语句都必须有一个分号的。〔 〕
4.在C语言的if语句中,用作条件判断的表达式只能是关系和逻辑表达式。〔 〕
5.在C语言中break和continue都是循环中途退出语句,其中break语句用来跳出一层循环构造;continue语句用来完毕一次循环。〔 〕
6.C语言中while和do-while循环的主要区别是while语句的循环体至少会被执行一次,而do-while语句的循环体那么可能一次也不执行。〔 〕
7.数组首地址不仅能通过数组中第一个元素的地 42、址表示,也可以通过数组名来表示。〔 〕
8.在C语言中,只有在两个字符串所包含的字符个数一样时,才能比拟大小。如字符串“That〞与“The〞就不能进展大小比拟。〔 〕
9.函数的返回值类型是由函数的类型和return语句中表达式的类型共同决定的,当这两类型不一致时最终起决定作用的是return中表达式的类型。〔 〕
10.定义指针变量时指定的类型称为基类型,基类型是指针变量所指向变量的类型,因此指针变量被定义之后都只能指向某一类型的变量。〔 〕
三、程序填空题〔本大题12分,每题2分〕
1.输入一个字符,如果是大写字母,那么把其变成小写字母;如果是小写字母,那么变成大写字母 43、其它字符不变。请填空:
main( )
{ char ch;
scanf(“%c〞,&ch);
if ( 〔1〕 ) ch=ch+32;
else if(ch>’a’&&ch<‘z’) (〔2〕);
printf〔〞%c\n〞,ch〕; }
2. 以下程序是求矩阵a , b的和,结果存入矩阵c中并按矩阵形式输出。请填空:
main( )
{ int a[3][4] = { { 7, 5, -2, 3 },{ 1, 0, -3, 4 },{ 6, 8, 0, 2 } };
int b[3][4] = { { 5 44、 -1, 7, 6 },{ -2, 0, 1, 4 },{ 2, 0, 8, 6 } };
int i, j, c[3][4];
for ( i=0; i<3; i++ )
for ( j=0; j<4; j++ )
c[i][j] = ___〔3〕____ ;
for ( i=0; i<3; i++ )
{ for ( j=0; j<4; j++ )
printf ( “%3d〞, c[i][j] ) ;
____〔4〕___ ; }
}
3.以下程序使用递归法求n!,请填空:
float fac( int n)
{ float 45、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( )
{ 46、 float a=3.14, b=3.14159;
printf(“%f, %5.3f\n〞,a,b); }
2.main( )
{ char a[5][5],i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i==0 ||i+j==4)
a[i][j]='*';
else a[i][j]=' '; for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%c",a[i][j]);
printf("\n"); } }
3.mai 47、n( )
{ 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(“%d\n〞, 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.#i 48、nclude 49、
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 (0 x<10)
x- (x 10)
2.假设有如下公式:
+ + +。。。。。。。+
试根据 50、上述公式编程计算 的近似值
〔准确到10-6〕。
3.编一程序,首先将一个包含10个数的数组按照升序排列,然后将从一指定位
置m开场的n个数按照逆序重新排列,并将新生成的相互组输出。要求使用指
针控制方法实现上述功能。
模拟试题四
一、选择题〔本大题30分,每题2分〕
1.在C语言中,反斜杠符是 。
A〕\n B〕\t C〕\v D〕\ \
2.表达式 18/4*sqrt(4.0)/8值的数据类型为 。
A〕int B〕float C〕double D〕不确定
3.设整型变量a值为9,那么以下






