1、输入两个正整数m和n,求其最大公约数和最小公倍数
辗转相除法:
#include <stdio.h>int main(){int m,n,temp;scanf("%d %d",&m,&n);if(m<n){temp=m;m=n;n=temp;}int d=n*m;int r;while(r=m%n){m=n;n=r;}printf("最大公因数为:%d,最小公倍数:%d",n,d/n);return 0;
}
样例输入与输出:
24 60
最大公因数为:12,最小公倍数:120
2、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main(){char s[101];gets(s);int len = strlen(s);int num1=0;//英文int num2=0;//数字int num3=0;//空格int num4=0;//其他int i;for(i=0;i<len;i++){if(isalpha(s[i])!=0){num1++;}else if(s[i]>='0'&&s[i]<='9'){num2++;}else if(s[i]==' '){num3++;}else {num4++;}}printf("英文字母的个数为:%d\n",num1);printf("数字的个数为:%d\n",num2);printf("空格的个数为:%d\n",num3);printf("其他字符的个数为:%d\n",num4);return 0;
}
样例输入与输出:
aaasss 123,.,.
英文字母的个数为:6
数字的个数为:3
空格的个数为:2
其他字符的个数为:4
3、计算形如2+22+222+2222的结果,分别输入a和n,a代表数字,n代表加的个数
#include <stdio.h>int main(){double a,n;scanf("%lf %lf",&a,&n);double sum=a;double q=a;for(int i=1;i<n;i++){q=q*10+a;sum+=q;}printf("%.0lf",sum);return 0;
}
样例输入与输出:
2 5
24690
4、求1!+2!+3!+4!+…+20!
#include <stdio.h>
int main(){double sum=0,p;int i,j;for(i=1;i<=20;i++){p=1;for(j=1;j<=i;j++){p=p*j;}sum+=p;}printf("%.0lf",sum);return 0;
}
输出结果:
2561327494111820300
5、
#include <stdio.h>
#include <math.h>
int main(){double sum=0;int i;for(i=1;i<=100;i++){sum+=i;}for(i=1;i<=50;i++){sum+=i*i;}for(i=1;i<=10;i++){sum+=1.0/i;}printf("%lf",sum);return 0;
}
输出结果:
47977.928968
6、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=1*+5*+3。
#include <stdio.h>int main(){int i,n,r,sum;for(i=100;i<=999;i++){sum=0;n=i;while(n){r=n%10;sum+=r*r*r;n=n/10;}if(sum==i){printf("%d\n",i);}}return 0;
}
输出结果:
153
370
371
407
7、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
#include <stdio.h>
int main(){int i,j,sum;int a[101];int r;for(i=1;i<=1000;i++){sum=0;r=0;for(j=1;j<i;j++){if(i%j==0){sum+=j;a[r++]=j;}}if(sum==i){printf("%d its factors are ",i);for(int q=0;q<r-1;q++){printf("%d,",a[q]);}printf("%d",a[r-1]);printf("\n");}}return 0;
}
输出结果:
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124,248
8、有一个分数序列,求出这个数列的前20项之和。
2/1,3/2,5/3,8/5,13/8,25/13........
#include <stdio.h>
int main(){int i;double sum=0;double a[20];a[0]=2;a[1]=3;for(i=2;i<20;i++){a[i]=a[i-1]+a[i-2];}double b[20];b[0]=1;b[1]=2;for(i=2;i<20;i++){b[i]=b[i-1]+b[i-2];}for(i=0;i<20;i++){sum = sum + a[i]/b[i];}printf("%lf",sum);return 0;
}
输出结果:
32.660261
9、一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
#include <stdio.h>int main(){int i;double n=100;double sum=100;for(i=1;i<10;i++){n=n/2;sum = sum+n*2;}n=n/2;printf("%lf\n%lf",sum,n);return 0;
}
输出结果:
299.609375
0.097656
10、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
#include <stdio.h>int main(){int n=1;int i;for(i=1;i<10;i++){n=(n+1)*2;}printf("%d",n);return 0;
}
输出结果:1534
11、
#include <stdio.h>
#include <math.h>
int main(){double m=pow(10,-5);double a ,x1,x2;scanf("%lf",&a);x1=sqrt(a);x2=(x1+a/x1)/2.0;while(1){if(fabs(x1-x2)<m){printf("%.0lf的平方根为%lf",a,x2);break;}x1=x2;x2=(x2+a/x2)/2.0;}return 0;
}
样例输入与输出:
2
2的平方根为1.414214
12、用牛顿迭代法求下面方程在1.5附近的根:
#include <stdio.h>
#include <math.h>int main()
{double x1, x0, f, f1;x1 = 1.5;do{x0 = x1;f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;f1 = (6 * x0 - 8) * x0 + 3;x1 = x0 - f / f1;} while (fabs(x1 - x0) >= 1e-5);printf("方程在1.5附近的根为:%lf\n", x1);return 0;
}
输出结果:
方程在1.5附近的根为:2.000000
13、用二分法求下面方程在(-10,10)的根:
#include<stdio.h>
#include<math.h>int main()
{double left = -10, right = 10, mid;double temp = 10;while (fabs(temp) > 1e-5){mid = (left + right) / 2;//((2x - 4)*x + 3) * x - 6 ==> 2x^3 - 4x^2 + 3x -6temp = ((2 * mid - 4) * mid + 3) * mid - 6;if (temp > 0){right = mid;}else if (temp < 0){left = mid;}}printf("在(-10,10)的根为:%lf", mid);return 0;
}
14、输出以下图案:
*
***
*****
*******
*****
***
#include <stdio.h>
int main(){int i,j;for(i=0;i<4;i++){for(j=0;j<2*i+1;j++){printf("*");}for(j=2*i+1;j<7;j++){printf(" ");}printf("\n");}for(i=2;i>=0;i--){for(j=2*i;j>=0;j--){printf("*");}for(j=0;j<=6-2*i;j++){printf(" ");}printf("\n");}return 0;
}
输出结果:
*
***
*****
*******
*****
***
*
15、两个乒乓球队进行比赛,各出3人。甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单
#include <stdio.h>
int main(){char a[4];a[1]='x';a[2]='y';a[3]='z';int i,j,r;//i,j,r代表a,b,c 1,2,3代表x,y,zfor(i=1;i<=3;i++){for(j=1;j<=3;j++){for(r=1;r<=3;r++){if(i!=1&&r!=1&&r!=3&&i!=j&&i!=r&&j!=r){printf("a对战%c\n",a[i]);printf("b对战%c\n",a[j]);printf("c对战%c\n",a[r]);break;}}}}return 0;
}
或者
#include <stdio.h>
int main(){char a[4];a[1]='x';a[2]='y';a[3]='z';int i,j,r;for(i=1;i<=3;i++){for(j=1;j<=3;j++){if(i!=j){for(r=1;r<=3;r++){if(r!=i&&r!=j){if(i!=1&&r!=1&&r!=3){printf("a对战%c\n",a[i]);printf("b对战%c\n",a[j]);printf("c对战%c\n",a[r]);}}}}}}return 0;
}
输出结果:
a对战z
b对战x
c对战y