C语言复习题.docx

上传人:b****6 文档编号:7235163 上传时间:2023-01-22 格式:DOCX 页数:12 大小:23.48KB
下载 相关 举报
C语言复习题.docx_第1页
第1页 / 共12页
C语言复习题.docx_第2页
第2页 / 共12页
C语言复习题.docx_第3页
第3页 / 共12页
C语言复习题.docx_第4页
第4页 / 共12页
C语言复习题.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言复习题.docx

《C语言复习题.docx》由会员分享,可在线阅读,更多相关《C语言复习题.docx(12页珍藏版)》请在冰豆网上搜索。

C语言复习题.docx

C语言复习题

C语言复习题

熟读理论教材,理解相关知识,并复习理论教材课后练习题

(切记:

以理论教材知识、例题和课后练习为主复习)

熟读课本例题及知识,完成以下知识点的复习及总结。

一.填空

1.一个C语言的执行是从本程序的____开始,到____结束?

2.C语言中用户的标识符命名规则是____。

3.在一个c语言程序中,main函数的位置是___。

4.若有代数式p(mne)/(bcd),其中p、m、n、e、b、c、d为变量,则该代数式的C语言表达式为___。

5.chara;intx;floaty,m;doublez,p;则表达式“a*x*m+z-y*x*p”值的数据类型为___。

6.C语言的常用关键字有___(举例说明,越多越好)。

7.printf函数中用到格式符%ms,其中数字m表示输出的字符串占用m列。

如果字符串长度大于m,则输出时的规则是___。

若如果字符串长度小于m,则输出时的规则是___。

若如果字符串长度等于m,则输出时的规则是___。

当m>0时是左对齐还是右对齐?

m<0呢?

8已有定义“intx;floaty;”且执行“scanf(“%4d%f”,&x,&y);”语句,若从第一列开始输入数据,则x的值为___。

10.能正确表示a≥-100或a≦100的关系表达式是___。

能正确表示a≥-100且a≦100的关系表达式是___。

11.判断逻辑值为“真”的判断方法是___。

逻辑值为“假”的判断方法是___。

12.已知“intx=100,y=200,z=300”,则执行if(x>y)z=x;x=y;y=z;语句后,x、y、z的值是___。

13.若m和n均为int型变量,则以下for语句循环执行的次数___及输出结果是___。

for(n=8,m=8;m!

=8;m++,++n)printf(“Welcomeyou!

\n”);

14.若n为int型变量,则循环语句“for(n=0;n<100;n++)”控制循环体执行___次。

15.在循环语句循环体中执行continue语句,其作用是___,break的作用是__;在swich()

Case语句中break语句作用是__。

16.关于函数的参数,实参可以是__,形参可以是__,

A.表达式;B.变量c.常量D.默认值

17.C语言的编译系统对宏命令的处理是在什么时间进行__

18.在C语言中,函数返回值的类型最终取决于__

19.定义二维整型数组b时,该数组行号和列号是否可以为变量?

20.对一维数组和二维数组定义及初始化的方法进行总结,并举例说明__

21.若有以下语句,chara[]=”abcdefgh”;charb[]={‘a’,’b’,’c’,’d,’e,’f’,’g’,’h’};则a和b数组长度分别为__和__

22.设有定义“intn1=0,n2,*p=&n2,*q=&n1;”,以下赋值语句中与“n2=n1;”语句等价的是另外一种表示语句为__

23.如有语句“intq=100,*p=&q;”,下面均代表地址的一组选项是________________

A.q,p,*&qB.&*q,&q,*pC.*&p,p,&qD.float*q,&*p,p

24.若有说明语句“intm,a[10][10];”,则不能将a[1][1]的值赋给变量m的语句是________________

A.m=*(*(a+1)+1);B.m=a[1][1]C.m=*(*(a+1))D.m=*(a[1])+1)

25.下面程序的运行结果是________________

charstr[]=”ABCDEFGGH”,*p=str;printf(“%d\n”,*(p+3));

26.C语言结构体类型变量在程序执行期间驻留在内存中的包括________________

27.以下关于结构体与共用体的共同点和区别是________________,他们如何分配空间的?

28.已有定义“inta,b,c;”,且a=b=c=20,执行if(a++||b++)c++;语句后,a、b、c的值是分别是________________、______________、________________。

已有定义“inta,b,c;”,且a=b=c=20,执行if(a++&&b++)c++;语句后,a、b、c的值是分别是________________、______________、________________

29.在一个源文件中定义的全局变量和局部变量的作用域为________________和________________。

30.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是什么?

如果实参是地址值呢?

不同的是什么?

31.有以下程序,结果为_______________。

voidmain()

{inta[5]={1,2,3,4,5};

int*pa=&a[1];

printf(“%d”,pa[1]);

}

32.下面函数调用语句含有实参的个数为_______________。

y=fun(a,b,c,min(d,e),max(a,b));

33.以下程序的输出结果是_______________。

longfib(intn)

{if(n>2)

return(fib(n-1)+fib(n-2));else

return

(2);

}

voidmain()

{printf("%ld\n",fib(5));}

34.若有以下语句inta,*p,**p;a=808;p=&a;pp=&p;则**PP的值是_______________。

35.设有如下定义:

int*p();inta[10],*q[10];q[i]=&a[i]则p表示的意义是_______________,*q的表示的含义是_______________,其值是_______________。

38.若有#defineMU(x,y)x*y,则表达式24/MU(1+2,2)的值是_______________。

39.若有inta=1;则执行完循环语句while(a++<100);后a的值为_______________。

40.以下所列的C语言常量中,错误的是_______________。

A.0xFFB.2.8e0.2C.25.3D.'B'

41.所有的字符串都是以_______________字符结束的。

42假定double类型变量占用8个字节,且有定义:

doublex[10]={1,2,3};,则数组x在内存中所占字节数是_______________

43判断char型变量ch是否为小写字母的正确表达式是_______________

44.以下语句正确的有_______________,错误的有_______________

Achara='P',b='M';Bfloata=b=101.0;

Cintm=101,*n=&m;Ddouble*a,b=&a;

45.以下4个选项中,不能看做一条语句的是_______________

A.a-=23;B.a=8,b=12.5,c=13.68;

B.if(a<15)p++;D.if(b!

=5)x=2;y=6;

46.关于if后一对圆括号中的表达式,可以是哪种类型的表达式_______________

47.以下有关变量使用范围不正确的说法是_______________。

A在不同函数中可以使用同名的变量B形式参数是局部变量

C在函数内定义的变量只在本函数内有效D全局变量可以在所有函数中使用

48.若有说明语句:

inta,b,*d=&b;,则能正确从键盘读入2个整数分别赋给变量a、b的语句是_______________。

A.scanf("%d%d",&a,d);B.scanf("%d%d",&a,&d);

C.scanf("%d%d",a,d);D.scanf("%d%d",a,*d);

49.已知intp=20;则执行

if(p<=0)

if(p!

=0)printf(“AAAAA”);

elseprintf(“BBBBB”);

elseprintf(“CCCCC”);

语句后,输出的结果是_______________。

50.要使字符数组str存放一个字符串"Goodbye",正确的定义语句是_______________。

51.若用二维数组名作为函数调用的实参,传递给形参的值是_______________。

52.若有intx=20,y=8,z;,则执行语句z=0.7+x/y后z的值为_______________。

53.设有以下语句:

structSS

{intno;charname[10];}PERSON;

则下面叙述中错误的是_______________。

Astruct是结构体类型的关键字  BstructSS是结构体类型

CPERSON是结构体类型名  Dname是结构体成员名

54.已知:

charch='m';则下列表达式的值是_______________。

ch=(ch>='a'&&ch<='z')?

(ch-32):

ch;

55.下面程序的运行结果是_______________。

charc[8]={'a','\0,’b','\0','c','\0'};

printf("%s",c);

56.以下程序的输出结果是_______________。

main()

{charst[20]="10987654321\n\t\n\\\t\\";

printf("%d\n",strlen(st));}

57.有如下程序,该程序的输出结果是_______________。

main()

{floatx=2.0,y;

if(x<0.0)y=0.0;

elseif(x<10.0)y=1.0/x+1/4;

elsey=10.0;

printf("%f\n",y);}

58.以下程序段的输出结果是_______________。

main()

{

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

printf("%d",*(p+3));

}

59.有如下程序,该程序的执行结果是_______________。

main()

{inti,sum=0;

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

printf("%d\n",sum);

}

60.以下程序段,while循环执行的次数是_______________。

intk=0;while(k=2){k=k-1;}

60.语言使用的磁盘文件系统中,数据文件存储的的形式有哪两种_______________。

61.文件函数中,用于打开文件的函数是________,用于关闭文件的函数是_______,读写文件中字符的函数是_______,将一个字符写入磁盘文件的函数是_______。

二.编程

1.已知某班10个学生的C语言成绩为

学号

9901

9902

9903

9904

9905

9906

9907

9908

9909

9910

C成绩

65.4

86.7

69.8

88.5

100

92.6

87.3

54.8

96.3

79.6

要求:

按成绩大小排序输出,格式如下:

学号成绩名次

9905100.01

990996.32

…………

参考答案:

#include"stdio.h"

voidmain()

{staticintnum[10]={},i,j,p,t;

staticfloatsc[10]={65.4,86.7,69.8,88.5,100,92.6,87.3,54.8,96.3,79.6},f;

printf("theoriginaldata:

\n");

printf("学号成绩\n===========\n");

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

printf("%6d%6.1f\n",num[i],sc[i]);

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

{p=i;

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

if(sc[p]

if(p!

=i)

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

{t=num[p];num[p]=num[i];num[i]=t;

f=sc[p];sc[p]=sc[i];sc[i]=f;

}

}

printf("thesorteddata:

\n");

printf("学号成绩名次\n===========\n");

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

printf("%6d%6.1f%d\n",num[i],sc[i],i+1);

}

2.例8.3 编写一个交换两个变量的函数,在主程序中调用,实现两个变量值的交换。

#include

voidmain()

{ inta,b;

int*pa,*pb;

voids*p1,int*p2);     /*函数声明*/

scanf(″%d%d″,&a,&b);

pa=&a;/*pa指向变量a*/

pb=&b;/*pb指向变量b*/

s,pb);

printf(″\na=%d,b=%d\n″,a,b);

}

voids*p1,int*p2)

{ inttemp;

temp=*p1;    /*三行语句交换指针p1,p2所指向的变量的值*/

*p1=*p2;

*p2=temp;

}

3.例6.5编程求组合C

=

分别定义求组合的函数和求阶乘的函数:

#include

longfac(intk)    /*定义求阶乘的函数*/

{longf=1;

inti;

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

 f=f*i;

returnf;

}

longcomb(intn,intm)/*定义组合函数*/

{longc;

 c=fac(m)/(fac(n)*fac(m-n));/*嵌套调用阶乘函数*/

 returnc;

}

main()

{intn,m;

longc;

scanf(″%d,%d″,&n,&m);

c=comb(n,m);/*调用组合函数*/

printf(″%ld″,c);

}

4.例6.6输入两个数,输出其中较大的数。

#include

voidmain()

{inta,b,m;

intmax(int,int);/*对函数max的声明*/

scanf(″%d,%d″,&a,&b);

m=max(a,b);/*调用函数max,a、b已有具体的值*/

printf(″max=%d″,m);

}

intmax(intx,inty)

{intt;

if(x>y)t=x;

elset=y;

returnt;

}

如果运行时输入:

10,5

输出为

10

5.例6.8 用递归计算n!

程序:

#include

longfac(intn)

{longf;

 if(n==0)

f=1;

 esle

f=n*fac(n-1);/*递归调用,求(n-1)!

*/

 returnf;

}

voidmain()

{longy;

intn;

scanf(″%d″,&n);

y=fac(n);/*调用fac(n)求n!

*/

printf(″%d!

=%ld″,n,y);

}

程序运行时如果输入:

3

6.例5.9 找出3~1000中的全部素数。

程序:

#include

voidmain()

{ unsignedinti,j,count,flag;/*用flag作标志*/

count=0;/*计数器清0*/

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

{ flag=0;

for(j=2;j<=sqrt(i);j++)

{ if(i%j==0)/*能整除,不是素数,标志设为1*/

{flag=1;break;}

}/*内循环结束*/

if(flag==0)/*若flag为0,则i是素数*/

{ printf(″%4d,″,i);count++;

if(count%8==0)printf(″\n″);/*每行输出8个素数*/

}

}/*外循环*/

}

7.例8.1 从键盘输入两个整数到a、b,按由大到小输出。

#include

voidmain()

{

inta,b,*pa=&a,*pb=&b,*p; 

/*定义指针变量pa、pb,并进行初始化,如图8.4(a)所示*/

scanf(″%d%d″,&a,&b);

if(*pa<*pb)

{ p=pa;     /*进行指针交换,如图8.4(b)和图8.4(c)所示*/

pa=pb;

pb=p;

}

printf(″\na=%d,b=%d\n″,a,b);

printf(″\nmax=%d,min=%d″,*pa,*pb); /*pa指向大数,pb指向小数*/

}

输入:

12 22↙

输出:

a=12,b=22

max=22,min=12

8.例8.14 用指向一维数组的行指针输出二维数组,并输出数组中的最大元素及所在行列号。

#include

voidmain()

{

inti,j,m,n,max;

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

int(*p)[4];/*定义p为指向一个有4个元素的一维数组的指针变量*/

p=a;/*p指向第0行*/

max=**p;/*将第一个元素送入max,**p相当于*(*(p+0)+0)*/

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

{

printf(″\n″);

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

{ 

printf(″%5d″,*(*p+j));

if(max<*(*p+j))

{max=*(*p+j);

m=i;n=j;

}

}

p++;/*指向下一行*/

}

printf(″\nmaxis:

a[%2d][%2d]=%5d″,m,n,max);

}

9.例5.1 编写一个程序,输入一个班的学生的成绩,求全班的平均成绩。

程序:

#include

voidmain()

{ floatscore,average=0;    /*average存放平均成绩,初值为0*/

intn=0;/*n存放学生数,初值为0*/

scanf(″%f″,&score);/*输入第一个学生的分数*/

while(score>=0)

{ 

average+=score;/*average先用来放总分*/

n++;/*学生数加一*/

scanf(″%f″,&score);/*输入下一个学生的分数*/

}

if(n!

=0)

average=average/n;/*求平均成绩average*/

printf(″%6.2f″,average);/*输出平均成绩average,保留两位小数*/

}

(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1