当前位置:文档之家› C语言程序设计复习资料

C语言程序设计复习资料

C语言程序设计复习资料
C语言程序设计复习资料

C语言程序设计复习资料

一、选择题

下列各题ABCD四个选项中,只有一个选项是正确的,请将正确选项涂在答题卡的相应位置上,答在试卷上不得分。

1、不合法的整数是(B )。

A)0x35 B)43.6 C)0532 D)-346

2、下列合法的字符常量是(D )。

A)“f”B)x C)65 D)‘\Xab’

3、设有整型变量x,单精度变量y=5.5,表达式x=float(y*3+((int)y%4))执行后,x的值为(A )。

A)17B)17.500000 C)17.5 D)1.5

4、在C语言中,负整数在内存中以( A )形式释放。

A)补码B)BCD码C)反码D)十进制数

5、在C语言中,要求参加运算的数必须是整数的运算符是(C )。

A)/ B)!C)%D)= =

6、(D)是C语言中非法的数据类型关键字。

A)float B)singed C)integer D)Char

7、现已定义整形变量int i=1;执行循环语句while(i++<5);后i的值为(b)。

A)1 B)5 C)6 D)以上三个答案都不正确

8、下列语句的输出结果是(D )。

printf(“%f\n”,(float)(2+4)/2);

A)有语法错误不能通过编译B)3 C)3.0 D)3.000000

12、定义a为整型,下列表达式a=3>6的运行后,a的值为(A )。

A)0 B)1 C)3 D)表达式错误

13、如果a=1,b=2,c=3,d=4,则条件表达式a>b?a:c>d?c:d的值为(D )。

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

14、对于条件表达式(M)?(a++):(a--),其中的表达式M等价于(C )。

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

15、在x值处于-2到2,4到8时值为“真”,否则为“假”的表达式是(D )。

A)(2>x>-2)||(4>x>8) B)((x<=-2)||(x>=2)||((x>4)||(x>=8))

C)(x<2)&&(x>=-2)&&(x>4)&&(x<8) D)(x>-2)&&(x>4)||(x<8)&&(x<2)

16、已知字母a的ASC||的十进制代码为97,则执行下列语句后输出为(C )。

Char a=‘a’;

a--;

printf(“%d,%c\n”,a+‘2’-‘0’,a+‘3’-‘0’);

A)a,c B)a—运算不合法,故有语法错误C)98,c D)格式描述和输出项不匹配,输出无定值

18、C语言中,逻辑“真”等价于(C )。

A)大于零的数B)大于零的整数C)非零的数D)非零的整数

19、下列语句中,符合语法的语句式(D )。

A)a+b=3 B)a=7 C)a=c+b+3=6; D)a=8,b=a+7;

20、若x为float型变量,则以列程序段结果是(B )。

x=1234.6789;

printf(“%-2.1f”,x);

A)输出格式描述符的域宽度不够,不能输出B)输出为1234.7

C)输出为1234.6 D)输出为-1234.6

21、下面函数的功能是(A )。

Int funl(char*x)

{

char*y=x;

while(*y++);

return(y-x-1);

}

A)求字符串的长度B)比较两个字符串的大小C)将字符串x复制到字符串y

D)将字符串x连接到字符串y后面

22、指针变量a所指的字符串长度为(D )。

Char*a=”\n\”My Name is \”Zhang Li\”\n”;

A)26 B)27 C)28 D)23

23、若有以下说明和语句,则输出结果是(B )。

Char*sp=”\\\”\n”;

Printf(“%d”,strlen(sp));

A)6 B)3 C) 5 D)字符串中有非法自负,输出值不定

24、若有以下的说明语句,则对字符串中字符的不正确引用是(其中0<=i<6)( D ).

Char*strp=“string”;

A)*strp B)*(strp+i) C)strp[i] D)strp

25、函数调用:strcat(strcpy(str1,str2),str3)的功能是(C )。

A)将串str1复制到串str2中后再连接到串str3之后

B)将串str1连接到串str2之后再复制到串str3之后

C)将串str2复制到串str1中后再将串str3连接到串str1之后

D)将串str2连接到串str1之后再将串str1复制到串str3之后

26、若使用下述程序段将整数12和浮点数13.6分别赋给变量a和b,那么输入应该式(B )。

int a;

float b;

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

A)12 13.6 B)a=12, b=13.6C)12, 13.6 D)a=12 b=13.6

27、对下面的程序说法正确的是(C )。

main()

{int x+3,y=0,z=0;

if(x=y+z)

printf(“****”);

else

printf(“####”);

}

A)有语法错误,不能通过编译B)输出为**** C)输出为# # # # D)通过编译,但是不能运行

28、下面程序的输出是(B )。

main()

{

int x=10,y=3;

printf(“%d\n”,y=x%y);

}

A)0 B)1 C)3 D)不确定的值

29、(D )是不正确的C语言赋值语句。

A)a=a+1; B)i++; C)a*=1,b=8; D)a=3

30、C语言程序的三种基本程序是(A )。

A)顺序结构,选择结构,循环结构B)递归结构,循环结构,转移结构

C)嵌套结构,递归结构,顺序结构D)循环结构,转移结构,顺序结构

33、以下程序段(B )。

int x=1,y=4;

printf(x

A)输出控制格式错误B)输出:x=1 C)输出:y=1 D)输出:y=4

34、为了避免嵌套的条件语句if-else的二义性,C语言规定:else与(B )是正确的。

A)缩排位置相同的if B)其之前最近的if C)其之后if D)同一行上的if

35、下列关于switch语句和break语句的结论中,只有(B )是正确的。

A)break语句是switch语句的一部分

B)在switch语句中可以根据需要使用或不使用break语句

C)在switch语句中必须使用break语句

D)以上三个结论有两个是正确的

36、设I和x都是int类型,则对于for循环语句for(i=0,x=0;i<9;i++),下列哪句话正确( B )。

A)执行8次B)执行9次C)是无限循环D)循环体一次也不执行

40、char(*A)[5],则标识符A的意义时(B)。

A)A是一个指向有5个字符型元素的指针变量

B)A是一个有5个元素的一维数组,每个元素指向字符型的指针变量

C)A是一个指向字符型的函数的指针变量

D)A是一个有5个元素的一维数组,每个元素指向整型变量的指针变量

112、C语言程序的三种基本结构是(A)

A)顺序结构,选择结构,循环结构B)递归结构,循环结构,转移结构

C)嵌套结构,递归结构,顺序结构D)循环结构,转移结构,顺序结构

1.下列合法的字符常量是(D )。

A.“f”

B.x

C.65

D.‘\Xab’

2.下面那个是属于合法的标识符( C )

A.99

B.1_s

C. ab

D.@vb

3.在C语言中,要求参加运算的数必须是整数的运算符是(C )。

A. /

B. !

C. %

D. = =

4.现已定义整形变量int i=1;执行循环语句while(i++<5);后i的值为(B )。

A. 1

B. 5

C. 6

D. 以上三个答案都不正确

5.下列语句的输出结果是(D )。

printf(“%f\n”,(float)(2+4)/2);

A. 有语法错误不能通过编译

B. 3

C. 3.0

D. 3.000000

6.设C语言中,int类型数据占2个字节,则long类型数据占(D )个字节。

A. 1

B. 2

C. 8

D. 4

7.现有表达式y=x<1?1:(x<10?2:3),如x=12,则y等于( C )

A.2

B.1

C. 3

D. 0

8.定义a为整型,下列表达式a=3>6的运行后,a的值为(A)。

A. 0

B. 1

C. 3

D. 表达式错误

9.表达式a=3,a+1,a*a的值是( B )

A.2

B.9

C. 16

D.4

10.下列语句中,符合语法的语句式(D)。

A. a+b=3

B. a=7

C. a=c+b+3=6;

D. a=8,b=a+7;

在c中单精度数据类型的精度是几?( C )

A.8

B.6

C. 7

D. 5

5.在C语言中,用( B )表示逻辑值“真”。

A.1

B.非0的数

C. “a”

D. ‘\101’

6.表达式2.5+7%3*3(int)(2.5+4.7)%2/4的结果是(D)

A.2.4

B.2.75

C. 3

D. 2.5

7.表达式!4||3&&2的结果是( A )

A.1

B.0

C.4

D. 2

8.现有表达式y=x<1?1:(x<10?2:3),如x=5,则y等于( A )

A.2

B.1

C. 3

D. 0

9.若变量已正确定义,语句“if(a>b) k=0;else k=1;”和其等价的是(D )

A.k=(a>b)?1:0

B.k=a>b;

C. k=a<=b;

D. a<=b?0:1;

10.设x=3,执行语句y=x++后,x、y分别等于( D )

A.3,3

B.1,2

C. 3,4

D. 4,3

11.表达式a=3,a=a+1,a*a的值是( C )

A.2

B.9

C. 16

D.4

12.函数调用:strcat(strcpy(str1,str2),str3)的功能是(C)。

A. 将串str1复制到串str2中后再连接到串str3之后

B.将串str1连接到串str2之后再复制到串str3之后

C.将串str2复制到串str1中后再将串str3连接到串str1之后

D.将串str2连接到串str1之后再将串str1复制到串str3之后

13.break语句的作用是( B )

A.结束本次循环

B.结束所有循环

C. 结束一条语句

D.结束整个程序14.下列程序的输出结果是( C )。

fun(int a, int b, int c)

{ c =a*b; }

main( )

{ int c=5;

fun(2,3,c);

printf(”%d\n”,c);

}

A.0

B.5

C.6

D.无法确定

二、填空。

三、5. 下述函数的功能是__将数组a的元素由小到大排序_____________________ .

void func(int a[],int n)

{ int i,j;

for(i=1;i

{ for(j=i;j>0 && a[j]

{ int t=a[j];

a[j]=a[j-1];

a[j-1]=t;

}

}

}

8.一个C源程序中至少应包括一个main()函数______。

9.在一个C源程序中,注释部分两侧的分界符分别为__/*___和__*/___。

10.在C语言中,输入操作是由库函数_scanf___完成的,输出操作是由库函数_printf____完成的。

11.经过下述赋植后,变量X的数据类型是_整型int______。

Int x=2;

Double y;

Y =(int)(float)x;

12.C语言的基本数据类型分别为__整_int___型、_字符_char____型、_实float_____型。13.若a、b和c均是int类型变量,则执行下面表达式后,a值为___6_____,b值为___4____,c值为___2____。

a=(b=4)+(c=2)

14.若a是int型变量,则执行下面表达式后,a的值为___2___。

a=25/3%3

15.若x和n均是int型变量,且x和n的初值均为5,则执行下面表达式后,x的值为__10___,n的值为___6____。

x+=n++

16.若有定义:iloat a=2.5,cnt b=7;f=4.7;则执行下面表达式的值为__5.5____。

a+(int)(b/3*(int)(a+c)/2)%4

17.若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为_8.000000________。

18.若有定义:int e=1,f =4,g=2;float m=10.5,n=4.0,k;则执行赋值表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m后,k的值为___13.700000___________。

19.表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))值的数据类型为____int整型___________。20.表达式pow(2.8,sqrt(double(x)))值的数据类型为__double双精度_____。

21.若s是int型变量,且s=6,则下面表达式的值为______1_______。

s%2+(s+1)%2

22.若a 是int型变量,则下面表达式的值为____26_________。

(a=4*5,a*2),a+6

23.若x和a均是int型变量,则执行表达式(1)后的x值为___12____,执行表达式(2)后的x值为_____4________。

(1)x=(a=4,6*2)

(2)x=a=4,6*2

?24.若有以下定义,则执行表达式y+=y-=m*=y后,y的值为_____-16________

int m=5,y=2;

25.设C语言中,一个int型数据在内存中占两个字节,则int型数据的取值范围为-32768---32767

数组名中存放的是一个地址常量,它代表___数组的首地址_____。

2.表示“x≥y≥z”的C语言表达式是_(x>=y&&y>=z)________。

3.设ch是字符型变量,判断ch为英文字母的c语言表达式是:

(ch>=’A’&&ch<=’Z’)||(ch>=’a’&&ch<=’z’)。

4.已知int a[10]; int *px=a,*py=&a[3];那么py与px相隔___6______个字节。

5.If语句中if总是和__最近_______else匹配。

6.从函数的参数来分函数分为_有参函数________、__无参函数______。

7.调用函数时,函数名称必须与__被调用函数____________名称完全一致。

8.形参变量只有在___调用_______时,才分配内存单元。__调用结束_______时,即刻释放所分配的内存单元。

6.从函数的参数来分函数分为_有参函数________、__无参函数______。

7.在x值处于-2到2,4到8时值为“真”,否则为“假”的表达式是__(x>=-2&&x<=2)||(x>=4&&x<=8)__________。

8.下面函数的功能是___求字符串的长度________________。

Int funl(char*x)

{

char*y=x;

while(*y++);

return(y-x-1);

}

9.设I和x都是int类型,则对于for循环语句for(i=0,x=0;i<9;i++)执行了___9____次。10.在C语言中,逻辑值“真”用__非0的数____________来表示。

四、程序运行结果

1.下列程序输出的结果是11,13,14,16,17,19,20。

Main()

{ int n;

for(n=10;n<=20;n++)

{ if(n%3= =0)

Continue;

Printf(“%d”,n);

}

}

2.下列程序段的输出是______5_________。

#define f(a, b, x) a*x+b

printf("%d", f(3,2,1));

3.#include

#define M 3

#define N M+1

main()

{

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

4.main()

{ int array[5]={2,4,6,810};

int *pointer=array;

printf(”%d”,array[0]);

printf(”%d”,*(array+1));

printf(”%d”,*(pointer+2));

printf(”%d”,*(pioter++));

}

四、程序分析(23分)

2.下面程序的功能是什么?

#include “stdio.h”

main()

{

int a,b,c,temp;

printf(“\n请输入三个数:”);

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

printf(“a=%d,b=%d,c=%d”,a,b,c);

temp=a;

a=c;

c=b;

b=temp;

printf(“\n交换之后a=%d,b=%d,c=%d”,a,b,c);

}

3.下面程序的功能是什么?

#include

prime(int a)

{

int e,i,yes;

yes=1;e=a/2;

i=2;

while((i<=e)&&yes)

if((a%i)= =0) yes=0;

else i++;

return yes;

}

main()

{

int x;

printf(“输入一个整数给:”);

scanf(“%d”,&x);

if(prime(x)) printf(“YES\n”);

else printf(“No\n”);

}

4.下列程序的输出结果是(C )。

#include

void fun();

void main()

{

int x=1;

if(x= =1)

{

int x=2;

printf(“%d”,++x);

}

void fun()

{

printf(“%d”,x++);

}

A)2,1,1 B)1,2,1 C)2,2,2 D)2,2,1

5.以下程序的输出结果是(C )。

main()

{

char *a[][5]={“how”,”do”,”you”,”do”,”!”};

char **p;

int i;

p=a;

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

printf(“%s”,p[i]);

}

A)howdoyoudo! B)how C)howdoyoudo D)hdyd

6.下述程序的输出结果为(D)。

#include

void main()

{

int a[5]={2,4,6,8,10};

int *p=a,**q=&p;

printf(“d%,”,*(p++));

printf(“%d”,**q);

}

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

五、程序填空。(27分)

1. 下面程序是求100—200间的全部素数。

#include

main()

{ (1)int prime(int n);

for (m=101;m<=200;m=m+2)

if ( (2)prime(m))

{ printf(“%d”,m);}

}

int prime(int n) /* 判断n是否为素数*/

{ int flag=1,i;

for (i=2;i

if (n%i= =0)

flag=0;

return ( __(3)_flag__);

}

3.下述函数将字符串转换成整数。字符串中允许出现前导空格符、换行符和制表符,除此之外的其他非数字字符开头作0处理。此外,若字符串中出现非数字字符,则终止字符串的转换。

void stoa (char * s,long * a)

{ int i=0,sign=______(1)__1____;

while(s[i]= =’’‖s[i]= =’\t’)

i++;

if(s[i]= =’+’‖s[i]= =’—’)

{ sing=s[i]= =’+’? 1: —1;

____(2)_i++_;

}

for (*a=0;_(3)s[i]>=’0’&&s[i]<=’9’__;I++)

*a=___(4)sign__;

*a*=sign;

}

4.本程序用改进的气泡排序法对数组a的元素从小到大排序。

void bubble(int a[],int n)

{ int j,k,jmax,temp;

jmax=____(1)_n-1_____;

do

{ k=__(2)__0______;

for(j=0;j

if(a[j]>a[j+1])

{ temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

k=__(3)___j__________;

}

jmax=__(4)___k_____;

}while(jmax>0);

}

4、程序分析

(1)程序有错误么?如有,请给予改正。并写出程序运行结果。(5分)

(2)指出哪些变量属于局部变量,哪些变量属于全局变量?同时给出给各变量的作用范围(用行号表示)。(5分)

1.int s1, s3,v;

2.int vs(int a,int b,int c)

3.{ int k;

4.k=a*b*c; s1=a*b; s2=b*c; s3=a*c;

5.return k;

6.}

7.int s2;

8.main()

9.{int l,w,h;

10.l=3;w=2;h=5;

11.v=vs(l,w,h);

12.printf("v=%d ,s1=%d , s2=%d, s3=%d\n",v,s1,s2,s3);

13.}

(1)程序有错误,改正:第3行与第4行之间插入语句extern int s2;程序运行结果:30,6,10,15。

(2)局部变量:a,b,c,k,l,w,h,它们的作用范围只在自己函数内,全局变量:s1,s3,v,s2;其中s1,s3,v的作用范围为1—13,s2的作用范围为7—13。

(2)下面程序的功能是什么?对三个数排序

#include “stdio.h”

main()

{

int a,b,c,temp;

printf(“\n请输入三个数:”);

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

printf(“a=%d,b=%d,c=%d”,a,b,c);

temp=a;

a=c;

c=b;

b=temp;

printf(“\n交换之后a=%d,b=%d,c=%d”,a,b,c);

}

五、程序填空

(1)下面程序的功能是:输入10个整数,将其中最小的数与第一个数队换,把最大的数与最后一个数对换。

Main()

{ int number[10];

Input(number);

_(4) max min value(number)_________________;

Output(number);

}

Input(int number[10] )

{int i ;

Printf(“input 10 number:”);

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

Scanf(“%d”,&number[i]);

}

Max_min_value(int array[10])

{ int *max,*min,*p,*array_end;

Array_end=array+10;

Max=min=array;

For(p=array+1;_ _ (5) p

If(*p>*max)_____(6) max=p;___________;

else if(*p<*min) min=p;

*p=array[0];array[0]=*min;*min=*p;

_(7)_*p=array[9];array[9]=*max;*max=*p;______________________________

Return;

}

Output(int array[10])

{ int *p;

Printf(“Now,they are:”);

For(p=array;p<=array+9;p++)

Printf(“%d”,____(8) *p_____);

}

(2)下列程序对给出的两个按升序(从小到大排序)输出。其中调用exchange函数实现交换两个数的值。

void exchange(int *pointer1, int *pointer2)

{ int temp;

(1)temp=*pointer1;

(2)*pointer1=*pointer2;

(3)*pointer2=temp;

}

main()

{ int a=3,b=5;

int * p1=&a,*p2=&b;

if ( (4)*pl>*p2)

{exchange( (5)p1,p2 )

printf(“min=%d, max=%d\n”,(6)*p1,*p2);

}

相关主题
文本预览
相关文档 最新文档