C语言编程例题

一、

1.判断素数

判断101-200之间有多少素数,并输出所有素数以及它们的和。

#include <math.h>
#include <stdio.h>
int main()
{
	int m,i,y=1,h=0,sum=0;
    for (m=101;m<=200;m++)
	{ 
	   for (i=2;i<m;i++) 
	   {
	      if(m%i==0)
		  y=0;//如果有整除的数,则y变为0
	   }
		 if(y==1)//如果y仍为1,说明没有被整除的数
		 {
		  printf("%-5d",m);
		  sum+=m;//求和
		  h=h+1;

		  if (h%10==0)
			  printf("\n");
		 }
		y=1;
	}
	printf("\n");
	printf("%d",h);
	printf("\n");
	printf("%d",sum);
}

运行结果

101  103  107  109  113  127  131  137  139  149
151  157  163  167  173  179  181  191  193  197
199
21
3167Press any key to continue

2.分解质因数

#include <stdio.h>

int main() {
	int number;
	int i;
	printf("请输入一个整数:");
	scanf("%d", &number);
	printf("%d=", number);
	for (i = 2; i <= number; i++) {
		if (number % i == 0)
		{
			printf("%d", i);
			number = number / i;
			i = 2;
			if (number != 1)
			{
				printf("*");
			}
		}

	}
	return 0;
}

运行结果(输入为45)

请输入一个整数:45
45=3*3*5Press any key to continue

3.最大公约数、最小公倍数

#include <stdio.h>

int main() {
	int gcd, lcm;
	int min, max, t;
	int i;
	scanf("%d %d", &min, &max);
	if (min > max) {
		t = max;
		max = min;
		min = t;
	}
	for (i = 2; i <= min; i++) {
		if (min % i == 0 && max % i == 0) {
			gcd = i;
		}
	}
	for (i = max; i <= max * min; i++) {
		if (i % max == 0 && i % min == 0) {
			lcm = i;
			break;
		}
	}
	printf("最大公因数为%d,最小公倍数为%d", gcd, lcm);
	return 0;
}

运行结果

4 6
最大公因数为2,最小公倍数为12Press any key to continue

4.水仙花数

所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”。

#include <stdio.h>
int main()
{
	int i=100,m,n,p,j,k;
	printf("水仙花数:\n");
    for (i=100;i<=999;i++)
	{ 
	   m=i/100;
	   n=i/10%10;
	   p=i%10;
       j=m*100+n*10+p;
	   k=m*m*m+n*n*n+p*p*p;
	   if(j==k)
		 { printf("%-5d",i);}	  
	}
}

运行结果

水仙花数:
153  370  371  407  Press any key to continue

5.完数

1000以内的完数。

#include <stdio.h>

int main() {

	int i;
	int j;
	int sum;
	for (i = 1; i <= 1000; i++) {
		sum = 0;
		for (j = 1; j < i; j++) {
			if (i % j == 0) {
				sum += j;
			}
		}
		if (sum == i)
			printf("完数:%d\n", sum);
		else
			continue;
	}

	return 0;
}

运行结果

完数:6
完数:28
完数:496
Press any key to continue

6.输出9*9口诀

#include <stdio.h>
int main()
{
    int i,j,result;
    printf("\n");
    for (i=1;i<10;i++)
	{
	   for(j=1;j<=i;j++)
	   {
		   result=i*j;
		   printf("%d*%d=%-3d",i,j,result);//-3d表示左对齐,占3位
	   }
	   printf("\n");
	}
}

运行结果

1*1=1
2*1=2  2*2=4
3*1=3  3*2=6  3*3=9
4*1=4  4*2=8  4*3=12 4*4=16
5*1=5  5*2=10 5*3=15 5*4=20 5*5=25
6*1=6  6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7  7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8  8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9  9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
Press any key to continue

7.组成互不相同的3位数

1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <stdio.h>
int main()
{
    int i,j,k,h=0;
    printf("\n");
    for (i=1;i<5;i++)
	{
	   for(j=1;j<5;j++)
	   {
		   for(k=1;k<5;k++)
		   {
		     if(i!=k&&i!=j&&j!=k)
			 { printf("%d%d%d  ",i,j,k);
			 h++;
			 if(h%5==0)
				 printf("\n");
			 }
		   }
	   }
	}
	printf("\n");
	printf("能够组成互不相同且无重复数字的三位数的个数为%d\n",h);
}

运行结果

123  124  132  134  142
143  213  214  231  234
241  243  312  314  321
324  341  342  412  413
421  423  431  432
能够组成互不相同且无重复数字的三位数的个数为24
Press any key to continue

8.x,y,z三个数由小到大输出

#include <stdio.h>
int main()
{
    int x,y,z,t;
	scanf("%d%d%d",&x,&y,&z);
    if(x>y)
	{t=x;x=y;y=t;}
	if(x>z)
	{t=z;z=x;x=t;}
	if(y>z)
	{t=z;z=y;y=t;}
	printf("small to big:%d %d %d\n",x,y,z);
}

运行结果

156 789 456
small to big:156 456 789
Press any key to continue

9.求矩阵对角元素之和

#include <stdio.h>
#define N 500 //宏定义
int main()
{
	int a[N][N],n,i,j,sum=0;
	scanf("%d",&n);
	if(n>0&&n<10||n==10)
	{
		for(i=0;i<n;i++)
		{
		  for(j=0;j<n;j++)
			  	scanf("%d",&a[i][j]);
		}
		for(i=0;i<n;i++)
		{
			sum+=a[i][i];
		}
		printf("%d",sum);
	}
	else
		printf("error");
	return 0;
}

运行结果

3
1 2 3 4 5 6 7 8 9
15Press any key to continue

10.矩阵转置后输出

从键盘上输入一个23的矩阵,将其转置后 形成32的矩阵并输出。

#include <stdio.h>
int main()
{
	int a[2][3],b[3][2];
    int i,j,t;
	for(i=0;i<2;i++)
		{
		for(j=0;j<3;j++)
			scanf("%d",&a[i][j]);
		}
	for(i=0;i<3;i++)
	{	
	for(j=0;j<2;j++)
		b[i][j]=a[j][i];	
	}             
	for(i=0;i<3;i++)
	{
		for(j=0;j<2;j++)
		printf("%d ",b[i][j]);
	}
	return 0;
}

运行结果

1 2 3 4 5 6
1 4 2 5 3 6 Press any key to continue

二、

1.兔子繁殖、斐波那契数列、青蛙跳台阶

有一对兔子,从出生后第3个月起每个月生一对兔子,小兔子长到第3个月后又生一对兔子,假如兔子都不死,问每个月兔子总数为多少?
1,1,2,3,5,8,13…从第三项开始,该数的值是由前两项相加而来。

#include <stdio.h>
int main()
{
    long f1,f2;
	int i;
	f1=f2=1;
    for (i=1;i<=20;i++)
	{
	   printf("%12ld%12ld",f1,f2);//右对齐,占12位
	   if(i%2==0)
	     printf("\n");//控制输出,每行四个
	     f1=f1+f2;
		 f2=f1+f2;
	}
}

运行结果

           1           1           2           3
           5           8          13          21
          34          55          89         144
         233         377         610         987
        1597        2584        4181        6765
       10946       17711       28657       46368
       75025      121393      196418      317811
      514229      832040     1346269     2178309
     3524578     5702887     9227465    14930352
    24157817    39088169    63245986   102334155
Press any key to continue

2.猴子吃桃

猴子第一天摘下若干桃子,吃了一半不过瘾,又多吃了一个。第二天又吃了剩下的一半,并且也多吃了一个。以后每天都会吃前一天剩下的一半零一个。第十天时,发现只剩下一个桃子,求桃子总数。

#include <stdio.h>

int main() {
	int x = 1;
	int sum = 1;
	int i;
	for (i = 1; i <= 10; i++) {
		x = x + 1;
		x = 2 * x;
	}
	printf("%d\n", x);
	return 0;
}

运行结果

3070
Press any key to continue

3.企业奖金

#include <stdio.h>
#include <math.h>
/*
10- 	10-20	20-40	40-60	60-100	100+
0.1 	0.075	0.05	0.03	0.015	0.01

*/
int main() {
	double bonus[] = {0.1, 0.075, 0.05, 0.03, 0.015, 0.01};
	double table[] = {0, 10, 20, 40, 60, 100};
	int i;
	double sum = 0;
	double profit;
	scanf("%lf", &profit);

	for (i = 0; profit - table[i] >= 0; i++) {
	}
	i--;

	for (i; i >= 0; i--) {
		sum += bonus[i] * (table[i + 1] - table[i]);
	}
	printf("盈利为%f万,奖金为%f万", profit, sum);

	return 0;
}

运行结果

225
盈利为225.000000,奖金为2.951000万Press any key to continue

4.输入年月日,判断第几天

#include <stdio.h>
int main()
{
    int day,month,year,sum,leap;
	printf("\nplease input year,month,day\n");
	scanf("%d%d%d",&year,&month,&day);
	switch(month)
	{
	    case 1:sum=0;break;
		case 2:sum=31;break;
		case 3:sum=59;break;
		case 4:sum=90;break;
		case 5:sum=120;break;
		case 6:sum=151;break;
        case 7:sum=181;break;
		case 8:sum=212;break;
		case 9:sum=243;break;
		case 10:sum=273;break;
		case 11:sum=304;break;
		case 12:sum=334;break;
	default:printf("data error");break;
	}
	sum=sum+day;
    if((year%4==0&&year!=0&&year%100!=0)||(year%400==0&&year!=0))
		leap=1;
	else leap=0;
	if(leap==1&&month>2)
		sum++;
	printf("It is the %dth day.",sum);
}

运行结果

please input year,month,day
2000 5 3
It is the 124th day.Press any key to continue

5.小球落地

一球从100米的高度自由落下,每次落地后反跳回到原高度一半,再落下。求它在第n次落地时,共经过多少米?

#include <stdio.h>
int main() {
    int i;
	double height = 100;
	double sum = 0;
	for (i = 1; i <=9; i++)
	{
		sum = sum + height;
		printf("第%d次落地,共经过%.2fm\n", i,sum);
		height /= 2;
		sum = sum + height;
	}
	sum = sum + height;
	printf("第10次落地,共经过%.2fm", sum);
	return 0;
}

运行结果

1次落地,共经过100.00m
第2次落地,共经过200.00m
第3次落地,共经过250.00m
第4次落地,共经过275.00m
第5次落地,共经过287.50m
第6次落地,共经过293.75m
第7次落地,共经过296.88m
第8次落地,共经过298.44m
第9次落地,共经过299.22m
第10次落地,共经过299.61mPress any key to continue

6.统计数字长度

统计数字长度,并逆序输出

#include <stdio.h>
int main() {
	char number[100];
	int len = 0;
	int i;
	for (i = 0; i <= 100; i++) {
		number[i] = getchar();
		if (number[i] == '\n') {
			break;
		} else
			len++;
	}
	printf("长度为%d", len);
	for (i = len; i >= 0; i--) {
		putchar(number[i]);
	}
	return 0;
}

运行结果

159*78*56
长度为9
65*87*951Press any key to continue

7.乒乓球游戏

第一组组a,b,c,第二组x,y,z。a不和x比,c不和x,z比,求出对战名单

#include <stdio.h>
int main()
 {
	char i, j, k;
	for (i = 'x'; i <= 'z'; i++) {
		for (j = 'x'; j <= 'z'; j++) {
			for (k = 'x'; k <= 'z'; k++) {
				if (i != j && i != k && j != k) {
					if (i != 'x' && k != 'x' && k != 'z') {
						printf("a-%c b-%c c-%c ", i, j, k);
					}
				}

			}
		}
	}
	return 0;
}

运行结果

a-z b-x c-y Press any key to continue

8.成绩顺序输出

从键盘输入10名学生的成绩数据,按成绩从高到低的顺序排列并输出。

#include <stdio.h>
int main()
{
	int a[10];
    int i,j,t;
	for(i=0;i<10;i++)
		{
		 scanf("%d",&a[i]);
		}
	for(i=1;i<10;i++)    //外层循环比较轮数
	{	
	for(j=0;j<=9-i;j++)  //内层循环比较当前一轮的比较次数
		{
			if(a[j]<a[j+1])
			{t=a[j];
			a[j]=a[j+1];
			a[j+1]=t;}		
		}
	}             
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	return 0;
}

运行结果

1 4 7 8 5 2 3 6 9 10
10 9 8 7 6 5 4 3 2 1 Press any key to continue
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值