资源描述
6月份《C语言等级考试》模拟试卷集成
一、选择题部分
二、改错题部分
三、填空题部分
四、编程题部分
一、选择题
1、有关C语言数据类型的论述,正确的是(C)。
A)枚举类型不是基本类型 B)数组不是结构类型
C)变量必须先定义后使用 D)不允许使用空类型
2、下面有关C语言用户标识符的描述,正确的是(D)。
A)不辨别大小写 B)用户标识符不能描述常量
C)类型名也是用户标识符 D)用户标识符能够作为变量名
3、下面论述正确的是(b)。
A)2/3与2.0/3.0等价 B)(int)2.0/3与2/3等价
C)++5与6等价 D)’A’与”A”等价
4、已知char a;使用scanf()函数输入一个字符给变量a,不正确的函数调用是(B)。
A)scanf(“%d”,&a); B)scanf(“%lf”,&a);
C)scanf(“%c”,&a); D)scanf(“%u”,&a);
5、下面论述中,(A)不是结构化程序设计三种基本结构的共同特点。
A)先判断后执行 B)单入口,单出口
C)程序中没有执行不到的语句 D)无死循环
6、已知int a=3, b=5; 则体现式 a &&( ! b) 的值为(C)。
A)3 B)2 C)0 D)1
7、已知char a=’R’; 则正确的赋值体现式是(A)。
A)a=(a++)%4 B)a+2=3 C)a+=256-- D)a=’\078’
8、如下的语句中,无内嵌的if语句是(B)。
A)if(x= =y) x+=y;
B)if(x>y && x!=y);
x+=y;
C)if(x!=y)
scanf(“%d”,&x);
else
scanf(“%d”,&y);
D)if(x<y)
{x++;y++;}
9、设有整型变量x,下述语句(B)不会出现死循环。
A)for( ; ; x+=1) B)for( ; (x=getchar())!=’\n’; ) ;
C)while(1) {x++ ;} D)for(x=10; ;x--) ;
10、下列数组申明中,正确的是(A)。
A)int a[5]={0}; B)int a[]={0 1 2};
C)int a[5]=0; D)int a[] ;
11、如下数组定义中,正确的是(D)。
A)int a[2][3]={1,2,3,4,5,6,7}; B)int a[][]={{1,2,3},{4,5,6},{7,8,9}};
C)int a[2][]={1,2,3,4,5,6}; D)int a[][4]={6};
12、设有如下数组定义:
char str[8]={“FuJian”};
则分派给数组str的存储空间是(C)字节。
A)6 B)7 C)8 D)9
13、如下程序的运行成果是(A)。
int fun(int array[4][4])
{int j;
for(j=0;j<4;j++) printf(“%2d”,array[2][j]);
printf(“\n”);
}
main()
{int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};
fun(a);
}
A)2 0 0 5 B)1 0 0 4
C)0 1 2 0 D)0 4 5 0
14、若有如下宏定义,
#define MOD(x,y) x%y
则执行如下程序段后,z的值是(D)。
int z,a=15,b=100;
z=MOD(b,a);
A)100 B)15
C)11 D)10
15、对于基类型相同的两个指针变量之间,不能进行的运算是(C)。
A)< B)=
C)+ D)-
16、若函数fun的函数头为:
int fun(int i,int j)
且函数指针变量p定义如下:
int (*p)(int i,int j);
则要使指针p指向函数fun的赋值语句是(B)。
A)p=*fun(); B)p=fun;
C)p=fun(i,j); D)p=&fun;
17、设有如下定义语句:
struct student
{int num;
char name[10];
float score;
}wang,zhang;
则不正确的论述是(C)。
A)struct是结构体类型的核心字 B)zhang是结构体变量名
C)wang是结构体类型名 D)num,name,score都是结构体类型student的组员名
18、若有如下定义:
struct link
{int data;
struct link *next;
}*head,*p;
并已建立如下图所示的链表结构:
data NULL
data next
data next
……
head
指针p指向如下结点:
data next
p
则能够把p所指结点插入到链表中成为链表第2个结点的程序段是(A)。
A)p->next=head->next;head->next=p;
B)head->next=p;p->next=head->next;
C)p.next=head.next;head.next=p;
D)(*head).next=p;(*p).next=(*head).next;
19、设有如下定义:
typedef int *INTEGER;
INTEGER p,*q;
则(B)是正确的论述。
A)p是int型变量 B)q是基类型为int的指针变量
C)p是基类型为int的指针变量 D)程序中可用INTEGER替代int类型名
20、如下程序的可执行文献名是file.exe。
main()
int argc;
char *argv[];
{int i;
for(i=2;i<argc;i++)
printf(“%s%c”,argv[i],(i<argc-1)?’ ‘: ‘\n’);
}
在DOS命令行输入:file My C Language and Programming<回车>,其输出成果是(A)。
A)C Language and Programming B)My C Language and Programming
C)MyCLanguageandProgramming D)file My C Language and Programming
21、在C语言源程序中,如下论述正确的是(C)。
A)main函数必须位于文献的开头 B)每行只能写一条语句
C)程序中的一个语句能够写成多行 D)每个语句的最后必须有点号
22、下面有关算术运算符的论述,错误的是(A)。
A)其运算对象不包括函数
B)%(模运算符)的运算对象只能为整型量
C)算术运算符的结合方向是“自左至右”
D)自加和自减运算符的结合方向是“自右至左”
23、下面论述中,(A)不是结构化程序设计中的三种基本结构之一。
A)数据结构 B)选择结构
C)循环结构 D)次序结构
24、已知 double a=5.2; 则正确的赋值体现式是(A)。
A)a+=a-=(a=4)*(a=3) B)a=a*3=2
C)a%3 D)a=double(-3)
25、逻辑运算符的优先级依次为(C)。
A)|| && ! B)&& || !
C)! && || D)! || &&
26、对于整型变量x,与while(!x) 等价的是(B)。
A)while(x!=0) B)while(x= =0)
C)while(x!=1) D)while(~ x)
27、下列数组申明中,正确的是(A)。
A)int a[10]; B)int n=10,a[n];
C)int N=10;int a[N]; D)int n;scanf(“%d”,&n);int a[n];
28、有如下定义:
char str[6]={‘a’,’b’,’\0’,’d’,’e’,’f’};
则语句:
printf(“%s”,str);
的输出成果是(D)。
A)ab\ B)abdef
C)ab\0 D)ab
29、执行如下程序段的输出成果是(B)。
int a=10,*p=&a;
printf(“%d”,++(*p));
A)10 B)11
C)变量a的地址 D)变量a的地址+1
30、若有如下程序段,且0≤i<4,0≤j<3,则不能正确访问a数组元素的是(D)。
int i,j,(*p)[3];
int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12};
p=a;
A)*(*(a+i)+j) B)p[i][j]
C) *(p+i) [j] D)p[i]+j
31、若有如下定义:
struct link
{int data;
struct link *next;
}*head,*p;
并已建立如下图所示的链表结构:
p
data NULL
data next
data next
……
head
则能保存链表其他结点,而删除P所指向结点的程序段是(A)。
A)head->next=p->next;free(p)
B)head->next=p;p->next=head->next;free(p);
C)free(p);head->next=p;p->next=head->next;
D)free(p);head->next=p->next;
32、假定已经有如下变量阐明和枚举定义:
char ch;
int j,k;
enum day{sun,mon,tue,wed,thu,fri,sat};
int a[sat]
判断下列语句是否符合语法规则,成果是(C)。
char a; /*语句1 */
j+k=j; /*语句2 */
if(a[mon]>0) j++; /*语句 3 */
A)语句2错误,其他正确 B)语句1正确,其他错误
C)语句3正确,其他错误 D)语句1错误,其他正确
33、如下(D)是正确的常量。
A)E-5 B)1E5.1
C)’a12’ D)32766L
34、标准函数fgets(s,n,f)的功效是(B)。
A)从文献f中读取长度为n的字符串存入指针s所指的内存
B)从文献f中读取长度不超出n-1的字符串存入指针s所指的内存
C)从文献f中读取n个字符串存入指针s所指的内存
D)从文献f中读取长度为n-1的字符串存入指针s所指的内存
35、有关C语言的源程序的论述中,错误的是(C)。
A)C语言的源程序由函数组成
B)main函数能够书写在自定义函数之后
C)必须包括有输入语句
D)一行能够书写多个语句
36、下面论述正确的是(A)。
A)制类型转换运算的优先级高于算术强运算
B)若a和b是整型变量,(a+b)++是合法的
C)’A’*’B’是不合法的
D)”A”+”B”是合法的
37、设有如下语句,则(D)是对a数组元素的不正确引用,其中0≤i<10。
int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A)a[p-1] B)*(&a[i])
C)p[i] D)*(*(a+i))
38、结构化程序设计不包括(A)。
A)最优化 B)自顶而下,逐渐细化
C)模块化设计 D)结构化编码
39、已知 int a=3,b=5; 则体现式 a= =3 && b !=1的值为(C)。
A)3 B)5
C)1 D)0
40、已知 int a[10]; 则对a数组元素引用不正确的是(A)。
A)a[10] B)a[3+5]
C)a[10-10] D)a[5]
41、有如下定义
int a[][3]={1,2,3,4,5,6,7,8};
则数组a的行数是(B)。
A)2 B)3
C)4 D)无法确定的
42、设有如下变量定义:
char str1[]=”string”, str2[8],*str3, *str4=”string”;
(A)是正确的。
A)strcpy(str1,”china”); B)str2=”china”;
C)strcpy(*str3,”china”); D)strcpy(str4[0],”china”);
43、如下fun函数的类型是(C)。
fun(float x)
{double y; int z;
y=x*x;
z=(int)y;
return(z);
}
A)void B)double
C)int D)float
44、如下论述中,正确的是(A)。
A)宏展开不占用运行时间,只占用编译时间
B)预编译处理命令行必须以分号结束
C)一个源程序只能有一个预编译处理命令行
D)使用带参数的宏定义时,应当阐明每个参数的数据类型
45、设有如下变量定义:
char aa[ ][3]={‘a’,’b’,’c’,’d’,’e’,’f’};
char (*p)[3]=aa;
则如下程序段的运行成果是(D)。
p++;
printf(“%c”,**p);
A)a B)b
C)c D)d
46、设有如下定义语句:
struct student
{int num;
char name[10];
float score;
}wang,zhang;
则变量wang所占的内存字节数是(B)。
A)14 B)16
C)18 D)20
47、若有如下定义:
struct link
{int data;
struct link *next;
}a,b,c,*head,*p;
其中,指针head指向变量a,p指向变量c,a.next指向变量b,链表结构如下图所示:
a b c
data next
data NULL
data next
head p
则能够把c插入到a和b之间并形成新链表的程序段是(D)。
A)a.next=c; c.next=b; B)head.next=p; p.next=head.next;
C)head->next=&c;p->next=head->next; D)(*head).next=p; (*p).next=&b;
48、设有如下定义:
typedef int *INTEGER;
INTEGER p,*q;
则(b)是正确的论述。
A)p是int型变量 B)q是基类型为int的指针变量
C)p是基类型为int的指针变量 D)程序中可用INTEGER替代int类型名
49、已知int a=’R’; 则正确的体现式是(A)。
A)a%10 B)a=int(3e2)
C)2*a=a++ D)a=a+a=a+3
50、C语言对if嵌套语句的要求:else总是与(B)配对。
A)第一个if B)之前最近的且尚未配正确if
C)缩进位置相同的if D)之前最近的if
51、设有如下函数定义:
int fun(char *str)
{char *p=str;
while (*p != ‘\0’) p++;
return (p-str);
}
则如下语句执行后的输出成果是(A)。
printf(“%d\n”,fun(“Student”));
A)7 B)8
C)9 D)10
52、设有如下定义语句:
union u_type
{int i;
double x;
float f;
};
struct str_type
{char str[100];
union u_type u[2];
}
则语句 printf(“%d”,sizeof(struct str_type)); 的输出成果是(B)。
A)100 B)116
C)120 D)200
53、对于整型变量x,下述if语句(B)与赋值语句:
x=x%2= =0?1:0;
不等价。
A)if(x%2!=0) x=0;else x=1; B)if(x%2) x=1;else x=0;
C)if(x%2= =0) x=1;else x=0; D)if(x%2= =1) x=0;else x=1;
54、对于整型变量x和y,语句
for(x=0,y=0;(y!=123)&&(x<4);x++) y++;
中的“y++;”被执行(A)。
A)4次 B)0次
C)123次 D)3次
55、如下(D)是正确的变量名。
A)5f B)if
C)f.5 D)_f5
56、设有如下程序段:
int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
s=s+a[i][j];
则执行该程序段后,s的值是(C)。
A)0 B)1
C)2 D)3
57、如下论述中,正确的是(B)。
A)“#define PRICE=30”定义了与30等价的符号常量PRICE
B)预编译处理命令行都必须以“#”开头
C)宏名只能包括大写字母和数字字符
D)在程序的一行上能够书写几个有效的宏定义
58、对枚举类型进行定义,不正确的是(A)。
A)enum b{1,2,3}; B)enum a{A,B,C};
C)enum c{D=3,E,F}; D)enum d{X=0,Y=5,Z=9};
59、如下程序的功效是(C)。
#include <stdio.h>
main()
{FILE *fp;
long int n;
fp=fopen(“wj.txt”,”rb”);
fseek(fp,0,SEEK_END);
n=ftell(fp);
fclose(fp);
printf(“%ld”,n);
}
A)计算文献wj.txt的起始地址 B)计算文献wj.txt的终止地址
C)计算文献wj.txt内容数 D)将文献指针定位到文献末尾
的字节
(如下红色字体为答案)
二、改错题
注意:(1)修改程序在每对“/**/”之间存在的错误;
(2)不得删改程序中所有的“/**/”注释和其他代码;
(3)完成修改后务必以原文献名保存程序,并运行该程序;
(4)源程序存储在KS文献夹下,须先运行Turbo C 再调用对应源程序文献。
(5)按Alt+Tab键,切换题目与Turbo C;按Alt+Enter键,切换Turbo C窗口大小。
1、程序cmody031.c的功效是:从键盘上输入两个整数,及一个运算符(+、-、*、/ 或%),进行对应的运算后输出运算的成果。
如输入:1+2
将输出:1+2=3
#include <stdio.h>
#include <conio.h>
void main()
{ int m,n,result,flag=0;
/**/ char ch, /**/ /**/char ch; /**/
clrscr();
printf("Input an expression: ");
scanf("%d%c%d",&m,&ch,&n);
/**/ switch ch /**/ /**/ switch(ch) /**/
{ case '+': result=m+n; break;
case '-': result=m-n; break;
case '*': result=m*n; break;
case '%': result=m%n; break;
case '/': result=m/n; break;
default: { printf("Error!\n"); flag=1; }
}
if (!flag) printf("%d %c %d = %d\n",m,ch,n,result);
getch();
}
2、程序cmody032.c的功效是:输出201~300之间的所有素数,统计总个数。
#include <stdio.h>
#include <math.h>
void main()
{ int num;
printf("\n");
num=fun();
printf("\nThe total of prime is %d",num);
getch();
}
int fun()
{ int m,i,k,n=0;
for(m=201; m<=300;m+=2)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
/**/ if(m/i==0) /**/ /**/ if(m%i= =0) /**/
break;
/**/ if(i==k) /**/ /**/ if(i>=k+1) /**/
{ printf("%-4d",m);
n++;;
if(n%10==0) printf("\n");
}
}
return n;
}
3、程序cmody011.c的功效是:从字符串数组str1中取出ASCII码值为偶数且下标为偶数的字符依次存储在字符串t中。
例如,若str1所指的字符串为:4AZ18c?Ge9a0z!
则t所指的字符串为:4Z8z
注意:数组下标从0开始。
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{ char str1[100], t[200];
int i, j;
/**/ i = 0; /**/ /**/ j = 0; /**/
clrscr();
strcpy(str1, "4AZ18c?Ge9a0z!");
for (i = 0; i<strlen(str1); i++)
{
/**/ if ((str1[i] %2== 0) && (i%2!=0)) /**/ /**/ if ((str1[i] %2== 0) && (i%2==0)) /**/
{
t[j] = str1[i];
j++;
}
}
t[j] = '\0';
printf("\n Original string: %s\n", str1);
printf("\n Result string: %s\n", t);
}
4、程序cmody012.c中,函数fun(int n)的功效是:依照参数n,计算不小于10的最小n 个能被3整除的正整数的倒数之和。例如:
1 1 1 1 1
fun(8)= — + — + — + — + …… + — =0.396
12 15 18 21 33
#include <string.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#define M 50
double fun(int n)
{ double y = 0.0;
int i,j;
j=0;
for(i=1;;i++)
{
/**/ if((i<10)&&(i%3==0)) /**/ /**/ if((i>10)&&(i%3==0)) /**/
{
/**/ y+=1/i; /**/ /**/ y+=1.0/i; /**/
j++;
}
if(j==n) break;
}
return y;
}
void main()
{ clrscr();
printf("fun(8) = %8.3lf\n", fun(8));
}
5、程序cmody021.c输出如下所示图形:
*
***
*****
*******
*********
#include <stdio.h>
void main()
{
/**/ int i; j; /**/ /**/ int i,j; /**/
for (i=1;i<=5;i++)
{
for (j=1;j<=10-2*i;j++) printf(" ");
/**/ for (j=1;j<=5;j++) /**/ /**/ for (j=1;j<=2*i-1;j++) /**/
printf("* ");
printf("\n");
}
}
6、程序cmody022.c的功效是求解百元买百鸡问题:
设一只公鸡2元、一只母鸡1元、一只小鸡0.5元。问一百元买一百只鸡,公鸡、母鸡、小鸡数可分别为多少?有多少种分派方案?
#include <stdio.h>
#include <conio.h>
/**/int fun();/**/ /**/ int fun() /**/
{ int hen,cock,chicken,n=0;
clrscr(); /**/ if((cock+hen+chicken==100)&&(chicken>=0)) /**/
for(cock=0;cock<=50;cock+=1)
for(hen=0;hen<=100;hen=hen+1)
{ chicken=2*(100-hen-2*cock);
/**/ if(cock+hen+chicken=100) /**/
{ n++;
printf("%d-->hen:%d,cock:%d,chicken:%d\n",n,hen,cock,chicken);
if(n==20) getch();
}
}
return n;
}
void main()
{ int num;
num=fun();
printf("\n There are %d solutions.\n",num);
getch();
}
三、填空题
注意:(1)编写程序,补充在每对“/**/”之间的空白处,以完成题目标要求;
(2)不得删改程序中所有的“/**/”注释和其他代码;
(3)完成填空后务必以原文献名保存程序,并运行该程序;
(4)源程序存储在KS文献夹下,须先运行Turbo C 再调用对应源程序文献。
(5)按Alt+Tab键,切换题目与Turbo C;按Alt+Enter键,切换Turbo C窗口大小。
1、补充程序ccon021.c,使其计算满足下式的一位整数A和B的值。
A B
× B A
——————
4 0 3
#include <stdio.h>
void main()
{
int a,b,k;
int plu = /**/ 403 /**/;
for(a=1; a<10; a++)
for(b=1; b<10; b++)
{
k = (a*10+b) * /**/ (b*10+a) /**/ ;
if(k==plu) printf("A = %d, B = %d\n",a,b);
}
}
2、补充程序Ccon022.c,使其实现输入若干整数,统计其中不小于零和小于零的个数。以零结束输入。
#include <stdio.h>
void main()
{
int n,a,b;
/**/
a=0; b=0;
/**/
scanf("%d",&n);
while(/**/ n!=0 /**/)
{
if(n>0) a++;
else /**/ b++ /**/
scanf("%d",&n);
}
printf("Positive integer: %d, negative integer: %d\n",a,b);
}
3、补充程序Ccon023.c,该程序可测试歌德巴赫猜测:从键盘上输入一个不小于6的偶数,总能找到两个素数,使得这两素数之和恰好等于该偶数。
#include <stdio.h>
#include <conio.h>
int prime(int n)
{ int k,flag=1;
for(k=2; k<=n/2+1; k++)
if (n%k==0) { flag=/**/ 0 /**/ ; break;}
return flag;
}
void main()
{ int num, a;
clrscr();
do
{ printf("Please input an even number:");
scanf("%d", &num);
}while(num<=6||num%2==1);
for(a=2;a<=num/2+1;a++)
if(prime(a) && prime(/**/ num-a /**/))
printf("\n %d = %d + %d ", num, a, num-a);
}
4、补充程序Ccon031.c,使其用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。
#include <stdio.h>
#include <math.h>
/**/void main() /**/
{ float x,x0,f,f1;
x=1.5;
do
{ x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
}/**/ while /**/(fabs(x-x0)>=1e-6);
printf("the root is: %.2f\n",x);
}
5、补充程序Ccon032.c,该程序的功效是将输入的一行字符中的大写字母转变为对应的小写字母,小写字母则转变为对应的大写字母,其他字符不变。
#include <stdio.h>
void main()
{ char s[80];
int i;
printf("Please input a string: ");
for(i=0;((s[i]=getchar())!='\n')&&(i<80);i++);
s[i]='\0';
for(i=0;s[i]!='\0';/**/ i++ /**/)
{
if(s[i]>='a'&&s[i]<='z')
s[i]=s[i]-32;
else if(/**/ s[i]>=’A’&&(s[i]<='Z' /**/)
s[i]=s[i]+32;
printf("%c",s[i]);
}
}
6、补充程序Ccon033.c,其中main函数通过调用average函数计算数组元素的平均值。
#include <stdio.h>
float average(int *pa,int n)
{
int k;
/**/ float avg=0.0; /**/
for(k=0;k<n;k++)
avg = avg+/**/
展开阅读全文