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