1、程序设计基础复习题程序设计基础复习题 一、单项选择题一、单项选择题 1以下叙述中正确的是( ) A. C 程序中注释部分可以出现在程序中任意合适的地方 B. 花括号和只能作为函数体的定界符 C. 构成 C 程序的基本单位是函数,所有函数名都可以由用户命名 D. 分号是 C 语句之间的分隔符,不是语句的一部分 2在一个 C 语言程序中( ) A. main 函数必须出现在所有函数之前 B. main 函数可以在任何地方出现 C. main 函数必须出现在所有函数之后 D. main 函数必须出现在固定位置 3判断下面标识符中哪个是 C 语言中合法的用户定义标识符( ) A. a-b B. #ab
2、d C. typedef D. _max 4为表示关系XYZ,应使用C语言表达式( ) A. (XY) static char y=a,b,c,d,e; 则下列说法中正确的是( ) A. x 数组和 y 数组长度相同 B.x 数组长度大于 y 数组长度 C.x 数组长度小于 y 数组长度 D.以上三种说法均错误。 7返回值为 void 的函数,其含义是( ) A.调用函数之后,被调用的函数没有返回值; B.调用函数之后,被调用的函数不返回 C.调用函数之后,被调用的函数返回值为任意类型 D.以上三种说法均不正确。 8对于语句,int x,y,z10,*px,*py; 指出下列哪个语句是不正确的
3、( ) A. px= 该函数的返回值是( ) A. 不确定的值 B. 形参p中存放的值 C. 形参p所指存储单元中的值 D. 形参p的地址值 13对于 scanf(“A=%d”, C. (a=c) D. a=c=b; 15在 C 语言中,不正确的 int 类型的常数是( ) A .32768 B. 0 C. 037 D. 0 xAF 16 若有以下说明语句 (已知int占 2 个字节, long 占 4 个字节) , 则下面printf 的输出结果是( ) A. 24 B. 26 C. 20 D. 30 union uarea int x; long y; ; struct str char
4、s20; union uarea z; ; void main() printf(“%dn”,sizeof(struct str); 17下列关于switch和break语句的讨论中,只有()是正确的。 A. break语句是switch 语句的一部分 B. 在switch语句中可以根据需要使用或不使用break语句 C. switch语句中必须使用break语句 D. 以上三种说法都不正确。 18以下不能正确定义二维数组的选项是 ( ) A. int a22=1,2; B. int a2=1,2,3,4; C. int a22=1,2,3; D. int a2=1,2,3,4; 19执行以下
5、程序后,输出结果是( ) A. 1 B. 1 C. 8 D. 0 void main() int y=11; while(-y) y-; printf(“%dn”,y-); 20void main() int a=5,*b,*c; c= b= 程序在执行了c=b=语句后,表达式:*c的值是( ) A. 变量a的地址 B. 变量b中的值 C. 变量a中的值 D. 变量b的地址 21.程序设计的三种基本程序设计结构是:_ Aif、while 和 for; B. switch、do-while 和 for; C. while、do-while 和 for; D.顺序结构、分支结构和循环结构。 22.
6、算法的特征不包括:_。 A.有穷性 B.可行性 C.确定性 D.有 1 个或者多个输入。 23.C 语言源程序的基本组成单位是_。 A.函数 B. 语句 C. 声明和语句 D. 文件 24.符中,只有_是合法的。 A.if B. 3ab C. Int D. A-4 25.下列常量中,只有_是合法的。 A.3e-0.3 B.abc C.02a1 D.377 26.下列说法中正确的是:_。 A.C 语言中的 for 语句的三个表达式都可以省略,而且分号也可以省略。 B.宏替换比函数调用的执行速度慢。 C.实质上,C 语言中的指针就是一个变量的地址。 D.C 语言中的任何函数都可以由程序员命名。 2
7、7.C 语言中,运算对象必须是整型的运算符是_。 A./ B. % C. + D. - 28.以下叙述中错误的是_。 A.C 语句必须以分号结束 B.复合语句在语法上被看作一条语句 C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句 29.以下叙述中正确的是_。 A.调用 printf 函数时,必须要有输出项 B.使用 putchar 函数时,必须在之前包含头文件 stdio.h C.在 C 语言中,整数可以以十二进制、八进制或十六进制的形式输出 D.调用 getchar 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码 30.以下关于函数的叙述中正
8、确的是_。 A.每个函数都可以被其它函数调用(包括 main 函数) B.每个函数都可以被单独编译 C.每个函数都可以单独运行 D.在一个函数内部可以定义另一个函数 31.有以下程序段 typedef struct NODE intnum; struct NODE*next; OLD; 以下叙述中正确的是_。 A.以上的说明形式非法 B.NODE 是一个结构体类型 C.OLD 是一个结构体类型 D.OLD 是一个结构体变量 32.以下叙述中错误的是_。 A.C 语言中对二进制文件的访问速度比文本文件快 B.C 语言中,随机文件以二进制代码形式存储数据 C.语句 FILE fp; 定义了一个名为
9、 fp 的文件指针 D.C 语言中的文本文件以 ASCII 码形式存储数据 33.当把以下四个表达式用作 if 语句的控制表达式时, 有一个选项与其它三个选 项含义不同,这个选项是_。 Ak%2 B. k%2=1 C. (k%2)!=0 D!k%2=1 (sin (0.5)2 34.以下不能正确计算代数式值的 C 语言表达式是_。 3 A1/3*sin(1/2)*sin(1/2) Bsin(0.5)*sin(0.5)/3 Cpow(sin(0.5),2)/3 D1/3.0*pow(sin(1.0/2),2) 35.以下能正确定义且赋初值的语句是_。 Aint n1=n2=10; Bchar c
10、=32; Cfloat f=f+1.1; Ddouble x=12.3E2.5; 36.以下程序的功能是:当 abc 时,以八进制形式输出 a、b、c 的值。 #include void main() inta,b,c; scanf(“%d%d%d”, if (ab=k B-k+ Ck%int(f) Dk=f=m 38.设有定义:int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 A(!a=1) B(ab) Ca Da|(b+b)k=ac ? c:k; 执行该程序段后,k 的值是_。 A3 B2C1D0 40.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 i
11、f 语句 if (ab) if(c=d)y=0; elsey=1; 该语句所表示的含义是_。 0 Ay 1 0 By 1 C a b and c d a b a b and c d a b and c d 0 y 1 a b and c d a b and c d 0 y 1 D. a b and c d c d 二、写出下列程序的执行结果二、写出下列程序的执行结果 1、有以下程序 #include void main() int i=0,s=0; do if(i%2) i+; continue; i+; s+=i; while(i9); printf(%dn,s); 执行后输出的结果是 2、
12、有以下程序 #include int func(int x) if(x= =1) return 2; else return x*func(x-1); void main() printf(“%dn”,func(4); 执行后输出的结果是 3、定义如下变量和数组 int i,x33=1,2,3,4,5,6,7,8,9; 则下列语句 for (i=0;i3;i+) printf(“%d”,xi2-i); 的输出结果是 4、 void main() int a10=1,2,3,4,5,6,7,8,9,0,*p; p=a; printf(“%d”,*p); printf(“%dn”,*(p+8);
13、输出结果是 5、 #include void main() int a=1,b=2,c=3; if(c=a) printf(%dn,c); else printf(%dn,b); 6、 #include void main() int n=c; switch(n+) case a: case A: case b: case B: printf(good);break; case c: case C: printf(pass); case d: case D: printf(warn); default: printf(error);break; 7、 #include void main()
14、int a44=3,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,12,-33 ,0; int i,j,s=0; for(i=0;i4;i+) for(j=0;j4;j+) if(aij0) continue; if(aij=0) break; s+=aij; printf(%dn,s); 8、 #include void main() int a=100,b=10; int *p1= *p1=b; *p2=a; printf(“%d, %d,”,a,b); printf(“%d, %dn”,*p1,*p2); 三、程序改错题三、程序改错题 1. #include
15、 stdio.h void main() char c,*ch= while(c=getchar()!=n) if(ch=ai-) if(i%13=0) printf(%d,i); 3. 求 1+2+3+100 void main() int i=1; do sum+=i; i+; while(i =100); printf(%d,sum); 4. 计算 1+1/2+1/3+1/10 void main() double t=1.0; int i; for(i=2;i=10;i+) t+=1/i; printf(t=%fn,t); 5.以下程序的功能是:给 r 输入数据后计算半径为 r 的圆面
16、积 s。 注:该题目有 3 个错误之处,找出并改正 #include #define PI 3.1415926; void main() int r; float s; scanf(%d,r); s=PI*r*r; printf(s=%fn,s); 6.以下程序用于计算一个一维数组各元素平方根的和。 注:该题目有 3 个错误之处,找出并改正。 #include void main() int a10,i,sum; for (i=0;i=10;i+) scanf(“%d”, i=0; while (!(i=9) sum+=sqrt(ai); i+; 7.下程序是从键盘上输入若干学生的成绩, 统计
17、并输出最高成绩和最低成绩, 当输入负数时结束输入。 注:该题目有 1 个错误之处,找出并改正。 #include void main() float x,amax,amin; scanf(“%f”, amax=x; amin=x; while(xamax) amax=x; if(xamin) amin=x; scanf(“%f”, ; printf(“amax=%fn amin=%fn”,amax,amin); 8.以下程序用于通过指针对数组进行输入和输出。 注:该题目有 2 个错误之处,找出并改正。 #include void main() int a10; int *p=a; int i;
18、 for (i=0;i10;i+) scanf(“%d”,*p+); for (i=0;i10;i+) 四、把以下的程序补充完整四、把以下的程序补充完整 1 以下程序中,select 函数的功能是: 在 N 行 M 列的二维数组中,选出一个最大 值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。 #define N 3 #define M 3 int select(int aNM,int *n) int i,j,row=1,colum=1; for(i=0;iN;i+) for(j=0;jarowcolum) row=i; colum=j; *n= ; return ; 2 函数Y
19、angHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如 下: 1 1 1其构成规律是: 1 2 1(1) 第 0 列元素和主对角线元素均为 1 printf(“%5d”,*p+); 1 3 3 1(2) 其余元素为其左上方和正上方元素之和 1 4 6 4 1(3) 数据的个数每行递增 1 请将程序补充完整。 #define N 6 void yanghui(int xNN) int i,j; x00=1; for(i=1;iN;i+) xi0= =1; for(j=1;ji;j+) xij= ; 3、以下程序的功能是计算:s=1+12+123+1234+12345。请填空。 #i
20、nclude void main() int t=0,s,i; _; for( i=1; i=5; i+) t=i+_; s=s+t; printf(s=%dn,s); 4、以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 请填空。 #include void main() int i,j,x; for(j=4; _; j-) for(i=1; i=ai-) if(i%13=0) printf(%d,i); 修改为 for(i=100;i=0;i-) if(i%13=0) break; printf(%d,i); 第二个错误:宏定义后边的分号去掉。 第三个错误:s=PI*r*2 应为 s=PI*r*r。 6.第一个错误:for 的第二个表达式应为 i10。 第二个错误:sum 未赋初值,应加入:sum=0; 第三个错误: while 循环的条件应改为: !(i= =9)或者(i=9)或者(i10)。 7.while(x=0) 8.在第 2 个 for 语句前,添加语句:p=a; 四、把以下的程序补充完整四、把以下的程序补充完整 1row, arowcolum 2xii, xi-1j-1+xi-1j 注:对于 2 题, 的内容可以换 3. s=0; t*10 4. j0 i 五、编程题五、编程题 略