《C语言程序设计(第三版)》苏小红 习题六 答案

最近在复习C语言,顺便记录下课后习题。代码是自己打的,有些繁琐而笨拙,请多多包涵,有错误欢迎指正。

6.4  键盘输入n,输出1到 n之间 所有数的平方、立方

#include <stdio.h>
int main()
{ 
   long n,i;
   scanf("%ld",&n);
    for(i=1;i<=n;i++)
    {
    	printf("%ld的平方为%d,立方为%d\n",i,i*i,i*i*i);
	}
    return 0;
}

6.5 每隔10摄氏度 输出0-300摄氏度之间的华氏温度对照

#include <stdio.h>
int main()
{ 
   double C;
   int F;
    for(F=0;F<=300;F+=10)
    {
    	C=5.0/9*(F-32);
    	printf("华氏%d度是摄氏 %.2lf 度\n",F,C);
	}
    return 0;
}

6.6  设银行一年整存零取的月息为 1.875%,现在某人手头有一笔钱,他打算在今后 5 年中,每年年底取出 1000 元作为孩子来年的教育金,到第 5 年孩子毕业时刚好取完这笔钱。求第一年存入银行多少钱。

整存零取:是指在开户时约定存款期限、本金一次存入,固定期限分次支取本金的一种定期储蓄,1000元起存,存期分一年、三年、五年,支取期分一个月、三个月及半年一次。

思路:倒着算,已知最后取出1000,也就是最后一年有1000元。

此处按照复利法计算

本息和=本金+利息=本金+本金*利率=本金*(1+利率) 

本金=本息和/(1+利率)

#include <stdio.h>
#include<math.h>
#define p 12*0.01875
int main()
{ 
   double sum=0;
   int i; 
   for(i=0;i<5;i++) 
   {
   	sum=(sum+1000)/(1+p);
   }
   printf("第一年存入 %.2lf元",sum);
}

6.7    假设今年工业产值为100万元,产值增产率从键盘输入,请编程计算工业产值经过多少年可以实现翻一番(即增加1倍)

#include <stdio.h>
#include<math.h>
int main()
{ 
   double p,sum=100;
   scanf("%lf",&p);//小数形式输入 
   int i; 
   for(i=1;;i++) 
   {
   	sum=sum*(1+p);
   	
   	if(sum>=200)
   	  break;
   }
   printf("%d年后可实现翻一番",i);
   return 0; 
}

6.8   利用π/4=1-1/3+1/5-1/7,,计算π的值直到最后一项的绝对值小于0.0001为止,要求统计总共累加了多少项。

#include <stdio.h>
#include<math.h>
#define EPS 1e-4
int main()
{ 
   double sum=0,term=1;//sum累加的和, term 每一项 
   int count=1,i=1,sig=1;//count 加了几项 ,sig 每项符号 
   while(fabs(term)>=EPS){
   	sum+=term;
	sig=-sig;
   	i+=2;
   	term=1.0/i*sig;
   	count++;
   }
   sum*=4;
   printf("π约为%lf,累加了 %d项",sum,count);
   return 0; 
}

6.9   利用 e = 1 + 1 / 1! + 1 / 2! + 1 / 3! + 1 / 3! + 1 / 4! + .... + 1 / n! 编程计算e的近似值。

#include <stdio.h>
#include<math.h>
#define EPS 1e-5
int main()
{ 
   double sum=1,term=1;//sum累加的和, term 每一项 
   int count=1;//count 加了几项 
   while(fabs(1/term)>=EPS){
   	term*=count;
   	sum+=1.0/term;
   	count++;
   }
   printf("e约为%lf,累加了 %d项",sum,count);
   return 0; 
}

6.10   输出全部三位数水仙花

#include <stdio.h>
int main()
{ 
   int i,a=0,b=0,c=0;
   for(i=10;i<1000;i++){
   	a=i/100;
   	b=(i-a*100)/10;
   	c=i%10;
   	if(a*a*a+b*b*b+c*c*c==i)
   	printf("%d\n",i);
   }
   return 0;
}

6.11   已知不等式:1!+2!+···+m!<n,请计算并输出满足该不等式的m的整数解。

#include <stdio.h>
int main()
{ 
   int i,sum=0,n,term=1;
   scanf("%d",&n);
   for(i=1;sum<n;i++)
   {
   	term*=i;
   	sum+=term;
   	if(sum>=n) break;
   }
   printf("m=%d",i-1)	;
   return 0;
}

6.12   输入一些正数,输出这些正数的和,输入为负或零时,退出。

#include <stdio.h>

int main()
{ 
   int i,sum=0,n;
   while(scanf("%d",&n)!=EOF){
   	if(n>0)
   	sum+=n;
   	else
   	break;	
   }
   printf("整数和为%d",sum);
   return 0;
}

6.13  输入一些正数,输出这些正数的和,输入为负时,不累加,输入零时,退出。

#include <stdio.h>
int main()
{ 
   int i,sum=0,n;
   while(scanf("%d",&n)!=EOF){
   	if(n>0)
   	sum+=n;
   	else if(n==0) 
   	break;	
   }
   printf("整数和为%d",sum);
   return 0;
}

6.14    马克思手稿中有这样一道趣味数学题:男人、女人和小孩总计30个人,在一家饭店里吃饭,共花了50先令,每个男人各花3先令,每个女人各花2先令,每个孩子各花1先令,请用穷举法编程计算男人、女人和小孩各有几人,列出所有可能的组合。

#include <stdio.h>
int main()
{ 
   int man,woman,kid;
   for(man=0;man<=30;man++){
   	for(woman=0;woman<=30;woman++){
   		for(kid=0;kid<=30;kid++){
   			if(man+woman+kid==30&&man*3+woman*2+kid==50)
   			printf("男人有%d个,女人有%d个,小孩有%d个\n",man,woman,kid);
		   }
	   }
   } 
   return 0;
}

6.15   鸡兔同笼,共有98个头,386只脚,穷举法计算鸡、兔各有多少只。

#include <stdio.h>
int main()
{ 
   int chicken,rabbit;
   for(chicken=0;chicken<=98;chicken++){
   	for(rabbit=0;rabbit<=98;rabbit++){
   		if(chicken+rabbit==98&&chicken*2+rabbit*4==386)
   		printf("鸡有%d只,兔有%d只\n",chicken,rabbit);
	   }
   }
   
   return 0;
}

6.16   百元买百鸡 “公鸡5元一只,母鸡3元一只,雏鸡一元3只,百钱买百鸡,问鸡翁、母、雏各几只?”

#include <stdio.h>
int main()
{ 
   int i,j,k;
   for(i=0;i<=100;i++){
   	for(j=0;j<=100;j++){
   		if((100-i-j)%3==0&&5*i+3*j+(100-i-j)/3==100)
   		printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",i,j,(100-i-j));
	   }
   } 
   return 0;
}

6.17   100元兑换人民币10元、5元、1元(每一种都要有)共50张,穷举法计算有多少种方案,每种方案兑换几张纸币。

#include <stdio.h>
#include<math.h>
#define EPS 1e-5
int main()
{ 
   int i,j,k,count=0;
   for(i=1;i<=10;i++){
   	 for(j=1;j<=20;j++){
   		for(k=1;k<=50;k++){   
   		    if(i+j+k<=50&&10*i+5*j+k==100){  
   		    count++;
   		    printf("%d.10元:%d张,5元:%d张,1元:%d张  共%d张\n",count,i,j,k,i+j+k);
   	        }
	   }
     }
   } 
   printf("共 %d种方案",count);
   return 0;
}

6.18   输出乘法口诀表

//第一种
#include <stdio.h>
int main()
{ 
   int i,j,k,count=0;
   for(i=1;i<=9;i++){
   	printf("%d  ",i);
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	printf("-  ");
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	  for(j=1;j<=9;j++)
   	  {
   		printf("%-3d",i*j);
	  }
	   printf("\n");
   }
   return 0;
}

//第二种--下三角
#include <stdio.h>
int main()
{ 
   int i,j,k,count=0;
   for(i=1;i<=9;i++){
   	printf("%d  ",i);
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	printf("-  ");
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	  for(j=1;j<=9;j++)
   	  {
   	  	if(i*j<=i*i)
   		printf("%-3d",i*j);
	  }
	   printf("\n");
   }
   return 0;
}
//第三种--上三角
#include <stdio.h>
int main()
{ 
   int i,j,k,count=0;
   for(i=1;i<=9;i++){
   	printf("%d  ",i);
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	printf("-  ");
   }
   printf("\n");
   for(i=1;i<=9;i++){
   	  for(j=1;j<=9;j++)
   	  {
   	  	if(i*j<i*i)
   		printf("   ");
   		else
   		printf("%-3d",i*j);
	  }
	   printf("\n");
   }
   return 0;
}

6.19 有一天富豪遇到一个陌生人,富豪每天给陌生人1分,此后每一天给的钱翻倍。陌生人每天给富豪10万。求30天后的陌生人一共给富豪多少钱,富豪一共给陌生人多少钱。

#include <stdio.h>
int main()
{ 
   int i;
   float j=0.01,sum2=0.0; 
   int sum1=100000*30; 
   for(i=0;i<30;i++){	
   	sum2+=j;
   	j*=2;
   }
   printf("陌生人给富人%d元,富人给陌生人%.2f元",sum1,sum2);
   return 0;
}

6.20   一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号

#include <stdio.h>
int main()
{ 
   int i,a,b,c,d,j;
   for(i=1100;i<=9999;i++){
   	a=i/1000;
   	b=(i-a*1000)/100;
   	c=((i-a*1000)%100)/10;
   	d=i%10;
   	if(a==b&&c==d&&a!=c){	  
   	for(j=10;j<100;j++)
   	{
   		if(i==j*j)
   		printf("车牌号为%d\n",i);
   }
    } 
   }
   return 0;
}

6.21  在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各n响。已知A舰每个a秒放一次,B舰每隔b秒放一次,C舰每隔c秒放一次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次炮声。

#include <stdio.h>
int main()
{ 
   int i,count=0;
   //枚举每一秒,只要当前有一个舰队在放礼炮,无论是否重合,观众都可听见 
   for(i=0;i<21*7;i++){
   	if((i%5==0&&i<21*5)||(i%6==0&&i<21*6)||(i%7==0&&i<21*7))
   	count++;
   }
   printf("观众可以听到%d次礼炮响声",count);
   return 0;
}

实验题有时间再写 o( =•ω•= )m

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值