最新哈工程C语言教材课后答案.docx
《最新哈工程C语言教材课后答案.docx》由会员分享,可在线阅读,更多相关《最新哈工程C语言教材课后答案.docx(51页珍藏版)》请在冰豆网上搜索。
最新哈工程C语言教材课后答案
第一章
1.2有三个数A、B、C,设计算法,求三个数中最大的数并输出。
(可用自然语言或流程图表示)。
#include
voidmain()
{
inta,b,c,max;
printf("pleaseinputthreenumbers:
\n");
scanf("%d%d%d",&a,&b,&c);
max=a;
if(b>a)
max=b;
if(c>max)
max=c;
printf("theansweris%d\n",max);
}
1.3设计算法,求N个整数的平均值。
#include
voidmain()
{
intN,i;
floataver,a,s=0;
printf("pleaseinputtheamountofthenumber:
\n");
scanf("%d",&N);
for(i=0;i{
printf("pleaseinputthenumber\n");
scanf("%f",&a);
s=s+a;
}
aver=s/N;
printf("theaverageis%f",aver);
}
第二章
1.填空题⑴换行、回车⑵整型变量_⑶整型⑷_6_⑸2.5
2.选择题
⑴_A_⑵_A_⑶A_⑷_B_⑸_D⑹C⑺C⑻D⑼C⑽D⑾B⑿D⒀B⒁D
3.⑴答案:
6,0,6⑵答案:
8,10,16⑶答案:
3.500000⑷答案:
6
⑸答案:
1⑹答案:
261⑺答案:
16⑻答案:
0
4.编程题
⑴输入长方形的长和宽,输出长方形的周长和面积。
#include
voidmain()
{
inta,b,l,s;
scanf(“%d%d”,&a,&b);
l=(a+b)*2;
s=a*b;
printf(“%d,%d”,l,s);
}
⑵输入一个字符,输出其ASCII代码。
#include
voidmain()
{chara;
printf("pleaseinputthechar");
scanf("%c",&a);
printf("theASCIIis%d",a);
}
⑶输入3个整数,计算并输出它们的平均值。
#include
voidmain()
{
inta,b,c;
floataver;
scanf(“%d%d%d”,&a,&b,&c);
aver=float(a+b+c)/3;
printf(“%f”,aver);
}
⑷已知整型变量a、b、c的值,根据以下算式编写程序求y的值。
#include
#include
voidmain()
{inta,b,c;
printf("pleaseinputthenumofabc:
");
scanf("%d%d%d",&a,&b,%c);
printf("theyis%f",(3.8*(pow(b,2)+a*c))/(6*a));
}
5.设a和n已定义为整型变量,a=12,求下面表达式运算后a的值。
⑴a+=a24⑵a-=210⑶a*=2+360
⑷a/=a+a0⑸a%=(n%=2),n的值等于50⑹a+=a-=a*=a0
第三章
1、选择题1_C_2.C_3.C4.D5.D_
二、填空题1.%f_2、%s3、12,56,789.0000004、6e,16_5、1,1,3___
三、编程题
1.编写一个程序,从键盘上输入3个数,求其和并输出。
#include
voidmain()
{
inta,b,c,d;
printf("pleaseinputthenumofa,b,c:
");
scanf("%d%d%d",&a,&b,&c);
d=a+b+c;
printf("thesumofa,bandcis%d",d);
}
2.输入一个正整数,分别输出它的八进制和十六进制数形式。
#include
voidmain()
{
intm;
printf("pleaseinputthem:
");
scanf("%d",&m);
printf("\nbajinzhishuzhishi:
%o",m);
printf("\nshiliujinzhishuzhishi:
%x",m);
}
3.编程把11325秒转换成“小时:
分钟:
秒”的形式
#include
voidmain()
{
inta=11325;
inth,m,s;
h=a/3600;
m=a%3600/60;
s=a%3600%60;
printf("%d:
%d:
%d",h,m,s);
}
4.编程序,求a+︱b︱的值,a,b为任意数。
本题可调用求绝对值的函数fabs,此函数包含在math.h文件中。
#include
#include
voidmain()
{
doublea,b;
printf("pleaseinputthenumofaandb:
");
scanf("%lf%lf",&a,&b);
printf("\na+|b|=%lf",a+fabs(b));
}
5.编程序,求平面上两点之间的距离。
设第1个点的坐标为(x1,y1),第2点的坐标为(x2,y2),则这两个点的距离为:
d=
#include
#include
voidmain()
{
floatx1,y1,x2,y2,d;
printf("\nshurudi1gediandezuobiao:
");
scanf("%f%f",&x1,&y1);
printf("\nshurudi2gediandezuobiao:
");
scanf("%f%f",&x2,&y2);
d=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
printf("\njulidwei:
%f",d);
}
第四章
一、阅读程序,回答问题
1.答案:
12.答案:
63、B4.答案:
6.0000005答案:
8
6.答案:
27.答案:
k=11
二、填空
1.答案:
a==b或b==a或!
(a!
=b)或a=b或b=a2.答案:
(1)<0
(2)!
=0
3.答案:
(1)max(2)max(1)m%2==1
(2)m%2==0
三、编程
1.输入一个整数,判断其为奇数还是偶数。
#include
voidmain()
{
inta;
printf("Pleaseinputaninteger:
");
scanf("%d",&a);
if(a%2==0)
printf("nishurudeshu%dshioushu.\n",a);
else
printf("nishurudeshu%dshijishu.\n",a);
}
2.编写一个程序,实现功能是:
输入一个实数,按1输出此数的相反数,按2输出此数的平方根,按3输出此数的平方。
#include
#include
voidmain()
{
doublef;
inta;
printf("qingshuruyigeshu:
");
scanf("%f",&f);
printf("\nqingshuru1huo2huo3\n");
printf("\nan1shuchuxiangfanshu");
printf("\nan2shuchupingfanggen");
printf("\nan3shuchupingfang");
scanf("%d",&a);
if(a==1)
printf("%f\n",-f);
elseif(a==2)
printf("%f\n",sqrt(f));
elseif(a==3)
printf("%f\n",f*f);
else
printf("shurucuowu!
");
}
3.输入字符,输出其类型。
ASCII值小于32的为控制字符,在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。
#include
voidmain()
{
chara;
scanf(“%c”,&a);
if(a<32&&a>0)
printf(“thisisaControlCharacter”);
if(a>=’0’&&a<=’9’)
printf(“thisisanumber”);
if(a>’A’&&a<’Z’)
printf(“thisisacapitalletter”)
if(a>’a’&&a<’z’)
printf(“thisisalowercasenumber”);
else
printf(“thisisanothercharacter”);
}
4.输入某年某月某日,判断这一天是这一年的第几天。
#include
voidmain()
{
inta,b,c,k,s=0;
printf("qingshurunian,yue,ri:
");
scanf("%d,%d,%d",&a,&b,&c);
if((a%4==0&&a%100!
=0)||a%400==0)
k=29;
else
k=28;
switch(b)
{
case12:
s+=30;
case11:
s+=31;
case10:
s+=30;
case9:
s+=31;
case8:
s+=31;
case7:
s+=30;
case6:
s+=31;
case5:
s+=30;
case4:
s+=31;
case3:
s+=k;
case2:
s+=31;
case1:
s+=c;
}
printf("nishurudeshushizheniandedi%dtian.",s);
}
第五章
一、单选题1C2.C 3. D 4.C5. B 6.C7.A8.D9.C 10C
二、写程序运行结果
1.答案:
1,2,32.答案:
523.答案:
s=64.答案:
1,-2
5.答案:
a=16y=606.答案:
6
三、程序填空
1.答案:
(1)cx=getchar()
(2)front!
=‘’(3)cx
2.答案:
(1)s=0
(2)m%n==0(3)m==s
3.答案:
(1)j=1
(2)k<=6
4.答案:
(1)50
(2)n=2(3)h/2
5.答案:
(1)a
(2)i<=n(3)t*10
四、程序改错
1.答案:
(1)intn,k=0;
(2)k=k*10+n%10;
2.答案:
(1)for(i=0;i<10;i++)
(2)j%3!
=0
3.答案:
(1)doublek=1,t=1;
(2)k=k+1/t;
4.答案:
(1)i=2;
(2)k--;
5.答案:
(1)h=(float)(5-2)/n;
(2)a=a+h;
五、编写程序
1.编一程序,将2000年到3000年中的所有闰年年份输出并统计出闰年的总年数,要求每10个闰年放在一行输出。
#include
voidmain()
{
intyear,k=0;
for(year=2000;year<=3000;year++)
{if((year%4==0&&year%100!
=0)||year%400==0)
{
k++;
printf("%6d",year);
if(k%10==0)
printf("\n");
}
}
printf("\nrunniandezongnianshushi%d",k);
}
2.若有如下公式:
试根据上述公式编程计算π的近似值(精确到10-6)。
#include
#include
voidmain()
{floatpi,a,b;
inti=1;
a=0;
b=1;
while(b>=0.000001)
{
b=1/(float)(i*i);
a+=b;
i++;}
pi=sqrt(6*a);
printf("%f\n",pi);
}
3.用0~9之间不同的3个数构成一个3位数,统计输出共有多少种方法?
#include
voidmain()
{
inti=0,j=0,k=0,n=0;
for(i=1;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i==j)continue;
for(k=0;k<10;k++)
{
if(i==k||j==k)continue;
n++;
}
}
}
printf("%d",n);
}
4.找出1~99之间的全部同构数。
同构数是这样一组数:
它们出现在平方数的右边。
例如:
5是25右边的数,25是625右边的数,5和25都是同构数。
#include
voidmain()
{
inti,j,k;
k=10;
for(i=1;i<100;i++)
{
if(i==10)k=100;
j=i*i;
if(j%k==i)
printf("%d\t",i);
}
}
5.猴子吃桃问题。
猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了个。
第2天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃了前一天剩下的一半零一个。
到第10天再想吃时,只剩下一个桃子了。
问第1天共摘多少个桃子?
。
#include
voidmain()
{
intday,x;
x=1;
for(day=1;day<=9;day++)
x=(x+1)*2;
printf("diyitianhouzizhaile%dgetaozi",x);
}
6.打印以下图形
*
**
***
****
#include
voidmain()
{
inti,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)
printf("");
printf("*");
for(j=1;j<=i-1;j++)
{
printf("*");
}
printf("\n");
}
}
7.百钱百鸡问题。
公鸡五元一只,母鸡三元一只,鸡雏一元三只。
若用100元买100只鸡,可买公鸡、母鸡和鸡雏各多只?
#include
voidmain()
{
inti,j,k;
for(i=0;i<=100/5;i++)
{
for(j=0;j<=100/3;j++)
{
for(k=0;k<=100;k++)
{
if(k%3!
=0)continue;
if((5*i+j*3+k/3==100)&&(i+j+k==100))
{
printf("gongjimujichujiwei%d,%d,%d.\n",i,j,k);
}
}
}
}
}
8.一个正整数与3的和是5的倍数,与3的差是6的倍数,编写一个程序求符合条件的最小数。
#include
voidmain()
{
intk=1;
while(!
(((k+3)%5==0)&&((k-3)%6==0)))
k++;
printf("%d",k);
}
9.从键盘输入20个整型数,统计其中负数个数并求所有正数的平均值。
#include
voidmain()
{
inta,i,j=0,k=0;
floats=0;
printf("qingshuru20geshu:
");
for(i=1;i<=20;i++)
{
scanf("%d",&a);
if(a<0)k++;
if(a>0)
{
j++;
s+=a;
}
}
s=s/(float)j;
printf("fushudegeshushi%d.\n",k);
printf("zheshudepingjunzhishi%f.\n",s);
}10.父亲今年30岁,儿子6岁,经过多少年后,父亲的年龄是儿子的两倍?
#include
voidmain()
{inti,j,k;
i=30;
j=6;
k=0;
while(!
(i+k==(j+k)*2))k++;
printf("%d",k);
}
第六章
一、选择题
1._C_2.C__3._D__4._C__5._C_6._B_7._D8._A_
二、填空题1.答案:
b!
=02.答案:
15
三、编程题
1.编写一个求x的y次方的函数。
#include
intfunc(intx,inty);
voidmain()
{inta,b,c;
printf("pleaseinputthetwonumbers:
\n");
scanf("%d%d",&a,&b);
c=func(a,b);
printf("theansweris\n");
printf("%d\n",c);
}
intfunc(intx,inty)
{inti,s=1;
for(i=1;i<=y;i++)
s=s*x;
return(s);
}
2.编写函数,要求去掉字符串中所有空格。
#include
#include
voidf(chars[])
{
inti,j;
i=j=0;
while(s[i])
{if(s[i]!
='')s[j++]=s[i];
i++;
}
s[j]='\0';
}
voidmain()
{
chars[80];
gets(s);
f(s);
puts(s);
}
3.编写函数,判断一个字符串是否是回文,如是返回1,否则返回-1(回文是指这个字符串逆置后不变,如aba就是回文。
)
#include
#include
intf(chars[],intn)
{
inti,f;
f=1;
i=0;
while(f&&i{if(s[i]!
=s[n-i-1])
{f=-1;
break;
}
i++;
}
returnf;
}
voidmain()
{
chars[80];
gets(s);
if(f(s,strlen(s))==1)
printf("\nYes");
else
printf("\nNo");
}
4.编写函数fun求1!
+2!
+3!
+…+n!
的和,在main函数中由键盘输入n值,并输出运算结果。
#include
intfun(intn);
voidmain()
{intn,c;
printf("pleaseinputthenumber:
\n");
scanf("%d",&n);
c=fun(n);
printf("theansweris\n");
printf("%d\n",c);
}
intfun(intn)
{inti,a,s;
s=1;
a=0;
for(i=1;i<=n;i++)
{
s=s*i;
a=a+s;
}
return(a);
}
5.编写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。
两个整数由键盘输入
#include
intfunc(intx,inty);
intfun(intx,inty);
voidmain()
{intx,y,c,d;
printf("pleaseinputthetwonumbers:
\n");
scanf("%d%d",&x,&y);
c=func(x,y);
d=fun(x,y);
printf("theansweris\n");
printf("zuidagongyueshushi%d\n",c);
printf("zuixiaogongbeishushi%d",d);
}
intfunc(intx,inty)
{
intt;
t=x%y;
while(t)
{
x=y;
y=t;
t=x%y;
}
return(y);
}
intfun(intx,inty)
{
return(x*y/func(x,y));
}
第七章
1、选择题1.D2.B3.D4.D5.A
二、阅读程序写出结果
1.答案:
1