C语言复习资料答案 下载本文

二、类型及表达式 一)合法的标志符: 例题:

1. 是合法的用户自定义标识符的( D )

A)ah-spks B)double C) D)_myapple 2. 以下正确的C语言标识符是( C )

A)%x B)a+b C)a123 D)test! 3. 以下不能定义为用户标识符的是( C )

A) Void B) b_2 C) int D) name

二)合法的整型常量 例题:

1. 以下选项中可作为C语言合法整数的是( D )

A) 11010 B B) 0583 C) x2b2 D) 0xafb

三)合法的实型常量 例题:

1. 以下选项中可作为C语言合法常量的是(A)

A)-80. B)-080 C)-8e1.0 D)-80.0e

四)合法的字符型常量 例题:

1. 设有说明语句:char a=?\\123?;则变量a( A )

A)包含1个字符 B)包含2个字符 C)3个字符 D)说明不合法 2. C 语言中,“\\x5d”在内存中占用的字节数是( A )

A) 2 B) 5 C) 4 D) 1

3. 字符串“\\t\\x42\\\\bcd\\n”的长度是( A )。

A)7 B)10 C)12 D)13

五)各种基本类型变量所占的字节数 例题:

1. 下列式中,值不为4的表达式是( C)

A)sizeof(unsigned long) B)sizeof(long) C)sizeof(unsigned int) D)sizeof(float)

六)合法的表达式 例题:

1. 设变量a、b、c已定义并赋值,则下列表达式中符合C语言语法规则的是( BC )

A)a=5++ B)a=b=c++ C)a%=2 D)b=a+1=2

七)表达式的值 例题:

1. 设整型变量a的值为2,下列表达式值为1的是( C )

A)a%3 B)a/3 C)--a D)a++ 2. 下列表达式的值为0的是( A )

A) 7/8 B) 7%8 C) 7/8.0 D) 7<8

3. 设float m=4.0, n=4.0; 使m为10.0的表达式是( D )

A) m-=n*2.5 B) m/=n+9 C) m*=n-6 D) m+=n+2 4. 逗号表达式(a=4*5,a*2),a+15 的值是( A )

A) 35 B) 40 C) 55 D) 20

八)++、--运算 例题:

当i=4,j=5时,表达式3-(i++)*4+(--j)的值如何,i,j的值多少? 表达式值为-9,i=5,j=4

九)表达式的类型 例题:

1. 下列式中,最终运算结果的数据类型不是双精度的表达式的是( A )

A)(int)(3+3.0) B)1e-3 C)(double)(3) D)(int)3.0+3.0

二、顺序结构 例题:

1. putchar函数可以向终端输出一个( D )

A)整数 B)实数 C)字符串 D)字符

二)printf和scanf语句的使用方法: 例题:

1. 设有语句scanf(%d,%d”,&m,&n);要使m、n的值依次是2、3,正确是输入是( B )

A)2 3 B)2,3 C)2;3 D)2

2. 设变量定义为int a,b;执行下列语句时,输入( B),则a和b的值都是10

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

A)10 10 B) 10,10 C)a=10 b=10 D)a=10,b=10 3. 有以下程序

main()

{ int m,n,p;

scanf(\ printf(\

}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是( A )

A)m=123n=456p=789 B)m=123 n=456 p=789 C)m=123,n=456,p=789 D)123 456 789

例题:

1. 有如下程序段:

int a=3,b=15; float f=7.5;

printf(“%.1f”,(float)a+b/2+(int)f%3);

执行该程序段后,运算结果为:( B ) A)11.5 B)11.0 C)11 D)12.0

三、选择结构

一)关系表达式、逻辑表达式和条件表达式 例题:

1. 在C程序中,用( B )表示逻辑”真”。

A)1 B)非0的数 C)非1的数 D)大于0的数

2. 若有定义:int x=2,y=3,z=4;则表达式!(x+y)+z-1&&y+z%2的值为( C ) A)4 B)0 C)1 D)2

3. 设int a=0,b=0,c=0;c=++a||b++;则a、b、c值分别为( d ) A)0 1 0 B)1 1 1 C)1 1 0 D)1 0 1 4. 执行语句:int a=1,b=0,c;c=a>0||++b;后,b的值为( a ) A)0 B)1 C)2 D)不确定

5. 设int x,y,z=4;x=y=++z;x=(y>z)?x+2:x++;则x的值是( C ) A)4 B)5 C)6 D)7

6.

为表示关系x>y>=z,则正确的c语言表达方式为( C )。 A)(x>y>=z) B)(x>y)and(y>=z)

C)(y=z) D)(x>y)&(y>=z)

7. 若变量ch为char类型,能正确判断出ch为大写字母的表达式是(A)?A?<=CH<=‘Z’ B)(ch>=?A?)||(ch<=?Z?) C)(?A?<=ch) and (?Z?>=ch) D)(ch>=?A?)&&(ch<=?Z?)

二)if语句 例题:

1.有以下程序 main( )

{ int a=0,b=0,c=0,d=0; if(a=1)b=1;c=2; else d=3;

printf(%d,%d,%d,%d\\n,a,b,c,d); }

程序输出( D )

A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错

2.以下程序运行后的输出结果是 4599 main() {

int a=3,b=4,c=5,t=99;

if(b

}

D )

三)switch语句

(1)switch的执行过程 (2)break的用法 例题:

1.#include main()

{ int x=1,y=1,a=0,b=0; switch(x)

{case 1:switch(y) { case 0:a++; case 1:b++;

case 2:b++;break; }

case 2:a++;b++;break; case 3:a++;b++;

}

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

输出结果:a=1,b=3

2.#include输入:3210

main() {charc;

while((c=getchar())!=’\\n’) {switch(c-‘1’) {case 0:

case 1:putchar(c+2); case 2:putchar(c+3);break; case 3:putchar(c+4); default:putchar(c+1);break; }

printf(“\\n”); }

} 输出结果: 6 45 34 1

四)算法

输入出租车里程S,输出应付车费F。 S和F的关系如下:

8?F???8?(S?3)*2S??3 S?3#include void main( ) { float S,F;

scanf(“%f”,&S); if(S<=3) F=8; else F=8+(S-3)*2; printf(“F=%f\\n”,F); }

四、循环结构

一)循环条件均以条件为真(非0)进行循环,以条件为假(0)结束循环) 例题:

1. 以下叙述正确的是(D )

A) do-while语句构成的循环不能用其它语句构成的循环来代替 B) do-while语句构成的循环只能用break语句退出 C) do-while语句构成的循环,在while后的表达式为非零时结束循环 D) do-while语句构成的循环,在while后的表达式为零时结束循环 2. 设有程序段: int k=10;

while(k=0) k=k-1;

则循环体执行的次数为( C )

A)10次 B)9次 C)0次 D)1次 3. 下列( D ) 循环不是无限循环

A) for(y=0; x=1 ; ++y); B) for(; ; x=0);

C) while (x=1) {x=1; } D) for(y=0,x=1;x> ++ y; x++)

二)三种循环的执行流程 例题:

1. 设变量y值为3,执行下列循环语句后,变量y的值的是(C )

do y++; while(y++<4); A)3 B)4 C)5 D)6

2. 执行语句for(I=1;I++<4;); 后变量I的值是( C )

A)3 B)4 C)5 D)0

三)循环嵌套的执行次数 例题:

1.#include “stdio.h” void main() { int I,j;

for(I=0;I<=3;I++) { for(j=0;j

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

输出结果: * 1* 22* 333*

四)break 和continue的用法 例题:

1.有以下程序

void main() { int a=1,b;

for(b=1;b<=10;b++) { if(a>=8) break;

if(a%2==1) { a+=5; continue;} a-=3; }

printf(\

}

输出结果:4

2.#include void main( )

{ int I, m=0, n=0, k=0; for(I=5;I<=7;I++) switch(i/6)

{ case 0: m++; n++; case 6: n++; break; default: k++; n++; }

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

输出结果:1,4,2

算法略

五、数组

一)数组语法

1. 数组定义为int a[10][10];,则数组a有( A A)100 B)81 C)20 D)121 2. 以下一维数组 a的正确定义是(D )

A)int a(10); B)int n=10,a[n]; C) int n; D)#define N 10

)个数组元素。

Scanf(“%d”,&n); int a[N]; Int a[n];

3. 设有语句”int a[]={3,4,5,9,8,7};”则表达式a[1]-a[4]的值是( C )

A)-6 B)6 C)-4 D)2

4. 以下不能正确定义二维数组的是( D )

A) int a[2][2]={ {4}, {5}};B) int a[][2]={4,5,6,7};

C) int a[2][2]={ {4},5,6}; D) int a[2][]={{4,5},.{6,7}};

二)字符串 例题:

1. 以下程序的输出结果是( B)

#include #include main()

{ char st[20]=”2000\\0\\t\\\\”;

printf(“%d,%d\\n”,strlen(st),sizeof(st)); }

A)7,7 B)4,20 C)10,20 D)20,20

2. 要将字符串a连接到字符串b后面,使用下面( D)语句

A)strcpy(a,b); B)strcat(a,b); C)strcpy(b,a); D)strcat(b,a)

三)算法 例题:

1. 已知字符串char s[50]=”Iamstudent.”,请编写程序将字符a插入到student之前,结果

为“Iamastudent”。 程序如下:

#include #include void main() {

car s[50]=”Iamstudent.”; int j,len; len=strlen(s); s[len+1]=’\\0’

for(j=len-1;j>=3;j--)

s[j+1]=s[j]; s[3]=’\\0’ puts(s); }

2. 有一个3×4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列

号。 程序如下:

#include

void main() {

int i,j,row,col,max;

static int a[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}}; max=a[0][0];

for(i=0;i<_3_;i++) /*$BLANK1$*/ for(j=0;j<4;j++)

if(a[i][j]>max) /*$BLANK2$*/ {

max=_ a[i][j]__; /*$BLANK3$*/ row=i; col=j; }

printf(\ }

六、函数

一)函数语法 例题:

1. 在C程序中,若对函数类型未加说明,则函数的隐含类型为( A )

A)int B)double C)void D)char 2. C语言中的函数( D )

A)可以嵌套定义 B)不可以嵌套调用

C)可以嵌套定义,但不能递归调用 D)嵌套调用和递归调用都可以。 3. 有以下函数定义:

void fun( int n, double x) { ????} 下面函数调用正确的是( A )

A) fun( x, n) B) k=fun(10,12.5)

C) fun(int x, double y) D) void fun(n, x) 4. 有以下程序

#define N 20

fun(int a[],int n,int m) { int i,j;

for(i=m;i>=n;i--) a[i+1]=a[i];

} main()

{ int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9);

for(i=0;i<5;i++) printf(\}

程序运行后的输出结果是( C )

A)10234 B)12344 C)12334 D)12234

5. 有以下程序

void sum(int a[]) { a[0] = a[-1]+a[1]; } main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]);

printf(\ }

( A)

A)6 B)7 C)5 D)8 6. 以下程序运行后的输出结果是:

4 3 3 4 4 3 4 3 二)递归函数 例题:

【程序1】#include”stdio.h”

int fun( int n)

{ if(n<10) return n; else

return (n)*fun(n/10);

} main()

{ printf(“%d”,fun(218)); } 运行结果:

16

【程序2】

# include long fun( int n) { long s;

if( n== 1|| n==2) s=2; else s=n+ fun(n-1);

return s; }

void main ( )

{ printf(“\\n %ld”, fun (5)); } 运行结果: 14

三)变量的作用域和存储类型(见课件) 例题:

1. C语言auto型变量是( A )

A) 存储在动态存储区中 B) 存储在静态存储区中

C) 存储在外存储器中 D) 存储在计算机CPU的寄存器中

【程序1】int w=2; int f(int x) {int y=1;

static int z=3; y++;z++;

return(x+y+z); }

main()

{ int k;

for(k=0;k<3;k++)

printf(“M”,f(w++)); }

运行结果:8 10 12

【程序2】以下程序运行后的输出结果是:

fun(int a)

{ int b=0;static int c=3; b++; c++;

return (a+b+c); } main()

{ int i,a=5;

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

printf(\ \ printf(\

}

运行结果:

0 10 1 11 2 12

七、指针 例题:

1. 设有定义:int s[]={1,3,5,7,9},*p=&s[0];则值为7的表达式是( C )

A)*p+3 B)*p+4 C)*(p+3) D)*(p+4) 2. 若有以下定义,则值为4的表达式是( A )

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;

A)p+=3,*(p++) B)p+=3,*++p C)p+=4,*p++ D)p+=4,++*p 3. 若有定义及赋值:

int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} , *p; p=a; 则引用a中的值是5的元素的表达式为( C )

A) a[4] B) *(p+4) C) *(a+5) D) *p[5]

4. 设int x[]={1,2,3,4,5,6},*p=x; 则值为3的表达式是 ( A )

A) p+=2, *p++ B) p+=2, *++p C) p+=3 D) p+=2 , ++*p 5. 若有定义及赋值:

int a[5][5], (*p)[5]; p=a; 则下列各式中表示地址的表达式为( C ) A) a[3][3] B) *(*(p+1)) C) a[2]+2 D) *(*(a+3)+1) 6. 设有一下语句

int a[4][2]={1,2,3,4,5,6,7,8}; 则*(*(a+2)+1) ( D ) A)3 B)4 C)5 D)6

四)字符串及字符串数组涵义 例题:

1. 不正确的赋值或赋初值方式是( B )

A)char str[]=”Hell0 2006” B)char str[20];str=”Hell0 2006”; C) char *p=”Hell0 2006” D) char *p;p=”Hell0 2006” 2. 下列语句中合法的数组定义是( D )

A)char a[3][]={‘abc’,’12’,”fox”} B)char a[][3]={‘abc’,’12’,”cd”} C)char a[3][]={‘a’,”12”,”fox”} D)char a[][3]={“a”,”12”,”cd”}

3. 以下语句或语句组中,能正确进行字符串赋值的是 ( D )

A)char *sp; *sp=\ B)char s[10]; s=\C)char s[10]; *s=\ D)char *sp=\

八、宏定义、结构体与共用体 一)宏定义 例题:

1. 运行程序:

#define Tap(X) 2*X+1 main()

{ int a=6,k=2,m=1; a+=Tap(k+m); printf(“%d\\n”,a);

}则输出结果是( A )

A)12 B)13 C)7 D)6 2. 对于以下宏定义

# define M(x) x*x

# define N(x,y) M(x)+M(y)

宏调用N (2, 2+5)执行后,值为( A ) A) 21 B) 16 C) 9 D) 19

二)结构体 例题:

1. 设有结构体及其数组和指针变量的定义语句

struct {int x;} y[2],*p=y;

则下列表达式中不正确的表示结构体成员的是( B ) A)(*p).x B) (p+1).x C)y[0].x D)(&y[1])->x

2. 设有定义struct st { int x ; float y; } time, *t; t=&time;则对于time 中成员x

的正确引用是( C )

A) w.time.x B) t. x C) (*t). x D) time->x

三)共用体 例题:

1. 若定义union ex{int I;float f;char a[10];} x;则sizeof(x)的值是( C )

A)4 B)6 C)10 D)16

2. 设有下列结构型变量w的定义,则表达式”sizeof(w)”的值是( C )

struct { long num; char name[15];

union{float y;short z;} yz; }w;

A)19 B)20 C)23 D)25

四)typedef 例题:

1. 以下语句中,指针p的data域正确的引用方式为( B )

typedef struct node { int data;

struct node lchile,rchild; }Btree; Btree *p;

A)p.data B)p->data C)(*p)->data D)p[data] 2. 设有如下说明

typedef struct ST

{ long a; int b; char c[2]; } NEW;

则下面叙述中正确的是 ( C )

A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 3. 以下对结构体类型变量td的定义中,错误的是 ( C )

A)typedef struct aa B)struct aa { {

int n; int n; float m; float m; }AA; } ;

AA td; struct aa td; C)struct D)struct { {

int n; int n; float m; float m; }aa; }td; struct aa td;

九、位运算 例题:请计算:(题有变) 4&6=4 3|5=7 ~4=-5 5>>2=1 5<<2=20

十、文件 例题:

1. 为了向二进制文件尾部追加内容,打开文件的方式应采用( A ) A) ‘ab’ B) ‘rb+’ C) ‘wb’ D) ‘wb+’ 2. 设有下面结构体 struct st

{char name[8]; int num; float s[4]; }student[50];

若数组student中已有数据,将这些元素写到磁盘文件中,下列不正确的形式是( C)。

A)fwrite(student,sizeof(struct st),50,fp); B)fwrite(student,50*sizeof(struct st),1,fp); C)fwrite(student,25*sizeof(struct st),25,fp);

D)for(I=0;I<50;I++) fwrite(student+i,sizeof(struct st),1,fp);

3. 当顺利地执行了文件关闭操作时,fclose的返回值是( C )

A)-1 B)TURE C)0 D)1

模拟试卷1答案

一、选择题(40分) 1-5 CBACD 6-10 BDCAA 21-25 CDBDC 26-30 ABCCB

二、填空题(每空2分,共20分) 1.F10 2.11.5 3.30 6.12345 7.ef 8.16

11-15 CADDC 31-35DCBBD

16-20 ABDBC 36-40 CCBCA

4.2

9.feof(fp) 5.3 10.7

三、阅读理解题 1.35 2.3,4 3.228

四、编程题

1.#include void main( ) { int i; float s;

for(i=1;i<=99;i=i+2) { s=s+1.0/i; }

printf(“.2f”s);

}

2.#include void main( ) { int i,j,k;

for(i=5;i>=1;i--) { for(j=1;j<=i;j++) printf(“ “); for(k=1;k<=i;k++) printf(“%d”,i); printf(“\\n”); } }

3.#include

#include main()

{ char s[100]; int i;

gets(s); i=1; while(s[i]!=?\\0?)

{ if(s[i]

i=i+1;}

if(s[i]= =?\\0?) printf(“yes”); else printf(“no”); }

4.35 5.29

模拟试卷2答案

一、选择题(40分) 1-5 ADCBA 6-10 CDACB 11-15 CACBA 21-25 CAABC 26-30 BDBBB 31-35BADBA 16-20 DADCC 36-40 DCBDA

二、填空题(每空2分,共20分) 1.十六 2.18 3.int 6.0 7.20 8.Strcat(s1,s2)

三、阅读理解题 1.65,A 2.2 3.10 65,A 3.141590,3.1416

四、编程题

1.#include void main( ) { int i, s=0;

for(i=5;i<=500;i=i+52) { s=s+i; }

printf(“%d”s);

}

2.#include void main( ) { int i,j,k;

for(i=1;i< =5;i++) { for(j=5;j>=i;j--) printf(“ “); for(k=i;k>=1;k--) printf(“%d”,k); printf(“\\n”); } }

3.#include

int main()

{ char s[100]=”Hello 2009, We are ready.”; int n=0; int i=0;

while(s[i]!=?\\0?)

{ if(s[i]<=?z?&&s[i]>=?a?) {s[i]=s[i]-32;n=n+1;} else if(s[i]<=?Z?&&s[i]>=?A?) n=n+1;

4.0 5.= = 9.16 10.1

4.5 5.-15

19

i++; }

puts(s);

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

模拟试卷3答案

一、选择题(40分) 1-5 AABAC 6-10 DBCDC 21-25 BCBCD 26-30 ADDAB 11-15DBACD

31-35BDABC

16-20 BDCBA 36-40 ACABD

二、填空题(每空2分,共20分) 1.65 2.56.8 3.14 6.6 7.Hello 8.8

三、阅读理解题

1.a=4,b=5,c=1 2.23 3.A

四、编程题

1.#include void main( ) { int i,s=0;

for(i=2009;i<=9002;i=i+1)

{ if(i)==0||i?==0) s=s+i; }

printf(“s=%d”,s);

}

2.#include void main( ) { int i,k,x;

for(i=1;i<=4;i++) {

for(k=1;k

{ if(i==4&&k==1)x=2;

else x=0; printf(“%d”,x); }

printf(“9\\n”); } }

3.void change(char s[ ])

{ int i=0;

while(s[i]!=?\\0?)

4.2.0 9.math.h 4.1 2 6 24

5.x>=1&&x<=3 10.0

5.15

{ if(s[i]>=?A?&&s[i]=?a?&&s[i]

i=i+1; } }

模拟试卷4答案

一、选择题(40分) 1-5 DACBD 6-10 CADCB 11-15ACBBD 16-20 CDBAB 21-25 DDCCA 26-30 CDBAB 31-35ABDCC 36-40 BACDA

二、填空题(每空2分,共20分) 1.数字 2.10 3.11 4.回车(Enter) 5.! 6.12 7.long 8. 6 9. st.num=20100109; 10.17

三、阅读理解题 1.B,b 2.n=86,grade=B 3.141590,3.1416

4.The string:WORLD CPU 2010! 5.s=10

四、编程题

1.#include void main( ) { float S,F;

scanf(“%f”,&S); if(S<=3) F=8; else F=8+(S-3)*2 printf(“.2f”,F);

}

2.#include void main( ) { int i,k;

for(i=1;i<=5;i++) { for(k=1;k<=i;k++) printf(“%d”,k); printf(“\\n”); } }

3.#include

void main()

{ int a[10]={4,6,2,1,9,6,8,7,1,5}; int min,i; min=a[0];

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

if(a[i]

if(a[i]==min) printf(“%d,”,i); }

3.1 1 2 3 5 8 21 13 模拟试卷5答案

一、选择题(40分) 1-5 BACBD 6-10 CCDDA 11-15 CBCDA 21-25 CBACA 26-30 CACDB 31-35DACBD 16-20 CDCBD 36-40 BCAAD

二、填空题(每空2分,共20分) 1.选择结构 2.41 3.56.79 6.strcmp 7.static 8.H

三、阅读理解题

1.2010 is not a leap year! 2.pass! 4.n=4,m=15 5.ABCDEFGH abCDefGH CDGH

四、编程题

1.#include void main( ) { int a,b;

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

if(a%b==0) printf(“%d”,a/b); else printf(“5d…….%d”,a/b,a%b); }

2.#include void main( ) { int s=0,t=0,i;

for(i=1;i<=5;i++) { t=t*10+1;

s=s+t;

}

printf(“%d”,s); }

3.#include

int main()

{ int s[10],mc[10]={0}; int i,j;

for(i=0;i<10;i++) { scanf(\ }

for(i=0;i<=9;i++) { for(j=0;j<=9;j++)

if(s[j]>s[i]) mc[i]++; mc[i]=mc[i]+1;

4.3 5.9 9.5 10.0

3.num=4

}

for(i=0;i<=9;i++) printf(\ printf(\

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

printf(\}