C语言程序设计呼克佑课后习题答案_第1页
C语言程序设计呼克佑课后习题答案_第2页
C语言程序设计呼克佑课后习题答案_第3页
C语言程序设计呼克佑课后习题答案_第4页
C语言程序设计呼克佑课后习题答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计呼克佑课后习题答案

C语言程序设计习题解答(参考)

习题一

一、单项选择题

1.D

2.A

3.D

二、填空题

1.顺序结构选择结构循环结构

2算法

3.语言简洁、运算符丰富、结构化语言

4.可移植性强、代码效率高、书写格式自由

5.错误隐蔽、有时会难以理解、有时会难以修改

6.群举法(枚举法)、递推法(迭代法)、递归法

7.做什么怎么做

三、应用题

1.

include

voidmain()

printf(〃*************************\nn)•

printf("Clanguageprogram\nH);

printf(〃*************************\n〃)*

)

2.

include

voidmain()

inta,b,c,max;

scanf("%d%d%d",&a,&b,&c);

if(a>b)max=a;

elsemax=b;

if(max

printf(wMax=%d\nM,max);

一、单项选择题

l.A,D,E

2.B,E

3.B,D,E,F,H

4.B,F

5.A,B,E

二、填空题

l.(i)int(2)char(3)double(4)long(5)char⑹char⑺int(8)long

2.(i)0(2)0(3)2(4)4(5)4(6)8(7)0(8)2

3.2111

4.不做

5.sin(25*3.14159/180)+cos(30*3.14159/180)

6.2

8.5

三、给出各个程序的运行b结果

1.运行结果如下:

3

21

5

5

2.运行结果如下:

6,9

9,27

一、单项选择题

l.D

2.B

3.D

4.C

5.B

6.C

7.B

8.A

9.C10.D

ll.D12.D13.B14.A15.A16.B17.C18.C19.B20.B

21.D22.C23.C24.D25.C26.C27.D28.D29.B3O.A

二、填空题

1.从标准设备(键盘)上读入一个字符向标准设备(键盘)上输

出一个字符

#include

2.以十进制形式输入一个整数表示从标准输入设备(键盘)读取

输入的3个整型数

表示掉过3个整数不读取用来输入一个字符

3.以十进制形式输出一个整数以十六进制形式输出一个整数

以十进制小数形式输出,输出的数据长度为7位,其中有两位为

小数

以字符形式输出一个字符

4.分程序;;

5.-1

6.非00

7.a%7==0else8.39.2

lO.forwhiledo-while11.Continue12.a=16,y=42

13.1014.y=1915.22222

16.3917.718.5,5

19.n=420.-321.8

三、程序阅读分析题

1.2.

3.0

4.567

5.thisnumberisahuiwen

四、编程题

1.编写一个程序,要求用户输入两个整数,判定其中一个是否能

整除另一个。

#include

intmain()

(

inta,b;

while(scanf("%d%d",&a,&b)==2)

{

if(a%b)printf("不能整除\n");

elseprintf("能整除\n");

)

return0;

)

2.编程实现:输入一个整数,判断它能否被3,5,7整除,并输

出以下信息之一:

①能同时被3,5,7整除;

②能被其中两数(要指出哪两个)整除;

③能被其中一个数(要指出哪一个)整除;

④不能被3,5,7任一个整除。

#include

voidmain()

(

inta;

printf("请输入一个整数\n");

scanf("%d",&a);

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

printf("%d能同时被3,5,7整除\n",a);

eIseif(a%3!=0&&a%5==0&&a%7==0)

printf("%d能同时被5,7整除\n",a);

eIseif(a%3==0&&a%5!=0&&a%7==0)

printf("%d能同时被3,7整除\n",a);

eIseif(a%3==0&&a%5==0&&a%7!=0)

printf("%d能同时被3,5整除\n",a);

eIseif(a%3==0&&a%5!=0&&a%7!=0)

printf("%d能被3整除\n",a);

eIseif(a%3!=0&&a%5==0&&a%7!=0)

printf("%d能被5整除\n",a);

elseif(a%3!=0&&a%5!=0&&a%7==0)

printf("%d能被7整除\n",a);

eIseprintf("%d不能被3,5,7整除\n",a);

)

3.市郊长途电话收费标准如下:通话时间在三分钟以下收费一角,

三分钟以上则每超过一分钟加一角。在7:00—21:00之间通话者,

按收费标准全价收费;在其它时间通话者,按收费标准的一半收费。

请计算某人在x时间通话y分钟,应缴多少电话费。(通话时间利用

整数输入实现)include

main()

(

floatx,y=O;

intt;

scanf("%f%d",&x,&t);

if(t>7&8it<21)

if(x<3)

y=o.i;

else

do

(

y=0.2+y;

x=x-l;

}while(x-3>0);

)

eIse

(

if(x<3)

y=0.1/2;

else

do

(

y=(0.2+y)/2;

x=x-l;

}while(x-3>0);

}

printf("%f",y);

)

4.输入a、b、c三条边,判断它是否构成三角形。若能构成三角

形,则计算三角形面积。

#include

#include

main()

fIoata,b,c,S=0,x=0;

printf("输入三角形三条边的边长:");

scanf("%f%f%f",&a,&b,&c);

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

(

x=(a+b+c)/2.0;

S=sqrt(x*(x-a)*(x-b)*(x-c));

printf("area=%.3f\n",S);

)

EIse

printf("不能构成三角形\n");

)

5.打印出所有"水仙花数"。所谓"水仙花数”是指一个三位数,

其各位数字的立方和等于该数本身。例如,153是一个"水仙花数",

因为153=13+53+33。

#include"stdio.h"

#include"math.h"

main()

(

inti;

inta,b,c;

for(i=100;i<=999;i++)

(

a=i%10;/*取个位数*/

b=i/10%10;/*取十位数*/

c=i/100;/*取百位数*/

if(i==a*a*a+b*b*b+c*c*c)

printf("%d",i);

)

)

6.编写一个程序,在屏幕上显示如下图形(图形的层数读者自行

设定):

*

***

*****

*******

*****

***

*

#include

#include

main()

(

inti,j,k;

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

{

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

printf("%c",32);

for(j=l;j<=7-2*abs(i);j++)

printf("*");

printf("\n");

)

)

7.求斐波那契(Fibonacci)数歹ij:1,1,2,3,5,8,……的前

40个数。斐波那契数列的定义:

Fl=l(n=l)

F2=l(n=2)

Fn=Fn-l+Fn-2(n>3)

#include

main()

(

intfl,f2,f;

inti;

fl=f2=l;

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

for(i=l;i<=38;i++)/*已经有两个数,只要再产生38个数即可*/

(

f=fl+f2;

fl=f2;

f2=f;

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

)

)

8.编程实现求1+2+3+…+n之和,并输出当其和第一次大于或等

于100时的值及n值。

#include

main()

(

inti,s,t=0;

i=l;s=0;

while(i<=100)

(

s=s+i;

if(s>=100&&t<l)/*设定t只求第一次和大于100的内容*/

(

printf("第一次和大于或等于100时和为%d\n",s);

printf("第一次和大于或等于100时n^]%d\n",i);

t+=l;

}

i=i+l;

)

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

)

9.整元换零钱问题。把1元兑换成1分、2分、5分的硬币,共有

多少种不同的换法?

#include

main()

(

inti,j,k,n;

n=100,k=0;

for(i=0;i<=n/5;i++)

for(j=0;j<=(n-i*5)/2;j++)

(

printf("5cent=%d\t2cent=%d\t1cent=%d\n",i/j,n-i*5-j*2);

k++;

)

printf("totaltimes=%d\n",k);

)

10.编写解鸡兔同笼问题的程序。用户输入头的数目和脚的数目,

输出鸡、兔各有多少只。^include

main()

{intx,y,a,b;

printf("输入鸡兔头的数目:)

scanf("%d",&x);

printf("输入鸡兔脚的数目:");

scanf("%d",&y);

a=x-(y-2*x)/2;

b=(y-2*x)/2;

printfC1鸡有%d只,兔有%dR",a,b);

)

11.打印杨辉三角形,即(x+y)n展开式的各项系数。并且在程序

运行开始时,问用户n的值为多少,接着打印如下形式至指定行数。

1

11

121

1331

14641

#include

intmain()

{intn,k,j,c;

printf("Input=");

scanf("%d",&n);

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

(

〃printf("%*s",4*(n-k));/*格式控制语句,有和没有是两种显示方

式*/

c=l;

printf("%4d",c);

for(j=l;j<=k-l;j++)

(

c=c*(k-j)/j;

printf("%8d",c);

)

printf("\n");

)

return0;

)

12.个位数是6,且能被3整除的五位数共有多少个?

#include

main()

{inta,count=0;

longi;

for(i=10000;i<100000;i++)

(

a=i%10;

if(a==6&&i%3==0)

count++;

)

printf("这样的数共计:%d",count);

)

习题四

一、单项选择题

1.C

2.D

3.D

4.D

5.C

6.D

7.B

8.A

9.B10.B

二、填空题

1.—15014float

2.8

3.连续数组名

4.按行存储

5.04

6.350

7.368.9

9.710.#include#include

三、程序阅读分析题

1.i==ja[i][j]a[i][j]printf("\n")

2.k=32

3.gbcdefa

4.012345

123456

234567

345678

456789

5678910

5.you&me

四、编程题

1.设数组V中的数据元素递增有序,现将x插入到数组V的适当

位置,使数组元素的值仍保持有序。

#include

voidmain()

(

intV[15]={65,70,73,75,79,81,85,88,90};/*有9个初值,有序*/

intn=9,x=77;/*数组中当前有n个数据,将x插入数组V中,仍

保持有序*/

inti;

for(i=n-l;i>=0&&V[i]/*将V数组中的数据从后往前比较

*/

V[i+l]=V[i];/*若大于x,后移一个位置*/

V[i+l]=x;/*将x插入数组V中*/

n++;/*数组中数据个数增1*/

for(i=0;i<=""bdsfid="475"p="">

printf("%d",V[i]);

printf("\n");

)

2.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始

的偶数,然后按顺序每五个数求出一个平均值,放在另一个数组中并

输出。

#include

voidmain()

(

intarray[30],average[6]={0};

inti,j;

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

array[i]=2*(i+l);

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

(

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

average[j]+=array[i];

average[j]/=5;

printf("%d",average[j]);

)

printf("\n");

)

3.输入一个字符串,在指定位置插入一个字符。

#include

voidmain()

(

charstr[81],ch;

inti,position;

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

gets(str);

printf("输入要插入字符的位置:");

scanf("%d",&position);

printf("输入要插入的字符:");

scanf("%*c%c",&ch);

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

while(i>=position-l)

(

str[i+l]=str[i];

i--;

)

str[position-l]=ch;

printf("在指定位置插入字符后的字符串:%s\n",str);

)

4.输入一行字符,分别统计其中十个数字字符'O',T,…,9出

现的次数。

#include

voidmain()

{

charstr[81];

intcount[10]={0},i;

printf("输入一行字符:\n");

gets(str);

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

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

count[str[i]-'Ol]++;

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

primf('%c\,:%d\rr,,0,+i,count[i]);

)

5.输入矩阵A(2行3列)和矩阵B(3行4列),计算它们的乘

积C=A-B。

(矩阵乘积计算公式:Cij=IAikBkj)

#include

voidmain()

inta[2][3],b[3][4],c[2][4];

inti,jzk;

printf("输入2行3列矩阵数据:\n");

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

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

scanf("%d",&a[i][j]);

printf("输入3行4列矩阵数据:\n");

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

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

scanf("%d",&b[i][j]);

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

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

(

c[i][j]=O;

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

c[i][j]+=a[i][k]*b[k][j];

)

printf("两矩阵的乘积矩阵是:\n");

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

(

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

printf("%5d",c[i][j]);

printf("\n");

)

)

6.下面是一个5x5阶的螺旋方阵。试编程打印出此形式的nxn(n

<10,顺时针方向旋进)。

12345

161718196

152425207

142322218

131211109

#include

#defineN5

voidmain()

(

inta[N][N],i,j,k,n;

i=0;

j=0;

n=l;

for(k=l;k<=N*N;k++)

(

if(i==n-l&8ij<n-n)<bdsfid="583"p=""></n-n)<>

疝[j++]=k;

elseif(j==N-n&&i<n-n)<bdsfid="586"p=""></n-n)<>

a[i++][j]=k;

elseif(i==N-n&&j>n-l)

a[i][j-]=k;

else

a[i-][j]=k;

if(i==n&&j==n-l)

n++;

)

for(i=0;i<n;i++)<bdsfid="596"p=""></n;i++)<>

(

for(j=0;j<n;j++)<bdsfid="599"p=""></n;j++)<>

printf("%5d",a[i][j]);

printf("\n");

)

)

7.编一程序,实现字符串复制,不使用strcpy()函数。

#include

voidmain()

charstrl[81],str2[]="Iamastudent.";

inti;

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

printf("%s\n%s\n",strl,str2);

)

8.编一程序,求字符串的长度,不使用strlen()函数。

#include

voidmain()

(

charstr[81];

intn;

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

gets(str);

n=0;

while(str[n]!='\O')

n++;

printf("字符串的长度是:%d\n",n);

)

9.有一篇文章,共有3行文字,每行有80个字符。要求分别统计

出其中英文大写字母、/」写字母、数字、空格以及其他字符的个数。

#include

voidmain()

(

charstr[3][81];

char

category[5][10]={"UPPER","LOWER","DIGIT","SPACE","OTHER"};

inti,j,count[5]={0};

printf("输入3行文字:\n");

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

gets(str[i]);

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

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

if(str[i][j]>='A'&&str[i][j]<='Z')

count[0]++;

elseif(str[i][j]>='a'&&str[i][j]<=,z')

count[l]++;

elseif(str[i][j]>='0'&&str[i][j]<='9')

count[2]++;

elseif(str[i][j]=='')

count[3]++;

else

count[4]++;

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

printf("%s:%d\n",category[i],count[i]);

)

10.某班期终考试科目为高等数学(MT)、英语(EN)和物理(PH)。有

30人参加考试。为评定奖学金,要求统计并输出一个表格,表格内容

包括学号、各科分数、总分和平均分,并标出三门课均在90分以上者

(该栏标志输出为"Y",否则为"N"),表格形式如下:

NOMTENPHSUMV>90

197879

227692Y

292919027

391Y

39081822538

4N

可以将学生的学号和各科成绩放在数组a[30][4]中,然后进行统

计处理。

#include

#defineN30

voidmain()

(

intstu[N][4],sum;

inti,j;

chargreat90;

for(i=0;i<n;i++)<bdsfid="673"p=""></n;i++)<>

(

printf("输入第%d个学生的数学、英语和物理成绩(空格分

隔):",i+1);

stu[i][0]=i+l;

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

scanf("%d",&stu[i][j]);

)

printf("NOMTENPHSUMV>90\n");

printf("------------------------------------\n");

for(i=0;i<n;i++)<bdsfid="683"p=""x/n;i++)<>

(

sum=0;

great90='Y';

printf(n%5d",stu[i][0]);

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

(

printf(n%5d",stu[i][j]);

sum+=stu[i][j];

if(stu[i][j]<90)

great90='N';

)

printf("%5d",sum);

printf("%5d",sum/3);

printf("%5c\n",great90);

)

)

习题五

一、单项选择题

1.B)2.D)3.A)4.D)5.A)6.C)

二、填空题

1.52.883.2

4.12125.4126.1行的行地址

三、程序分析题

1.24

2.ENGLISH

MATH

MUSIC

PHYSICS

CHEMISTRY

四、编程题(以下题目均要求用指针方法实现)

1.#include

#include

voidmain()

(

char

n[]={"china","japan","korea","american"/"england"},*temp;

inti,j,k;

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

(

k=i;

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

if(strcmp(n[k],n[j])>0)k=j;

if(k!=i)

(

temp=n[k];n[k]=n[i];n[i]=temp;

)

)

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

printf("%s\n",n[i]);

)

2.#include

voidmain()

{

inta[10]={87,78,69,79,98,86,91,75,71,95},*p,temp;

inti,min_order;

p=a;

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

if(*p>a[i])p=a+i;

min_order=p-a;

printf("Min=a[%d]=%d\n",min_order,a[min_order]);

temp=*p;*p=a[O];a[O]=temp;

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

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

printf("\n");

)

3.略

4.#include

voidmain()

inta[10]={10,20,30,40,50,60,70,80,90};/*数组中9个数有序*/

int*p,x=35;/*x为待插入的数据7

for(p=&a[8];(p>=a)8i&(*p>x);p—)

*(p+l)=*p;/*从后向前将比x大的数据后移一个位置*/

*(p+l)=x;/*将X插入到数组中*/

for(p=a;p<=""bdsfid="761"p="">

printf("%4d",*p);

printf("\n");

)

5.#include

voidmain()

(

chars[255],prrior='',*p;

printf("输入一行英文:\n");

gets(s);

for(p=s;*p!='\0';p++)/*扫描字符串*/

(

if(prrior==''&&*p>='a'&&*p<='z')/*单词开始且是小写字母

*/*p-=32;/*将单词的第一个字母改为大写*/

prrior=*p;

)

puts(s);

)

6.#include

voidmain()

(

charstrl[81],str2[]="Iamaboy.";

char*s,*t;

s=str2;

t=strl;

while((*t=*s)!='\0')

S++;

t++;

)

puts(strl);

)

7.略

8.略

9.编写程序,实现输入月份号,输出相应的英文月份名。10.略

11.略

12.#include

voidmain()

{

charstr[81],*p,*q;

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

gets(str);

for(q=str;*q!='\0';q++);

for(p=str,q—;(p<q)&&(*p==*q);p++,q--);<bdsfid="807"

n)();;

p="></q&&*p==*qp4-+fq-)<>

if(p<="">

elseprintf("字符串:%s是回文串!\n",str);

)

13.#include

voidmain()

(

charstr[81],

温馨提示

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

评论

0/150

提交评论