C语言程序设计任务驱动式教程第三版微课版宋铁桥课后答案_第1页
C语言程序设计任务驱动式教程第三版微课版宋铁桥课后答案_第2页
C语言程序设计任务驱动式教程第三版微课版宋铁桥课后答案_第3页
C语言程序设计任务驱动式教程第三版微课版宋铁桥课后答案_第4页
C语言程序设计任务驱动式教程第三版微课版宋铁桥课后答案_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计任务驱动式教程

第3版微课版

课后思考与训练答案

第一单元认识c语言程序

i.讨论题

(1)讨论c程序的结构是由哪几个部分组成的。

(2)C语言中注释的作用。

(3)在编写C语言程序时,需要注意的编码规范有哪些?

2.选择题

(1)C语言属于下列哪类计算机语言?(B)

A.汇编语言B.高级语言C.机器语言D.以上均不属于

(2)一个C程序是由(A\

A.一个主程序和若干子程序组成

B.一个或多个函数组成

C.若干过程组成

D.若干子程序组成

(3)一个C程序的执行是从(B1

A.main函数开始,直到main函数结束

B.第一个函数开始,直到最后一个函数结束

C.第一个语句开始,直到最后一个语句结束

D.main函数开始,直到最后一个函数结束

(4)C语言语句的结束符是(AI

A.回车符B.分号C.句号D.逗号

1

(5)以下说法正确的是(AX

A.C程序的注释可以出现在程序的任何位置,它对程序的编渤唯行不起田可作用

B.C程序的注释只能是一行

C.C程序的注释不能是中文文字信息

D.C程序的注释中存在的错误会被编译器检查出来

(6)以下说法正确的是(D工

A.C程序中的所有标识符都必须小写

B.C程序中关键字必须小写,其他标识符不区分大小写

C.C程序中所有标识符都不区分大〃写

D.C程序中关键字必须小写,其他标识符区分大小写

3.填空题

(1)C语言源程序文件的后缀是一(编译后生成目标文件的扩展名是.obi,经

过连接后生成可执行文件的扩展名是.exe.

(2)C程序多行注释是由胃和*/所界定的文字信息组成的。

(3)源程序的执行要经过编译、连接和运行4个步骤。

4.编程题

(1)试编写一个C程序并上机调试,运行后能输出以下信息。

Thisismyfirstprogram.

#include<stdio.h>

voidmain()

(

printf("******************************')

printf("Thisismyfirstprogram");

nrintf(”******************************”>

(2)编写程序,用“*”输出字母Co

#include<stdio.h>

voidmain()

(

printf(M****\nH);

printf("*\n");

printf(',*\nn);

printf(n*\n");

printf(M****\nH);

第二单元C语言程序设计基础

1.讨论题

(I)C语言为什么规定对所有用到的变量都要“先定义,后使用”?

(2)定义变量时一定要赋初值吗?不赋初值的变量一定不能用吗?

(3)不同类型数据之间在进彳亍运算时,结果类型应该如何确定?

(4)C语言中常量、变量命名规范是什么?

2.选择题

(1)以下正确的C语言标识符是(C\

A.%XB.a+bC.a!23D.test!

(2)已定义inta,b;则以下不正确的C语句是(C\

A.a*=5;B,b/=2;C.a+=1.75;D.b%=a;

(3)若x、i、j和k都是整型变量,则执行下面的表达式后x的值为(C1

x=(i=4,j=16,k=32)

A.4B.16C.32D.52

(4)C语言中的标识符只能由字母、数字和下画线3种字符组成,且第一个字符

C)o

A.必须是字母B.必须为下画线

C.必须为字母或下画线D.可以是字母、数字、下画线中的任一字符

(5)下面正确的字符常量是(C1

A."c"B.'\\"C.'w'D."

(6)设x、y均为float型变量,则以下赋值语句不合法的是(BX

A.++x;B.y=(x%2)/10;

C.x*=y+8;D.x=y=0;

(7)下列不正确的转义字符是(CI

A.''B.'C.'\19'D.'\0,

(8)下列不是C语言常量的是(A1

A.e—2B.074C.9D.1\01

4

(9)若定义了intx;则将x强制转化成双精度类型应该写成(A1

A.(double)xB.x(double)

C.double(x)D.(x)double

(10)在c语言中,要求参加运算的数必须是整数的运算符是(cX

A./B.*C.%D.=

(11)为了计算s=10!(即10的阶乘),贝h变量应定义为(C1

A.intB.unsignedC.longD.以上3种类型均可

3.填空题

(1序符常量使用一对单引号界定单个字符,而字符串常量使用一对双引号来

界定若干个字符的序列。

(2)在C语言中,不同运算符之间运算次序存在优先级的区别,同一运算符之

间运算次序存在自左向右的规则。

(3)字符串"hello”的长度是5。

(4)下列程序的运行结果是511。

voidmain()

(

intx=5;

inty=10;

printf(n%d\nu,x++);

printf("%d\n,\++y);

}

4.编程题

(1)请用C语言描述一个学生的年龄、身高、体重、性别,并输出到显示器上。

#include<stdio.h>

voidmain()

(

intage=18;

floatheight=180.5;

doubleweight=130.1;

chargender=,M,;

printf("age=%d,height=%.2f,weight=%.21f,gender=%c\n",age,height,weight,gender);

(2)编写程序:假定银行定期存款的年利率为2.25%,并已知存款期为n年,存款本

金为x元,试编程计算n年后可得到本利之和是多少。

#include<stdio.h>

#include<math.h>

voidmain()

(

intn;

floattotal,benjin;

printf(”请输入存款年限和本金:");

scanf("%dH,&n);

scanf("%f',&benjin);

total=benjin*pow(1+0.00225,n);

printf(',total=%f',total);

第三单元顺序结构程序设计

1.讨论题

(I)在使用输入输出函数时,若不写上编译预处理命令include<stdio.h>,对程序执

行的结果有何影响?

(2)在C语言中,我们经常使用的语句有哪些?

(3)常用的输入输出格式控制符有哪些?

(4)格式化的输入函数和格式化的输出函数使用方法有哪些区别?

2.单选题

(I)阅读下列程序,当输入数据的形式为:25,13,10,正确的输出结果为(A\

#include<stdio.h>

voidmain()

intx,y,z;

scanf("%d,%d,%d",&x,&y,&z);

printf(,,x+y+z=%d\n",x+y+z);

A.x+y+z=48B.x+y+z=35

C.x+z=35D.不确定值

(2)以下程序的运行结果是(DX

include<stdio.h>

voidmain()

inta=2,b=5;

printf(',a=%%d,b=%%d",a,b);

A.a=%2,b=%5B.a=2,b=5

C.a=%%d,b=%%dD.a=%d,b=%d

(3)putchar函数可以向终端输出一个(D\

A.整型变量表达式值B.实型变量值

C.字符串D.字符或字符型变量值

7

(4)已知有定义inta=-2;和输出语句printf("%81x",a);,以下叙述正确的是(D\

A.整型变量的输出格式只有%d一种

B.%x是格式符的一种,它可以适用于任何一种类型的数据

C.%x是格式符的一种,其变量的值按十六进制输出,但%81x是错误的

D.%81x不是错误的格式符,其中数字8规定了输出字段的宽度

(5)已知ch是字符型变量,下面不正确的赋值语句是(A\

A.ch='a+b';B.ch='\O';C.ch='7'+9;D.ch=7+9;

3.分析程序并上机操作

(1)以下程序的输出结果是(3,2\

include<stdio.h>

voidmain()

{

intn=2,m=2;

printf(t<%d,%dM,-H-m,n—);

}

(2)以下程序的输出结果是(a=325x=3.14\

#include<stdio.h>

voidmain()

(

inta=325;

doublex=3.1415926;

piintf("a=%dx=%4.2f\n",a,x);

)

(3)若x为int型变量,则执行下列语句后x的值是(-14\

x=7;

x+=x-=x+x;

(4))程序运行时输入:12V回车〉,执行后输出结果是(12\

#include<stdio.h>

voidmain()

{charchl,ch2;intnl,n2;

chI=getchar();ch2=getchar();

nl=chl-'O';n2=nl*10+(ch2-'0');

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

4.编程题

(1)求ax+b=O的解,a、b的值由键盘输入。

#include<stdio.h>

voidmain()

(

doublea,b,x;

printff请输入a,b的值:");

x=-b/a;

printfTx=%f',x);

)

(2)正确分离出T3位正髅的个位、十位、百位数字,并才鲜果分别显示在屏幕上。

#include<stdio.h>

voidmain()

{

intx,a,b,c;

printf(“请输入一个三位的整数:”);

scanf("%d”,&x);

a=x/100;

b=x/10%10;

c=x%10;

printf("百彳谈字a=%d-H谴字b=%d个位^字c=%d,,,a,b,c);

第四单元选择结构程序设计

1.讨论题

(I)嵌套if语句和多重if语句有何区别?举例说明在实际编程过程中,这两种选择依

据能否用来解决相同的问题?

(2)多重if语句与switch语句能否相互替换?考虑其分别适用的场合。

2.选择题

(1)逻辑运算符两侧运算对象的数据类型(D\

A.只能是。或1B.只能是0或非。正数

C.只能是整型或字符型数据D.可以是任意类型的数据

(2)判断char型变量ch是否为大写字母的正确表达式是(C\

A.'A'<=ch<='Z'B.(ch>='A')&(ch<=Z)

C.(ch>='A')&&(ch<='Z')D.(ch>='A')AND(ch<='Z')

(3)已知intx=10,y=20,z=30;,以下语句执行后x、y、z的值是(B\

if(x>y)

z=x;x=y;y=z;

A.x=10,y=20,z=30B.x=20,y=30,z=30

C.x=20,y=30,z=10D.x=20,y=30,z=20

(4)当a=1,b=3,c=5,d=4时,执行完下面的程序段后,x的值是(B\

if(a<b)

if(c<d)

elseif(a<c)

if(b<d)x=2;

elsex=3;

elsex=6;

elsex=7;

A.1B.2C.3D.6

3.分析程序并上机操作

(1)下列程序的运行结果是什么?

main()

10

intx,y,z;

x=y=z=1;

-x&&-y||-z;

printf("x=%d\ty=%d\tz=%d\n",x,y,z);

x=y=z=-1;

++x||++y||++z;

printf(',x=%d\ty=%d\tz=%d\n",x,y,z);

x=y=z=O;

x--&&++y&&++z;

printf("x=%d\ty=%d\tz=%d\n",x,y,z);

)

林•

口•

x=0y=lz=0

x=0y=0z=0

x=-ly=0z=0

(2)下列程序的运行结果是什么?

main()

(

inta=l,b=O;

switch(a)

(

case1:

switch(b)

(

caseO:printf(,'**O***,);break;

case1:printf("**l**,,);break;

)

case2:printf(*,**2**,,);break;

}

)

林­

a•

**0****2**

4.填空题

(1)以下程序运行后的了输出结果是

#include<stdio.h>

voidmain()

{inta=Lb=2,c=3;

if(c=a)printf("%d\n'\c);

elseprintf("%d\n”,b);

(

(2)设y是int型变量,请写出判断y为奇数的关系表达式y%2!=0或丫%2。

(3)若从键盘输入58,则以下程序输出的结果是下58序。

#include<stdio.h>

voidmain()

{inta;

scanf(n%dn,&a);

if(a>50)prinlf("%d”,a);

if(a>40)printfC'%d",a);

if(a>30)printf("%d”,a);

)

(4)以下程序的输出结果是0.

#include<stdio.h>

voidmain()

{inta=5,b=4,c=3,d;

d=(a>b>c);

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

(5)以下程序运行后的输出结果是

#include<stdio.h>

voidmain()

{intp=30;

printf("%d\n",(p/3>0?p/10:p%3));

}

5.编程题

(1)编写程序,判断通过键盘输入的字符属于哪一类字符(大写字母、小写字母、数

字或其其它字符X

#include<stdio.h>

voidmain()

(

charch;

printf(“请输入一个字符:");

scanf(%c,,,&ch);

if(ch>=,A,&&ch<=,Z,)

printf,输入的字符为大写字母)

elseif(ch>=,a,&&ch<=,z,)

printf("输入的字符为小写字母)

elseif(ch>=,0,&&ch<=,9,)

printf("输入的字符为数字字符”);

else

printf("输入的字符为其它字符”);

)

(2)假设国家对个人收入所得税起征点为5000元,超过部分要征收个人所得税,未超

过3000的部分征收3%,超过3000到12000的部分征收10%,超过12000到25000的部

分征收20%,编写程序输入个人当月税前收入,计算个人所得税及个人实际收入。

#include<stdio.h>

voidmain()

(

floatx,y,z,a;

printf(”请输入个人工资:”);

scanf("%F',&x);

a=x-5000;

if(a<=3000)

y=a*0.03;

elseif(a<=12000)

y=3000*0.03+(a-3000)*0.1;

elseif(a<20000)

y=3000*0.03+9000*0.1+(a-l2000)*0.2;

z=x-y;

printf("个人所得税是:%.2f\n,个人所得是:%.2f\n",y,z);

(3)从键盘输入3个数据,然后按照从小到大的顺序输出。

#include<stdio.h>

voidmain()

(

inta,b,c,t;

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

scanfCt%d%d%d,,,&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;)

if(a>c)

{t=a;a=c;c=t;}

if(b>c)

{t=b;b=c;c=t;}

printf(“从小到大的顺序为:%d,%d,%d”,a,b,c);

)

(4)某厂对产品进行分级,产品性能在90分以上,则该产品定为A级产品;性能在

80〜89分,则定为B级产品;如果性能得分为60-79分之间,则定为C级;产品性能在60

分以下,则该产品定为D级产品。试编写一程序实现对该厂产品进行分级评定。

#include<stdio.h>

voidmain()

(

inta;

printf(“请输入产品的分数;

scanf("%d”,&a);

switch(a/10)

(

case10:

case9:{printf(“产品等级为AM);break;}

case8:{printf(“产品等级为B,,);break;}

case7:

case6:{printf(“产品等级为CM);break;}

default:{printf(“产品等级为D'');break;}

第五单元循环结构程序设计

讨论题

三种循环语句适用什么循环的情况,比如:固定次数的循环和不固定次数的循环

等。

2.选择题

(1)以下程序段是(cX

x=-l;

do

(

x=x*x;

)

while(!x);

A.死循环B.循环执行二次C.循环执行一次D.有语法错误

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

A.3B.0C.5D.不定

(3)循环语句for(x=0,y=0;(y!=123)||(x<4);x++);的循环执行次数为(A\

A.无限次B.不确定次数C.4次D.3次

(4)假定a和b为int类型变量,则执行以下语句后b的值为(D\

a=l;b=10;

do

(

b-=a;

a++;

[while(b—<0);

A.9B.-2C.-1D.8

(5)C语言中while和do-while循环的主要区别是(A\

A.do-while的循环体至少无条件执行一次

B.while的循环控制条件比do-while的循环控制条件严格

C.do-while允许从外部转到循环体内

D.do-while的循环体不能为复合语句

16

(6)以下描述正确的是(B\

A.continue语句的作用是结束整个循环的执行

B.只能在循环体内和switch语句体内使用break语句

C.在循环体内使用break语句和continue语句的作用相同

D.从多层循环嵌套中退出时,只能用goto语句

3.分析程序并上机操作

(1)以下循环体的执行次数。

#include<stdio.h>

voidmain()

(

inti,j;

for(i=0,j=l;i<=j+l;i+=2,j-)

printf("%d\n”,i);

)

答:1次

(2)以下程序的输出结果。

#include<stdio.h>

voidmain()

(

ints,i;

for(s=0,i=l;i<3;i++,s+=i);

printf(,'%d\n,,,s);

}

林•5

口•J

(3)以下程序的输出结果。

#include<stdio.h>

voidmain()

inty=10;

while(y—);

printf("y=%d\n'\y);

)

答:y=-l

4.填空题

(I)以下程序的功能是计算:1+12+123+1234+12345。请填空。

#include<stdio.h>

voidmain()

(

intt=0,s=0,i;

for(i=l;i<=5;i++)

(

t=i+t*10或10*t;

s=s+t;

)

printf,s=%d\n”,s);

(2)以下程序的功能是计算自然数1-10的偶数和。请填空。

#includc<stdio.h>

voidmain()

inti,s=O;

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

s+=i+l

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

)

-■D:\C®B/J'^\5\Debug\skxl5_3_2.exe'

s=30

Pressanykeytocontinue

in

5.编程题

(1)判断字符类型,直到输入#结束。

#include<stdio.h>

voidmain()

(

charch;

do

{

printf("请输入一个字符:");

scanf(u%lsM,&ch);

if(ch>=,A,&&ch<=,Z,)

printf("大写字母\n“);

elseif(ch>='a,&&ch<=,z')

printf(“小写字母\n”);

elseif(ch>='0'&&ch<=,9,)

printf("数字\n");

else

printf("其他\n");

[whileCch!-#,);

(2)循环输入年份月份,输出该月份的天数,直到年份输入0结束。

voidmain()

(

intyear,month,leap;

printf("请输入一个年份:");

scanf(”%d”,&year);

while(year!=O)

(

printf(,请输入一个月份:");

scanf(n%d",&month);

switch(month)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:printf("该月为31天\n”);break;

case4:

case6:

case9:

case11printf("该月为30天\n”);break;

case2:if((year%4==0)&&(year%100!=0)||(year%400==0))

printf(“该月为29天\nn);

elseprintf("该月为28天\n");

break;

printf("请输入一个年份。;

scanf(n%d",&year);

(3)请将计算器程序改为循环程序。

#include<stdio.h>

voidmain()

inta,b,n;

do

pnntf('‘******字亭*****************字**********亭亭*\n")"

printf(H欢迎使用小型计算器\n”);

printf(n设计人:李丽红\n");

pnntf(”***************************************\JT(")•

printf(n1.加法运算\n");

printf(n2.减法运算

printf("3.乘法运算\n");

printfC'4.除法运算W”);

printf(H5退出\n");

pri***************************************\n")♦

printf(n\nn);

prinlf("请选择:”);

scanf(n%d';&n);

switch(n)

case1:printf("请输入两个数:");scanf("%d%d”,&a,&b);printf("两数相加

是:%d\n”,a+b);break;

case2:printf("请输入两个数scanf("%d%d",&a,&b);printf("两数相减

是:%d\n",a-b);break;

case3:printf("请输入两个数");scanf("%d%d”,&a,&b);printf("两数相乘

J^:%d\nM,a*b);break;

case4printf("请输入两个数scanf("%d%d”,&a,&b);printf("两数相除

是:%6.2f\n”,(float)a/b);break;

case5:exit(0);

)

}while(n!=5);

(4)尝试将第4章的选择结构程序改为循环。

(5)输出以下图案:

*

**

***

****

#include<stdio.h>

voidmain()

(

intn,i,j;

printf(”请输入行数:");

scanf("%dn,&n);

for(i=l;i<=n;i++)

for(j=l;j<=i;j++)

printf("*");

printf(n\nn);

)

第六单元数组

1.选择题

(I)在C语言中,引用数组元素时,其数组下标的数据类型允许是(C1

A.整型常量B.整型表达式

C.整型常量或整型表达式D.任意类型的表达式

(2)以下程序段执行后,输出结果是(BX

charstr[]="ab\n\\012\\\";

printf(n%dn,strlen(str));

A.1B.9C.7D.10

(3)判断字符串si是否大于字符串s2,应当使用(CX

A.if(sl>s2)B,if(strcmp(sl,s2))

C.if(strcmp(sl,s2)>0)D.以上都不正确

(4)下面程序的运行结果是(BX

#includc<stdio.h>

voidmain()

(

inta[6],i;

for(i=l;i<6;i++)

(

a[i]=9*(i-2+4*(i>3))%5;

)

}

A.-40403B.-40443

C.-40404D.-40440

(5)下面的说明语句正确的是(C\

A.intA[][]B.intACa']

C.int*A[10]D.intA[l

(6)以下程序的输出结果是(C\

25

#include<stdio.h>

voidmain()

inti,a[10];

fbr(i=9;i>=O;i-)

a[i]=10-i;

printf("%d%d%d",a[2],a[5],a[8]);

}

A、258B、741C、852D、369

(7)以下不能正确定义二维数组的选项是(D)。

A.inta[2][2]={{l},{2}};B.inta[][2]={1,2,3,4);

C.inta[2R2]={{1},2,3};D.inta⑵[]={{1,2},{3,4}};

(8)以下程序的输出结果是(AX

#include<stdio.h>

voidmain()

(

inta[3][3]={{1,2},{3,4},{5,6}},ij,s=O;

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

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

s+=a[i][j];

printf(,,%d\n',»s);

)

A.18B.19C.20D.21

(9)以下程序的输出结果是(C\

#include<stdio.h>

voidmain()

(

inti,x[3][3]={1,2,3,4,5,6J,8,9);

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

pnntf("%d?',x[i][2-i]);

)

A、1,5,9B、1,4,7C、3,5,7D、3.6.9

(10)合法的数组定义是(D\

A.inta[]=,'string,';B.inta[5]={0,1,2,3,4,5};

C.chars="stringH;D.chara[]={0,123,4,5};

2.填空题

(1)下面程序的功能是输出数组s中最大元素的下标,请填空。

#include<stdio.h>

voidmain()

(

intk,p;ints[]={1,-9,7,2,-10,3};

for(p=0,k=p;p<6;p++)

if(s[p1>srkl)k=p;

printf("%d\nM,k);

(2)以下程序以每行5个数据的形式输出a数组,请填空。

#includc<stdio.h>

voidmain()

(

inta|50],i;

printf("输入10个整数:");

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

scanf("%d\&a[il):

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

(

if(i%10==0)

printf(H%3d\n"a|i]);

printf(n%3d';a[i-l]);

)

(3)下面程序实现以下输出数组(右上半三角),请填空。

1234

678

1112

16

#include<stdio.h>

voidmain()

(

intnum[4][4]={{L23,4145A7,8)J9,10,ll,12},{13,14,15,16)),i,j;

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

(

for(j=lj<=i;j++)

printf(,,%4c,';*);

for(j=—i—;j<4;j++)

printf("%4d",num[i][j]);

printf("\n");

3.编程题

(1)用冒泡法对10个数进行排序(由小到大I

冒泡排序的过程是:从aO开始,逐个比较ai和ai+1,(i=0,1,2,……n-2)若ai>ai+l

则交换ai和ai+1的位置,第一趟比较完成后an-1是序列中最大的元素。第二趟再从aO开

始,逐个比较ai和ai+1,(i=0,1,2,……n-3)若ai>ai+l则交换ai和ai+1的位置,第一趟

比二较完成后an-2是序列中最大的元素。如此反复进行n-l次冒泡排序后,原来序列中的

元素就排列好了。

#include"string.hM

main()

(

inta[ll];

int

printf(Minput10numbers:\n");

for(i=l;i<ll;i++)

scanf(n%dn,&a[i]);

printf(n\nH);

for(j=l;j<=9;j++)

for(i=l;i<=10-j;i++)

if(a[i]>a[i+l])

(

t=a[i];

a[i]=a[i+l];

a[i+l]=t;

)

printf(nthesortednumbers:\nu);

for(i=l;i<ll;i++)

printf(n%dn,a[i]);

}

・D:\C语言思考与i川练6\Debug\skxl6_3_l.exe-

input10numbers:

879877859390928975100

th©sortednumbers:

757785878990929398100Pressanykeytocontinue

(2)编程实现两个字符串的连接(不用strcat函数\

#include<stdio.h>

#include<string.h>

voidmain()

{inti,j;

charsoustr[20],desstr[20];

printf("请输入两个字符串:\n");

gets(soustr);

gets(desstr);

printf("连接后的字符串是:\n");

i=strlen(soustr);

for(j=0;j<=strlen(soustr);j++,i++)

(

soustr[i]=desstr|j];

)

puts(soustr);

)

(3)统计字符串中输入数字字符的个数。

#include<stdio.h>

#include<string.h>

main()

(

chara[20];

intc,i,sum=0;

printf("请输入一个字符串:\n");

gets(a);

for(i=0;a[i]!='\0';i++)

(

if((a[i]>='0')&&(a[i]<=,9'))

sum++;

}

printf("输入了%d个数字字符\n”,sum);

第七单元函数

1.讨论题:

(I)在程序中为什么要使用函数?

(2)有参函数是如何声明的?调用时应注意什么?

(3)无返回函数和有返回值函数在声明和调用时分别注意什么?

(4)在项目开发中,为什么要强调团队合作?作为一份子,如何做好自己的工作?

2.选择题

(DC语言中的函数返回值的类型是由(D)决定。

A.return语句中的表达式

B.调用函数的主调函数

C.调用函数时临时

D.定义函数时所指定的函数类型

(2)下面的描述中不正确的是(B\

A.调用函数时,实参可以是表达式

B.调用函数时,实参和形参可以共用内存单元

C.调用函数时,将形参分配内存单元

D.调用函数时,实参与形参的类型必须一致

(3)在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是(D\

A.地址传递

B.值传递

C.由实参传递给形参,并由形参传回给实参

D.由用户指定传递方式

(4)下面的函数调用语句中含有(A)个实参。

inta,b,c;

intsum(intxl,intx2);

total=sum((a,b),c);

A.2B.3C.4D.5

32

(5)在C语言中(C\

A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义和调用均不可以嵌套

C.函数的定义不可以嵌套,但是函数的调用可以嵌套

D.函数的定义和调用均可以嵌套

(6)关于C语言中的return语句,下面的描述正确的是(C\

A.只能在主函数中出现

B.在每个函数中都必须出现

C.可以在一个函数中出现多次

D.只能在除主函数之外的函数中出现

3.填空题

(1)C语言中定义函数时如果未指定函数类型,则默认的函数类型是int。

(2)C语言中没有返回值的函数类型应指定为void.

(3)下面函数返回值的类型是float。

floatfun(floata,doubleb)

{returna*b;J

(4)发生函数调用时,实参和形参间的数据传递有两种方式,即值和地址。

(5)在一个函数内部调用另一个函数的调用方式称为,在一个函数内部

直接或间接调用该函数本身的调用方式称为函数的

(6)如果被调函数在主调函数后定义,一般应该在主调函数中或主调函数前对被调函

数进行声明。

(7)C语言中的变量按其作用域分为局部变量和全局变量,按其生存期分为一

自动变量和静态变量.

(8)已知如下函数定义,其函数声明的两种写法为doublefun(longm,doublen);,_

doublefun(kmg,double);0

doublefun(longmjoublen)

(return(m+n);)

(9)C语言中变量的存储类别包括自动变量,静态局部变量,静态全局变

量和寄存器变量。

(10)下面程序的执行结果是84。

#includc<stdio.h>

intd=l;

voidfun(intp)

(

intd=5;

d+=p++;

printf("%d”,d);

}

voidmain()

(

inta=3;

fun(a);

d+=a++;

prinlf("%d”,d);

)

4.编程题

(1)编写程序,用函数实现小型计算器的加、减、乘、除功能。

#include<stdio.h>

voidmain()

(

floata,b;

chard;

voidjiafa(floata,floatb);

voidjianfa(floata,floatb);

voidchengfa(floata,floatb);

voidchufa(floata,floatb);

do

(

printf(HPleaseenterthetwoNumbers,separatedbySpaces:\nn);

scanfC'%f%f',&a,&b);

printf(nPleaseselectoperationway:(-,*,/,A,s,!)\nH);scanf(M%sn,&d);

switch(d)

case*+r:jiafa(a,b);break;

case,-,:jianfa(a,b);break;

case'*':chengfa(a,b);break;

case,/,:chufa(a,b);break;

default:printf("inputerror\n");

)

printf("Doyouwanttocontinue(Y/Nory/n)u);

fflush(stdin);

}while(toupper(getchar())==,Y,);

)

voidjiafa(floata,floatb)

(

printf("a+b=%f\n",a+b);

)

voidjianfa(floata,floatb)

(

printf(na-b=%f\nH,a-b);

)

voidchengfa(floata,floatb)

(

printf("a*b=%f\n”,a*b);

)

voidchufa(floata,floatb)

(

printf("a/b=%f\n",a/b);

)

(2)编写有参函数,求两个整数中的最大值。

#include<stdio.h>

intmax(intx,inty)

(

intz;

if(x>y)

z=x;

else

z=y;

returnz;

voidmain()

(

inta,b,c;

printf("请输入两个数据:”);

scanf(n%d%dH,&a,&b);

c=max(a,b);

prinllT两个数中的最大数是:%d\n",c);

第八单元指针

1.讨论题

指针变量、指针变量作为函数参数、数组的指针和指针数组的概念与应用。

2.选择题

(1)若chars[10],*p=s;,则下列语句错误的是(B\

A.p=s+5B.s=[p+s]C.s[2]=p[4]D.*p=s[O]

(2)已知定义char**s;,下列语句正确的是(B\

A.s=,'computer"B.*s=Mcomputern

C.**s=ucomputernD.*s='A'

(3)C语言主函数最多允许有(B)个参数。

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

(4)说明语句int(*p)()的含义是(C1

A.p是一个指针型函数,返回值为指针

B.p是指针变量,它指向一个整型数据的指针

C.p是一个指向函数的指针,该函数的返回值为整型

D.以上答案都不对

(5)下列语句中,能表示p是一个指向整型变量的指针变量的是(B1

A.int**pB・int*pC.int(*p)()D.int*p[J

37

(6)下列叙述中,错误的是(D)。

A.一个变量的地址称为该变量的指针

B.一个指针变量只能指向同一数据类型的变量

C.指针变量中只能存放地址

D.指针变量可以由整型数赋值

(7)若有以下定义语句:intvar,arr[10],*p;,则以下语句中非法的是(C\

A.p=&varB.p=arrC.p=10D.p=&arr[5J

(8)两个指针变量不可以进行的操作是(A1

A.相加B.相减C.指向同一个地址D.比较

3.填空题

(1)以下程序的功能是:从终端输入一行字符,以“$”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论