3.求两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>
main()
{
int m,n,t,i,a=1;
scanf("%d%d",&m,&n);
if(m<n)
{
t=m;
m=n;
n=t;
}
for(i=2;i<=n;i++)
{
if(m%i==0&&n%i==0)
a=i;
}
printf("最大公约数是:%d\n",a);
t=(m*n)/a;
printf("最小公倍数是:%d",t);
}
4.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
#include<stdio.h>
main()
{
char c;
int i=0,j=0,k=0,l=0;
while((c=getchar())!='\n')
{
if(c>=65&&c<=90||c>=97&&c<=122)
i++;
else if(c>=48&&c<=57)
j++;
else if(c==32)
k++;
else
l++;
}
printf("字母%d个\t空格%d个\t数字%d个\t其他字符%d个\n",i,j,k,l);
}
5.求Sn=a+aa+aaa……+aa···a(n个a)之值,其中a是一个数字,n表示a的位数,n由键盘输入。例如:
2+22+222+2222+22222 (此时n=5)
#include<stdio.h>
#include<math.h>
main()
{
int a,n,sum=0,i=1;
scanf("%d%d",&a,&n);
while(i<=n)
{
sum=sum+a;
a=a+2*pow(10,i);
i++;
}
printf("%d",sum);
}
20
6.求 ∑n! (即求1!+2!+3!+4!+……+20!).
n=1
#include<stdio.h>
int main()
{
int n;
int s=1,sum=0;
for(n=1;n<=20;n++)
{
s=s*n;
sum=sum+s;
}
printf("sum=%d\n",sum);
}
100 50 10
7.求 ∑k + ∑k^2 + ∑1/k
k=1 k=1 k=1
#include<stdio.h>
main()
{
int k1=1,k2=1,k3=1;
int s1=0,s2=0,s3=0,sum;
for(k1=1;k1<=100;k1++) s1=s1+k1;
for(k2=1;k2<=50;k2++) s2=s2+k2*k2;
for(k3=1;k3<=10;k3++) s3=s3+(1/k3);
sum=s1+s2+s3;
printf("%d",sum);
}
8.输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=1^3+5^3+3^3。
#include<stdio.h>
#include<math.h>
main()
{
int x=100,a,b,c;
while(100<=x&&x<1000)
{
a=0.01*x;b=10*(0.01*x-a);c=x-(a*100)-(b*10);
if(x==pow(a,3)+pow(b,3)+pow(c,3))
printf("%5d",x);
x++;
}
}
9.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
#include<stdio.h>
void main()
{
int i,j,s;
for(i=2;i<=1000;i++)
{
s=0;
for(j=1;j<i;j++)
{
if(i%j==0)
s=s+j;//数字i的真因子之和
}
if(i==s)//如果数字i因子之和=i
{
printf("%d its factors are ",i);//输出完美数
for(j=1;j<i;j++)
{
if(i%j==0)
printf("%d,",j);//输出完美数真因子
}
printf("\n");
}
}
}
10.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13….. 求出这个数列前20项之和。
#include<stdio.h>
main()
{
int i;
float n=1,m=2,t,s,sum=0;
for(i=1;i<=20;i++)
{
s=m/n;
sum=sum+s;
t=m;m=m+n;n=t;
}
printf("%f\n",sum);
}
11.一个球从100m高度自由落下,每次落地后反弹回原来高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
#include<stdio.h>
main()
{
int n;
double h=100,s=100;
for(n=1;n<=10;n++)
{
h*=0.5;if(n==1) continue;s=2*h+s;
}
printf("第10次一共经过%.2f米,反弹%.2f米",s,h);
}
12.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个。第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个,到第10天早上想再吃的时候,就剩下一个桃子。求第一天共摘多少个桃子。
#include<stdio.h>
main()
{
int i=1,sum=0;
for(;i<=10;i++)
sum=sum*2+1;
printf("%d\n",sum);
}
- 迭代法求a平方根
已知求平方根的迭代公式为:x n+1 = (xn + a / xn) / 2
要求前后两次求出的差的绝对值小于10-5。
#include"stdio.h"
#include"math.h"
void main()
{
float x1=1,x2,a;
printf("input a\n");
scanf("%f",&a);
x2=a;
while(fabs(x1-x2)>=1e-5)
{
x1=x2;
x2=(x1+a/x1)/2;
}
printf("%f,%f",x1,x2);
}
14.用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
#include<stdio.h>
#include<math.h>
int main()
{
int i=0;
double x1=1.5,x2=0;//迭代初值
while (fabs(x2-x1)>=1e-5)
{
x1=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);
x2=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);
i++;
printf("第%d次迭代 x1=%9.8f\tx2=%9.8f\n",i,x1,x2);
}
printf("\nx=%9.8f\t共迭代:%d次\n",x2,i);
return 0;
}
15.用二分法求下面方程在(-10,10)之间的根:2x3−4x2+3x−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) 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;
}
16.输出以下图案:
*
*
#include<stdio.h>
main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf(" ");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
17.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main()
{
char i,j,k; /*是a的对手;j是b的对手;k是c的对手*/
for (i='x';i<='z';i++)
for (j='x';j<='z';j++)
if (i!=j)
for (k='x';k<='z';k++)
if (i!=k && j!=k)
if (i!='x' && k!='x' && k!='z')
printf("A--%c\nB--%c\nC--%c\n",i,j,k);
return 0;
}