31.一个球从100m落下,每次反弹回原来高度的一半,问第10次共经历多少米,反弹多少米。
#include <stdio.h>
int main()
{
double h=100,sum=100; //sum初值置为首高度
for(int i=1; i<=10; i++)
{
h*=0.5; //下次高度为本次的一半
if(i==1) //sum初值已加过
continue;
sum=sum+2*h; //每次经历两次
}
printf("第10次共经历%.2lf米,反弹%.2lf米\n",sum,h);
return 0;
}
运行结果:
32.一个数恰好等于它的因子(能整除的)之和,如:6=1+2+3。找出1000以内的所有完数
#include <stdio.h>
int main()
{
int i,j,sum,a[10],k;
for(i=2; i<1000; i++)
{
a[10]= {0};
k=0;
sum=0;
for(j=1; j<i; j++)
{
if(i%j==0)
{
sum+=j;
a[k++]=j;
}
}
if(sum==i)
{
printf("%d=",i);
for(j=0; j<k-2; j++)
printf("%d+",a[j]);
printf("%d\n",a[k-2]);
}
}
return 0;
}
运行结果:
33.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,....求前20项的和
#include <stdio.h>
int main()
{
float n=1,m=2,t,s,sum=0;//m为分母,n为分子
for(int i=1; i<=20; i++)
{
s=m/n;
sum+=s; //求和
t=m; //往后确定两部分的值
m=m+n;
n=t;
}
printf("sum=%f\n",sum);
return 0;
}
运行结果:
34.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个;第二天早上又吃了剩下的一半,又多吃了一个;以后也一样。到第10天只剩下1个。问第一天共摘了多少个桃子?
#include <stdio.h>
int main()
{
int i,sum=1; //rest为第10天剩余个数
for(i=9; i>0; i--) //i为第9~1天
sum=(sum+1)*2;
printf("sum=%d\n",sum);
return 0;
}
运行结果:
35.迭代法求x=sqrt(a)。求平方根的迭代公式Xn+1=1/2*(Xn+a/Xn)
#include <stdio.h>
#include <math.h>
int main()
{
float x1=1,x2,a;
scanf("%f",&a);
x2=a;
while(fabs(x1-x2)>=1e-5)
{
x1=x2;
x2=(x1+a/x1)/2;
}
printf("%.2f,%.2f\n",x1,x2);
return 0;
}
运行结果:
36.用二分法求下面方程在(-10,10)之间的根:2*x³-4*x²+3*x-6=0
#include <stdio.h>
#include <math.h>
int main()
{
double a=-10,b=10,c,x,x1,x2,x3;
for(int i=0;; i++)
{
c=(a+b)/2;
x1=2*pow(a,3)-4*pow(a,2)+3*a-6;
x2=2*pow(b,3)-4*pow(b,2)+3*b-6;
x3=2*pow(c,3)-4*pow(c,2)+3*c-6;
if(x3==0)
x=c;
else if(x1*x3<0)
b=c;
else if(x2*x3<0)
a=c;
if(fabs(a-b)<1e-8)
{
x=a;
break;
}
}
printf("Root=%lf\n",fabs(x));
return 0;
}
运行结果:
37.输出
*
***
*****
*******
*****
***
*
#include <stdio.h>
int main()
{
int i,j,k;
for(i=0; i<=3; i++)
{
for(j=0; j<3-i; j++)
printf(" ");
for(k=0; k<2*i+1; k++)
printf("*");
printf("\n");
}
for(i=0; i<3; i++)
{
for(j=0; j<i+1; j++)
printf(" ");
for(k=0; k<5-2*i; k++)
printf("*");
printf("\n");
}
return 0;
}
运行结果:
38.比赛。甲队为a,b,c三人,乙队为x,y,z三人。a说他不与x比,c说他不与x,z比。编程找出三队赛手名单。
#include <stdio.h>
int main()
{
char i,j,k; //i,j,k分别对应为a,b,c的对手
for(i='x'; i<='z'; i++)
for(j='x'; j<='z'; j++)
if(j!=i) //a,b,c不能同为一个人的对手
for(k='x'; k<='z'; k++)
if(k!=i&&k!=j) //a,b,c不能同为一个人的对手
{
if(i!='x'&&k!='x'&&k!='z') //a不与x比,c不与x,z比
printf("a--%c\nb--%c\nc--%c\n",i,j,k);
}
return 0;
}
运行结果:
39.将一个二维数组行和列互换,存到另一个二维数组中。
#include <stdio.h>
int main()
{
int a[3][3]= {{1,2,3},{4,5,6},{7,8,9}},b[3][3];
printf("原矩阵为:\n");
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
printf("%d ",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("行列互换之后:\n");
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
printf("%d ",b[i][j]);
printf("\n");
}
return 0;
}
运行结果:
40.求一个3*3的整型矩阵对角元素之和。
#include <stdio.h>
int main()
{
int a[3][3]= {{1,2,3},{4,5,6},{7,8,9}},sum=0;
for(int i=0; i<3; i++)
sum+=a[i][i];
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
printf("%d ",a[i][j]);
if(j==2)
printf("\n");
}
}
printf("对角线元素之和为:%d\n",sum);
return 0;
}
运行结果: