C语言程序设计教程(第三版)课后习题参考答案 张敏霞版

时间:2019-05-12 17:53:34下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言程序设计教程(第三版)课后习题参考答案 张敏霞版》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言程序设计教程(第三版)课后习题参考答案 张敏霞版》。

第一篇:C语言程序设计教程(第三版)课后习题参考答案 张敏霞版

附录F 课后题参考答案

题1.1 填空题

1.函数

2.主函数main();主函数main()3.主函数main()4.函数首部;函数体 5.{;} 6.顺序结构;选择结构;循环结构 7..c;.obj;.exe 1.2 思考题

1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构

2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。

3.略 4.略 5.略 1.3 编程题 1.答:

#include “stdio.h” main(){ float a=10, b=20, h=5, s;s=(a+b)*h/2;printf(“s=%f ” , s);} 2.答:

#include “stdio.h” main(){ printf(“******************************”);printf(“* hello world

*”);printf(“******************************”);}

270 C语言程序设计教程(第3版)

题2.1 单选题

DBDCA DCABB CA 2.2 填空题

1.2.000000

2.1;0.500000 3.9;2 4.6 5.100;d 6.(1)20

(2)0

7.(1)10;6;4

(2)6;9;15

8.55或 '7' 9.x=4;y=6;z=3;m=463 2.3 改错题(略)

习3.1 单选题

BDABC ADCAC BBA

3.2 填空题

1.3 2.261 3.10 4.2, 1;互换a,b的值 5.6.6 6.003 7.7 8.5.0,4,c=3 9.i=10,j=20 10.

(1)65

(2)65,A

(3)3.14,123.46

(4)3.141600e+000,1.234560e+002

(5)8765.432100

(6)8.765432e+003

(3)60(3)3;60;83

附录F 课后题参考答案

11.a=2b=5x=8.8y=76.34c1=65c2=97 12.%d/%d;%d/%d=%.2fn

271 3.3 改错题(略)3.4 编程题

1.答:

#include “stdio.h” main(){ int x,y;scanf(“%d%d”,&x,&y);printf(“ttxtyn”);printf(“十进制数t%dt%dn”,x,y);printf(“八进制数t%ot%on”,x,y);printf(“十六进制数t%Xt%xn”,x,y);} 2.答:

#include “stdio.h” main(){ char ch;printf(“请输入一个大写英文字母”);scanf(“%c”,&ch);printf(“大写英文字母是%cn”,ch);printf(“它的前导字符是%cn”,ch-1);printf(“它的后续字符是%cn”,ch+1);} 3.答:

#include “stdio.h” main(){ int x,a,b,c,y;printf(“请输入一个三位整数n”);scanf(“%d”,&x);a=x/100;b=(x-a*100)/10;c=x%10;y=c*100+b*10+a;printf(“反向输出该整数:%dn”,y);} } 4.答:

#include “stdio.h” main(){ int hour;double salary, salaryday;scanf(“%d,%lf”, &hour, &salaryday);salary=hour*salaryday-hour*salaryday*0.1;

272 C语言程序设计教程(第3版)

printf(“%8.2lfn”, salary);} 5.答:

#include “stdio.h” main(){ int a,b,c,t;printf(“请输入三个整数n”);scanf(“%d%d%d”,&a,&b,&c);printf(“交换前a=%d,b=%d,c=%dn”,a,b,c);t=a;a=c;c=b;b=t;printf(“交换后a=%d,b=%d,c=%dn”,a,b,c);}习

4.1 单选题

BADDD ACBBB BA 4.2 填空题

1.1 2.(1)a>0 || b>0

(2)x>0 && x<=10(4)p

(3)a==1.5 && b==1.5 && c==1.5

4.c=1 5.4 6.1 7.5, 0, 3 8.5 9.123 10.(cvb= ='y'||cvb= ='Y')&&(work>=3||college=='y'|| college=='Y')&&age<=35 3.(1)0

(2)1

(3)1

(4)0

(5)1 4.3 改错题(略)4.4 编程题

1.答

#include “stdio.h” #include “math.h” main(){ double a,b,c,p,area;scanf(“%lf%lf%lf”,&a,&b,&c);printf(“三角形的三边为:%.llf,%.1lf,%.1lfn”,a,b,c);if(a+b>c&&a+c>b&&b+c>a){p=(a+b+c)/2;附录F 课后题参考答案

area=sqrt(p*(p-a)*(p-b)*(p-c));printf(“三角形的面积为%.2lfn”,area);} else printf(“不能构成三角形n”);}

273 2.答:

#include “stdio.h” main(){ int x,y;scanf(“%d,%d”,&x,&y);if(x*x+y*y>1000)

printf(“%dn”,(x*x+y*y)/100);else printf(“%dn”,x+y);} 3.答:

#include “stdio.h” #include “math.h” main(){ double x,y;scanf(“%lf”,&x);if(x<-2)

y=x*x-sin(x);else if(x<=2)

y=pow(2,x)+x;else

y=sqrt(x*x+x+1);printf(“x=%.2lf y=%.2lfn”,x,y);} 4.答:

#include “stdio.h” main(){ long ge,shi,qian,wan,x;

scanf(“%ld”,&x);

wan=x/10000;

qian=x%10000/1000;

shi=x%100/10;

ge=x%10;

if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

printf(“this number is a huiwenn”);

else

} printf(“this number is not a huiwenn”);5.答:

#include “stdio.h” main(){ float p,w,s,d,f;

274 C语言程序设计教程(第3版)

scanf(“%f,%,%f”,p,s,w);if(s>3000)d=0.15 else if(s>=2000)d=0.1;else if(s>=1000)d=0.08;else if(s>=500)d=0.05;else if(s>=250)d=0.02;else d=0 f=p*w*s*(1-d);printf(“%f”,f);} 6.答:

#include “stdio.h” main(){ int year,money;char x;printf(“是否是本公司产品(y/n):”);scanf(“%c”,&x);if(x=='y'||x=='Y')

{printf(“产品使用的年限:”);

scanf(“%d”,&year);if(year<=1)money=0;else if(year<8)money=50;else money=100;printf(“产品保修额是:%dn”,money);} else

{ money=200;

printf(“不是本公司产品,产品保修额是:%dn”,money);} } 7.答:

#include “stdio.h” main(){ int money,num1,num2;printf(“请输入取款额(≤2000):”);scanf(“%d”,&money);if(money>2000)printf(“请输入取款额数≤2000!n”);else

if(money%50==0)

{ num1=money/100;

num2=(money-num1*100)/50;

printf(“需支付100元:%d张n”,num1);

printf(“需支付50元:%d张n”,num2);

} else

printf(“输入钱数必须是50的倍数!n”);} 附录F 课后题参考答案

275习

题5.1 单选题

CDABA ABDDB DBCB 5.2 填空题

1.2 0 2.333

3.(1)i<10 或 i<=9

(2)j%3!=0 4.(1)flag*(float)k/(k+1)或1.0*flag*k/(k+1)5.(1)max=x(2)x!=1

6.(1)x<=9或x<10

(2)y=9x 5.3 改错题(略)5.4 编程题

1.答:

1)for循环,其他略

#include “stdio.h” main(){ int i,s=0;for(i=1;i<=100;i++)s+=i*i;printf(“%dn”,s);} 2)for循环,其他略

#include “stdio.h” main(){ int i=1,p=1;double s=1;do { s+=1.0/p;p*=++i;}while(1.0/p>1e-6);printf(“%lf”,s);} 2.答:

#include “stdio.h” main(){ int m,n,t,a,b;scanf(“%d,%d” ,&m,&n);if(m

(2)flag=-flag(3)scanf(“%d”, &x)

((276 C语言程序设计教程(第3版)

{ t=m;m=n;n=t;} a=m;b=n;t=m%n;while(t){ m=n;n=t;t=m%n;} printf(“%d”,n);} 3.答:

#include “stdio.h” main(){ int x,y,s=1;scanf(“%d,%d”,&x,&y);for(;y>0;y--)s*=x;printf(“%d,%d,%dn ”,s%10,s/10%10,s/100%10);} 4.答:

#include “stdio.h” main(){ int x,y,z;for(x=1;x<20;x++)for(y=1;y<33;y++){ z=100-x-y;

if((z%3)==0 &&(5*x+3*y+z/3)==100)

printf(“x=%d,y=%d,z=%dn”,x,y,z);} } 5.答:(a)

#include “stdio.h” main(){ int j,k;

for(j=1;j<=4;j++){ for(k=1;k<=4-j;k++)printf(“ ”);

printf(“****”);printf(“n”);} }(b)

#include “stdio.h” main(){ int j,k;for(j=1;j<=4;j++){for(k=1;k<=4-j;k++)printf(“ ”);for(k=1;k<=2*j-1;k++)

printf(“*”);printf(“n”);} } 附录F 课后题参考答案

6.答:

程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。

#include main(){

int i,j,k,n;

printf(“water flower'number is:”);

for(n=100;n<1000;n++)

{

i=n/100;/*分解出百位*/

j=n/10%10;/*分解出十位*/

k=n%10;/*分解出个位*/

if(n==i*i*i+j*j*j+k*k*k)

{

printf(“%-5d”,n);

}

}

printf(“n”);}

277 7.答:

#include main(){

int x;

for(x=1000;x>=3;x--)

if(x%3==1&&x%5==2&&x%7==3){ printf(“该校的学生人数是:%d人n”,x);break;} } 8.答:

#include main(){ int x=12,i=1;while(1)

{ if((x+20+i)==2*(x+i))break;

i++;} printf(“小明母亲在%d年后比小明的年龄大一倍n”,i);printf(“那时小明年龄是:%d岁,小明母亲年龄是:%d岁n”,x+i,x+20+i);}习

题6.1 单选题

DBCCB

BDC

278 C语言程序设计教程(第3版)

6.2 填空题

1.c 2.60 3.1000 10 4.16

6.3 编程题

1.答:

#include “stdio.h” #include “math.h” #define F(a)a*a+ sqrt(3*a*a+2*a+1)main(){ float x, f;scanf(“%f”, &x);f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x);printf(“%fn”, f);}习

题7.1 单选题

BCADA CCCDA BCBDB 7.2 填空题

1.(1)2 3 4 5

(4)10000

01000

00100

00010

00001

(5)Language(6)Language Programming(2)10010

(3)QuickC

2.(1)j+=2

(2)a[i]>a[j] 3.(1)i=1

(2)x[i1] 7.3 改错题(略)7.4 编程题

1.答:

#define N 10

#include “stdio.h” main()

{ int a[N]={1,2,3,4,5,6,7,8,9,10,osum=0, qsum=0,j;for(j=0;j<10;j++)if(j%2)qsum+=a[j];附录F 课后题参考答案

else osum+=a[j];printf(“osum=%d,qsum=%dn”, osum,qsum);}

279 2.答:

#define N 10 #include “stdio.h” main(){ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x;scanf(“%d”,&x);for(j=0;jj;k--)a[k]=a[k-1];a[j]=x;} for(j=0;j

printf(“%d ”,a[j]);} 3.答:

#define M 3 #include “stdio.h” main(){ int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;for(j=0;j

if(a[j][k]!=a[k][j]){ flag=0;break;} if(flag)printf(“ok”);else printf(“NO”);} 4.答:

#include “stdio.h” #include “string.h” main(){ char c1[10],c2[10],j;gets(c1);gets(c2);for(j=0;(c1[j]==c2[j])&& c1[j] && c2[j];j++);if(c1[j]>c2[j])printf(“%dn”,1);if(c1[j]

#include “stdio.h” #include “string.h” #define M 3 #define N 80 main(){ char a[M][N],j,k,n[5]={0};for(j=0;j

gets(a[j]);

280 C语言程序设计教程(第3版)

for(j=0;j

if(a[j][k]>='A' && a[j][k]<='Z')n[0]++;

else if(a[j][k]>='a' && a[j][k]<='z')n[1]++;

else if(a[j][k]>='0' && a[j][k]<='9')n[2]++;

else if(a[j][k]==' ')n[3]++;

else

n[4]++;

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

printf(“%4d”, n[j]);}习

题8.1 单选题

DBDAC BACCC 8.2 填空题

1.(1)2, 1

(2)10#30#

2.(1)49

(2)2

(4)1, 1, 1, 1, 1

3, 3, 3, 3, 3

(3)FOUR, P(3)2

(4)60(5)1

0

0

0

0

0

0 0

0

0

0 0

0

0

0

0

0

8.3 改错题(略)8.4 编程题

1.答:

#include “stdio.h” main(){ int n1,n2,n3,t;int *p1,*p2,*p3;printf(“please input 3 number:n1,n2,n3:”);scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(*p1>* p2){ t=*p1;*p1=*p2;*p2=t;} if(*p1>*p3){ t=*p1;*p1=*p3;*p3=t;} if(*p2>*p3){ t=*p2;*p2=*p3;*p3=t;} printf(“the sorted numbers are:%d,%d,%dn”,n1,n2,n3);} 附录F 课后题参考答案

2.答:

#include “stdio.h” #define N 3 main(){ int a[N],*p=a;for(;p-a=0;p--)

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

281 3.答:

#include “stdio.h” main(){ int a[10];int j,minl=0,maxl=0;for(j=0;j<10;j++)

scanf(“%d”, a+j);for(j=0;j<10;j++)

{ if(a[maxl]<*(a+j))maxl=j;if(a[minl]>*(a+j))minl=j;} j=a[0];a[0]=a[minl];a[minl]=j;j=a[9];a[9]=a[maxl];a[maxl]=j;for(j=0;j<10;j++)

printf(“%d ”, *(a+j));} 4.答:

输入阵列如下: 11 12

输出阵列如下:

11 10 9 #define M 3 #define N 4 #include “stdio.h” main(){ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=&a[0][0],t;for(k=0,j=M*N-1;k

printf(“n”);

282 } } C语言程序设计教程(第3版)

5.答:

#include “stdio.h” main(){ int len;char str[20],*p=str;printf(“please input a string:n”);scanf(“%s”,str);len=0;while(*p!=''){

len++;

p++;}

printf(“the string has %d characters.n”,len);} 6.答:

#include “string.h” #include “stdio.h” main(){ char *str1[5],ch[5][20],k,t,j,*c;void sort(char **);for(k=0;k<5;k++){str1[k]=ch[k];gets(str1[k]);} for(k=0;k<7;k++){ t=k;for(j=k+1;j<5;j++)

if(strcmp(*(str1+t),*(str1+j))>0)t=j;

c=*(str1+t);

*(str1+t)=*(str1+k);

*(str1+k)=c;} for(k=0;k<5;k++)puts(str1[k]);}习

题9.1 单选题

CBBAD DBCCD DCABC BCCBA DCDAB 附录F 课后题参考答案

283 9.2 填空题

1.120 2.x 3.3,2,2,3

4.fac /i 5.8,17 6.9 7.1.0/(i*i)

8.fun-in:30,20,10

fun-end:1015,35,1050

10,20,30 9.012345

10.93636 11.(1)r+b[k] 12.7 5 3 1 9 13.15 14.(1)*x

(2)t 15.(1)''

(2)n++ 16.024(2)*x 9.3 改错题(略)9.4 编程题

1.答:

void zhuan(){ char ch;while((ch=getchar())!='n'){ if(ch>='a' && ch<='z')ch=ch-32;putchar(ch);} } 2.答:

double expp(int n){ int k, fac=1;double sum=1;for(k=1;k<=n;k++){ fac*=k;sum+=1.0/fac;} return(sum);} 3.答:

int xy3(int x, int y)

284 { int k, num=1;C语言程序设计教程(第3版)

for(k=1;k<=y;k++)num*=x;num=num%1000;return num;} 4.答:

int age(int n){ int c;if(n==1)c=10;else c=age(n-1)+2;return c;} 5.答:

#include “stdio.h” main(){ int a,b,c,d;void fun(int a,int b,int *c, int *d);scanf(“%d%d”,&a,&b);fun(a,b,&c,&d);printf(“%d %d”,c,d);} void fun(int a,int b,int *c, int *d){ if(b){ *c=a/b;*d=a%b;} } 6.答:

#include “stdio.h” main(int argc,char *argv[]){ int k;printf(“argc=%dn”,argc);for(k=1;k

题10.1 单选题

CDBBB BBBAD CCBDC

10.2 填空题

1.所有结构体成员所占存储空间的总和 2.与占用存储空间最大的那个成员相等 附录F 课后题参考答案

3.(1)struct satype(2)3

(3)sa.a

(4)9

(5)psa=&sa 4.80 5.struct node 6.0

285 10.3 编程题

1.答:

#include “stdio.h” struct student { long num;

char name[20]; char sex; float score; }; main(){ struct student s[20], temp; int j,k, man=0, woman=0;float summan=0,sumwoman=0, aveman, avewoman; for(k=0;k<20;k++){ scanf("%ld %s %c%f",&s[k].num,s[k].name,&s[k].sex,&s[k].score); if(s[k].sex=='m')

{ summan+=s[k].score;man++;} else

{ sumwoman+=s[k].score;woman++;} } aveman=summan/man;

avewoman=sumwoman/woman;printf("%dt%ft%dt%fn",man,aveman,woman,avewoman); for(k=0;k<19;k++)for(j=0;j<20-k;j++)

if(s[j].score

{ temp=s[j];s[j]=s[j+1];s[j+1]=temp;} printf("the sorted numbers:n");for(k=0;k<20;k++)

printf("%ldt%st%ct%5.1fn",s[k].num,s[k].name,s[k].sex,s[k].score); }习

题11.1 单选题

BADD 11.2 填空题

1.3d3d330 2.(1)28(2)20

(3)0

(4)9

286 3.(1)251 C语言程序设计教程(第3版)

(2)42

(3)209

(4)–295(5)848习

题12.1 单选题

BCDCA ADA 12.2 填空题

1.rewind(文件指针)2.“d1.dat”,“rb” 3.stdin 4.文本文件;二进制文件 5.(1)“w”

(2)str[i]32

6.fopen 7.Hello 8.(1)“r”

(2)fgetc(fp)

(3)“r”

(3)time++

第二篇:C语言程序设计教程课后习题答案

C语言程序设计教程课后习题答案

第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法?

1、自然语言

2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。

1、C语言程序由函数构成;

2、“/*”与“*/”之间的内容构成C语言程序的注释部分;

3、用预处理命令#include、#define可以包含有关文件或预定义信息;

4、大小写字母在C语言中是有区别的;

5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点?

1、具有结构语言的特点,程序之间很容易实现段的共享;

2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;

3、运算符丰富,包含的范围很广;

4、数据类型丰富;

5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;

6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;

7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。

AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。

F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。

①main()

{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()

{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答

运行结果:

******************** welcome you very good ******************** 运行结果:

please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。

main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。

1、User screen

2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?

1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。

2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?

是以C为扩展名保存的纯文本文件。

第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。

''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。

①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()

{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答

main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);}

运行结果:AVER=5 ②main()

{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);}

运行结果:a=3,b='A'“end”

aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99

-1 char 'h'

unsigned int

float

55.78

long int

答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'

unsigned int 99 104 66 55 68 65535

float 99.00 104.00 66.00 55.78 68.00-1.00

long int 99 104 66 55 68-1

★写出程序运行结果。

①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()

{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答

运行结果: 9,11,9,10 运行结果: 30,1,0,0

③void main()

{int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}

运行结果: 11,19,30,1

★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)

⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a

⑼a+b,18+(b=4)*3,(a/b,a%b)

⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a

⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?

①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答

①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;

②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。

③因为a、b均为整数,其前后两个表达式的计算结果是一致的。

④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?

如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答

max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。

格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。

|1234 1234 |

分析如下:

①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。

②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。

②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。

①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。

scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答

设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答

#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。

main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/

第三篇:C语言程序设计教程 课后习题参考答案

《C语言程序设计教程》

课后习题参考答案

习题1 1.(1)编译、链接

.exe(2)函数

主函数(或main函数)(3)编辑

编译

链接 2.(1)-(5):DDBBC(6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。

(2)编辑、编译、链接、执行

(3)一个C程序由一或多个函数组成,一函数若干条语句构成,每条语句的末尾必须以分号结束。

(4)标识符,关键字,运算符,分隔符,常量,注释符等 4.从键盘输入一个双精度小数,打印出它的余弦值。#include #include main(){ double x;scanf(“%lf”, &x);printf(“%lfn”, cos(x));}

第2章 1.(1)BDE、ACFG(2)D(3)C(4)C

2.(1)错(2)错(3)错(4)对(5)错 3.(1)a=3,b=-27(2)a=11,b=6,c=6(3)3(4)1 0 1 0 1 1 0(5)-9 9 8(6)1)20 2)8 3)70 4)0 5)0 6)0 4.(1)

#include main(){ double r, h ,v;r = 2.5;h = 3.5;v = 3.14*r*r*h;printf(“v=%lfn”, v);}(2)#include main(){ char ch;ch = getchar();printf(“%cn”, ch + 32);}(3)#include main(){ printf(“

*n”);printf(“

***n”);printf(“ *****n”);printf(“*******n”);}(4)#include main(){ double x;scanf(“%lf”, &x);printf(“%d , %lfn”,(int)x, x –(int)x);}(5)#include main(){ double a=3, b=5;double result =(-2 * a +(4*a – b)/(2*a + b))/((a32);}

第4章 1.(1)-(5):CAACA 2.(1)BBB(2)AAABBBCCC(3)end(4)d=20(5)s=2,t=3(6)first

third(7)y=0 y=5 y=10 y=5 3.(1)y=‟A‟ && ch<=‟Z‟

ch>=‟a‟&&ch<=‟z‟

ch = ch-32(3)x>2&&x<=10

x>-1&&x<=2(4)t=x;x=y;y=t;4.(1)#include main(){ int x, y , z, t;scanf(“%d%d%d”, &x, &y, &z);

if(x>y){ t=x;x=y;y=t;} if(x > z){ t = x;x = z;z= t;} if(y > z){ t = y;y= z;z = t;} printf(“%d %d %dn”, x, y ,z);}(2)#include main(){ int score;scanf(“%d”, &score);

if(score < 0 || score > 100)

printf(“成绩不合理n”);

else if(score>=90)

printf(“优秀n”);

else if(score>=80)

printf(“良好n”);

else if(score >= 70)

printf(“中等n”);

else if(score >= 60)

printf(“及格n”);

else

printf(“不及格n”);}(3)#include main(){ int n;int g,s,b,q;//各位上的数值

scanf(“%d”, &n);

g = n%10;//个位

s = n/10%10;//十位

b = n/100%10;//百位

q = n/1000%10;//千位

if(n < 10)//一位数

{

printf(“%dn”, 1);//位数

printf(“%dn”, g);//各位上的数值

} else if(n < 100)//两位数

{

printf(“%dn”, 2);//位数

printf(“%d %dn”, g,s);} else if(n < 1000)//三位数

{

printf(“%dn”, 3);//位数

printf(“%d %d %dn”, g, s, b);

} else if(n < 10000)//四位数

{

printf(“%dn”, 4);//位数

printf(“%d %d %d %dn”, g, s, b, q);

} }(4)#include main(){ int n;scanf(“%d”, &n);

if(n % 3==0 && n%5==0 && n%7==0)

printf(“能同时被3、5、7整除n”);

else if(n%3==0 && n%5==0)

printf(“能被3和5整除n”);

else if(n%3==0 && n%7==0)

printf(“能被3和7整除n”);

else if(n%5==0 && n%7==0)

printf(“能被5和7整除n”);

else if(n%3==0 || n%5==0 || n%7==0){

if(n%3==0)

printf(“能被3整除n”);

else if(n%5==0)

printf(“能被5整除n”);

else

printf(“能被7整除n”);

} else

printf(“不能被3、5、7中任一个数整除n”);}(5)#include main(){ int

carType;//车型。1代表夏利;2代表富康;3代表桑塔纳

double xiali = 2.1;//每公里价格 double fukang = 2.4;double sangtana = 2.7;double distance;//距离

double totalMoney;//总的收费

printf(“请输入您乘坐的车型:1代表夏利;2代表富康;3代表桑塔纳:”);scanf(“%d”, &carType);printf(“请输入您乘车的总路程:”);scanf(“%lf”, &distance);if(carType == 1)//夏利

{

if(distance < 3)

totalMoney = 7.0;

else

totalMoney = 7 + xiali *(distance – 3);} else if(carType == 2)//富康

{

if(distance < 3)

totalMoney = 8.0;

else

totalMoney = 8 + fukang *(distance – 3);} else if(carType == 3)//富康

{

if(distance < 3)

totalMoney = 9.0;

else

totalMoney = 9 + sangtana *(distance – 3);}

printf(“(四舍五入)您的车费为:%.0lfn”, totalMoney);}(6)#include main(){ double a, b, c;scanf(“%lf%lf%lf”, &a, &b, &c);

if(a+b>c && b+c>a && c+a>b){

if(a==b && b==c)

printf(“等边三角形n”);

else if(a==b || b== c || c==a)

printf(“等腰三角形n”);

else

printf(“一般三角形n”);

} else

printf(“不能构成三角形n”);}

第5章

1.(1)C(2)C(3)K=36(4)C(5)B 2.(1)3次

(2)x>=1 && x<=10 || x>=200&&x<210(3)e == 0(4)6次(5)10 3.(1)20,10(2)16,0(3)7BAB4BAB1BC(4)ABABABC(5)****** ****** ******

****** 4.(1)a!= b

(2)n / 10(3)scanf(“%d”, &a);

5.(3)行

int fac = 1, sum = 0;6.(1)#include main(){ char ch;int alpha=0, space=0, digit=0, other=0;while((ch=getchar())!= „n‟)

{

if(ch>=‟A‟&&ch<=‟Z‟ || ch>=‟a‟&&ch<=‟z‟)

alpha++;

else if(ch>=‟0‟ && ch<=‟9‟)

digit++;

else if(„ „ == ch)

space++;

else

other++;} printf(“%d %d %d %dn”, alpha, digit, space, other);}(2)#include main(){ int m20, m10;for(m20=1;m20<5;m20++){

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

if(20*m20+10*m10 == 100)

printf(“%d, %dn”, m20, m10);} }(3)#include main(){ int x, y, z;for(x=0;x<10;x++)

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

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

if(x*100+y*10+z + y*100+z*10+z == 532)

printf(“%d %d %dn”, x, y, z);}(4)#include main(){ int row, spaceCount,starCount;int n;scanf(“%d”, &n);

for(row = 1;row <= n;++row){

for(spaceCount = 1;spaceCount <= n1;++starCount)

printf(“*”);//打印出某行上的所有星号

printf(“n”);//换行

} //打印下半部分

for(row=1;row

for(spaceCount = 1;spaceCount <= row;++ spaceCount)

printf(“ ”);//打印出某行上星号前的空格

for(starCount = 1;starCount <= 2*(n-row)byear;if(nmonth

age--;else if(nmonth == bmonth && nday>bday)

age--;return age;}

(4)

#include int sum(int n);main(){ int n,s;scanf(“%d”, &n);s = sum(n);printf(“s=%dn”, s);}

int sum(int n){ int s=0;while(n){

s += n % 10;

n /= 10;} return s;}

(5)

#include double sumfac(int n);main(){ int n;scanf(“%d”, &n);printf(“%.0lfn”, sumfac(n));} double sumfac(int n){ double f=1.0, s = 0.0;

int i;for(i=1;i<=n;i++){

f *= i;

s += f;} return f;}

(6)

#include int gcd(int m , int n);main(){ int m, n;scanf(“%d%d”, &m, &n);printf(“%dn”, gcd(m ,n));} int gcd(int m, int n){ int t,r;if(m < n){ t = m;m= n;n = t;}

r = m % n;while(r){

m = n;

n = r;

r = m % n;} return n;}

(7)

#include int gcd(int m , int n);int lcm(int m, int n);main(){ int m, n;scanf(“%d%d”, &m, &n);printf(“%dn”, lcm(m ,n));} int gcd(int m, int n){ int t,r;if(m < n){ t = m;m= n;n = t;}

r = m % n;while(r){

m = n;

n = r;

r = m % n;} return n;}

int lcm(int m, int n){ return m*n/gcd(m,n);}

(8)

#include double mypower(double x, int y);main(){ double x;

int y;scanf(“%lf%d”, &x, &y);printf(“%lfn”, mypower(x,y));} double mypower(double x, int y){ int i;double f=1.0;for(i=1;i<=y;i++)

f *= x;return f;}

第7章 1.(1)6(2)5(3)不能

(4)int a[3][2]={{1,2}, {3,4}, {5,6} };(5)6 9(6)abc G 2.(1)

#include

void reverse(int a[ ], int n);

int main()

{

int array[10]={0};

int i;

printf(“请输入10个整数:”);

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

scanf(“%d”, &array[i]);

reverse(array, 10);//调用函数逆序存储数组中的数据

printf(“逆序后的元素为:n”);

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

printf(“%5d”, array[i]);

printf(“n”);

return 0;

}

void reverse(int a[ ], int n)

{

int i;

int tmp;

for(i=0;i

{

tmp = a[i];a[i] = a[n-i-1];

}

}

(2)

#include #include void reverseStr(char str[ ]);main(){ char s[100];gets(s);reverseStr(s);puts(s);}

void reverseStr(char str[ ]){ int i,j;char t;i=0;j=strlen(str)-1;while(i < j){

t = str[i];

a[n-i-1] = tmp;

str[i] = str[j];

str[j] = t;

i++;

j--;} }

(3)

#include int copyTo(int s1[], int n, int s2[ ]);main(){ int s1[10], s2[10];int i,count;for(i=0;i<10;i++)

scanf(“%d”, &s1[i]);count = copyTo(s1, 10, s2);for(i=0;i

printf(“%d ”, s2[i]);printf(“n”);}

int copyTo(int s1[], int n, int s2[ ]){ int i, j=0;for(i=0;i

if(s1[i] % 2)

s2[j++] = s1[i];} return j;}

(4)

#include void copyToStr(char str1[ ], char str2[ ]);main(){ char s1[100], s2[100];gets(s1);copyToStr(s1, s2);puts(s2);} void copyToStr(char str1[ ], char str2[ ]){ int i=0,j=0;while(str1[i]!= ''){

if(str1[i]>='a'&&str1[i]<='z')

{

str2[j] = str1[i];

j++;

}

i++;} str2[j] = '';return j;}

(5)

#include void deleteAll(char str[ ], char ch);main(){ char s[100], ch;gets(s);ch = getchar();deleteAll(s, ch);puts(s);} void deleteAll(char str[ ], char ch){ int i, j;i = 0;

j = 0;while(str[i]){

if(str[i]!= ch)

{

str[j++] = str[i];

}

i++;

} str[j] = '';}

(6)

#include void replaceAll(char str[ ], int ch1, char ch2);main(){ char s[100], c1, c2;gets(s);c1 = getchar();c2 = getchar();replaceAll(s, c1, c2);puts(s);} void replaceAll(char str[ ], int ch1, char ch2){ int i;i = 0;while(str[i]){

if(str[i] == ch1)

str[i] = ch2;

i++;} }

(7)

#include

int transformToBin(int dnum, int bin[ ]);

int main()

{

int array[32]={0};//保存转换后的二进制数

int num;//待转换的整数

int cc;//最后得到的二进制总共多少位

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

scanf(“%d”, &num);

cc = transformToBin(num, array);//调用转换函数

cc--;//往回退一个元素下标,使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的二进制数

printf(“%d”, array[cc]);

printf(“n”);

return 0;

}

int transformToBin(int dnum, int bin[ ]){

int count = 0;while(dnum)//当dnum还未转换完毕

{ bin[count++] = dnum % 2;//余数保留到数组对应元素中

dnum /= 2;//数本身除2 } return count;}

(8)

#include int transformToHex(int dnum, char hex[ ]);int main(){ char array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);cc = transformToHex(num, array);//调用转换函数

cc--;//往回退一个元素下标,使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%c”, array[cc]);printf(“n”);return 0;}

int transformToHex(int dnum, char hex[ ]){ int count = 0;int t;while(dnum)//当dnum还未转换完毕

{

t = dnum % 16;

if(t < 10)

hex[count] = t+'0';//余数保留到数组对应元素中

else

hex[count] = t-10+'A';

count++;dnum /= 16;//数本身除16 } return count;}(9)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate(int a[ ][N], int row, int col);void display(int a[][N], int row, int col);void getMaxEveryRow(int a[][N], int row, int col, int y[]);main(){ int arr[M][N], y[M]={0};int i;generate(arr, M, N);display(arr, M, N);getMaxEveryRow(arr,M,N,y);//输出最大值

for(i=0;i

printf(“%d ”, y[i]);printf(“n”);} void generate(int a[ ][N], int row, int col){ int i,j;srand(time(NULL));for(i=0;i

for(j=0;j

a[i][j] = rand()%101;} void display(int a[][N], int row, int col){ int i,j;for(i=0;i

for(j=0;j

printf(“%4d”, a[i][j]);

printf(“n”);} } void getMaxEveryRow(int a[][N], int row, int col,int y[]){ int i,j;for(i=0;i

y[i] = a[i][0];

for(j=1;j

if(y[i] < a[i][j])

y[i] = a[i][j];} }

(10)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate(int a[ ][N], int row, int col);void display(int a[][N], int row, int col);void getMinEveryCol(int a[][N], int row, int col);main(){ int arr[M][N];int i;generate(arr, M, N);display(arr, M, N);getMinEveryCol(arr,M,N);//输出最小值

for(i=0;i

printf(“%d ”, arr[0][i]);printf(“n”);} void generate(int a[ ][N], int row, int col){ int i,j;srand(time(NULL));for(i=1;i

for(j=0;j

a[i][j] = rand()%101;} void display(int a[][N], int row, int col){ int i,j;for(i=1;i

for(j=0;j

printf(“%4d”, a[i][j]);

printf(“n”);} } void getMinEveryCol(int a[][N], int row, int col){ int i,j;for(i=0;i

a[0][i] = a[1][i];

for(j=2;j

if(a[0][i] > a[j][i])

a[0][i] = a[j][i];} }

第8章 1.(1)局部

(2)void(3)auto(4)auto(5)return(6)递归

(7)求 1!+2!+3!+4!+5!(8)注意全局变量和局部变量的区别

2.(1)

#include #include double xc(double x, double y);main(){ double a, b;double c;scanf(“%lf%lf”, &a, &b);

c = xc(a, b);printf(“ %lfn”, c);} double xc(double x, double y){ return sqrt(x*x+y*y);}

(2)

static extern

register

#include long seconds(int hour, int minute, int second);main(){ int h,m,s;long sec;printf(“输入时间:”);scanf(“%d%d%d”, &h, &m, &s);sec = seconds(h,m,s);printf(“离12点最近的秒数:%ldn”, sec);} long seconds(int hour, int minute, int second){ long s;if(hour < 6){

s = second+minute*60+hour*60*60;} else {

s = 60-second+(60-minute-1)*60+(12-hour-1)*60*60;} return s;}

(3)

#include int fun(int n);main(){ int n;scanf(“%d”, &n);if(fun(n))//是质数,则输出该数;不是的话,不作任何处理

printf(“%dn”, n);} int fun(int n){ int i;for(i=2;i

if(n%i == 0)

break;if(i

return 0;else

return 1;}

(4)

#include int fun(int n);main(){ int n;int count=0;for(n=2;n<1000;n++)

if(fun(n))

{

printf(“%4d”, n);

count++;

if(count % 10 == 0)

printf(“n”);

}

printf(“n”);} int fun(int n){ int i;for(i=2;i

if(n%i == 0)

break;if(i

return 0;else

return 1;}

(5)

#include int func(int n);main(){ int n;scanf(“%d”, &n);printf(“%dn”, func(n));} int func(int n){ if(1 == n)

return 3;return 2*func(n-1)-1;}

(6)

#include int gcd(int m, int n);main(){ int x,y,t;scanf(“%d%d”, &x, &y);if(x < y){

t=x;x=y;y=t;} printf(“%dn”, gcd(x,y));} int gcd(int m, int n){ if(0==n)

return m;return gcd(n, m%n);}

第9章 1.(1)xyzNKT(2)bcdefgh(3)4,4(4)qponmzyx(5)abcCD(6)0 2.(1)

#include #include void reverse(int *p, int n);main(){ int i;int a[10]={1,2,3,4,5,6,7,8,9,10};

reverse(a,10);for(i=0;i<10;i++)

printf(“%d ”, a[i]);printf(“n”);} void reverse(int *p, int n){ int *q;int t;q = p + n1;while(str < pEnd){

t = *str;

*str = *pEnd;

*pEnd = t;

str++;

pEnd--;} }(3)

#include int copyTo(int *s1, int n, int *s2);main(){ int a[10]={1,2,3,4,5,6,7,8,9, 10};int b[10], count,i;count=copyTo(a,10,b);for(i=0;i

printf(“%d ”, b[i]);printf(“n”);} int copyTo(int *s1, int n, int *s2){ int count=0;int *ps1, *ps2;ps2 = s2;for(ps1 = s1;ps1 < s1 + n;ps1++){

if(*ps1 % 2)//奇数

{

*ps2++ = *ps1;

} } return ps2-s2;}

(4)

#include void copyToStr(char *str1, char *str2);main(){ char s1[100], s2[100];gets(s1);copyToStr(s1, s2);puts(s2);} void copyToStr(char *str1, char *str2){ while(*str1){

if(*str1 >= 'a' && *str1 <= 'z')

{

*str2++=*str1;

}

str1++;} *str2 = '';}

(5)

#include void deleteAll(char *str, char ch);main(){ char s[100], c;gets(s);c = getchar();deleteAll(s, c);puts(s);} void deleteAll(char *str, char ch){ char *p;p = str;while(*str){

if(*str!= ch)

*p++ = *str;

str++;} *p = '';}

(6)

#include void replaceAll(char *str, char ch1, char ch2);main(){ char s[100], c1, c2;printf(“输入字符串:”);gets(s);printf(“输入查找字符:”);c1 = getchar();fflush(stdin);//清除键盘缓冲区

printf(“输入替换字符:”);c2 = getchar();replaceAll(s,c1, c2);puts(s);} void replaceAll(char *str, char ch1, char ch2){ while(*str){

if(*str == ch1)

{

*str = ch2;

}

str++;} }

(7)

#include int transformToBin(int dnum, int *bin);int main(){ int array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);cc=transformToBin(num, array);//调用转换函数

cc--;//使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%d”, array[cc]);printf(“n”);return 0;}

int transformToBin(int dnum, int *bin){ int *pb;int t;pb = bin;while(dnum)//当dnum还未转换完毕

{

t = dnum % 2;

*pb = t;

pb++;

dnum /= 2;//数本身除2 } return pb-bin;}

(8)

#include #include void transformToHex(int dnum, char *hex);int main(){ char array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);transformToHex(num, array);//调用转换函数

cc=strlen(array)-1;//使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%c”, array[cc]);printf(“n”);return 0;}

void transformToHex(int dnum, char *hex){ char *ph;int t;ph = hex;while(dnum)//当dnum还未转换完毕

{

t = dnum % 16;

if(t < 10)

*ph = t+'0';

else

*ph = t-10+'A';

ph++;dnum /= 16;//数本身除16 } *ph = '';}

(9)

#include void strToLow(char *str);main(){ char s[100];gets(s);strToLow(s);puts(s);} void strToLow(char *str){ while(*str){

if(*str>='A'&&*str<='Z')

*str = *str + 32;

str++;} }

第10章 1.(1)12(2)(++p)->num(5)B(6)B

2.(1)

struct myDate{ int year, month, day;};

(2)

struct empInfo{ char empNo[15];char empName[10];char xb;//性别

int age;struct myDate empDay;double salary;};

(3)

#include typedef struct STUDENT { char name[20];float height;

3)D 7)10,A

4)p2!= NULL

(((int score;}STUD;main(){ STUD a;printf(“姓名:”);

gets(a.name);printf(“身高:”);

scanf(“%f”, &a.height);

printf(“成绩:”);

scanf(“%d”, &a.score);

//输出信息(仅为测试用)

printf(“%s %.2f %d n”, a.name, a.height, a.score);}

第11章 1.(1)打开文件:fopen

关闭文件:fclose 使用:

FILE *fp;

fp = fopen(“myfile”, “r”);

fclose(fp);

(2)”w”

(3)文本文件:内容均以字符的形式存储,占的字节数可能会大些

二进制文件:内容以二进制编码的形式存储,占的字节数可能会稍小。

(4)第一个参数:读取得到的信息存储在内存的哪个地方

第二个参数:读取的字节数

第三个参数:读取的块数

第四个参数:文件指针,表示从哪个文件中读取数据

(5)第一个参数:待写入文件的信息存储在内存的哪个地方

第二个参数:写入的字节数

第三个参数:写入的块数

第四个参数:文件指针,表示要写入到哪个文件中(6)为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

2.(1)

#include #include main(){ FILE *fpr, *fpw;char ch;

fpr = fopen(“a.txt”, “r”);fpw = fopen(“b.txt”, “a”);

if(NULL==fpr){

printf(“文件打开不成功n”);

return 0;} if(NULL == fpw){

printf(“文件打开不成功n”);

return 0;}

while(!feof(fpr)){

ch = fgetc(fpr);

fprintf(fpw, “%c”, ch);}

fclose(fpr);fclose(fpw);}

(2)

#include main(){ FILE *fp1, *fp2;double pi = 3.1415926;fp1 = fopen(“a.txt”, “w”);//以文本的形式写入

fp2 = fopen(“b.txt”, “wb”);//以二进制的形式写入

if(NULL==fp1){

printf(“文件打开不成功n”);

return 0;} if(NULL == fp2){

printf(“文件打开不成功n”);

return 0;}

fprintf(fp1, “%lf”, pi);fwrite(&pi,sizeof(pi),1,fp2);

fclose(fp1);fclose(fp2);}

打开之后的效果:

(3)

#include #include main(){ FILE *fpr;fpr = fopen(“a.txt”, “r”);

if(NULL==fpr){

printf(“文件打开不成功n”);

return 0;}

while(!feof(fpr)){

putchar(fgetc(fpr));} fclose(fpr);}

(4)

#include typedef struct STUDENT { char no[15];char name[10];int score;}STUD;#define N 3 main(){ STUD s[N];int i;FILE *fp;int count;//读取文件时才使用

for(i=0;i

printf(“请输入第%d个学生信息:n” , i+1);

printf(“

学号:”);

gets(s[i].no);

printf(“

姓名:”);

gets(s[i].name);

printf(“

成绩:”);

scanf(“%d”, &s[i].score);

fflush(stdin);//清除键盘缓冲区

}

//打开文件,并写入

fp = fopen(“a.txt”, “wb”);if(NULL == fp){

printf(“文件打开不成功,不能写入n”);

return 0;} for(i=0;i

fwrite(&s[i], sizeof(s[i]), 1, fp);fclose(fp);

//以下代码从文件中读取出信息,并显示在屏幕上

fp = fopen(“a.txt”, “rb”);

} count = 0;while(!feof(fp)){ if(fread(&s[count], sizeof(s[count]), 1, fp))

count++;} fclose(fp);//输出

for(i=0;i

第四篇:C语言程序设计教程第三版(李凤霞)习题答案

教材习题答案

第一章

习题

一、单项选择题 1.C 2.B 3.B 4.C 5.D 6.A 7.C 8.A

二、填空题

1.判断条件 2.面向过程编程 3.结构化 4.程序

5.面向对象的程序设计语言 6.基本功能操作、控制结构 7.有穷性

8.直到型循环结构 9.算法 10.可读性 11.模块化

12.对问题的分解和模块的划分

第二章

习题

一、单项选择题

1.B 2.D 3.C 4.B 5.A 6.A 7.B 8.C

二、填空题

1.主 2.C编译系统 3.函数、函数 4.输入输出 5.头 6..OBJ 7.库函数 8.文本

第三章

习题

一、单项选择题 1.D 2.B 3.A 4.C 5.C 6.D 7.D 8.B 9.B 10.C 11.A 12.D 13.C 14.C 15.C 16.A 17.C 18.C 19.C 20.D 21.A 22.D 23.D 24.D,A 25.D 26.A 27.B

二、填空题

1.补码 2.308 10  (~)

308 10,—

2.308 10  (~)

308 10,— 3.逻辑

4.单目,自右向左 5.函数调用 6.a 或

b(题目有错 , 小括号后面的

c<=98 改成(c>=97&&c<=98)就可以得到所给的答案了)7.1 8.65,89

第四章

习题

一、单项选择题

1.D 2.C 3.D 4.A 5.D 6.B 7.A 8.C 9.B 10.B

二、填空题

1.一

2.5.169000 3.(1)-200 2500

(2)i=-200,j=2500(3)2500 200   

j i 4.a=98,b=765.000000,c=4321.000000 5.100 25.81 1.89234,100

25.81 按

Enter 键)

1.89234,100(按

Tab 键)

25.81(按

Tab 键)

1.89234 6.0,0,3 7.3 8.scanf(“ %lf %lf %lf”,&a,&b,&c);9.13 13.000000 13.000000 10.b=a;a=c;c=b;或

a=a+b;c=c-b;(对于本题来说,后者的答案更好,不仅使

a 与

c 的值进行

交换而且能保持中间变量

b 的值不发生改变)

第五章

习题

一、单项选择题

1.D 2.C 3.B 4.B 5.D 6.A 7.B 8.D

二、填空题

1.非零,零 2.k= =0 2.k= =0 3.if(abs(x)>4)

Printf(“ %d ” ,x);else

printf(“ error!”);4.if(x%2==1&&((x>=1)&&(x<=10)||(x>=200&&x<=210))printf(“%d”,x);5.k=1(原题最后一行漏了个

d, 如果认为原题正确 , 则输出

k=%。)6.10!,Right!11 7.$$$a=0 8.a=2,b=1 9.0

第六章

习题

一、单项选择题

1.B 2.C 3.C 4.B 5.C 6.B

7.C 8.A

二、填空题

1.无穷次

2.8(原题有误。应该把

b=1 后面的逗号改为分号)

3.20 4.11 5.2.400000 6.*#*#*#$ 7.8 5 2 8.①

d=1.0 ②

k++

k<=n 9.①

x>=0 ②

x

第七章

习题

一、单项选择题

1.B 2.B 3.C 4.C 5.A 3 6.A 7.B 8.A

二、填空题

1.512 256 128 64 32 16 8 4 2 1 2.①

a[age]++ ②

i=18;i<26 3.①

break

i==8 4.①

a[i]>b[j]

② i<3 ③

j<5 5.①

b[j]=a[j][0] ②

b[j]

第八章

习题

一、单项选择题

1.B 2.C 3.C 4.A 5.A 6.C 7.C 8.D 9.D 10.B 11.A 12.C 13.A 14.C 15.B

二、填空题

1.①

return(0)

return(n+sum(n-1))2.①

return(1)

n*facto(n-1)

第九章

习题

一、单项选择题

1.D 2.C 3.D 4.A 5.C 6.C 7.C 8.A 9.B 10.C 11.A 12.A 13.B 14.B 15.B 16.D 17.C 18.D 19.B 20.D

三、填空题

1.①

int * ②

* z 2.①

*p++ 3.①

’ ’

++ 4.①

q=p+1

q

*q>max

*q

习题

一、单项选择题

1.D

2.D

3.A

4.C

5.B 6.A

7.A

8.B

9.D

10.B 11.C

12.B

13.D

14.C

二、填空题

1.0x 34,0x12

2.ARRAY a[10],b[10],c[10];

3.2,3 4.“ ab ” , ” cd ”

5.(*b).day,b->day

6.ad

abcdef

ghimno

hino 7.①

node*

!=NULL

p=top 8 p1->next 9.①

list*

② list*

return h;

第十一章

习题

一、单项选择题

1.A

2.A

3.B

4.A

5.B 6.D(题目有错,将

D 中的

改成)

7.B

8.B

9.B

10.B

11.B

12.B

13.C

14.C

15.D

16.A

17.D

二、填空题

1.ASCII,二进制

2.pf=fopen(“

A:zk04data xfile.dat ” , ” w ”);3.4.ASCII , 二进制,文件尾,非

0 值

第五篇:完整的delphi程序设计教程课后习题答案

1.239页1题小时钟 procedure TForm1.Timer1Timer(Sender: TObject);var xt,yt:integer;h,m,s,ms:word;begin decodetime(time,h,m,s,ms);xt:=paintbox1.clientwidth div 2;yt:=paintbox1.clientheight div 2;paintbox1.refresh;paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=3;paintbox1.canvas.lineto(xt+round(sin((60*h+m)/(12*60)*2*pi)*100), yt-round(cos((60*h+m)/(12*60)*2*pi)*100));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=2;paintbox1.canvas.lineto(xt+round(sin(m/60*2*pi)*140), yt-round(cos(m/60*2*pi)*140));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=1;paintbox1.canvas.lineto(xt+round(sin(s/60*2*pi)*180), yt-round(cos(s/60*2*pi)*180));end;end.2.239页3题求两点间的距离 procedure TForm1.Button1Click(Sender: TObject);begin paintbox1.Refresh;formpaint(sender);end;procedure TForm1.FormPaint(Sender: TObject);var xt,yt:integer;ax,ay,bx,by:integer;begin xt:=paintbox1.ClientWidth div 2;yt:=paintbox1.Clientheight div 2;paintbox1.canvas.MoveTo(xt,0);paintbox1.canvas.lineTo(xt,2*yt);paintbox1.canvas.MoveTo(0,yt);paintbox1.canvas.lineTo(2*xt,yt);ax:=strtoint(edit1.text);ay:=strtoint(edit2.text);bx:=strtoint(edit3.text);by:=strtoint(edit4.text);

edit5.Text:=floattostr(sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by)));

paintbox1.canvas.MoveTo(xt+ax*10,yt-ay*10);

paintbox1.canvas.lineTo(xt+bx*10,yt-by*10);end;end.3.226页5题输入学生成绩 var

Form1: TForm1;type

studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end;

implementation {$R *.dfm} procedure

TForm1.Button1Click(Sender: TObject);

var t:studentrecord;

f,f1:file of studentrecord;p1,p2:boolean;begin

assignfile(f,'c:my documentsstu.dat');reset(f);

assignfile(f1,'c:my documentsstu1.dat');rewrite(f1);

while not eof(f)do begin read(f,t);

p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85);

p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end;

closefile(f);closefile(f1);end;

procedure

TForm1.FormCreate(Sender: TObject);

var t:studentrecord;f:file of studentrecord;xingbie:string;begin

assignfile(f,'c:my documentsstu.dat');reset(f);

while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else

xingbie:='女';

listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+

' '+inttostr(t.yy)+' '+inttostr(t.dz));end;

closefile(f);end;

procedure

TForm1.Button2Click(Sender: TObject);begin close;end;end.4.226页8题保存获得奖学金者 var

Form1: TForm1;type

studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end;

implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);var t:studentrecord;f,f1:file of studentrecord;p1,p2:boolean;begin assignfile(f,'c:my documentsstu.dat');reset(f);assignfile(f1,'c:my documentsstu1.dat');rewrite(f1);while not eof(f)do begin read(f,t);p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85);p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end;closefile(f);closefile(f1);end;procedure TForm1.FormCreate(Sender: TObject);var t:studentrecord;f:file of studentrecord;xingbie:string;begin assignfile(f,'c:my documentsstu1.dat');reset(f);while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else xingbie:='女';listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+ ' '+inttostr(t.yy)+' '+inttostr(t.dz));end;closefile(f);end;procedure TForm1.Button2Click(Sender: TObject);begin close;end;end.5.166页22题素数 procedure

TForm1.Button1Click(Sender: TObject);type

sushuset=set of byte;var

sushu:sushuset;i,j,n,m,k:longword;s,s0:string;begin

n:=strtoint(edit1.text);m:=strtoint(edit2.text);if n mod 2=0 then n:=n+1;k:=m-n;

if k>255 then

showmessage('范围太大,请重新输入区间端点!')else begin

sushu:=[0..k];for i:=2 to n-1 do for j:=n to m do

if j mod i =0 then sushu:=sushu-[j-n];for i:=n to m div 2 do for j:= i+1 to m do

if j mod i =0 then sushu:=sushu-[j-n];s:='';s0:='';

for i:=n to m do if i-n in sushu then begin

if length(s0+' '+inttostr(i))>60 then begin

s:=s+s0+chr(13);s0:='' end;

s0:=s0+' '+inttostr(i);end;s:=s+s0;label1.caption:=s;

groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end;end;

procedure

TForm1.FormCreate(Sender: TObject);begin

groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end;

procedure

TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var j:set of char;begin

j:=['0'..'9',#8];

if not(key in j)then key:=#0;end;end.6.148页12题整除的数 implementation {$R *.dfm}

function d7(x:integer):boolean;begin

if x mod 7=0 then d7:=true else d7:=false;end;

function d17(x:integer):boolean;begin

if x mod 17=0 then d17:=true else d17:=false;end;

procedure

TForm1.FormActivate(Sender: TObject);var

n:integer;begin

for n:=1000 to 4000 do if d7(n)and d17(n)then memo1.Lines.Add(inttostr(n));end;end.7.148页17题求斐波那契数列问题 implementation {$R *.dfm} function fib(n:integer):int64;begin case n of 1,2:fib:=1;else fib:=fib(n-1)+fib(n-2);end;end;procedure TForm1.Button1Click(Sender: TObject);var k:integer;begin memo1.lines.clear;for k:=1 to strtoint(edit1.text)do memo1.lines.add(format('%2d %3d',[k,fib(k)]));end;end.8.120页10题,判断是否是闰年 procedure TForm1.Button1Click(Sender: TObject);var y,m:integer;begin y:=strtoint(edit1.text);m:=strtoint(edit2.text);label3.Caption:='';if((y mod 4 = 0)and(y mod 100 <> 0))or(y mod 400=0)then label3.Caption:=edit1.text+'年是闰年,' else label3.Caption:=edit1.text+'年不是闰年,';case m of 3,4,5:Label3.Caption:=Label3.Caption+edit2.Text+'月份是春天,';6,7,8:Label3.Caption:=Label3.Caption+edit2.Text+'月份是夏天,';9,10,11:Label3.Caption:=Label3.Caption+edit2.Text+'月份是秋天,';else Label3.Caption:=Label3.Caption+edit2.Text+'月份是冬天,';end;

case m of

1,3,5,7,8,10,12:Label3.Caption:=Label3.Caption+'共有31天,';

4,6,9,11:Label3.Caption:=Label3.Caption+'共有30天,';else

if((y mod 4 = 0)and(y mod 100 <> 0)or(y mod 400=0))then Label3.Caption:=Label3.Caption+'共有29天,' else

Label3.Caption:=Label3.Caption+'共有28天,';end;end;end.9.120页11题求和的 procedure

TForm1.Button1Click(Sender: TObject);var

n,k,j:integer;s:int64;begin

n:=strtoint(edit1.text);j:=0;s:=0;

for k:=1 to n do begin j:=j+k;s:=s+j;end;

panel2.Caption:=format('s = %d',[s]);edit1.setfocus;end;

procedure

TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var b:boolean;begin

b:=(key<>#8)and(key<#48)or(key>#57);

if b then key:=#0;end;end.10.120页12题男人,女人,小孩各有多少人 procedure

TForm1.Button1Click(Sender: TObject);var

x,y,z:integer;p:string;begin

memo1.clear;for x:=0 to 16 do for y:=0 to 24 do begin

z:=30-x-y;

if 3*x+2*y+z/1=50 then begin

p:=format('%3d %3d %3d',[x,y,z]);

memo1.lines.add(p);end;end;end;end.11.98页2题求长方体的表面积 procedure

TForm1.Button1Click(Sender: TObject);var

s,l,k,h:double;begin

l:=strtofloat(edit1.text);k:=strtofloat(edit2.text);h:=strtofloat(edit3.text);s:=2*l*k+2*k*h+2*l*h;label1.Caption:=floattostr(s);end;end.12.98页5题计算圆的面积和周长 procedure

TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var r:real;b:boolean;begin b:=(key<>#8)and(key<>'.')and(key<>#13)and(key<#48)or(key>#57);if b then key:=#0;if key =#13 then begin if edit1.text='' then edit1.text:='0';r:=strtofloat(edit1.text);if radiobutton1.Checked then label1.Caption:=format('圆的面积为: %f',[pi*r*r]);if radiobutton2.Checked then label1.Caption:=format('圆的周长为: %f',[2*pi*r]);if radiobutton3.Checked then label1.Caption:=format('圆的面积为: %f'+chr(13)+ '周长为: %f',[pi*r*r,2*pi*r]);edit1.SelectAll;end;end;procedure TForm1.RadioButton1Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton2Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton3Click(Sender: TObject);var sender0:tobject;key:char;begin

sender0:=edit1;key:=#13;

form1.edit1keypress(sender0,key);end;end.13.98页6题统计奇数和偶数的个数

procedure

TForm1.Button1Click(Sender: TObject);var

k,j,n:word;begin k:=0;

n:=combobox1.items.count;for j:=1to n do

if strtoint(combobox1.items[j-1])mod 2 = 0 then k:=k+1;

label1.caption:=format('共有: '+#13+'%d个偶数,'+#13+'%d个奇数。',[k,n-k]);end;

procedure

TForm1.Button2Click(Sender: TObject);begin

combobox1.items.clear;end;

procedure

TForm1.ComboBox1KeyPress(Sender: TObject;var Key: Char);begin if(key =#13)and(combobox1.text<>'')then

//按键后接收输入的选项 begin

combobox1.items.insert(0,combobox1.text);

//按键后移去选项

combobox1.selstart:=0;combobox1.text:='';end;

if key = #27 then

if combobox1.itemindex<>-1 then

combobox1.items.Delete(combobox1.itemindex);end;end.14.98页8题设置倒计时的时间,并进行倒计时 procedure

TForm1.Timer1Timer(Sender: TObject);var

m,n,s,h:integer;begin

timer1.Tag:=timer1.Tag-1;m:=timer1.Tag;if m<0 then begin

timer1.enabled:=false;

showmessage('预定的时间到了!');edit1.Text:='0';end else begin s:=m;

n:=s div 60;s:=s mod 60;h:=n div 60;n:=n mod 60;

maskedit1.text:=format('%d:%d:%d',[h,n,s]);

if n <> strtoint(edit1.text)then edit1.Text:=inttostr(n);end;end;

procedure

TForm1.Button1Click(Sender: TObject);begin

timer1.enabled:=True;

timer1.Tag:=strtoint(edit1.Text)*60;end;end.

下载C语言程序设计教程(第三版)课后习题参考答案  张敏霞版word格式文档
下载C语言程序设计教程(第三版)课后习题参考答案 张敏霞版.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐