1、打印平行四边形
#include <stdio.h>
int main(){
int i,j,k,num;
printf("请输入要打印的行数:\n");
scanf("%d",&num);
for(i=0;i<num;i++){
for(j=1;j<=i;j++){
printf(" ");
}
for(k=0;k<num;k++){
printf("*");
}
printf("\n");
}
printf("\n");
return 0;
}
平行四边行每一行打印的*都是一样的,打印的空格数:第1行前面打印0个空格,第2行前面打印1个空格…
2、打印三个数中最大值
#include <stdio.h>
int main(){
int a,b,c,max;
printf("请输入三个数:\n");
scanf("%d%d %d",&a,&b,&c);
max = a;
if(max < b){
max = b;
}
if(max < c){
max = c;
}
printf("%d\n",max);
return 0;
}//这是最基础的排序题,等后面有冒泡排序、快排、选择排序等
3、求最大公约数和最小公倍数
#include <stdio.h>
int main(){
int n,m,temp,r,p;
printf("请随意输入两个数:");
scanf("%d,%d",&n,&m);
if(n<m){
temp=n;
n=m;
m=temp;//如果n的值小于m的值,则n与m交换位置,n总是最大值,作为被除数,为下面使用辗转相除法求最大公约数做准备;
}
p=n*m;
while(m!=0){//辗转相除法,m作为除数,最初保存除数的值,后来保存余数的值,当m=0时,最大公约数就是n;
r=n%m;
n=m;//n作为被除数,最初保存被除数的值,后来是保存除数的值;
m=r;
}
printf("最大公约数为:%d\n",n);
printf("最小公倍数为:%d\n",p/n);//最大公约数与最小公倍数的关系为:输入的两个数相乘/最大公约数。
return 0;
}``
辗转相除法:求最大公约数
例,求30与18的最大公约数
30/18=1…12;
18/12=1…6;
12/6=2…0;
则30与18的最大公约数是6;
4、求前20项阶乘的和
1!+2!+3!+…+20!
#include <stdio.h>
int main(){
int i;
double term=1,sum=0;
for(i=1;i<=20;i++){
term=term*i;//主要看前一项与后一项的关系,求出每一项然后相加;相似的题还有求2+22+222+2222+22222+......
sum=sum+term;
}
printf("前20项的阶乘和为:%22.15e\n",sum);
return 0;
}`
5、求水仙花数
//水仙花数是指一个3位数,其各位数字立方和等于该数本身,例153是水仙花数
#include <stdio.h>
#include <math.h>
int main(){
int i,sum,hundred,ten,indiv;
printf("所有的水仙花数为:\n")
for(i=100;i<999;i++){
hundred=i/100;
ten=(i-hundred*100)/10;//也可写为ten=i/10-hundred*10;
indiv=i-hundred*100-ten*10;//也可写为indiv=i%10;
sum=pow(hundred,3)+pow(ten,3)+pow(indiv,3);
if(sum==i){
printf("%d\t",i);
}
}
return 0;
}
6、找出1000以内的完数
完数:一个数恰好等于它的因子之和,例:6=1+2+3,因此6是完数
//找出1000以内的所有完数
#include <stdio.h>
int main(){
int i,j,sum;
for(i=2;i<1000;i++){
sum=0;
for(j=1;j<i;j++)
if((i%j)==0)
sum=sum+j;
if(sum==i){
printf("%d,its factor are ",i);
for(j=1;j<i;j++)
if((i%j)==0)
printf("%d\t",j);
printf("\n");
}
}
return 0;
}
7、有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13, … 求出这个数列的前20项之和
#include <stdio.h>
int main(){
int i;
double a,mol=1,den=2,term,sum=0;
//mol 分母,den 分子
for(i=0;i<20;i++){
term=den/mol;//当前项的值
sum=sum+term;//总和
a=den;//保存原分子
den=den+mol;//分子
mol=a;//分母
}
printf("和为:%16.10f\n",sum);
return 0;
}
8、一个小球从100米的高度自由落下,每次落地后反弹回原来高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
#include <stdio.h>
int main(){
int i;
double height=100,h=height/2;//height为经过的总长度,h为每次反弹的高度
for(i=1;i<10;i++){
height=height+2*h;//第一次只有降落,height就是初始值,从第二次开始有反弹有下降,第二次经过的长度为50+50,第三次25+25......
h=h/2;
}
printf("经过的总长度为:%f\n",height);
printf("第10次反弹%f米\n",h);
return 0;
}
9、输入一个大于3的整数你n,判定它是否为素数(质数)
素数:一个数,除了1和该数本身之外,不能被其他任何整数整除的数。
例,13是素数,因为它不能被2,3,4,…,12整除
#include <stdio.h>
#include <math.h>
int main(){
int n,i,k;
printf("请输入一个整数:");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++){
if(n%i==0) break;
}
if(i<=k) printf("%d is not a prime number.\n",n);//循环提前结束
else printf("%d is a prime number.\n",n);//循环正常结束
return 0;
}