资源描述
试卷一
(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
第一部分:基础知识(20项,共40分)
1.一个C语言程序是由( ) 组成的。
A.主程序 B.子程序 C.函数 D.过程
2.转换说明符%x的输出形式是( )。
A.十进制 B.八进制 C.十六进制 D.二进制
3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b)
printf ( “ ------------“) ;的正确说法是( ) 。
A.循环体只执行一次 B.死循环
C.循环体一次也不执行 D.输出-----------
4.若x、y、z均为int 型变量,则执行下列语句后的z值为 ( )。
x=1; y=2; z=3; z=(x>y)?z :y ; z = (z<y)?z:x;
A.1 B.4 C.2 D.3
5.下面标识符中,合法的用户标识符为( )。
A.P#Ad B.12a C.char D._int
6. ‘A’ + 3 的结果是( )。
A.’A’ B.’D’的ASCⅡ码 C.65 D.3
7.语句char str[20];说明str是一个字符串,最多能表示 ( ) 。
A.20个字符 B.19个字符 C.18个字符 D.21个字符
8.将int 型变量n转换成float型变量的方法是 ( )。
A.float n B.(float)n C.float(n) D.21个字符
9.以下不正确的描述是 ( )。
A. 使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成
B. while循环是先判断表达式后执行循环体语句
C. do-while和for循环均是先执行循环体语句,后判断表达式
D. for、while、do-while循环中的循环体均可以由空语句构成
10.在循环中使用break 语句的功能是( )。
A. 使程序的执行跳出break所在的那一重循环
B. 使程序执行结束
C. 跳出包含此break语句的所有循环
D. 终止本次循环,继续下次循环
11.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是( )。
A.*pz B.a C.px D.&a
12.若指针 px为空指针,则 ( )。
A.px指向不定 B.px的值为零
C.px的目标为零 D.px的地址为零
13.对于语句int *px[10],以下说法正确的是( ) 。
A. px是一个指针,指向一个数组,数组的元素是整数型。
B. px是一个数组,其数组的每一个元素是指向整数的指针。
C. A和B均错,但它是C语言的正确语句。
D. C语言不允许这样的语句。
14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是 ( ) 。
A.P = Y B.*P = Y[i]
C.P + &Y[i] D.P = &Y
15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式 *(p[0]+1)+**(q+2)的值是( )。
A.5 B.4 C.6 D.7
16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是( )。
A.*S1++=*S2++ B.S1[n-1]=S2[n-1]
C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)
17.调用函数的实参与被调用函数的形参应该有如下关系( ) 。
A.只要求实参和形参个数相等 B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同 D.上述三点均需具备
18.联合体成员的数据类型 ( )。
A.相同 B.可以不同也可以相同
C.长度一样 D.是结构体变量
19.由系统分配和控制的标准输出文件为( ) 。
A.键盘 B.磁盘 C.打印机 D.显示器
20.C语言标准库函数fread(fd,buffer,n)的功能是( )。
A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域
B.从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域
C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域
D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域
第二部分:简单程序(12项,共30分)
21.下列程序
main()
{ int x,y,z;
x=y=2;z=3;
y=z++-1;
printf(“%d\t%d\t”,x,y);
y=++x-1;
printf(“%d \t%d\n”,x,y);
y=z---1;
printf(“%d\t%d\t”,z,y);
y=--z-1;
printf(“%d\t%d\n”,z,y);
}
运行后输出的数据为¬¬¬_______。
A. 3 1 4 2 B. 3 1 3 3 C. 2 2 3 2 D. 2 1 3 2
2 4 1 3 2 4 2 2 3 3 2 1 1 3 1 2
22.下列程序
main()
{ int i,j;char *a,c;
a=”computer”;
printf(“%s”,a);
for(i=0,j=7;i<j;i++,j--)
{ c=a[i];
*(a+i)=*(a+j);
a[j]=c;
}
printf(“->%s\n”,a);
c=a[j-1,i=2+j];
printf(“a[%d]=%c\n”,i,c);
}
运行后输出的数据为___ .
A. computer->computer B. computer->retupmoc
a[3]=u a[5]=m
C. computer->retupmoc D. computer->retupmoc
a[4]=p a[2]=t
23.下列程序
int sum(int n)
{ int p=1,s=0,i;
for(i=1;i<=n;i++) s+=(p*=i);
return s;
}
main()
{ printf(“sum(5)=%d\n”,sum(5));
}
运行后输出的数据为_ ___
A.sum(5)=151 B.sum(5)=152 C.sum(5)=153 Dsum(5)=155
24.下列程序
main()
{ static int a[]={5,6,7,3,2,9};
int s1,s2,i,*ptr;
s1=s2=0;
ptr=&a[0];
for(i=0;i<5;i+2=2)
{ s1+=*(ptr+i);
s2+=*(ptr+i+1);
}
printf(“s1=%d,s2=%d\n”,s1,s2);
}
运行后输出的数据为_____
A.s1=18,s2=14 B.s1=14,s2=32 C.s1=14,s2=18 D.s1=15,s2=19
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n”,a,b,c);
func();
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{ static int a=4;int b=10;
a+=2;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运行后输出的数据为_ ___.
A. a=5 b=6 c=1 B. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=5 b=6 c=11 a=5 b=6 c=11
a=8 b=31 c=21 a=9 b=17 c=21
C. a=5 b=6 c=1 D. a=5 b=6 c=1
a=6 b=21 c=11 a=7 b=17 c=11
a=6 b=21 c=11 a=7 b=17 c=11
a=8 b=31 c=21 a=9 b=38 c=21
26.已知
struct student
{char ﹡name;
int student_n;
char grade;
};
struct student temp,*p=&temp;
temp.name=”chou”;
则下面不正确的是_______。
表达式 值
A.p→name chou
B.(*p)→name+2 h
C.*p→name+2 e
D.*(p→name+2) o
27.下列程序
#define MAX 10
main()
{ int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10};
sum=1;
for(i=0;i<MAX;i++)
sum-=a[i];
printf(“SUM=%d”,sum);
}
程序运行结果是:
A.SUM=55 B.SUM=-54 C.SUM=-55 D.SUM=54
28.下列程序
void inv(int*x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;i<p;i++,j--)
{ t=*i;
*i=*j;
*j=t;
}
return;
}
main( )
{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
程序运行结果:
A.0,2,3,4,5,6,7,7,9,11 B.11,9,7,7,6,5,4,3,2,0
C.3,7,9,11,0,6,7,5,4,2 D.2,4,5,7,6,0,11,9,7,3
29.下列程序
main()
{ int a[10],b[10],*pa,*pb,i;
pa=a;pb=b;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
}
printf(“\n”);
pa=&a[0];
pb=&b[0];
for(i=0;i<3;i++)
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);
}
}
运行后输出的数据为______。
A. 0 0 B.0 0 C. 0 0 D. 0 0
1 2 1 2 1 2 2 2
2 4 2 4 2 4 2 4
0 0 0 0 0 0 0 0
2 2 2 2 1 2 1 2
4 8 2 4 2 4 4 8
30.下列程序
copy_string(from,to)
char *from,*to;
{ while(*from) *to++=*from++;
*to=’\0’;
}
main()
{ static char s1[ ]=”c_program.”;
static char s2[80];
copy_string(s1,s2);
printf(“%s\n”,s2);
copy_string(“123”,s2);
printf(“%s\n”,s2);
}
运行后输出的数据为( )。
A. c_program 123 B.123 C. c_program123 D. c_program
123
31.下列程序:
#include <stdio.h>
main()
{ char a[40],b[40];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=j=0;
while(a[i]!=’\0’)
{ if(!(a[i]>=’\0’&&a[i]<=’9’))
{ b[j]=a[i]; j++;
}
++i;
}
b[j]=’\0’;
printf(“%s”,b);
}
运行后输出的结果是( ) 。
A. 把键盘输入的字符串显示在屏幕上
B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串
C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串
D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串
32.下列程序
#include<stdio.h>
main()
{ char a[80];
int i,j;
printf(“Enter the string:”);
scanf(“%s”,a);
i=0;
while(a[i]!=’\0’)
{ if(a[i]>=’A’&&a[i]<=’Z’)
a[i]=a[i]-‘A’+’a’;
}
printf(“%s”,a);
}
运行后输出的结果是( )。
A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。
B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。
C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。
D. 把键盘输入的字符串原封不动地显示在屏幕上。
第二卷
说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。
(2)每空栏填对得3分,两大题共10个空栏,全填对得30分。
试题一
一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。
程序如下:
main()
{ int n,k,a,b,c;
for(k=1; ;k++)
{______①______
if(n<100) _____②_____
if(n<999) _____③_____
a=n/100;
b=_____④_____
c=n%10,
if(flag(a,b,c))
printf(“n=%d=%d*%d\n”,n,k,k);
}
}
flag_____⑤_____
{ return(!(x-y)*(x-z)*(y-z));
}
试题二
以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符数组s2中。
说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。
下列程序运行的结果是输出:
ABCXYZdefg abABCXYZd abab
程序如下:
replace(char *s1,char *s2,char *str1,char *str2)
{ char *t0,*t1,*t2;
while( ⑥ )
{ for(t0=s1,t1=str1;*t1!=’\0’&& ⑦ ;t0++,t1++);
if(*t1!=’\0’)
*s2++= ⑧ ;
else { for(t1=str2;*t1!=’\0’;)
*s2++= ⑨ ;
⑩ ;}
}
*s2=’\0’;
}
main()
{ char s1[]=”abcdefg ababcd abab.”;
char s2[80];
replace(s1,s2,”abc”,”ABCXYZ”);
printf(“%s\n”,s2);
}
试卷2
(本试卷包括第一卷和第二卷,答卷时间总共120分钟)
第一卷
说明:(1)第一卷全部为选择题,每题可供选择的答案中,只有一个正确答案。
(2)答本卷的题目时,要在标准答题纸上编号对应的栏口中,用铅笔将正确答案涂黑。在试题上直接勾划不得分。
(3)本卷共分70分,其中第1—26题每题2分,第27—32题每题3分。
第一部分:基础知识(20题,共40分)
1、一个C语言的源程序中,( ) 。
(A)必须有一个主函数 (B)可以有多个主函数
(C)必须有主函数和其他函数 (D)可以没有主函数
2、下列数据中,为字符串常量的是( ) 。
(A)‘A’ (B)“house” (C)How do you do. (D)’$abc’
3、若有定义:int a=8,b=5,c;,执行语句c=a/b十0.4;后,c的值为( ) 。
(A)1.4 (B)1 (C)2.0 (D)2
4、设有int x=11;则表达式(x++*l/3)的值为( )。
(A)3 (B)4 (C)11 (D)12
5、执行x=5>1+2&&2||2*4<4-!0后,x的值为( )。
(A)-l (B)O (C)1 (D)5
6、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子:(x)/(y×z)的c语言表达式是( )。
(A)x/y*z (B)x*(1/(y*z)) (C) x/y*1/z (D)x/y/z
7、设有以下说明语句
struct ex
{int x;float y; char z;}example;
则下面的叙述不正确的是( )。
(A)struct是结构体类型的关键字 (B)example是结构体类型名
(C)x,y,z都是结构体成员名 (D)struct ex是结构体类型
8、假定w、x、y、z、m均为int型变量;有如下程序段:
w=1;x=2;y=3;z=4;
m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z;
则该程序段执行后,m的值是( )。
(A)4 (B)3 (C)2 (D) 1
9、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ) 。
(A) 地址传递 (B) 单向值传递
(C) 由实参传给形参,再由形参传回实参 (D) 传递方式由用户指定
10、以下定义语句中,错误的是 ( )。
(A)int a[]={1,2}; (B) char *a[3];
(C)char s[10]="text"; (D) int n=5,a[n];
11、下列程厅执行后的输出结果是( ) 。
main()
{ char arr[2][4]; strcpy(arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s\n",arr);
}
(A)you&me (B)you (C) me (D)err
12、标有/* */的语句的执行次数是( )。
int y,i;
for(i=O;i<20;i++)
{ if(i%2==0)
continue;
y+=i; /* */
}
(A) 20 (B) 19 (C) 10 (D) 9
13、若用数组名作为函数调用的实参,传递给形参的是( )。
(A) 数组的首地址 (B) 数组第一个元素的值
(C) 数组中全部元素的值 (D) 数组元素的个数
14、下列语句执行后的结果是( )。
y=5;p=&y;x=*p++;
(A) x=5,y=5 (B) x=5,y=6 (C) x=6,y=5 (D) x=6,y=6
15、执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为 ( )。
int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;
(A) 8 (B) 7 (C) 6 (D) 5
16、经过下面的语句后
int i,a[10],*p;
定义后,下列语句中合法的是 ( )。
(A) p=100: (B) p=a[5]; (C) p=a+2; (D) p=&(i+2);
17、若有以下说明和语句,则对pup中sex域的正确引用方式是( )。
struct pupil
{char name[20];
int sex;
}pup,*p;
p=&pup;
(A)p.pup.sex (B)p->pup.sex (C)(*p).pup.sex (D)(*p).sex
18、若已定义了如下的共用体类型变量x,则x所占用的内存字节数为( ) 。
union data
{ int i;
char ch;
double f;
}x;
(A) 7 (B) 11 (C)8 (D) 10
19、若有下面的说明和定义:
struct test
{ int m1;char m2;float m3;
union uu{ char u1[5];int u2[2];}ua;
} myaa;
则sizeof(struct test)的值是 ( ) 。
(A) 12 (B) 16 (C) 14 (D)9
20、若要打开:A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是( ) 。
(A)fopen("A:\\user\\abc.txt","r") (B) fopen("A:\\user\\abc.txt","r+")
(C)fopen("A:\\user\\abc.txt","rb") (D) fopen("A:\\userl\\abc.txt","w")
第二部分:简单程序(12题,共30分)
21、以下程序的运行情况是( ) 。
main()
{int i=1,sum=0;
while(i<10)
sum=sum+1;
i++;
printf("i=%d,sum=%d",i,sum);
}
(A) i=10,sum=9 (B) i=9,sum=9 (C) i=2,sum=l (D) 运行出现错误
22、若输入B,以下程序的运行结果为( ) 。
main()
{ char grade; scanf("%c",&grade);
switch(grade)
{case 'A':printf(">=85");
case 'B':
case 'C':printf(">=60");
case 'D':printf("<60");
default:printf("error");}
}
(A)>=85 (B)>=60 (C)>=60<60error (D) error
23.有如下程序 main()
{ int x=23;
do
{ printf("%d",x--);}while(!x);
}
该程序的执行结果是( ) 。
(A)321 (B)23 (C)不输出任何内容 (D)陷入死循环
24.有如下程序
int func(int a,int b)
{ return (a+b);}
main()
{int x=2,y=5,z=8,r;
r=func(func(x,y),z); printf("%d\n",r);
}
该程序的输出结果是 ( ) 。
(A) 12 (B) 13 (C)14 (D)15
25.以下程序的输出结果是( ) 。
main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=10) break;
if(b%3==1)
{ b+=3;continue;}
}
printf("%d\n",a);
}
(A)101 (B) 6 (C)5 (D)4
26.以下程序的输出结果是( ) 。
int a,b;
void fun()
{ a=100;b=200;}
main()
{ int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}
(A) 100200 (B)57 (C)200100 (D)75
27.下面的程序执行后,文件test.t中的内容是 ( ) 。
#include <stdio.h>
void fun(char *fname,char *st)
{ FILE *myf; int i;
myf=fopen(fname,"w");
for(i=0;i<strlen(st);i++)fputc(st[i],myf);
fclose(myf);
}
main()
{ fun("test.t","new world");fun("test.t","hello,");}
(A) hello, (B)new,worldhello (C) new,world (D)hello,rld
28.以下程序的运行结果是( ) 。
#include <stdio.h>
main(){
static char s[30]="abcdefg";
static char t[]="abcd";
int i,j;
i=0;
while(s[i]!='\0')
i++;
j=0;
whi1e(t[j]!='\0')
{ s[i+j]=t[j];
j++; }
s[i+j]='\0';
printf("%s\n",s);
}
(A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序
main()
{ char ch[2][5]={"6937","8254"},*p[2];
int i, j, s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
该程序的输出结果是( ) 。
(A)69825 (B)63825 (C)6385 (D)693825
30.若已建立如下图所示的单向链表结构
在该链表中,指针p,s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是( ) 。
(A) p=p->next;s->next=p;p->next=s;
(B) p=p->next;s->next=p->next;p->next=s;
(C) s->next=NULL;p=p->next;p->next=s
(D) p=(*p).next;(*s).next=(*p).next; (*p).next =s;
31.请选择正确的运行结果填入( ) 中。
include <stdio.h>
int x,y;
num()
{
int a=15,b=10;
int x,y;
y=a-b;
y=a+b;
return;
}
main()
{ int a=7,b=5;
x=a+b;
y=a-b;
num(); printf("%d,%d\n",x,y);
}
(A) 12,2 (B) 5,25 (C)2,12 (D)不确定
32.以下程序的输出结果是( ) 。
#define M(x,y,z) x*y+z
main()
{ int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+a)); }
(A)19 (B)17 (C)15 (D)12
第二卷
说明:(1)第二卷含两大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。
(2)每空栏填对得3分,两大题共10个空栏,全对得30分。
试题一:
有一函数,实参传来一个字符串,统计此字符串中字母、数字、空各和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
int letter,digit,space,others; /*是全局变量*/
main()
{int count(char _____(1)_____);
char text[80];
printf("\nlnput string:\n");
____(2)___;
printf("string:");
puts(text);
letter=O;
digit=O;
space=O;
others=O;
_____(3)_____;
printf("letter:%d,digit:%d,space:%d,other:%d\n",letter,digit,
space,others); }
int count(char str[])
{int i;
for(i=O;str[i]!='\0';i++)
if((____(4)____>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
letter++; else if(str[i]>='0'&&str[i]<='9')
digit++;
else if(str[i]=
展开阅读全文