最近在复习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