《C语言程序设计》复习题
.
《C语言程序设计》复习题
一、判断题(本大题共60个小题)
1.C程序执行的入口是main()函数,所以main函数必须放在程序的开头。(B)
2.定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。(B)
3.注释内容太多会影响程序的执行效率。(B)
4.变量要“先定义,后使用”。(A)
5.字符常量'a'与字符串常量"a"没有区别。(B)
6.数学公式y=-6xz+5[2(a-5)+3]写成C语言表达式是y=-6*x*z+5*[2*(a-5)+3]。(B)
7.数学公式y=|x|+ab-c写成C语言表达式是y=fabs(x)+a*b-c。(A)
8.表达式5/2+5.0/2+7%6 的值为5.5。(A)
9.设int b=7;float a=2.5,c=4.7;则表达式a+(int)(b/2*(int)(a+c)/2)%4 的值为:4.5。(B)
10.设int a=12; 则表达式a/=a+a的值是0.5。(B)
11.在C语言中,运算符!比&&的优先级高。(A)
12.在C语言中,运算符的优先级最小的是逗号运算符。(A)
13.scanf("%d,%d",&x,&y);的输入格式:3,4<回车>。(A)
14.以下程序运行结果是:1,7,0 (A)
void main()
{
int x=1,y=1,z=10;
if(z< 0)
if(y> 0) x=3;
else x=5;
printf(" %d," ,x);
if(z=y< 0) x=3;
else if(y==0) x=5;
else x=7;
printf(" %d,%d" ,x,z);
}
15.该程序运行结果是:BCother (A)
void main()
.
{ char x=‘B’;
switch(x)
{
case ‘A’: printf(“A”);
case ‘B’: printf(“B”);
case ‘C’: printf(“C”);
default: printf(“other”);
}
}
16.下面程序段运行时输出结果是a=2,b=8 (B)
void main()
{
int x=1,y=1,a=2,b=7;
switch(x)
{
case 1: switch(y)
{ case 0: a++;break;
case 1: b++;break;
}
case 2: a++;b++;break;
case 3: a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
17.下面程序,当输入为:"abc?" 时,执行结果是:abc (A)
void main()
{ char c;
c=getchar();
while (c!='?' ) { putchar(c); c=getchar();}
}
18.该程序运行结果是:< > < > < > # (A)
void main()
{ int i;
for(i=1;i<=5;i++)
{
if(i%2) putchar(‘<’);
else continue;
putchar(‘>’);
}
putchar(‘#’);
}
19.break语句可用于循环语句和if语句中。(B)
20.continue语句不可用于循环语句中。(B)
21.以下程序的功能是判断一个数是否是素数(A)
#include
#include
void main( )
{ int m,i;
scanf(" %d" ,& m);
for(i=2;i< =sqrt(m);i++) if(m%i==0) break;
if(i> sqrt(m)) printf(“%d 是素数" ,m);
else printf(“%d 不是素数" ,m); }
22.以下程序的功能是计算2+4+6+8+...+98+100。(B)
void main() { int i,s ; for(i=2;i< =100;i+=2 ) s+=i; } (注意s的初始值)
23.数组的下标是从1开始计数的。(B)
24.若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是4。(A)
25.下面程序段运行时输出结果是:0 15 24 (A)
void main() { int i=0,a[10]; for(i=0;i< =9;i++) a[i]=i*3; printf(" %d %d %d" ,a[0],a[5],a[8]); } 26.下面程序段运行时输出结果是:1 0 3 3 4 5 6 6 (B)
void main()
{ int a[8]={1,0,1,0,1,0,1,0},i;
for(i=2;i< 8;i++) a[i]+= a[i-1] + a[i-2];
for(i=0;i< 8;i++) printf(“%d ”,a[i]); }
27.以下程序的功能是:将一个数组中的元素按逆序重新存放并打印交换后的数组。(A)
#define N 7
#include < stdio.h>
void main()
{ static int a[N]={12,9,16,5,7,2,1},k,s;
for (k=0;k< N/2;k++) { s=a[k]; a[k]=a[N-1-k]; a[N-1-k] =s; }
printf(" \n交换后的数组:\n" ); for(k=0;k< N;k++)printf(" %4d" ,a[k]); }
28.若有定义int a[3][5];则排列在数组中的第9个元素是a[1][3]。(A)
29.下面程序段运行时输出结果是:456 (B)
void main() { int a[][3]={ 1,2,3,4,5,6,7,8,9},i,k=2; for(i=0;i< 3;i++) printf(“%d”,a[k][i]); }
30.下面程序段运行时输出结果是:"AAAA" (B)
void main() { char ch[3][5]={ "AAAA" ,"BBB" ,"CC" }; printf(" \"%s\" " ,ch[1]); }
31.strlen("How are you\n")的值是12 。(A)
32.C语言中字符串结束的标志是'\0' (A)
33.strcmp("how","How")的值>0 。(A)
34.以下程序的功能是:字符串a连接到字符串b,并显示字符串b。(B)
void main()
{ char a[200]=”how are you.”, b[200]; int i=0;
while(a[i] !=' \0' ) {b[i]=a[i]; i++; } b[i]=' \0' ;
printf(“新字符串是%s”,b); }
35.当运行以下程序时,从键盘输入:AAAaaaAAA Abcd234abc AAaa,运行结果为:AaaAAAaaa。
void main()
{ char s[80], c='a';
int i=0;
scanf("%s",s); (注意scanf遇到空格的处理,与gets的不同)
while(s[i++]!='\0')
if(s[i] == c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32;
puts(s);
} (A)
36.下面程序段运行时输出结果是:6 (B)
void main() { int *p,a=5,b=1; p=& a; *p=10; a=*p+b; printf(“%d”,a); } 37.下面程序段运行时输出结果是:135 (A)
void main()
{ int a[2][3]={1,3,5,7,9,11}; int m,*ptr;
ptr=& a[0][1];
m=(*ptr)*(*(ptr+1))*(*(ptr+3));
printf(" %d" ,m); }
38.下面程序段运行时输出结果是:-5, -12, -7(A)
void sub(int x,int y,int *z)
{ *z=y-x; }
void main()
{
int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
39.下面程序段运行时输出结果是:4 (A)
fun(char *s)
{ char *p=s;
while (*p) p++;
return(p-s);
}
void main()
{ char *str="abcd";
int i;
i=fun(str);
printf("%d",i);
}
40.int *f();表示函数返回一个整型指针。(A)
41.下面程序段运行时输出结果是:0,0 1,3 (B)
f() { int x=0; static int y=0; printf(" %d,%d " ,x,y); x++; y=y+3; }
void main() { int i; for(i=0;i< 2;i++) f(); }
42.下面程序段运行时输出结果是2 (A)
int f(int n) { int s; if(n==1||n==2) s=1; else s=n-f(n-1); return s; }
void main() { printf(“%d”,f(3));}
43.下面程序段运行时输出结果是7 (B)
void fun(int x,int y,int z) {z=x+y;}
void main() { int a=3; fun(5,2,a); printf("%d",a); }
44.在定义函数时,函数名后面的括号中的变量名称为实参。(B)
45.为了保证被调用函数不返回任何值,其函数定义的类型应为void 。(A)
46.若定义的函数没有参数,则函数名后的圆括号可以省略。(B)
47.函数的实参和形参可以是相同的名字。(A)
48.函数调用中,形参与实参的类型和个数必须保持一致。(A)
49.函数的函数体可以是空语句。(A)
50.在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。(A)
51.在函数内定义的变量是局部变量,在函数外定义的变量是外部变量。外部变量是全局变量。(A)
52.变量的存储类别有自动型、静态型、寄存器型、和外部类型共4种,它们分别用auto 、static 、register 、extern 标识。(A)
53.对10个数进行从小到大排序。要求排序在函数sort内完成,用起泡算法。main函数内进行数据输入、调用排序函数sort、并输出排序后的数据。判断以下程序是否正确:(B)
void sort(int a[],int n)
{ int i,j,k;
for ( i=0; i< n-1; i++)
for ( j=0; j< n-1-i; j++)
if (a[j]> a[j+1]) { k=a[j];a[j]=a[j+1];a[j+1]=k; } }
void main( )
{ int a[10], i, j, k;
for ( i=0 ; i< 10 ; i++) scanf(" %d" , & a[i]) ; printf(" \n" ) ;
sort(a[10],10); (注意数组作函数参数)
for (i=0; i< 10; i++) printf(“%d," ,a[i]);}
54.预处理命令#include的作用是文件包含。
55.结构体的成员不能是结构体变量。(A)
56.“按位与”运算指两个运算数相应的二进制位中只要有一个为1,则该位结果值为1,比如0|0=0,1|0=1。(B)
57.C语言库函数fgets(str,n,fp)的功能是从文件fp中读取n个字符串存入str指向的内存。(B)
58.函数rewind的作用是使位置指针自动移至下一个字符位置。(B)
59.函数fseek的作用是使位置指针移至第一个字符位置。(B)
60.C语言中以w+方式打开文件后,可执行的文件操作是可任意读写。(B)
二、单项选择题(本大题共45个小题)
61.一个C语言程序总是从 B 开始执行。
A. 主过程
B. 主函数
C. 子程序
D.主程序
62.下面四个选项中,均是不合法的用户标识符的选项是 C 。
A. BA 、x_0、do B. float、1a0、_Y
C. x-y、goto、123 D. _123、tmp、CHAR
63.C语言中,int型数据在内存中的存储形式是 D 。
A. ASCII码
B.原码
C.反码
D.补码
64.下列属于C语言合法的字符常量的是 C 。
A. ‘\85’
B. “n”
C. ‘\t’
D.“\0”
65.下面正确的字符串常量是 C 。
A.'a' B. '376' C."\\n" D.376
66.不合法的常量是: D 。
A. ‘\2’
B. ""
C. ‘3’
D. ‘\483’
67.字符串"\\\"123\"\\"的长度是 B 。
A. 11
B. 7
C. 5
D. 3
68.存储字符串"\\\'abc\376"需要的字节数是 D 。
A.11 B.13 C.)6 D.)7
69.表达式'A'+4*25.0-'b'的正确结果是 B 。
A. 67 B. 67.0 C. 不确定D. 67L
70.下面哪个式子在a为奇数时结果为假 C 。
A.a%2==1 B. !(a%2==0) C. !(a%2)D. a%2
71.若x是int型变量,y是float型变量,所用的scanf调用语句格式为:
scanf("x=%d,%f",&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应是: A 。
A. x=10,66.6<回车>
B. 10 66.6<回车>
C. 10<回车>66.6<回车>
D. x=10<回车>66.6<回车>
72.w=4,x=3,y=2,z=1,则条件表达式w A. 4 B. 3 C. 2 D. 1 73.能表示条件0≤x≤100的表达式是 D 。 A. 0<=x<=100 B. x>=0,x<=100 C. 0≤x≤100 D. x>=0&&x<=100 74.判断char型变量ch为数字的正确表达式是 B 。 A. ch>="0"&&ch<="9" B. ch>='0'&&ch<='9' C. '0'≤ch≤'9' D. ch>='0'||ch<='9' 75.分析以下程序, 下列说法正确的是 D 。 void main() { int x=0,a=0,b=0; if(x=a+b) printf("tttt\n"); else printf("kkkk\n"); } A. 有语法错,不能通过编译 B. 通过编译,但不能连接 C. 输出tttt D. 输出kkkk 76.程序段如下,则以下说法中正确的是: B 。 int k=-5; while(k=0) k=k+1; A. while循环执行5次 B. 循环体语句一次也不执行 C. 循环是无限循环 D. 循环体语句执行一次 77.下述for循环语句 B 。 int i,k; for(i=0,k=-1;k=2;i++,k++) printf("* * * *"); A. 判断循环结束的条件非法 B. 是无限循环 C. 只循环一次 D. 一次也不循环 78.下列程序段执行后k值为 A 。 int k=0,i,j; for(i=0;i<5;i++) for(j=0;j<3;j++) k=k+1 ; A. 15 B. 3 C. 5 D. 8 79.以下关于数组的描述正确的是 C 。 A. 数组的大小是固定的,但可以有不同的类型的数组元素。 B. 数组的大小是可变的,但所有数组元素的类型必须相同。 C. 数组的大小是固定的,但所有数组元素的类型必须相同。 D. 数组的大小是可变的,但可以有不同的类型的数组元素。 80.在c语言中引用数组元素时,其数组下标的数据类型允许是 C 。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 81.对以下说明语句的正确理解是 B 。 int a[10]={6,7,8,9,10}; A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 82.在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][1]的值是 D 。 A. 4 B. 1 C. 2 D. 5 83.对于类型相同的两个指针变量之间,不能进行的运算是 C 。 A. < B. = C. + D. - 84.以下不能正确赋值的是 A 。 A. char s1[10];s1="test"; B. char s2[]={’t’,’e’,’s’,’t’} C. char s3[20]= "test"; D. char s4[4]={ ’t’,’e’,’s’,’t’} 85.对字符串"Boy"进行完整赋值的操作是 B 。 A.char s[3] = {'B','o','y'}; B. char s[] = "Boy"; C.char s[3] = {"Boy"}; D.char s[3]; s="Boy"; 86.在C语言程序中,以下描述正确的是 B 。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和函数的调用均可以嵌套 87.以下函数调用语句中实参的个数为 A 。 exce((v1,v2),(v3,v4,v5),v6); A. 3 B. 4 C. 5 D. 6 88.下述函数定义形式正确的是 C 。 A. int f(int x; int y) B. int f(int x,y) C. int f(int x, int y) D. int f(x,y: int) 89.关于函数参数,说法正确的是 A 。 A. 实参与其对应的形参各自占用独立的内存单元 B. 实参与其对应的形参共同占用一个内存单元 C. 只有当实参和形参同名时才占用同一个内存单元 D. 形参是虚拟的,不占用内存单元 90.一个函数的返回值由 D 确定。 A. return语句中的表达式 B. 调用函数的类型 C. 系统默认的类型 D. 被调用函数的类型 91.当调用函数时,实参是一个数组名,则向函数传送的是___B____。 A.数组的长度 B.数组的首地址 C.数组每一个元素的地址 D.数组每个元素中的值 92.若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10} ,*p=a ; 则数值为3 的表达式是 C 。 A. *p+3 B. *(p+3) C. *p+=2 D. p+2 93.下面程序用于输出数组中的最大值,则程序段中空白处应是 A 。 void main() { int a[5]={3,2,5,6,4},*p,*s; for(p=a,s=a;p-a<10;p++) if( ) s=p; printf(“max is %d”,*s); } A. *s<*p B. s C.a[s] D. p-a>p-s 94.设有如下的程序段: char str[ ]=“china" ; char *ptr ; ptr=str ; 执行上面的程序段后,*(ptr+5)的值为 B 。 A. 'o' B. '\0' C. 不确定的值 D. 'o'的地址 95.以下程序输出结果为 A 。 main() { char *str[]={"zhao","qian","sun","li"}; int i; for (i=0;i<4;i++) printf("%c",str[i][0]); } A. zqsl B.zhaoqiansunli C.zhao D.以上都不对 96.若x=5,y=5,则x&y的结果是____D_____. A. 0 B. 2 C. 3 D. 5 97.在位运算中,操作数每左移两位,则结果相当于___D_____. A. 操作数乘以2 B. 操作数除以2 C. 操作数除以4 D. 操作数乘以4 98.当用户定义一个结构体变量时,系统分配给它的内存为各成员所需内存的A A.和 B.最大值 C.不确定 D.无关 99.若有以下结构体定义,则正确的引用或定义是 B 。 struct example { int x;int y; }v1; A. example.x=10; B. example v2.x=10; C. struct v2;v2.x=10; D. struct example v2={10}; 100.设有如下定义:struct sk {int a ;float b ;}data ,*p ;若有p=& data ;,则对data 中的a 域的正确引用是 D 。 A.(*p).data.a B.(*p).a C.p-> data.a D.p.data.a 101.C语言可以处理的文件类型是 B 。 A. 文本文件和数据文件 B. 文本文件和二进制文件 C. 数据文件和二进制文件 D. 数据代码文件 102.如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为 D 。 A. c:file\abc.dat B. c:\file\abc.dat C. "c:\file\abc.dat" D. "c:\\file\\abc.dat" 103.若想对文本文件只进行读操作,打开此文件的方式为 A 。 A."r" B."W" C."a" D."r+" 104.在C程序中,可把整型数以二进制形式存放到文件中的函数是 C 。 A.fprintf函数 B.fread函数 C.fwrite函数 D.fputc函数 105.打开文件,操作完毕后用 C 函数关闭它。 A.fopen B.open C.fclose D.close 三、编程题(本大题共16个小题) 106.求200到800之间所有能被3整除但不能被7整除的数的和。 答: #include void main() { int i,sum=0; . for(i=200;i<=800;i++) if(i%3==0&&i%7!=0) sum=sum+i; printf("The?sum?is: %d\n",sum); } 107.输入一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分及以上为‘A’ ,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。 答: #include void main( ) { int score,temp; char grade; scanf("%d",&score); if ((score>100)||(score<0)) printf("\ndata error\n"); else { if(score= =100) temp=9; else temp=score/10; switch (temp) { case 9 : grade='A';break; case 8 : grade='B';break; case 7: grade='C';break; case 6: grade='D' ; break; case 5: case 4: case 3: case 2: case 1: case 0: grade='E' ; } printf("%d,%c\n", score,grade); } } 108.输入任意十个数,打印出它们中的最大数、最小数。 答: #include void main( ) { int i, k,min,max; scanf("%d",&k); i=1; max=min=k; for(i=2;i<=10;i++) { scanf("%d",&k); if(max if(min>k) min=k; } printf("最大:%d\n",max); printf("最小:%d\n", min); } 109.输入一行字符,统计其中的英文字母、数字、空格和其他字符个数。答: #include void main( ) { int n1,n2,n3,n4; char c; n1=n2=n3=n4=0; c=getchar(); while(c!=’\n’) { if(c>=’a’&&c<=’z’ || c>=’A’&&c<=’Z’) n1++; else if(c>=’0’&&c<=’9’) n2++; else if(c==’ ’) n3++; else n4++; c=getchar(); //why? } printf("%d %d %d %d\n",n1,n2,n3,n4); } 110.求1!+2!+3!+…+100!。 答: #include void main() { int i; double t,s; i=1;t=i; s=t; for(i=2;i<=100;i++) { t=t*i s+=t; } printf("%ld ",s); } 111.打印如下7行7列的左直角三角形: 答: #include for (i=1;i<=7;i++) { for (j=1;j<=i;j++) printf (" *"); printf("\n"); } } 112. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字立方和等于该数本身。例如 153是一个水仙花数,因为 153=1533 3 3 ++。 答: 方法1: #include { int i,k1,k2,k3; for (i=100;i<=999;i++) { k1=i%10; k2=i/10%10; k3=i/100; if (i==k1*k1*k1+k2*k2*k2+k3*k3*k3) printf("%d=%d^3+%d^3+%d^3\n",i,k1,k2,k3); } } 方 法 2 #include { int k1,k2,k3,i; for (k1=1;k1<=9;k1++) for (k2=0;k2<=9;k2++) for (k3=0;k3<=9;k3++) { i=k1*100+k2*10+k3; if (i==k1*k1*k1+k2*k2*k2+k3*k3*k3) printf("%d=%d^3+%d^3+%d^3\n",i,k1,k2,k3); } } 113.有10个地区的面积,要求对它们按由小到大的顺序排列(采用起泡法排序)。 答: #include void main( ) { int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers :\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); } 114.已知5个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。 答: #include void main( ) { int a[6]={20,15,12,8,6}; int i,k=9; if(k<=a[4]) a[5]=k; else { for (i=4;i>=0;i--) if(k>a[i]) { a[i+1]=a[i]; } else break; a[i+1]=k; } for (i=0;i<6;i++) printf("%d ",a[i]); } 115.有一行文字,要求删去某一个字符。此行文字和要删去的字符均由键盘输入,要删去的字符以字符形式输入(如输入 a表示要删去所有的 a字符)。 答: #include void main() { char str1[100],str2[100]; char ch; int i=0,k=0; while ((str1[i]=getchar())!=’\n’) i++; str1[i]='\0'; scanf("%c",&ch); for (i=0;str1[i]!=’\0’;i++) if (str1[i]!=ch) { str2[k]=str1[i]; k++; } str2[k]='\0'; printf("\n%s\n",str2); } 116.有一个 3×4的矩阵,编程求出其中值最大的那个元素的值,以及其所在的行号和列号。 答: #include void main() { int a[3][4],i,j,max,x,y; for (i=0;i<3;i++) for(j=0;j<4;j++) scanf(“%d”,&a[i][j]); max=a[0][0];x=y=0; for (i=0;i<3;i++) for(j=0;j<4;j++)