第一篇:深大C语言期末考试模拟题1
一、单选题
1.是构成C语言的基本单位。
A.函数B.过程C.子程序D.子例程
2.能正确表示a≥10或a≤0关系表达式的是
A.a>=10 or a<=10B.a>=10 | a<=0C.a>=10 || a<=0D.(a>=10,a<=0)
3.以下是C合法的标识符。
A.A#CB.entryC.voidD.ab*
4.设c1是char类型的变量,则判断c1是否为数字字符的正确表达式是。
A.(c1>=’0’)&&(c1<=’9’)B.(c1>=0)&&(c1<= 9)
C.’0’<=c1<=’9’D.(c1>=’0’)||(c1<=’9’)
5.在C语言中,字符型数据在内存中是以形式存放的。
A.原码B.BCD码C.反码D.ASCII码
6.若有以下类型说明语句:char w;int x;float y;double z,则表达式w*x+z-y结果的类型是:。
A.floatB.charC.intD.double
7.若有int a=0,x=1;则循环语句 while(a<10)x++;a++;循环执行。
A.无限次B.不确定次C.10次D.9次
8.定义int n=5;下面语句的输出结果为。
printf(n%2 ? “AAA”:”BBB”);
A.无输出B.AAAC.BBBD.AAABBB
9.下列语句中,正确的是:
A.int a[3][]={{1},{2}}B.int a[][]={{1,2},{4},{5,6,7}};
C.int a[3][]={{1,2},{4,5}};D.int a[4][3]={{1},{4,2},{0,6,7}};
10.下列定义不正确的是:。
A.int i, *p=i;B.int *p,i;C.int i,*p=&i;D.int i,*p;
11.在C语言程序中,有关函数的描述正确的是。
A.函数的定义可以嵌套,但函数的调用不可以嵌套。
B.一个C语言程序的执行是从函数main开始,直到最后一个函数结束。
C.C语言函数的返回值类型由定义函数时所指定的函数值类型决定。
D.若一个C语言程序由多个函数组成,必须完全按调用顺序书写程序。
12.调用函数时若以数组名(一维数组)作为实参,则实际上传递的是。
A.数组第一个元素值B.数组中所有元素值
C.数组第一个元素地址D.数组元素个数
13.有如下定义“char str1[20]=”Visual”,str2[10]=”C++6.0”;int c;”,调用函数strcat(str1,str2);后,str1的内容是。
A.VisualB.C++6.0C.VisualC++6.0D.C++6.0Visual
14.若定义: char str[3]=”AB”;char *p=str+1;则*(p+1)的值为。
A.”B”B.’B’C.’ ’D.0
15.若有以下定义和语句,不正确的引用方式是:。
Struct person
{ int no;
char name[10];
} stu, *p=&stu;
A.stu.noB.(*p).noC.p->noD.stu->no
16.下列正确的预编译命令是。
A.define PI 3.14159B.#define P(a,b)strcpy(a,b)
C.#define stdio.hD.#define PI 3.14159
17.放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是。
A.struct student {int sno;char name[20];float score;} stu[100];
B.struct student stu[100] {int sno;char name[20];float score;};
C.struct{ int sno;char name[20];float score;} stu[100];
D.struct student {int sno;char name[20];float score};struct student stu[100];
18.在下列语句中,将C定义为文件型指针变量的是。
A.FILE cB.FILE *cC.file cD.file *c
19.若用函数打开一个已存在的文本文件,保留该文件原有数据,且可读可写,文件打开模式是:。
A.”r”B.”w+”C.”a+”D.”a”
二、程序阅读题
1.假定所有变量均已正确定义,则下列程序段运行后y的值是:。
int a=0,y=10;
if(a=0)y=y-1;
else if(a>0)y=y+1;
else y+=y;
A.20B.11C.9D.0
2.定义int n=7下面程序段的执行结果为
switch(n)
{
case 6: n+=2;break;
case 7: n+=3;break;
case 8: n+=4;break;
case 9: n++;
}
printf(“%dn”,n);
A.8B.9C.10D.1
13.下面程序的运行结果是。
#include
main()
{ int y;
for(y=9;y>0;y--)
{ if(y%3!= 0)
continue;printf(“%d”,y);}
printf(“n”);
}
A.369B.963C.875D.246
4.有一函数的定义:void fun(char *s){„„} 不正确的函数调用是。
A.main()B.main()
{char a[20]=”abcdefgh”;{ char a[20]=”abcdefgh”;
fun(a);fun(&a[0]);
…………
}}
C.main()D.main()
{char a[20]=”abcdefgh”;{ char a[20]=”abcdefgh”;
char *p=a;fun(p);fun(a[5]);
…………
}}
5.若输入字符串“Szu!”,程序的运行结果是。
#include
void main()
{char c;
while((c=getchar())!='n')
{if((c>='a' && c<='z')||(c>='A' && c<='Z'))
{ c=c-4;
if(c<'a' && c>='a'-4 || c<'A')c=c+26;
}
printf(“%c”,c);
}
}
A.Wdy!B.Szu!C.Ovq!
6.程序的运行结果是。
#include
void main()
{int f1(int);
int a=1,i;
for(i=0;i<3;i++)
printf(“%d ”,f1(a));
}
int f1(int a)
{auto int b=0;
static c=3;
a=a+1;b=b+1;c=c+1;
return(a+b+c);
}
A.7 8 9B.7 7 7C.8 9 10
7.下列程序的输出结果为。
#include
void main()
{
int a[2][3],b[3][2],i,j;
for(i=0;i<=1;i++)
for(j=0;j<=2;j++)
{a[i][j]=3*i+j+1;D.Wdy!!D.2
4b[j][i]=a[i][j];}
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf(“%2d”,b[i][j]);
printf(“n”);
}
}
A.1 4B.1 2 3C.3 3D.2
5 66
8.下列程序的运行情况为。
#include
int fun(int x)
{
int p;
if(x==0 || x==1)return 3;
p= fun(x-2)+1;
return p;
}
void main()
{
printf(“%dn”,fun(7));
}
A.5B.9
9.下列程序的输出结果为。
#include
void main()
{void f(int *x,int n);
int i,a[5]={2,4,3,1,10};
f(a,5);
for(i=0;i<5;i++)
printf(“%d,”,a[i]);
printf(“n”);
}
void f(int *x,int n)
{int *p,temp,*i,*j,m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{temp=*i;*i=*j;*j=temp;
return
}3 33 63 34 7C.6D.3}
A.2,4,3,1,10B.10,4,3,2,1C.1,2,3,4,10D.10,1,3,4,210.下面程序的功能是。
#include
#include
main()
{FILE *fp;
char str[]=”enjoy”;
int i;
fp=fopen(“study1”,”w”);
for(i=0;i fputc(str[i],fp); fclose(fp); } A.在屏幕上显示“enjoy”B.把“enjoy”存入study1 C.在打印机上打印出“enjoy”D.在屏幕上显示“study1” 三、编程题 1.编写程序,由键盘输入某位同学的百分制成绩,要求: (1)将其转换为等级制输出。转换标准是:90-100分,‘A’,80-89分,‘B’,70-79分,‘C’,60-69分,‘D’,60分以下,‘F’。 (2)如输入的成绩不在0-100之间,提示“输入错误!”。 2.编写程序,实现由键盘输入15个整数,按照由大到小的顺序重新排序,并输出排序后的结果。 3.编写程序:计算5!+7!要求定义一个求阶乘函数(fac),调用函数来完成计算。 4.用结构体存放下表中的学生成绩,计算平均成绩(avg),将表中的数据和avg 此答案为自己所出,若有不对之处请谅解,并希望能留言 单选题(共60题,每题1分,共60分)1.下列符号串中,属于C语言合法标识符的个数为(B)。 _1_2_3,a-b-c,float,9cd,a3b4 A:1 B:2 C:3 D:4 2.下列能为字符变量 a 赋值的是:char a=(C)。 A:'ab' B:“a” C:' ' D:“ ” 3.在下列字符序列中,合法的标识符是(B)。 A:P12.a B:stud_100 C:$water.1 D:88sum 4.下列用于printf函数的控制字符常量中,代表tab的字符常量是(B)。 A:'b' B:'t' C:'r' D:'f' 5.下列用于printf函数的控制字符常量中,代表退格的字符常量是(A)。 A:'b' B:'t' C:'r' D:'n' 6.如有以下程序:unsigned int a=6;int b=-20;char c;c=(a+b>6);则c的值为(C)。(int转换为unsigned) A:6 B:-14 C:1 D:0 7.关于C语言,以下不正确的叙述是(B)。 A:在C语言程序设计中,逗号运算符的优先级最低 B:在C语言程序设计中,var和VAR是两个相 同的变量 C:C语言也支持重载 D:此处的两个语句int a;a=-13.06;在程序编译中将会提示出错 8.若有定义: int a=2,*p;float x=1, y=2;char e=‘w’; 则以下用法不正确的是(B)。 A:printf(“%c”,e+a); B:p=&x; C:a *=y+x; D:x=y=e;9.int x=20;printf(“%dn”,~x);以上程序片段的输出是(B)。 A:235 B:-21 C:-20 D:-11 10.在C语言中,要求运算数必须是整型的运算符是(D)。 A:/ B:++ C:!= D:% 11.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是(结果保留两位小数)(A)。 A:2.50 B:2.75 C:3.50 D:0.00 12.以下运算符中优先级最低的是(C)。 A:&&(第三) B:&(第一) C:||(第四) D:|(第二) 13.设有定义语句:char c1=1,c2=1;,则以下表达式中值为零的是(A)。 A:c1^c2 B:c1&c2 C:~c2 D:c1|c2 14.以下程序的输出结果是 #include unsigned char a,b; a=0x0a|3; b=0x0a&3; printf(“%d %dn”,a,b);}(B)。 A:2 11 B:11 2 C:7 13 D:13 7 15.如果int i = 4, 则printf(“%d”,-i--)结果是__,i的值是。(A) A:-4 3 B:-3 3 C:-3 4 D:-4 4 16.若x=2,y=3则x&y的结果是(B)。 A:1 B:2 C:3 的输出 D:5 17.下列程序的输出是(B)。main(){int x;printf(“%dn”,(x=3*5,x*2,x+10));} A:15 B:25 C:30 D:40 18.若x,i,j和k都是int型变量,则计算下面表达式后,x的值为(C)。x=(i=4,j=16,k=32) A:4 B:16 C:32 D:其他值 19.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(B)。 A:7 B:8 C:6 D:2 20.以下程序运行后的输出结果是(A)。main(){int a,b;a=50;b=90;printf(“%dn”,(a,b));} A:90 B:50 90 C:50 D:其他 21.以下程序的运行结果是(A)。void main(){ int a=4;char ch=‘a’; printf(“%dn”,(a&2)&&(ch>‘A’));} A:0 B:1 C:2 D:3 22.以下程序的输出是(D)。#include main() { int i,j=4; for(i=j;i<=2*j;i++)switch(i/j){ case 0 : case 1: printf(“*”);break; case 2: printf(“#”);break;} } A:*### B:**## C:***# D:****# 23.有如下程序片段: int i = 0;while(i++ <= 2);printf(“%d”, i--);则正确的执行结果是(C)。 A:2 B:3 C:4 D:以上都不是 24.有以下程序段 main(){ int i=1,sum=0,n; scanf(“%d”,&n);do { i+=2;sum+=i;}while(i!=n);printf(“%d”,sum);} 若使程序的输出值为15,则应该从键盘输入的n的值是(D)。 A:1 B:3 C:5 D:7 25.以下程序的输出是(A)。 #include int a=10; p=&a; ++a;} void main(){ int a=5; fun(&a); printf(“%dn”,a);} A:5 B:6 C:10 D:11 26.以下关于函数的说法中正确的是(C)。 A:定义函数时,形参类型说明可放在函数体内 B:return语句后边的值不能为表达式 C:如果函数类型与返回值类型不一致,以函数类型为准 D:如果形参与实参的类型不一致,以实参为准 27.已知有定义:int *p();则以下说法正确的是(C)。 A:指向int型的指针变量 B:int型的指针数组 C:一个函数,该函数的返回值是指向int型的指针变量 D:一个指向函数的指针变量,该函数的返回值为int型 28.若有如下程序: void s(char *m,int n){ *m=*m+3;n=n+3; printf(“%c,%c,”,*m,n);} void main(){ char p=‘b’,q=‘B’; s(&q,p); printf(“%c,%cn”,p,q);}则程序运行后的输出结果是(A)。 A:E,e,b,E B:e,E,b,F C:E,e,e,E D:e,E,b,E 29.C语言规定函数返回值的类型由(A)。 A:在定义时所指定的函数类型所决定 B:调用该函数时的主调函数类型所决定 C:return语句中的表达式类型所决定 D:调用该函数时系统临时决定 30.要在c语言中求正弦30度的值,可以调用库函数,可用格式为(D)。 A:sin(30) B:sin(30.0) C:sin((double)30) D:sin(3.1415/6)31.在C语言程序设计中,简单变量作为实参时,它和对应形参之间的数据的传递方式是(B)。 A:地址传递 B:单向值传递 C:由实参传给形参,再由形参传给实参 D:由用户指定传递方式 32.以下程序的输出为(C)。int a=2;int f(int *a) { return(*a)++;} void main(){ int s=0; {int a=5; s+=f(&a); } s+=f(&a); printf(“%d %dn”,a,s);} A:2 7 B:2 10 C:3 7 D:3 11 33.以下程序输出结果是(D)。#include return(a);} void main(){ int *p,j;p=NULL;p=fun();for(j=0;j<4;j++){printf(“%dn”,*p);p++;} } A:输出0 0 0 0 B:输出0 1 2 3 C:输出1 1 1 1 D:输出不确定值 34.以下程序的运行结果是(D)。void fun(int *n){ static int m=2; *n*=m-1;m+=2;} void main(){ static int m=1; int i; for(i=1;i<4;i++) fun(&m); printf(“%dn”,m);} A:8 B:10 C:11 D:15 35.下面对typedef的叙述中不正确的是(B)。 A:用typedef可以定义各种类型名,但不能用来定义变量 B:typedef和#define都是在预编译时处理的 C:用typedef只是将已存在的类型用一个新的标识符来代表 D:使用typedef有利于程序的通用和移植 36.要使用内存分配函数malloc,需要引入的头文件是(BC)。 A:stdio.h B:stdlib.h C:malloc.h D:memory.h 37.以下宏定义中,不会引起二义性的宏个数为(A)。1)#define POWER(x)x*x 2)#define POWER(x)(x)*(x)3)#define POWER(x)(x*x)4)#define POWER(x)((x)*(x))(没有二义性) A:1个 B:2个 C:3个 D:4个 38.若有二维数组定义语句:int a[4][5];则下面对元素a[2][3]不正确的引用方式是(B)。 A:*(&a[2][3]) B:*(a+5*2+3)可以换为(&a[0][0]+5*2+3) C:*(a[2]+3) D:*(*(a+2)+3)39.若二维数组定义为a[m][n],则在a[i][j]之前的元素个数为(B)。(不知怎么下面是m,应该是n把,不清楚!) A:j*m+i B:i*m+j C:i*m+j-1 D:j*m+i-1 40.有字符数组a[10]={‘A’,‘ ’}和b[10]={‘B’},则以下正确的输出语句是(D)。 A:puts(a,b); B:printf(“%s %sn”,a[],b[]); C:putchar(a,b); D:puts(a);puts(b);41.下列程序的输出结果是(D)。#include char p1[20]=“abcd”,p2[20]=“ABCD”; char str[50]=“xyz”; strcpy(str+2,strcat(p1+2,p2+1)); printf(“%sn”,str);} A:xyabcAB B:abcABz C:Ababcz D:xycdBCD 42.以下程序执行后输出结果是(C)。void main() { char a[]=“movie”,b[10]=“movie”; printf(“%d %dn”,sizeof(a),sizeof(b));} A:5 5 B:6 6 C:6 10 D:10 10 43.以下程序的输出结果是(A)。void main(){ char *p[10]={“abc”,“aabdfg”,“dcdbe”,“abbd”,“cd”}; printf(“%dn”,strlen(p[4]));} A:2 B:3 C:4 D:编译出错 44.已知有以下的说明,int a[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为(B)。 A:5 B:0 C:4 D:7 45.以下程序输出结果是(B)。#include int a[2][2]={1,2,3,4},(*p)[2]; p=a; p++; printf(“%dn”,**p);} A:2 B:3 C:4 D:以上都不对 46.设char ch,str[4],*strp;,则正确的赋值语句是(C)。 A:ch=“CBA”; B:str=“CBA”; C:strp=“CBA”; D:*strp=“CBA”;47.下面程序的运行结果是(C)。#include A:7654321 B:1714171 C:1711717 D:7177171 48.以下程序的输出是(C)。#include main(){ char a[]=“language”,*p;p=a;while(*p!=‘u’){ printf(“%c”,*p-‘u’+‘U’);p++;} } A:LANGUAGE B:language C:LANG D:LANGuage 49.struct s1 { char a[3]; int num;}t={‘a’,‘b’,‘x’,4},*p;p=&t;则输出为x的语句是(B)。 A:printf(“%cn”,p->t.a[2]); B:printf(“%cn”,(*p).a[2]) C:printf(“%cn”,p->a[3]); D:printf(“%cn”,(*p).t.a[2]); 50.以下程序的输出是(D)。#include struct st {int x; int y; }cnum[2]={1,3,2,7}; printf(“%dn”,cnum[0].y/cnum[0].x*cnum[1].x);} A:0 B:1 C:3 D:6 51.以下对age的非法引用是(B)。struct student {int age; int num;}stu1,*p;p=&stu1; A:stu1.age B:student.age C:p->age D:(*p).age 52.以下程序的输出是(B)。#include A:4 B:5 C:6 D:0 53.若要用fopen函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件打开方式字符串应是(C)。 A:“ab+” B:“rb+” C:“wb+” D:“ab” 54.若执行fopen函数时发生错误,则函数的返回值是(B)。 A:地址值 B:0 C:1 D:EOF 55.要打开文件c:usertext.txt用于追加数据,正确的语句是(C)。 A:fp=fopen(“c:turboc2abc.txt”,“r”); B:fp=fopen(“c: urboc2abc.txt”,“r”); C:fp=fopen(“c: urboc2abc.txt”,“a+”); D:fp=fopen(“c:turboc2abc.txt”,“a+”);56.在执行fopen函数时,ferror函数的初值是(D)。 A:TRUE B:-1 C:1 D:0 57.#include char * s1=“Hello”,*s2=“Beijing”; FILE *pf=fopen(“abc.dat”,“wb+”); fwrite(s2,7,1,pf); fseek(pf,-1,SEEK_CUR); fwrite(s1,5,1,pf); fclose(pf);} 以上程序执行后,文件abc.dat中的内容为(C)。 A:Hellong B:Beijing Hello C:BeijinHello D:Hello 58.若fp为文件指针,且文件已正确打开,i为整型数据,以下语句的输出结果是(B)。fseek(fp,0,SEEK_END);i=ftell(fp);printf(“i=%dn”,i); A:fp所指的文件记录长度 B:fp所指的文件长度,以字节为单位 C:fp所指的文件长度,以比特为单位 D:fp所指的文件当前位置,以字节为单位 59.函数调用语句:fseek(fp,-20L,2);的含义是(C)。 A:将文件位置指针移到距离文件头20个字节处 B:将文件位置指针从当前位置向后移动20个字节 C:将文件位置指针从文件末尾处后退20个字节 D:将文件位置指针移到离当前位置20个字节处 60.若将文件指针的读写位置指针移动到距离文件头200个字节的位置,对应正确的操作是(A)。 A:fseek(fp, 200, SEEK_SET) B:fseek(fp, 200, SEEK_CUR) C:fseek(fp, 200, SEEK_END) D:ftell(200) 1. C语言源程序的基本单位是(函数) 2. 若有以下数组a,数组元素:a[0]~a[9],其值为 4 12 8 2 10 7 5 1 改数组中下标最小的元素名字是() 3. 按内存排列顺序,数组char a[2]中的所有元素是a[1]和(a[0])4. 设x=5〉1+2,x的值为()5. 设有以下定义的语句: int a[3][2]={10,20,30,40,50,60},(*p)[2];p=a;则*(*(p+2)+1)值为(60)6. 调用fopen函数打开一文本文件,在使用方式这一项中,为输出而打开需填入(w或w+)7. 执行下列语句后,*(p+1)的值是(b) char s[3]=”ab”,*p;P=s;8. 函数的(递归)调用时一个函数直接或间接地调用它自身 9. Int x;x=-3+4%-5*3,则x的值是(9)10. 当a=3,b=2,c=1;时,执行以下程序后c=(2)if(a>b)a=b;if(b>c)b=c;else c=b;c=a;判断 1.一个include命令可以指定多个被包含的文件 错 2.若有定义和语句:int a;char c;float f;scanf(“%d,%c,%f””,&a,&c,&f);若通过键盘输入:10,A,12.5,则a=10,c=”A”,f=12.5 对 3.进行宏定义时,宏名必须使用大写字母表示 错 4.整数-32100可以赋值给int型和long int 型变量 对 5.在程序中定义了一个结构类型后,可以多次用它来定义具有该类型的变量 对 6.函数strlen(“ASDFGN”)的值是7 错 7.通过return语句,函数可以带回一个或一个以上的返回值 错 8.若有说明int c;则while(c=getchar());是正确的c语句 对 9.C语言中只能逐个引用数组元素而不能一次引用整个数组 对 10.在c语言环境中,此定义和语句是合法的: enum aa{a=5,b,c}bb;bb=(enum aa)5; 对 11.共同变量所占的内存长度等于最长的成员的长度 对 12.在Turbo C 中,下面的定义和语句是合法的: file *fp;fp=fopen(“a.txt”,”r”); 错 13.Char *p=”girl”;的含义是定义字符型指针变量p,p的值是字符串“girl“ 错 14.若有定义和语句: int a[3][3]={{3,5},{8,9},{12,35}},I,sum=0; for(i=0;i<3;i++)sum+=a[i][2-i];则sum=21 对 15.Int i=20;switch(i/10){case 2:printf(“A”);case 1 :printf(“B”);} 的输出结果是 AB 单选 16.Int i=20;switch(i/10){case 2:printf(“A”);case 1 :printf(“B”);} 的输出结果是 AB 1.变量p为指针变量,若p=&a,下列说法不正确的事() A 2.函数ftell(fp)的作用是() A 3.函数ftell(fp)的作用是() A 4.下列变量说明语句中,正确的是() D 5.在c语言的函数中,下列说法正确的是() C 6.Fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是() C 7.在位运算中,操作数每右移一位,其结果相当于() B XILIE Fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是(8.A A 填空 1.Int a=1,b=2,c=3;执行语句a += b *= c;后a的值是7。 2.若有以下数组a,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3,该数组可用的最小下标值是a[0] 3.C语言的三种基本结构是(顺序)结构,选择结构,循环结构 4.Int x=2,y=3,z=4;则表达式x+y〉z的值为(0) 5.为了避免嵌套条件语句的二义性,c语言规定else与其前面最近的(if)语句配对 6.以下程序的输出结果为(9,10)#include “stdio。h” main(){int a=010,j=10; printf(“%d,%d、n”,++a,j--);} 7.在c语言中,文件的存取是以(字节)为单位的,这种文件被称为(流式文件)文件 8.若有以下定义和语句:int a[5]={1,3,5,7,9},*p;p=&a[2];则++(*p)的值是(6)9.Static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};其中a[1][2]的值为(6)10.执行下列语句后,*(p+1)的值为(1)char s[3]=“ab”,*p;p=s; 判断 1.#define和printf都不是c语句X 2.int i=20;switch(i/10){case 2:printf(“A”);Case 1:printf(“B”)}的输出结果为AX 3.在c语言中,此定义和语句是合法的:enum aa{ a=5,b,c}bb=(enum aa)5;√ 4.若有定义和语句:inta[3][3]={{3,5},{8,9},{12,35}},i,sum=0;for(i=0;〈i3;i++ sum+=a[i][2-i]; 则sum=21 5.char c[]=“very good”;是一个合法的为字符串数组赋值的语句√ 6.共同体变量所占的内存长度等于最长的成员的长度√ 7.函数strlen(“ASDFGn”)的值是7X 8.c语言中只能逐个引用数组元素而不能一次引用整个数组√ 9.如果函数值的类型和return语句中表达式ide值不一致,则以函数类型为准√ 10.用fopen(“file”,“r+”);打开的文件“file”可以进行修改X 11.char *p=“girl”;的含义是定义字符型指针变量p,p的值是字符串“girl”X 12.结构体类型只有一种X 13.在turbo c中,整型数据在内存中占2个字节X 14.c程序中有调用关系的所有函数必须放在同一个源程序文件中X。15.若有说明int c;则while(c=getchar());是正确的c语句√ 单选 1.指针变量p进行自加运算(即执行p++;)后,地址偏移值为2,则其数据类型为(A) 2.函数ftell(fp)的作用是()3.在位运算中,操作数每右移一位,其结果相当于(B) 4.C语言程序中,当调用函数时(A) 5.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是(B) 6.char *math(char c)是(B) 7.以下不符合c语言语法的赋值语句是(C) 8.以下不是无限循环的语句为(A) 9.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为(A) 10.在执行fopen函数时,ferror函数的初值是(D) 填空 假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是(8)函数调用语句func((e1,e2),(e3,e4,e5))中含有[ ]个实参3 执行语句char str[81]=”abcdef”;后,字符串str结束标志存储在str[ [6] ] 4 在C语言中,最大整型数是[32767 ] 5 以下程序的输出结果为[10],#include”stdio.h”main(){int a;for(a=0;a<10;a++);printf(“%d”,a);} 6设啊取二进制数00101101,若想通过a^b运算使a的高4位取反,低4位不变,则b的二进制数是[11110000 ] 7 C语言源程序的基本单位是[函数 ] 8 设I,j,k均为int型变量,则执行完下面的for循环后,k的值为[10]。For(i=0,j=10;i<=j;i++,j--)k=i+j 9 int x=2;x*=y=z=4;则x的值为[8 ] 10 预处理命令行都必须以[ #]号开始 判断 一个include 命令可以指定多个被包含的文件 错 2 int i,*p=&i;是正确的C说明 对 3 若有int i=10, j=0;则执行完语句 错 If(j=0)i++;else i--;i的值为11 4 在Turbo C中,下面的定义和语句是合法的: 错 File *fp;fp=fopen(“a.txt”,”r”)5 int a[3] [4]={{1},{5},{9}};它的作用是将数组各行第一列的元素赋初值,其余元素值为0。 对 进行宏定义时,宏名必须使用大写字母表示。 错 通过return语句,函数可以带回一个或一个以上的返回值。 错 8 在程序中定义了一个结果体类型后,可以多次用它来定义具有该类型的变量。 对 共同体变量所占的内存长度等于最长的成员的长度 对 10 用fopen(“file”,”r+”);打开的文件”file”可以进行修改 单选 以下对二维数组a的正确说明是(c)A int a[3] [ ] B float a(3,4)C double a[1][4] D float a(3)(4)2 C语言允许函数类型缺省定义,此时函数值隐含的类型是(B)A float B int C long D double 3设有定义:int N=0,*P=&N,**q=&p;则以下选项中,正确的赋值语句是(D)A p=1 B *q=2 C q=p D *p=5 4 C语言中要求对变量作强制定义的主要理由是(D)A 便于移植 B 便于写文件 C 便于编辑预处理程序的处理 D 便于确定类型和分配空间 5 位字段数据vd单位是()位 A 十六进制 B 八进制 C 二进制 D 十进制 以下程序的输出结果是(D)main(){int i,j,k,a=3,b=2;I=(--a==b++)?---a:++b;J=a++;k=b;Printf(“i=%d,j=%d,k=%dn”,I,j,k);} A i=2,j=1,k=3 B i=1,k=1,k=2 C i=4,j=2,k=4 D i=1,j=1,k=3 7 char *s1=”hello”,*s2;s2=s1;则(C)A s2指向不确定的内存单元 B 不能访问”hello” C puts(s1);与puts(s2);结果相同 D s1不能再指向其它单元 函数调用语句:fseek(fp,-20l,2);的含义是()A 将文件位置指针移到距离文件头20个字节处 B 将文件位置指针从当前位置向后移动20个字节 C 将文件位置指针从文件末尾处退后20个字节 D 将文件位置指针移到离当前位置20个字节处 已知p,p1为指针变量,a为数组名,j为整型变量,下了赋值语句中不正确的是(D)。A a=&j,p=p1;B p=a;C p=&a[j];D p=10;10在执行fopen函数时,ferror函数的初值是(D)A TRUE B-1 C 1 D 0 填空 若有以下数组a,数组元素:a[0]~a[9],其值为9 4 12 8 2 10 7 5 1 3 该数组中下标最大的元素是a2 2下列程序的运行结果是(65535),main(){unsigned x1;int b=-1;x1=b;printf(“%u”,x1);} 3int x;x=-3+4%5-6,则x的值为(-5) 4已知 a=10,b=15,c=1,d=2,e=0,则表达式!a〈e的值为(0)5在C语言中,最大整数是() 6若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是(3)C=(a-=(b-5));C=(a%11)+(b=3);7C语言中,数组名是一个不可变的(指针常)量,不能对它进行加减和赋值运算 8定义 int a[2][3];表示数组a中的元素个数是(6)各 9a=10;b=0;do {b+=2;a-=2+b;} while(a>=0)执行几次3 10执行语句char s[3]=”ab”,*p;p=3;*(p+2)的值是(‘/0’)判断 1#define和printf都不是C语句 ✘ 2结构体类型只有一种 ✘ 3如果函数值的类型和return语句表达式的值不一致,则以函数类型为准 ✔ 4用fopen(“file”,“r+”);打开的文件 file 可以进行修改✔ 5int i,*p=&i;是正确的C说明✔ 6若有 int i=10,j=0;则执行完语句 if(j=0)i++;else i--;i的值为11 ✘ 7C程序中有调用关系的所有函数必须放在同一个原程序文件中 ✘ 8char *p=“girl”;的含义是定一字符型指针变量p,p的值是字符串“girl” ✘ 9 int a[3][3]={{3,5},{8,9},{12,35}},I,sum=0 For(i=0;I<3;i++)sum+=a{i}{2-i};sum=21 ✔ 10在 Turbo C中 file *fp=fopen(a.txt,r);是合法的✘ 单选 一下运算等级最低的 A&& B& C| | D| c 2若以“A+”方式打开一个以存在的文件,正确的事 a A原有文件不删除,位置指针移到文件末尾,可作添加和读操作 B原有文件不删除,位置指针移到文件开头,可作重写和读操作 C原有文件删除,只可作写操作 D都不正确 3对结构体类型的变量的成员的访问,无论数据类型如何都可使用a 4main(){int i=010,j=10;printf(“%d”,%dn,++I,j--);}结果 b 5利用 fseek函数可以实现的操作a 6设一下变量未int类型,则值不等于7的是a 7不正确的b double类型数据占d 在C语言程序中 b 10不正确的填空 1. 以下do-while语句中循环体的执行次数是(1)a=10 b=0 do { b+=2;a-=2+b;} while(a>=0);2字符串长度的库函数是[1],只写 3行下面两个语句,输出的结果是[1],char 4语言中调用[fopen]函数来打开文件 5若a是int型变量,且a的初值为6,则执行下面表达式后a的值为。a+=a-=a*a-60 6有定义:int a=10 7有定义:char s [ ] = 则TurboC 系统为数组s开辟[ 6] 个字节的内存单元 8若有以下定义和语句: int a[5]={1,3,5,7,9},*p;p=&a[2];则++(*p)的值是__6__.判断 1有宏定义:#define S(a,b)……所以此宏定义是错误的错 2构体类型只有一种 错 3有定义和语句:int。。。则sum=21 4果函数值的类型和return语句。。则以函数类型为准 对 5果想使一个数组中全部元素为0 可以写成int a[10]={0*10}; 错 6加位运算的数据可以是任何类型的数据 错 7ar *p= girl。。。p的值是字符串 girl 对 8efine和printf 都不是C语句 对 单选 1位计算中,操作数每右移一位。。 B 2执行下列语句后,a和b的值分别为() B 3fseek函数的正确调用形式是()B 4下列 判 断 正 确的事 (C 5char *match(char c)是B 6若有说明: int a [3][4]= 。。正确的叙 述D) 是7为了提高程序的运行速度,在函数。。。的变量 8以下程序的输出结果是()D 【程序填空】 -------------------------- 功能:以每行5个数来输出300以内能被7或17整除的偶数,并求出 其和。 ------------------------*/ #include int i,n,sum; sum=0; /***********SPACE***********/ B D n=0; /***********SPACE***********/ for(i=1;i<=300;i++) /***********SPACE***********/ if(i%7 == 0 || i%17 == 0) if(i%2==0) { sum=sum+i; n++; printf(“%6d”,i); /***********SPACE***********/ if(n%5 == 0) printf(“n”); } printf(“ntotal=%d”,sum);} 2./*------------------------【程序填空】 -------------------------- 功能:有n个人围成一圈,顺序排号。从第一个人开始报数(从1 到3报数),凡报到3的人退出圈子,问最后留下的是原来 第几号的那位。 ------------------------*/ #include int i,k,m,n,num[nmax],*p; printf(“please input the total of numbers:”); scanf(“%d”,&n); p=num; /***********SPACE***********/ for(i=0;i /***********SPACE***********/ *(p+i)=i+1; i=0; k=0; m=0; while(m { /***********SPACE***********/ if(*(p+1)!=0)k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n)i=0; } /***********SPACE***********/ while(*p==0)p++; printf(“%d is leftn”,*p);} 程序改错 /*----------------------- 【程序改错】 ------------------------- 功能:求1到10的阶乘的和。 -----------------------*/ #include int i; float s=0; float fac(int n); /**********FOUND**********/ for(i=1;i<=10;i++) /**********FOUND**********/ S+=fac(i); printf(“%fn”,s);} float fac(int n){ /**********FOUND**********/ float y=1; int i; for(i=1;i<=n;i++) y=y*i; /**********FOUND**********/ Return y;} 程序填空 1.功能:计算一元二次方程的根。 ------------------------*/ #include double x1,x2,imagpart; float a,b,c,disc,realpart; scanf(“%f%f%f”,&a,&b,&c); printf(“the equation”); /***********SPACE***********/ if(a<=1e-6) printf(“is not quadraticn”); else disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf(“has two equal roots:%-8.4fn”,-b/(2*a)); /***********SPACE***********/ else if(disc>0) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(“has distinct real roots:%8.4f and %.4fn”,x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“has complex roots:n”); printf(“%8.4f=%.4fin”,realpart,imagpart); printf(“%8.4f-%.4fin”,realpart,imagpart); } } 2.功能:利用全局变量计算长方体的体积及三个面的面积。 ------------------------*/ #include int v; /***********SPACE***********/ v=a*b*c; s1=a*b; /***********SPACE***********/ s2=b*c; s3=a*c; return v;} main(){ int v,l,w,h; printf(“ninput length,width and height: ”); /***********SPACE***********/ scanf(“%d%d%d”,&l,&w,&h); /***********SPACE***********/ v=vs(l,w,h); printf(“v=%d s1=%d s2=%d s3=%dn”,v,s1,s2,s3);} 程序改错 功能:用起泡法对10个整数从小到大排序。 -----------------------*/ #include int i,j,t; for(i=0;i /**********FOUND**********/ for(j=0;j /**********FOUND**********/ if(x[i]>x[i+1]) { t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } main(){ int i,n,a[100]; printf(“please input the length of the array:n”); scanf(“%d”,&n); for(i=0;i scanf(“%d”,&a[i]); /**********FOUND**********/ sort(n,a); printf(“output the sorted array:n”); for(i=0;i<=n-1;i++) printf(“%5d”,a[i]); printf(“n”);} 【程序填空】 -------------------------- 功能:计算个人与各科平均成绩及全班平均成绩,并在屏幕上显 示出来。 ------------------------*/ #include /*定义符号常量 人数为5*/ #define N 4 /*定义符号常量 课程为4*/ main(){ int i,j; void aver(float sco[M+1][N+1]); static float score[M+1][N+1]={{78,85,83,65}, {72,65,54,75},{86,88,75,60},{69,60,50,72}}; aver(score); printf(“学生编号 课程1 课程2 课程3 课程4 个人平均n”); for(i=0;i { printf(“学生%dt”,i+1); {88,91,89,93},/***********SPACE***********/ for(j=0;j printf(“%6.1ft”,score[i][j]); printf(“n”); } for(j=0;j<8*(N+2);j++) printf(“-”); printf(“n课程平均”); for(j=0;j printf(“%6.1ft”,score[i][j]); printf(“n”);} void aver(float sco[][N+1]) { int i,j; /***********SPACE***********/ for(i=0;i { for(j=0;j { sco[i][N] += sco[i][j]; sco[M][j] += sco[i][j]; sco[M][N] += sco[i][j]; } /***********SPACE***********/ sco[i][N]/= N; } for(j=0;j /***********SPACE***********/ sco[M][j] /= M; sco[M][N]=sco[M][N]/M/N; } 2./*------------------------【程序填空】 -------------------------- 功能:删除字符串中的数字字符。 例如:输入字符串:48CTYP9E6,则输出:CTYPE。 ------------------------*/ #include { char *p=s; while(*p) if((*p>='0')&&(*p<='9'))p++; /***********SPACE***********/ else *s++=*p++; /***********SPACE***********/ *s=’ ’ } main(){ char item[100]; printf(“nEnter a string: ”); gets(item);fun(item); printf(“nThe string:”%s“n”,item);} 改错 /*----------------------- 【程序改错】 ------------------------- 功能:用插入排序法将n个字符进行排序(降序)。 提示:插入法排序的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第 四个元素…)。 -----------------------*/ #define N 81 #include void fun(char *aa, int n){ /**********FOUND**********/ int a ,b,t; for(a = 1;a { t = aa[a];b = a1; /**********FOUND**********/ while((b>=0)and(t>aa[b])) { aa[b+1]=aa[b];b;} /**********FOUND**********/ aa[b+1] = t } } main(){ char a[N]; printf(“nEnter a string: ”); gets(a); fun(a , strlen(a)); printf(“nThe string: ”); puts(a);getch();} 程序填空 功能:百马百担问题:有100匹马,驮100担货,大马驮三担,中 马驮2担,两匹小马驮一担,求大、中、小马各多少匹? ------------------------*/ #include int hb,hm,hl,n=0; /***********SPACE***********/ for(hb=0;hb<=100;hb+=3) /***********SPACE***********/ for(hm=0;hm<=100-hb;hm+=2) { /***********SPACE***********/ hl=100-hb-hm; /***********SPACE***********/ if(hb/3+hm/2+2*hl==100) { n++; printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl); } } printf(“n=%dn”,n);} 2 功能:产生并输出杨辉三角的前七行。1 1 1 1 1 1 ------------------------*/ #include int a[7][7]; int i,j; for(i=0;i<7;i++) { a[i][0]=1; /***********SPACE***********/ a[i][i]=1;; } for(i=2;i<7;i++) /***********SPACE***********/ for(j=1;j /***********SPACE***********/ a[i][j]= a[i-1][j-1]+a[i-1][j]; for(i=0;i<7;i++) { /***********SPACE***********/ for(j=0;j<=i;i++) printf(“%6d”,a[i][j]); printf(“n”); } } 程序改错 功能:编写函数fun生成一个对角线元素为5,上三角元素为0,下三角元素为1的3*3的二维数组。 -----------------------*/ #include fun(int arr[][3]){ /**********FOUND**********/ int i,j; /**********FOUND**********/ for(i=0;i<3;i++) for(j=0;j<3;j++) /**********FOUND**********/ if(i==j) arr[i][j]=5; else if(j>i) arr[i][j]=0; else arr[i][j]=1;} main(){ int a[3][3],i,j; fun(a); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%d ”,a[i][j]); printf(“n”); } } 【程序填空】 -------------------------- 功能:求一个二维数组中每行的最大值和每行的和。------------------------*/ #include int a[5][5],b[5],c[5],i,j,k,s=0; for(i=0;i<5;i++) for(j=0;j<5;j++) a[i][j]=rand()%(40)+20; for(i=0;i<5;i++) { /***********SPACE***********/ k=a[i][0];s=0; for(j=0;j<5;j++) { /***********SPACE***********/ if(k s=s+a[i][j]; } b[i]=k; /***********SPACE***********/ c[i]=s; } for(i=0;i<5;i++) { for(j=0;j<5;j++) /***********SPACE***********/ printf(“%5d”, a[i][j]); printf(“%5d%5d”,b[i],c[i]); printf(“n”); } } /*------------------------【程序填空】 -------------------------- 功能:计算并输出high以内最大的10个素数之和,high由主函数传 给fun函数,若high的值为100,则函数的值为732。 ------------------------*/ #include int sum = 0, n=0, j, yes; /***********SPACE***********/ while((high >= 2)&&(n<10)) { yes = 1; for(j=2;j<=high/2;j++) /***********SPACE***********/ if(0==high%j) { yes=0; break; } if(yes) { sum +=high; n++; } high--; } /***********SPACE***********/ return sum; } main(){ printf(“%dn”, fun(100));} *----------------------- 【程序改错】 ------------------------- 功能:有1、2、3、4个数字,能组成多少个互不相同且无重复数 字的三位数?都是多少? -----------------------*/ #include int i,j,k; /**********FOUND**********/ printf(“n”); /**********FOUND**********/ for(i=1;i<5;i++) for(j=1;j<5;j++) for(k=1;k<5;k++) { /**********FOUND**********/ if(i!=k&&i!=j&&j!=k) printf(“%d,%d,%dn”,i,j,k); } } 一 选择题(24分,每小题2分) 1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。 A 存放读入数据项的存储区 B 存放读入数据的地址或指向此地址的指针 C 一个指向所读文件的文件指针 D 一个整形变量,代表要读入的数据项总数 2.以下程序的输出结果为()。main(){ int i=010,j=10; printf(“%d,%dn”,i++,j--);} A 11,9 B 9,10 C 8,10 D 9,9 3.设a为int型变量,执行下列赋值语句后,a的取值分别是()。a=125.534;a=20.0/3;a=(int)125.521%4;a=5<<2; A 125,6,31,1 B 125,6,1,20 C 125,6.666666,31,20 D 125.534,6.666666,2,20 4.设i和k都是int类型,则for循环语句()。for(i=0,k=-1;k=1;i++,k++)printf(“****n”);A 循环结束的条件不合法 B 循环体一次也不执行 C 循环体只执行一次 D 是无限循环 5.以下程序的输出结果为()。main(){ char c; int i; for(i=65;i<68;i++) { c=i+32; switch(c) { case 'a': case 'b': case 'c':printf(“%c,”,c);break; default:printf(“end”); } } } A a,b,c,end B a,a,a,end C a,a,a,D a,b,c,6.函数调用语句:fseek(fp,-10L,2);的含义是()。 A 将文件位置指针从文件末尾处向文件头的方向移动10个字节 B 将文件位置指针从当前位置向文件头的方向移动10个字节 C 将文件位置指针从当前位置向文件末尾方向移动10个字节 D 将文件位置指针移到距离文件头10个字节处 7.以下程序的输出结果为()。main(){ int i=0,j=0; while(s1[i]!=' ') i++; while(s2[j]!=' ') s1[i++]=s2[j++]; s1[i]=0; printf(“%sn”,s1);} A side B country C sidetry D countryside 8.下列说法不正确的是()。 A 主函数main中定义的变量在整个文件或程序中有效 B 不同函数中,可以使用相同名字的变量 C 形式参数是局部变量 D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效 9.在下列程序段中,枚举变量 c1的值是()。enum color { red,yellow,blue=4,green,white}c1;c1=yellow;c1=white;A 1 B 3 C 5 D 6 10.设有说明 int(*ptr)();其中标识符ptr是()。 A 是一个指向整形变量的指针 B 是一个指针,它指向一个函数值是int的函数 C 是一个函数名 D定义不合法 11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为()。 A int p;B int(*p)[n];C int *p[n];D int(*p)(); 12.具有相同类型的指针类型变量p与数组a,不能进行的操作是()。 A p=a;B *p=a[0];C p=&a[0];D p=&a; 二 判断对错,对的划“√”,错的划“×”(20分,每小题2分) 1.参加位运算的数据可以是任何类型的数据。 () 2.若有定义和语句: int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f); 若通过键盘输入:10 A 12 5 则a=10,c=‘A’,f=12.5。 () 3.C语言把文件看作是一个字符(字节)的序列。 () 4.若有宏定义: #define S(a,b)t=a;a=b;b=t 由于变量t没定义,所以此宏定义是错误的。 () 5.在Turbo C中,下面的定义和语句是合法的: file *fp;fp=fopen(“a.txt”,“r”); () 6.若有定义: char s[ ]=“china”; 则Turbo C系统为数组s开辟6个字节的内存单元。 () 7.若有定义和语句: int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;for(i=0;i<3;i++) sum+=a[i][2-i];则sum=21。 () 8.若有定义和语句: struct student { int num; char name[10]; float score;} s[5]={{1,“lili”,98.5},{9,“xiaohua”,66}},*p=s;printf(“%d”,*p++);输出结果是1。 () 9.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。 () 10.在Turbo C中,此定义和语句是合法的: enum aa{ a=5,b,c}bb;bb=(enum aa)5; ()三 写出下列程序的运行结果(36分,每小题6分)1.main(){ int i=29,j=6,k=2,s; s=i+i/j%k-9;//s=i+(i/j)%k-9 printf(“s=%dn”,s);} 2.main(){ int x=31,y=2,s=0; do { s-=x*y; x+=2;y-=3; } while(x%3==0);//先执行,后判断 printf(“x=%dty=%dts=%dn”,x,y,s);} 3.main(){ int a[6]={10,20,30,40,50,60},i; invert(a,0,5); for(i=0;i<6;i++) printf(“%d,”,a*i+); printf(“n”);} invert(int s[ ],int i,int j)//倒置 { int t; if(i { invert(s,i+1,j-1);//函数自身的嵌套调用,形成循环 t=s[i]; s[i]=s[j]; s[j]=t; } } 4.#include main(){ char str[ ]=“The C program”,c; int i; for(i=2;(c=str[i])!=' ';i++) { switch(c) { case 'g': ++i;break;//由于++i,跳过了g后面的1个字母 case 'o': continue; default: printf(“%c”,c);continue; } printf(“*”); } printf(“n”);} 5.struct w //结构体 { char low; char high;}; union u //共用体 { struct w byte; short word;}uw; main(){ int result; uw.word=0x1234; printf(“word value:%04xn”,uw.word); printf(“high byte:%02xn”,uw.byte.high); printf(“low byte:%02xn”,uw.byte.low); uw.byte.low=0x74; printf(“word value:%04xn”,uw.word); result=uw.word+0x2a34; printf(“the result:%04xn”,result);} 6.main(){ char *s2=“I love China!”,**s1=&s2; char *s3,c,*s4=“w”; s3=&c; *s3='H'; s2=s2+2; printf(“%st%ct%st%cn”,s2,*s3,s4,**s1);} 四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分) 1.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){ int hb,hm,hl,n=0; for(hb=0;hb<=100;hb+=(1)) for(hm=0;hm<=100-hb;hm+=(2)) { hl=100-hb-(3); if(hb/3+hm/2+2*(3)==100) { n++; printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl); } } printf(“n=%dn”,n);} 2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。#define N 10 char str[N]; void main(){ int i,flag; for(flag=1;flag==1;) { scanf(“%s”,str); flag=0; printf(“n”); } sort(___(4)___); for(i=0;i { printf(“%c”,str[i]); } printf(“n”);} sort(char str[N]){ int i,j; char t; for(j=1;j for(i=0;i<10-j;i++) if(str[i]>str[i+1]) { t=str[i]; ____(5)____; ____(6)____;//交换位置 } } 3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。) 例如,矩阵为: //冒泡排序 3 0 0 3 2 5 7 3 1 0 4 2 则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。 add(int m,int n,int arr[]){ for(i=0;i for(j=0;j sum=sum+____(7)____; for(j=0;j for(i=1;____(8)____;i++) sum=sum+arr[i*n+j]; return(sum);} 4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。#define N 10 main(){ void maxmin(int arr[],int *pt1,int *pt2,int n); int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; p1=&a; p2=&b; maxmin(array,p1,p2,N); printf(“max=%d,min=%d”,a,b);} void maxmin(int arr[],int *pt1,int *pt2,int n){ int i; *pt1=*pt2=arr[0]; for(i=1;i { if(arr[i]>*pt1) ____(9)____; if(arr[i]<*pt2) ____(10)____; } } 答案 一 选择题(24分,每小题2分)1.(B)2.(C)3.(B)4.(D)5.(D)6.(A)7.(D)8.(A)9.(D)10.(B)11.(C)12.(D)二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)1.(×)2.(√) 3.(√)4.(×) 5.(×)6.(√) 7.(√)8.(×) 三 写出下列程序的运行结果(36分,每小题6分)1.s=20 2.x=35 y=-4 s=-29 3.60,50,40,30,20,10, 4.e C pr*am 5.word value:1234 6.love China!H w l high byte:12 low byte:34 word value:1274 the result:3ca8 四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)1.(1)3(2)2(3)hm hl 2.(4)str(5)str[i]=str[i+1](6)str[i+1]=t 3.(7)arr[i*n+j](8)i 选择题 1.一个C程序的执行是从 a。 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 2.以下叙述正确的是 c。 A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是 d。A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 4.C语言规定:在一个源程序中,main函数的位置 c。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 5.一个C语言程序是由 b。 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 6.C语言中的语句需要 b 符号作为结尾。A): B)C)。D)// 7.C 语言程序中可以对程序进行注释,注释部分用符号_c _括起来。A)‘{‘ 和’}’ B)‘[‘和’]’ C)“/*”和”*/” D)“*/”和”/*” 8.C语言中注释的位置 c。 A)必须在程序的最开始 B)必须在程序的结尾 C)可以在程序的任何位置 D)不可以写到main函数里面 9.C语言程序能够在不同的操作系统下面运行,这说明c语言具有很好的 c。A)适应性 B)移植性 C)兼容性 D)操作性 10.C语言经过编译后生成的文件的后缀是 b。A).c B).cpp C).exe D).obj 11.C语言编译程序的首要工作是 a。 A)检查C语言程序的语法错误 B)检查C语言程序的逻辑错误 C)检查程序的完整性 D)同时检查语法和逻辑错误 12.C语言经过链接后生成的文件的后缀是 c。A).c B).cpp C).exe D).obj 13.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 c。A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母、数字和下划线中任一种字符 14.若以下选项中的变量已正确定义,则正确的赋值语句是 c。A)x1=26.8%3;B)1+2=x2;C)x3=0x12;D)x4=1+2=3;15.设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是 b。 A)x=x*100+0.5/100.0 B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0 16.下列C语言中运算对象必须是整型的运算符是 a。A)%= B)/ C)= D)*= 17.若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是 a。A)0 B)0.5 C)1 D)2 18.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是 D。 A)把x和y按从大到小排列 B)把x和y按从小到大排列 C)无确定结果 D)交换x和y中的值 19.下列变量定义中合法的是 a。 A)short _a=1-.le-1;B)double b=1+5e2.5;C)long do=0xfdaL;D)float 2_and=1-e-3;20.若变量已正确定义并赋值,符合C语言语法的表达式是 a。 A)a=b=7 B)a=7+b+c,a++ C)int(12.3%4)D)a=a+7=c+b 21.若有float x;则sizeof(x)和sizeof(float)两种描述 A。A)都正确 B)都不正确 C)前者正确 D)后者正确 22.有整型变量x,单精度变量y=5.5,表达式x=(float)(y*3+((int)y)%4)执行后,x的值 为(b)。 A)17 B)17.500000 C)17.5 D)16 23.已知float x=1,y;则y=++x*++x的结果是 a。A)y=9 B)y=6 C)y=1 D)表达式是错误的 24.下列关于单目运算符++、--的叙述中正确的是 D。A)它们的运算对象可以是任何变量和常量 B)它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C)它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D)它们的运算对象可以是char型变量、int型变量和float型变量 25.已定义ch为字符型变量,下列赋值语句中错误的是 c。A)ch='';B)ch=62+3;C)ch=NULL;D)ch='xaa';26.假定有以下变量定义,则能使值为3的表达式是 d。int k=7,x=12;A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)27.设有“int x=11;”则表达式(x++*1/3)的值是 a。A)3 B)4 C)11 D)12 28.已定义c为字符型变量,则下列语句中正确的是 c。A)c=’97’ B)c=“97” C)c=97 D)c=“a” 29.sizeof(float)是 c。 A)一个双精度型表达式 B)一个整型表达式 C)一种函数调用 D)一个不合法的表达式 30.有以下定义语句: double a,b;int w;long c;若各变量已正确赋值,则下列选项中正确的表达式是 c。A)a=a+b=b++ B)w%((int)a+b)C)(c+w)%(int)a D)w=a=b 31.若变量a是int类型,并执行了语句:a=‘A’+1.6;,则正确的叙述是 c。A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符’A’的ASCII值加1 32.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 d。A)6.500000 B)6 C)5.500000 D)6.000000 33.在下列选项中,不正确的赋值语句是 d。A)++t;B)n1=(n2=(n3=0));C)k=i==j;D)b+c=1;34.已知char a;int b;float c;double d;则表达式a+b * c-d的结果为__d __型。A)char B)int C)float D)double 35.若x 为int型变量,则执行语句x=10;x+=x=x-x后,x的值为__a ____。A)0 B)10 C)20 D)30 36.若x、a、b、c均 为int型变量,则执行表达式x=(a = 4, b = 8, c = 12)后,x的 4 值为__c__。 A)4 B)8 C)12 D)24 37.在C程序中,x + y是_____、x + y;是___a____。 A)表达式、语句 B)表达式、表达式 C)语句、语句 D)语句、表达式 38.假设变量a是整型,b是实型,c是双精度型,则表达式30+a+c*b的值的数据类型是 c。 A)int B)float C)double D)不确定 39.在C语言中,char型数据在内存中的存储形式是 d。A)补码 B)反码 C)原码 D)ASCII码 40.执行下列程序片段时输出结果是 c。int x=13,y=5;printf(“%d”,x%=(y/=2));A)3 B)2 C)1 D)0 41.执行语句scanf(“%c%c%c”,&c1,&c2,&c3),输入abc时,变量c1、c2、c3的值分别为 a。A)'a', 'b', 'c' B)'a','b', '' C)'a', '', 'b' D)'a','','c' 42.设c1,c2均是字符型变量,则以下不正确的函数调用为 d。A)scanf(“c1=%cc2=%c”,&c1,&c2);B)c1=getchar();C)putchar(c2);D)putchar(c1,c2);43.下列函数中能够向终端输出一个字符或字符型变量值的是 d。A)gets B)puts C)getchar D)putchar 44.若有下列语句 char c=’A’; printf(“%d”,c);则输出的结果是 c。 A)A B)c C)65 D)错误的语句 45.下列程序输入’a’字母后,执行程序后输出的结果是 b。#include A)处理操作 B)数据流 C)控制流 D)调用关系 47.程序流程图中的菱形框表示 c。A)输入 B)输出 C)判断 D)循环 48.下面的流程图是 d 结构的程序设计。A)顺序 B)顺序加选择 C)判断 D)循环 49.NS图完全取消了 a,不允许有随意的控制流,全部算法写在一个矩形框内。A)流程线 B)输出 C)判断 D)循环 50.以下描述中正确的是 c。 A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C)do-while循环至少要执行一次循环语句 D)do-while循环中,根据情况可以省略while 51.逻辑运算符两侧运算对象的数据类型 d。 A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 52.下列运算符中优先级最高的是 b。(非,算术,关系,AND,或,赋值运算符)A)< B)十 C)&& D)!= 53.能正确表示“当x 的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是 c。A)(x>=1)&&(x<=10)&&(x> = 200)&&(x<=210)B)(x>=1)||(x<=10)||(x>=200)||(x<=210)c)(x>=1)&&(x<=10)||(x>= 200)&&(x<=210 D)(x > =1)||(x< =10)&&(x> = 200)||(x<=210)54.判断char型变量 ch 是否为大写字母的正确表达式是 c。A)' A' <=ch<='z' B)(ch> = 'A')&(ch<=' Z')C)(ch>=' A')&&(ch<='Z')D)(' A' < = ch)AND('Z'> = ch)55.设x,y 和z是int型变量,且x = 3,y= 4,z= 5,则下面表达式中值为0的是 d。A)'y'&&'y' B)x < =y C)x||y+z&&y-z D)!(x printf(“It is the %dth day.”,x);return 0;} A)是死循环 B)循环执行2次 C)循环执行1次 D)有语法错误 61.对switch后括号内的表达式,叙述正确的是 c。A)只能是数字 B)可以是浮点数 C)只能是整型数据或字符型数据 D)以上叙述都不对 62.下列关于switch和break语句的说法中正确的是 b。A)break语句只能用在switch语句中 B)在switch语句中,可以根据需要决定是否使用break语句 C)在switch语句中必须使用break语句 D)以上选项都不正确 63.以下正确的描述是 b。 A)continue语句的作用是结束整个循环的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时, 只能使用goto语句 64.以下说法中错误的是 d。 A)C语言总是从main函数开始执行 B)函数在程序中出现的先后位置与其被调用的顺序无关 C)一个完整的C程序可由若干个C源程序文件组成 D)main函数的定义必须出现在所有其他函数之前,否则将产生运行错误 65.C语言规定,函数返回值的类型是 c。 A)由return语句中表达式的类型所决定 B)由调用该函数的主调函数所具有的类型决定 C)由定义该函数时所指定的函数类型决定 D)由系统随机决定 66.以下说法中正确的是 b。 A)main函数和其他函数间可相互调用 B)main函数可以调用其他函数,但其他函数不能调用main函数 C)因为main函数可不带参数,所以其后的参数小括号能省略 D)根据情况可以不写main函数 67.以下函数定义中正确的是 b。A)fun(float x,y)B) fun(int x, int y)C) fun(int x, int y);D)void fun(int x, int y){ return x+y;} { return x+y;} { return x+y;} { return x+y;} 68.以下说法中正确的是 b。 A)在一个函数的执行过程中又出现对其他函数的调用,则称此函数为递归函数。B)递归函数中必须存在递归结束的条件 C)函数的递归调用可以提高程序的执行效率 D)递归函数中必须出现return语句 69.以下有关“递归函数”说法中正确的是 a。 A)既允许直接递归调用,也允许间接递归调用 B)只允许直接递归调用 C)既不允许直接递归调用,也不允许间接递归调用 D)只允许间接递归调用 70. C语言中,函数调用时若实参是数组名,则传递给被调函数对应形参的是 d。A)整个数组 B)数组元素的个数 C)数组占用的内存单元个数 D)数组在内存中存放的首地址 71.C语言中,函数调用时若实参是数组名,则被调函数对应形参 c。A)可以是相应类型简单变量 B)必须是相应类型数组名 C)可以是相应类型数组名 D)必须是相应类型的指针变量 72.以下说法中错误的是 d。 A)数组元素可以作为函数实参 B)指针可以作为函数的形参 C)结构变量可以作为函数参数 D)结构指针变量不能作为函数参数 73.C语言中,以下叙述中错误的是 a。A)主函数中定义的变量是全局变量 B)同一程序中,全局变量和局部变量可以同名 C)全局变量的作用域从定义处开始到本源程序文件结束 D)局部变量的作用域被限定在其所定义的局部范围中 74.在一个源程序文件中定义的全局变量,其作用域为 b。 A)整个源程序文件 B)从定义处开始到本源程序文件结束 C)整个主函数 D)所处C程序的所有源程序文件中 75.在C函数中,局部变量的隐含存储类型是 a。A)auto B)static C)register D)extern 76.在C程序中,如果限定一个局部变量只能在所定义的范围中起作用,那么这个变量的存储类型 a。 A)只能是auto B)只能是extern C)可以是auto或static D)可以是extern或static 填空题 1.在C语言中所提供的数据结构是以数据类型形式出现的,其中的基本类型包括int 型 即 整形、float型即_ 单精度浮点型、double型即 双精度浮点型、char型即 字符型 等。2.C语言中的标识符只能由三种字符组成,它们是 字母、数字 和 下划线。 3.C程序中的字符常量是用单引号括起来的一个字符;除此之外,还允许用一种特殊形式的字符常量,是以 反斜杠 开头,被称为转义字符。 4.字符串常量是一对双引号括起来的字符序列,且以 ‘ ’ 结束。5.常量是指在程序执行过程中其值 不能 _改变的量。6.变量是指在程序执行过程中其值 可以改变 的量。7.C实型变量分为 单精度 _和 双精度 _两类。 8.转义字符'n'表示 换行,使光标移到屏幕上下一行开头。9.一个字符变量在内存中占 1 字节。 10.一个字符数据既可以以字符形式输出,也可以以 整数 形式输出。11.字符串常量是用_ “” _括起来的字符序列。 12.在进行运算时,不同类型的数据必须_ 先强制类型转换 _,然后进行运算。13.可以利用_ 强制类型转换 _运算符将一个表达式的值转换成指定的类型。 14.有两种类型转换,一种是在运算时不必用户指定,系统自动进行类型转换;另一种是 用户自己定义的转换(强制类型转换)。15.两个整数相除的结果是_ 整数。16.求模运算符(%)只能用于 整数 _操作数。17.一个表达式的最后加上一个 ; 就成了一个语句。18.若int x = 3,则执行表达式x*= x+= xb;//(b=7)a = a-b;//(a=9)printf(“a=%d, b=%d n”, a,b);return 0;} A=9;b=7 3.写出以下程序运行的结果 , c = 3。#include 4.下面程序的功能是输出100至200之间的不能被3整除的数,请填空使程序完整。int main(){ int n;for(n=100;n<=200;n++){ if(n%3==0)else {printf(“%d ”,n);} } return 0;} 5.下面程序完成的功能是,在全班50个学 生中,征集慈善募捐,当总数达到2000元时就结束。请判断下面程序的正误,如果错误请改正过来(只有一处错误)。 int main(){ float amount,total;int i;for(i=1,total=0;i<=50;i++){ scanf(“%f”,&amount);total=total+amount;if(total>=2000)break;} printf(“%f ”,total);return 0;} 6.执行程序之后,输入2↙6↙3↙,以下程序运行后的输出结果是。(↙表示回车)#include printf(“%e”, t);return 0;} 9.请给出程序运行结果。int main(){ int i;for(i=1;i<=5;i++)printf(“%d ”,sub(i)); printf(“n”);以下程 序 运 行 后的输 出 结 果是。#include printf(“%dn”,fun(a,b)/m);return 0;} int fun(int x,int y){ int m=2;return x*y-m;} 4 11.以下程序的功能是求一个3*4矩阵中最小元素。请填空。 fun(int a[][4]){ int i,j,k,min=10000;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j] min=a[i][j];return min;} int main(){ int a[3][4]={1,2,3,-22,5,6,-3,8,9,-8,22,10};int k;k= fun(a)printf(“%dn”,k);return 0;} 12.下面程序的功能是:用户从键盘输入两个float型数据a和b,计算并输出a除以b的商。请判断下面程序的正误,如果错误请改正过来。float cal(float a, b){ float x; x=a/b;//注意这样编程输入时 要输入带小说点,要不这一步做的是取整运算;// return x;} int main(){ float a,b;scanf(“%f %f”,&a,&b);printf(“商=%fn”,cal(a,b));return 0;} 5.下面程序的功能是:输出全局变量a、b两者的最小值。请判断下面程序的正误,如果错误请改正过来。(int a=8,b=7;既然是全局变量,应该写到前面,至少在main前) int min(int x,int y){ int z;z=x return 0;} int a=8,b=7 编程题 1.编写一个程序,求满足以下条件的最大的n值。12+22+32+„n2≤10001.#include printf(“长度为abc的三条边不能构成直角三角形n”);} else if(c>a&&c>b){ if((c*c)==(a*a+b*b))printf(“长度为abc的三条边能构成直角三角形n”);else printf(“长度为abc的三条边不能构成直角三角形n”);} return 0;} 3.判断用户输入的字符是数字字符、字母字符还是其它字符。 4.从键盘输入3名学生的5门成绩,分别找出每个学生的最高成绩,用循环嵌套。5.编写函数,删除字符串中的所有数字字符。6.分别求出1-100之间奇数之和、偶数之和。7.输入三个不同的整数,输出三个整数中的最大数。#include 6.以下程序的输出结果为(D)。main(){ char c;int i;for(i=65;i<68;i++){ c=i+32;switch(c){ case ‘a’:printf(“%c,”,c);break;case ‘b’:case ‘e’:printf(“ok,”);default: printf(“end”);} } } A a,ok,end B a,ok,endend C a,ok,end,end D a,ok,ok 9.以下程序的输出结果为(B)。#define A 3 #define B(a)(A+1)*a main(){ int x;x=3*A+B(7);printf(“x=%dn”,x);} A x=93 B x=37 C x=60 D x=90 三 写出下列程序的运行结果(10分,每小题2分)1.main(){ char c1=‘A’,c2=‘144’,c3=‘x44’,c=0xf5,x=13,a;int i=0122,j=0xa4;printf(“c1=%c,c4=%ctc5=%cn”,c1,c2,c3);printf(“%d,%dn”,i,j);i=-34;j=20;printf(“%d,%d,%dn”,i%j,i&j<<2,sizeof(j));printf(“c=%dn”,c|x);a=c^x<<2; printf(“a=%dn”,a);} 2.main(){ int x,y=1,z=10;if(y!=0)x=5; printf(“x=%dt”,x);x=1;if(z<0)if(y>0)x=3;else x=5;printf(“x=%dn”,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(“x=%dt”,x);printf(“z=%dn”,z);} 3.main(){ char s[20]=“I like it.”,t[20]=“Are you?”,c[20];int i=0;while(s[++i]!=‘ ’)t[i]=s[i];t[i]=0;printf(“string s:%sn”,s);printf(“string t:%sn”,t);} 4.int i=5;main(){ int i=3;{ int i=10;i++;printf(“%dn”,i); } f1();i+=1;printf(“%dn”,i);} int f1(){ i=i+1;return(i);} 5.main(){ int i=10,a[]={10,20,30,15},*p1;char *b=”Learning”,**p2=&b;p1=&i;printf(“%4d”,*p1+20);for(p1=a;p1a[j]){ t=a[j];a[j]=a[j+1];a[j+1]=t;} printf(“The sorted numbers:n”);for(i=1;i<11;i++)printf(“%4d”,a[i]);printf(“n”);} 2.求100~200间的素数。 Prime(int a)main(){ int m,flag;for(m=101;m<=200;m+=2){ flag=prime(m);if(flag==1)printf(“%4d”,m);} } prime(int a){ int i,k,flag;k=sqrt(a);for(i=2;i<=k;i++)if(a%i==0)break;if(i==k+1)flag=1;else flag=0;}第二篇:模拟题c语言答案
第三篇:C语言模拟题总集
第四篇:谭浩强版C语言期末考试
第五篇:大一C语言期末考试试题