华科周纯杰版c语言答案.docx
《华科周纯杰版c语言答案.docx》由会员分享,可在线阅读,更多相关《华科周纯杰版c语言答案.docx(71页珍藏版)》请在冰豆网上搜索。
华科周纯杰版c语言答案
第三章程序和流程控制
1.输入两个整数,输出较大者。
#include
voidmain()
{
inta,b;
intmax=0;
printf("Pleaseinputtwonumbers:
");
scanf("%d%d",&a,&b);
if(a<=b)max=b;
elsemax=a;
printf("Thelargernumberis%d\n",max);
}
2.有3个整数a,b,c,由键盘输入,输出其中最大的数。
#include
voidmain()
{
inta,b,c,max;
printf("Pleaseinputthreenumbers:
");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
if(a>c)max=a;
elsemax=c;
}
else
{
if(b>c)max=b;
elsemax=c;
}
printf("Thelargestnumberis%d\n",temp);
}
3.从1累加到100,用while语句。
#include
#defineN100
voidmain()
{
inti=1,sum=0;
while(i<=N)
{
sum+=i;
i++;
}
printf("sum:
%d\n",sum);
}
4.已知a1=10,a2=-3,an=3an-1+an-2,求{a}的前十项。
#include
#defineN10
voidmain()
{
inta[20]={10,-3};
inti=0,m=0;
for(i=2;i{
a[i]=3*a[i-1]+a[i-2];
}
m=N;
printf("The%dnumbersare:
\n",m);
for(i=0;i{
printf("a[%d]=%d\n",i+1,a[i]);
}
}
5.输入一个自然数,判断它是奇数还是偶数。
#include
voidmain()
{
inta,temp;
printf("Pleaseinputanumbers:
\n");
scanf("%d",&a);
temp=a%2;
if(temp==0)
printf("Thenumber%disaneven!
\n",a);
else
printf("Thenumber%disanoddnumber!
\n",a);
}
6.已知a1=8,an=an-1+bn,b1=1,bn=bn-1+3,求{a}前10项之和。
#include
#defineN10
voidmain()
{
inta[N]={8},b[N]={1},i,sum=0;
for(i=1;i{
b[i]=b[i-1]+3;
}
for(i=1;i{
a[i]=a[i-1]+b[i];
}
for(i=0;i{
sum+=a[i];
}
printf("Thesumis:
%d\n",sum);
}
7.有一个函数写一程序,输入x,输出Y的值。
#include
voidmain()
{
floatx,y;
printf("Pleaseinputafloatnumberx=:
");
scanf("%f",&x);
printf("x=%f",x);
if(x<1)
y=x;
elseif(x>=10)
y=3*x-11;
else
y=2*x-1;
printf("Thevalueofyis:
%.3f\n",y);
}
8.给一个不多于5位的的正整数,要求:
求出它是几位数,分别打印出每一位数字,最后按照逆序打印各位数字,例如原数为321,应输出为123。
#include
#defineN99999
#defineM5
voidmain()
{
inti,j,k,m,b[M];
longinta,temp;
printf("Pleaseinputanumber:
\n");
scanf("%ld",&a);
if(a<0||a>N)
printf("Errorininputdata!
!
!
\n");
else
{
temp=a;
for(i=0;temp!
=0;i++)
{
temp=temp/10;
}
m=i;
printf("Thenumbera=%ldhave%dsinglenumbers\n",a,m);
temp=a;
for(j=0;j{
b[j]=temp%10;
temp=temp/10;
}
printf("Theorigalnumbersare:
\n");
for(k=m-1;k!
=-1;k--)
{
printf("%d",b[k]);
}
printf("\n");
printf("everyletteris:
");
for(j=m-1;j>=0;j--)
printf("%d\t",b[j]);
printf("\n");
printf("Theinvertednumbersare:
\n");
for(j=0;j{
printf("%d",b[j]);
}
printf("\n");
}
}
9.编写一猜数游戏程序,随机产生某个整数,从键盘反复输入整数进行猜数,当未猜中时,提示输入过大或过小.猜中时,指出猜的次数.最多允许猜20次.
#include
#include
#include
#defineN10
voidmain()
{
inta,b,i;
randomize();
a=random(N);
printf("Pleaseinputnumberyouguess:
\n");
for(i=0;i<20;i++)
{
scanf("%d",&b);
if(b==a)
{
printf("Congratulation!
!
\nYourguessednumberisright!
\n");
printf("Thetime(s)youhaveguessedis%d",i+1);
break;
}
elseif(b>a)
printf("Yournumberistoobig!
!
\n");
else
printf("Yournumberistoosmall!
!
\n");
}
printf("\n");
}
10.计算1-999中能被3整除,且至少有一位数字是5的所有整数。
#include
#defineN999
voidmain()
{
inti,b,c,d;
printf("Thenumbersare:
\n");
for(i=1;i<=N;i++)
{
if(i%3)
{
b=i/100;
c=(i-100*b)/10;
d=i%10;
if(b==5||c==5||d==5)
printf("%d\t",i);
}
}
}
11.输入两个整数,求它们的最大公约数和最小公倍数。
#include"stdio.h"
voidmain()
{
inta,b,c,d;
intcomYueShu;
intcomBeishu;
printf("pleaseinputtwonumber!
");
scanf("%d%d",&a,&b);
c=a;
d=b;
intr;
//求公约数算法
while(c%d)
{
r=c%d;
c=d;
d=r;
}
comYueShu=d;
comBeishu=a*b/comYueShu;
printf("%d,%d",comYueShu,comBeishu);
}
12.输入一个整数,求它包含又多少个2的因子。
(例如,8含有3个2的因子,10含有一个2的因子,15不含有2的因子。
)
#include"stdio.h"
voidmain()
{
inta=0;
intintegerGene=0;
printf("inputanumber!
\n");
scanf("%d",&a);
while(a%2==0)
{
integerGene++;
a/=2;
}
printf("%d\n",integerGene);
}
13.计算1!
,2!
,3!
…10!
#include
#defineN10
voidmain()
{
inti;
longinta=1;
printf("Theoutcomeare:
\n");
for(i=1;i<=10;i++)
{
a*=i;
printf("Theresultof%d!
is%ld\n",i,a);
}
}
14.猴子吃桃问题:
第一天吃掉总数的一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候见只剩下一个桃子,求第一天开始吃的时候桃子的总数。
#include
#defineN10
voidmain()
{
inti,x[10];
x[9]=1;
for(i=9;i>=1;i--)
x[i-1]=2*(x[i]+1);
printf("Thetotalnumbersinthefirstdayare:
%d\n",x[0]);
}
15.输入圆锥体的底半径r和高h,计算出圆锥体的体积并输出
#include
#definePI3.1415926
voidmain()
{
floatr,h,v;
printf("Pleaseinputtheradiusandtheheight:
\n");
scanf("%f%f",&r,&h);
v=PI*r*r*h/3;
printf("Thevolumeofis%.6f\n",v);
}
16题
#include"stdio.h"
voidmain()
{
inta,n;
longtmp,SUM=0;
do
{
printf("\nPleaseinputthenumbera=");
scanf("%d",&a);
}while(!
(a>=0&&a<=9));
printf("\nPleaseinputthenumber,it'svalueisnottoobign=");
scanf("%d",&n);
tmp=a;
while(n--)
{
SUM+=tmp;
tmp=tmp*10+a;
}
printf("\na+aa+aaa+...=%ld(a=%d)\n",SUM,a);
}
17题
#include"stdio.h"
voidmain()
{
unsignedcharweek[7][20]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","saturday"};
unsignedcharweekday;
do
{
printf("\nPleaseinputtheweeday(0=");
scanf("%d",&weekday);
}while(!
(weekday>=0&&weekday<=6));
printf("\n%dcorrespoindto%s\n",weekday,week[weekday]);
}
18题
#include"stdio.h"
#include"math.h"
voidmain()
{
floatx,y;
floatResult;
inti=1;
printf("\nPleaseinputthevaluex=");
scanf("%f",&x);
Result=1.0;
y=x;
do
{
Result+=y;
y=(y*x)/(i+1);
i++;
}while(y>1e-6);
printf("\nThenaturalconstante,it's%fpow=%f",x,Result);
}
19题
#include"stdio.h"
#include"math.h"
voidmain()
{
floata;
floatx1,x2;
printf("\nPleaseinputthenumbera=");
scanf("%f",&a);
x1=x2=a/2;
do
{
x1=x2;
x2=(x1+(a/x1))/2;
}while(fabs(x2-x1)>1e-5);
printf("\nInputanamber%f,It'ssqrt=%f",a,x2);
}
第5章课后编程习题参考答案
2.已有一个已排好序的数组,现在输入一个数,要求按照原来排序的规则将它插入数组中。
#include
#defineN7
voidmain()
{
inta[N]={1,5,16,45,87,120};
intn,i,j,temp1,temp2,end;
printf("pleaseenteranumber:
\n");
scanf("%d",&n);
end=a[N-2];
if(n>end)
a[N-1]=n;
else
{
for(i=0;i{
if(n{
for(j=N-1;j>i+1;j--)
{
a[j]=a[j-1];
}
a[i]=n;
break;
}
}
}
printf("putoutthenewarray:
\n");
for(i=0;iprintf("%4d",a[i]);
}
3.打印"魔方阵",所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。
例如,三阶魔方阵为:
816
357
492
#include
voidmain()
{
inta[16][16];
intn,i,j,k;
do
{
printf("enteranumbern(1~15):
\n");
scanf("%d",&n);
}while(!
((n>0)&&(n<=15)&&(n%2==1)));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)i=n;
if(j>n)j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
}
4,有一篇文章,共有3行文字,每行有80个字符,要求分别统计出其中英文大写字母,小写字母,数字,空格以及其它字符的个数。
#include
#include
voidmain()
{
chars[3][80];
inti,j,up,low,num,spa,oth;
up=low=num=spa=oth=0;
for(i=0;i<3;i++)
{
printf("enterthe%dline:
\n",i+1);
gets(s[i]);
for(j=0;j<80&&s[i][j]!
='\0';j++)
if(s[i][j]>='A'&&s[i][j]<='Z')
up++;
elseif(s[i][j]>='a'&&s[i][j]<='z')
low++;
elseif(s[i][j]>='0'&&s[i][j]<='9')
num++;
elseif(s[i][j]=='')
spa++;
else
oth++;
}
printf("up=%d\n",up);
printf("low=%d\n",low);
printf("num=%d\n",num);
printf("spa=%d\n",spa);
printf("oth=%d\n",oth);
}
5.编写一个程序,将两个字符串连起来,不要用strcat函数。
#include
#include
voidmain()
{
chars1[100],s2[100];
gets(s1);
gets(s2);
inti,j;
i=j=0;
while(s1[i]!
='\0')
i++;
while(s2[j]!
='\0')
s1[i++]=s2[j++];
s1[i]='\0';
puts(s1);
}
6.输入每个学生的平均成绩和姓名,将成绩按照递减顺序排序,姓名做相应的调整。
输出排序后的成绩和姓名。
#include
#include
defineN10
/*假定有十个学生*/
voidmain()
{
charname[50][10],name1[10];
intmark[N],i,j,mark1;
for(i=0;i{
printf("the%dthstudent'snameandmark:
\n",i+1);
scanf("%s%d",name[i],&mark[i]);
}
for(i=0;i{
for(j=i+1;j{
if(mark[j]>mark[i])
{
mark1=mark[j];
mark[j]=mark[i];
mark[i]=mark1;
strcpy(name1,name[j]);
strcpy(name[j],name[i]);
strcpy(name[i],name1);
}
}
}
for(i=0;i{
printf("%s,%d\n",name[i],mark[i]);
}
}
7.输出2维数组中行为最大列上为最小的元素(称为鞍点)及其位置。
如果不存在任何鞍点,则也应输出相应信息。
#include
voidmain()
{
inti,j,k,m,n,max,maxj;
inta[10][10];
intflag=0;
printf("enterthehangnumbern:
\n");
scanf("%d",&n);
printf("enterthelienumberm:
\n");
scanf("%d",&m);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
printf("\n");
for(i=0;i{
max=a[i][0];
for(j=0;jif(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
for(k=