C语言考试复习专用三套题附答案

更新时间:2024-04-20 14:38:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C语言程序设计》习题集

习题一

一、 语言基础(共20分,每题2分)

(一)设x为一数字字符,则其所对应的十进制数值为 。 A)x B)x-‘0’ C)*x D)&x

(二)说明语句char s=‘\\t’,使s包含了几个字符? 。 A)1 B)2 C)3 D)说明有错 (三)设a=6,b=4,则表达式b*=a+3的值为 。 A)3 B)18 C)27 D)36 (四)若给定表达式(m)?a++:a--,则其中表达式m和 等价。

A)m==0 B)m!=0 C)m=0 D)m=1

(五)设有说明语句int a[10],则数组a包括了 个数组元素。 A)1 B)9 C)10 D)20 (六)以下函数test返回值类型为 。 test(int x)

{ printf(“%f\\n”,(float)x); }

A)int B)float C)void D)不确定或错误 (七)C语言规定,main函数的参数 。

A)只能有0个 B)只能有0个或一个 C)只能有0个或2个 D)可有任意个

(八)设x为整型变量,p基类型为整型的指针变量,则正确的赋值表达式是 。 A)p=&x B)p=x C)*p=&x D)*p=*x

(九)Turbo C中,int型数据在存储器中占二个字节,则以下类型数据在存储器中占的字节数为: 。

struct test { int x; float y; char z; } ;

A)2 B)3 C)6 D)7 (十)rewind()函数的作用是 。 A)重新打开文件

B)使文件位置指针重新回到文件的开始 C)使文件位置指针重新回到文件的末

D)返回文件长度值

二、阅读下列程序,写出运行结果(共18分,每题3分) [程序1]

#include void main( )

{ int a=1,b=4,c=2; 运行结果: 1 a=(a+b)/c;

printf(“%d \\n”,--a); } [程序2]

void main ( )

{ char c1=67; /*‘A’的ASCII码值为65 */

if (‘A’ <=c1 && c1<=’Z’) 运行结果: 67,D

printf(“%d,%c”,c1,c1+1); else printf(“%c”,c1); } [程序3]

viod main ( )

{ int a=0, n=5; 运行结果: 1,5,4,3,2,0 for ( ; ; ) { a++; n--;

printf(“%d,”,a); a=n;

if (n==0) break; }

printf(“%d”,a); } [程序4]

main ( )

{ int i, j; 运行结果: 1,2,4,8,16,32,64,128,256,512 static int a[10]={1,1,1,1,1,1,1,1,1,1}; for (i=0;i<10;i++) for (j=0;j

printf(“%d,”,a[i]); } [程序5]

int k=2;

f (int m) 运行结果: 6,8 { m+=k;k+=m; 5,9 printf(“%d,%d \\n”,m,k++); }

main ( )

{ int i=4; for (i++);

printf(“%d,%d \\n”,i,k); } [程序6]

void main ( )

{ static int a[10],i; 运行结果: 1 3 5 7 9 for (i=0;i<10;i++) a[i]=i+1;

for (i=0;i<10;i=i+2)

printf(“%d”,*(a+i)); }

三、阅读分析下列程序,在 处填上适当的内容使程序(或函数)完整(共21分,每空3分)

(一) 以下程序输出所有大写字母和其对应的ASCII码值。

void main ( ) { int ch;

for (ch=’A’;ch<=’Z’;ch++)

printf(“字母%c的ASCII码值是:%d\\n”,ch, 1 ); }

答案: ch

(二)以下函数的功能是将一个字符串S的内容颠倒过来。 void reserve( 2 ) 答案: char s[ ]

{ int i, j, k;

for (i=0,j=strlen(s)-1; 3 ;i++,j--) 答案: i

(三)由键盘输入三个数a,b,c,计算以这三个数为边长的三角形面积。 #include void main ( )

{ float a, b, c, s, s1;

scanf(“%f%f%f”, 4 ); 答案: &a,&b,&c if ((a+b)>c && (a+c) > b && (b+c) >a) { s=(a+b+c)/2;

s1=s*(s-a)*(s-b)*(s-c);

s= 5 ; 答案: sqrt(s1) printf(“\\n 三角形面积为:%f \\n”,s); } else

printf(“ \\n 不是三角!\\n”); }

(四)从键盘输入一个字符串,把它输出到文件中,文件名由键盘输入。

#include void main ( ) { FILE *fp;

char ch, *fn; scanf(“%s”,fn);

if ((fp=fopen(fn, 6 ))==NULL) 答案: “w” { printf(“打开文件出错 \\n”); exit(1); }

while ((ch=getchar( ))!=EOF)

{ fputc( 7 ); 答案: ch,fp putchar (ch); }

fclose (fp); }

四、编程题(共21分)

1. 从键盘输入3个整数,输出其中最大数。(5分) main ( )

{ int i=0, x, mx=-32768; while ( i++<3)

{scanf (“%d”,&x); if (x>mx) mx=x;

}

printf (“\\n %d \\n”,mx); }

2. 编写一函数uf(s),将字符串s中的第一个和最后一个字母改写成大写字母(如原来不是字母或已是大写字母,则不变)。(5分) #include uf (char *s) { int i;

i=strlen(s);

if (i==0) return;

if (s[0] >= ’a’ && s[0] <= ’z’) s[0] += ’A’ - ‘a’;

if (s[i-1] >= ’a’ && s[i-1] <= ‘z’) s[i-1] +=’A’ – ‘a’; }

main ( )

{ char s[ ]=”asdfgh”; uf (s);

printf(“ \\n%s\\n”,s); }

3. 从键盘输入10个浮点数,输出其平均值及所有低于平均值的数。(5分) #include main ( ) {

float a[10], ave=0; int i;

for (i=0; i<10;i++) {

scanf(“%f”,&a[i]);

ave +=a[i]; }

ave /=10;

for (i=0;i<10;i++)

if (a[i]

printf(“%f\\t”,a[i]);

}

习题二

一、语言基础(共20分,每题2分)

(一) 若a为float类型变量,且a=4.6785,则表达式(int)(a*100+0.5)/100.0 的值为 4.68 。

(二)设有int x=11,y=10;则以下表达式的值为 10 。

x-- >y? 10:11>y++?’a’:’z’

(三)若所有变量都已正确定义为int型则执行下列程序段后x 的值为 79 。

x=80;a=10b=16;y=9;z=0; if (a

(四)i,j为int型的变量,则下面程序中的循环体的执行次数为 5 。

i=1;j=0; while(i+j<=10) { if (i>j j=j+2); else i=i+2;}

(五)若有数组a[10],类型为int型,元素及值如下所示:

数组元素:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 元素中的值:9 4 8 3 2 6 7 0 1 5

则*(a+a[9] )的值为 6 。

(六)以下函数调用语句中实参的个数为 3 .

Sub ((x1,x2) ,(x3,x4,x5),x6) (七)若有以下函数定义: int (*hs ) ()

{

??/*函数体*/ }

则函数hs返回的值是 整形 。

(八)某C编译程序规定,int型数据存储占2个字节,float型数据存储占4个字节,char型数据存储占1个字节,现有记录描述如下: struct stu {

union {

char bj[5];

int bh[2]; }class; char xm[8];

float cj; }xs;

则sizseof(xs)的值为 17 。 (九)设有以下定义:#define a 6 #define b a+4

则执行语句c=b*10(c为int型数据)后,c的值为 46 。 (十)在C中,文件指针变量的类型只能是 FILE 。

二、阅读下列程序,写出运行结果(共20分,每题4分) [程序1]

#include

main() {

int i; 运行结果:i= 18,J=29.44

float j; i=18; j=29.4361;

printf(“i=M,j=%2.2f”,i,j ); } [程序2]

main()

{ int k=10; char c=’b’; do

swith(c++) 运行结果:12 {

case ‘a’:k++; case ‘b’:k--; case ‘c’:k+=3;break; case ‘d’:k=k%4;

}

while(c!=’c’); printf(“%d\\n”,k );} [程序3]

main()

{

char a[]=”computer”;

char t;

int i,j=0; for(i=0;I<8;I++) for(j=i+1;j<8;j++) if(a[i]

t=a[i];

a[i]=a[j]; a[j]=t;

}

printf(“%s”,a); [程序4]

main()

{

char *p,s[]=”abcdefg”;

for(p=s;*p!=’\\0’); 运行结果: {

printf(“%s\\n”,p);

if(*p!=’\\0’)

p++;

else break;

}

}

5、以下程序的输出结果为___hello wellcom______。main( )

{ char s1[40]=\int i=0,j=0;

while(s1[i]!='\\0') i++;

while(s2[j]!='\\0') s1[i++]=s2[j++];

s1[i]=0;

printf(\}

运行结果:utrpomec abcdefg p++; 6、#include

main() { int i, j, x = 0; for (i=0; i<2; i++) { x++; for (j=0; j<3; j++) { if (j % 2) break; x++; } x++; }

printf(\}

程序运行结果是: x=6

三、阅读下列程序,在 线处填上合适的内容使程序(或函数)完整(共18分,每空2分)

1. 以下程序的功能是求三个数的最小公倍数。 max (int x, int y ,int z) {

if (x>y &&x>z )

return(x);

else if (y>=x &&y>z)

return(y) ; else

return(z);

} main() {

int a,b,c,I=1,j,s;

scanf(“%d%d%d”,&a,&b,&c);

s= max(a,b,c) ; while(1) {

j=s*i;

if( (j%a==0)&&(j%b==0)&&(j%c==0) ) break; i++;

}

prinf(“%d”,j);

}

2. 下面程序是判断输入的字符是否中心对称,(如”xyzzyx”和”xyzyx”都中心对称

#include main() {

char s[100],*p1,p2;

int n; gets(s); n=strlen(s); p1=s; p2= s+n-1 ; while(p1

break;

else

{p1++; p2-- ;}

if (p1

printf(“NO\\n”);

else

printf(“YES\\N”); }

3. 结构数组中有4人的姓名和年龄,以下程序输入四人中年龄最大的人的姓名和年龄。 #define NULL 0 static struct node {

char name[20]; int age;

}person[ ]={“lihong”,18, “wangjun”,19, “zhangwei”,20, “zhaofeng”,19

};

main() {

struct node * p,* q; int old=0; q=NULL; p=person;

for(; p!=NULL ;p++)

if(oldage)

{

q=p;

old=p->age ; }

printf(“%s,%d\\n”,q->name,q->age); }

四、编程题(共22分)

1. 有36块砖,共36人搬,成年男子一次搬4块砖,成年女子一次搬3块砖,儿童两人抬1

块砖,恰好一次全部搬完,编程求出成年男子 成年女子和儿童各有多少人。(6分)

main()

{int men,women,child; for(men=0;men<9;men++)

for(womem=0;women<12;women++) {child=36-men-women;

if((men*4+women*3+child/2.0)=36)

printf(“%d,%d,%d\\n”,men,women,child); }

2. 非波那契数的递归如下:

除X0和X1外,序列中某个元素的值是其前两个元素的和,编写程序输入序号n,求它的非波那契数Xn。

long fib(int y) {

if(y==0)

return(0);

else if(y==1)

return(1);

else

return(fib(y-1)+fib(y-2));

} main() {

int n; long k;

scanf(“%d”,&n); k=fib(n);

printf(“k=%d\\n”,k); }

3.用循环语句编程将二维数组a[3][4]的第一行和第三行对调(如下图), 并输出数组。(8分)

main() {

int i,j,t;

int a[3][4]={2,3,4,5,3,8,10,2,7,9,3,1}; for (i=0;i<4;i++) {

t=a[0][i];

a[0][i]=a[2][i]; a[2][i]=t; }

for (i=0;i<3;i++) {

for (j=0;j<4;j++)

printf(“=”,a[i][j]); printf(“\\n”); } }

习题三

一.语言基础(共20分,每题2分)

(一)正确的C语言自定义标志符是 A 。

1. A)file_bak B)abc(10) C)continue D)class+3

(二)设int x=8,y,z;执行y = z = x + +;x = y = =z后,变量x的值是 B 。

2. A)0 B)1 C)8 D)9

(三)字符串“w\\x53\\ \\ \\np \\103q”的长度是 A 。

3. A)7 B)9 C)15 D)16

(四)设int a = 9,b = 8,c = 7, x = 1;则执行语句 if (a>7) if (b>8) if (c>9) x=2 ;else x = 3;

后 x 的值是 C 。

4. A)0 B)2 C)1 D)3

(五)有如下程序

main () {

int x=23; do{

printf(“%d”,x - -); }while (! x);

}

该程序的执行结果是 B 。

5. A)321 B)23

C)不输出任何内容 D)陷入死循环

(六)定义一个具有8个元素的整型数组,应当使用语句 A 。

6. A) int a[8]; B) int a[2,4]; C) int a[ ]; D) int * a[8];

(七)设int x []={4,2,3,1},q,*p=&x[1];则执行语句

q = (* ――p)+ +后,变量q的值为 A 。

7. A)4 B)3 C)2 D)1

(八)函数调用时,下列说法中不正确的是 B 。

8. A) 实际参数和形式参数可以同名

B) 若用值传递方式,则形式参数不予分配存储单元 C) 主调函数和被调函数可以不在同一个文件中 D) 函数间传递数据可以使用全局变量

(九)下列数据类型中不属于构造类型的是 D 。

9. A)数组型 B)结构型 C)公用型 D)枚举型

(十)存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是 B 。 10.A)3,2 B)2,5 C)5,5 D)5,2

二、阅读下列程序,写出运行结果(共20分,每题4分) 【程序1】

#include main() {

int x = 1,a = 0,b = 0; 运行结果: a=1,b=1

switch(x){

case 0; b + +; case 1; a + +; case 2; a + +;b + +;

}

printf (“a = % d ,b = % d \\n”,a,b); } 【程序2】

space (int m) {

while (m - -) printf (“%c”,32);

} 运行结果: * main() *** { int i ,j;printf (“\\n”); * * * for (i=5;i>=1;i - -) * * * { * * * space (i);

printf (“*”); for (j=3;j>=2*(i/5)+2;j - -) {

space (4-i); printf(“*”);

}

printf (“\\n”); } } 【程序3】

long ff(int n) 运行结果:6

{

if (n>3)

return (ff(n-1)+ff(n-2));

else return (3); }

main () {

printf (“%d\\n”,ff(4)); }

【程序4】

main () 运行结果4 0 0 -4 -3{

int i, a[5]; for(i=0;i<5;i+ +)

a[i]=9*(i-2+4*(i>2))%5; for (i=4;i>=0;i- -) printf (“=”,a[i]); } 【程序5】

#include 运行结果:13 union pw {

int i;

char ch[2]; }a; main () {

a.ch[0]=13;

a.ch[1]=0;

printf (“%d\\n”,a.i);

}

6、以下程序的输出结果为_____ x=37___。

#define A 3

#define B(a) (A+1)*a main() { int x; x=3*A+B(7);

printf(\}

7.#include

void Fun(int *y) {

printf(\

*y += 20; printf(\}

main() { int x = 10; printf(\ Fun(&x); printf(\}

程序运行结果是: x=10 *y=10 *y=30 X=30

三、阅读下列程序,在 处填上适当的内容使其完整。(共20分,每空2分) (一)下面程序用于计算n!的值。 main () {

int i,s,n; s = 1;

printf (“enter n:”);

scanf(“%d”,&n);

for (i=1;i< = n;i + +) ( s=s*i ); printf (“s=%d”,s); }

(二)从键盘上输入一行字符(不多于40个,以回车换行符作为输入结束标记),将其中的大

写字母改为小写字母,其它字符不变,然后逆向输出。

main () {

char a[40]; int n = 0; do{

scanf (“%c”,&a[n]);

if( (‘A’<=a[n])&&(a[n]<=’z’)) a[n] + = 32; n + +;

}while ( a[n-1] ! = ‘ \\n ’); n= n-2;

while (n > = 0)

printf(“%c”,a[n--]); }

(四)从终端读入的文本(用@作为文本结束标志)复制到一个名字C.DAT的新文件中。 # include FILE * fp;

main () {

char ch;

if((fp= p

exit(0);

while ((ch=getchar())! = ‘@’) fpute ( *p= =x ); fclose(fp); }

四、编程题(共20分)

1.编写一程序,从键盘输入10个实数,计算并输出算术平均数。( main() { int i;

float ave=0,a[10]; for(i=0;i<10;i++) scanf(“%f”,&a[i]); for(i=0;i<10;i++) ave+=a[i]; printf(“.4f\\n”,ave/10); }

2.求两个整数m和n最大公约数。(6分) #include main() {

int m,n,a,b,r;

scanf(“%d,%d”,&m,&n); a=m; b=n;

do { r=a%d;

a=b; b=r; }while (r!=0)

printf(“%d,%d is %d\\n”,m,n,a); }

7分)

本文来源:https://www.bwwdw.com/article/bdtp.html

Top