例题1:有1、2、3、4这4个数字,能组成多少个互不相同且无重复数字的三位数,都是多少?
#include <stdio.h>
int main(void)
{
int i, j, k;
int n = 0;
printf("Here are the answers:\n");
/*以下位三重循环,分别代表百位、十位和个位数*/
for(i=1 ; i<5 ; i++)
{
for(j=1 ; j<5 ; j++)
{
for(k=1 ; k<5 ; k++)
{
if(i != j && i != k && j != k) //满足三位数各不相等即可输出
{
printf("%d%d%d\n", i, j, k);
n++;
}
}
}
}
printf("There are %d numbers\n", n);
return 0;
}
例题2:企业发放的奖金根据利润提成,提成方式如下:其中i为利润,b为奖金
i <= 10, b = 10%*i;
i > 10 && i <= 20, b = (i-10)*7.5%+10*10%
i > 20 && i <= 40, b = (i-20)*5%+10*10%+10*7.5%
i > 40 && i <= 60, b = (i-40)*3%+10*10%+10*7.5%+20*5%
i > 60 && i <= 100, b = (i-60)*1.5%+10*10%+10*7.5%+20*5%+20*3%
i > 100, b = (i-100)*1%+10*10%+10*7.5%+20*5%+20*3%+40*1.5%
#include <stdio.h>
int main(void)
{
float i, b;
int s;
printf("请输入利润(万元)值:");
scanf("%f", &i);
while(i < 0) //判断输入是否有误,有误则重新输入
{
printf("输入有误,请重新输入!\n");
printf("请输入利润(万元)值:");
scanf("%f", &i);
}
s = i/10;
switch (s) //switch条件值或表达式结果必须为int型
{
case 0:
case 1:
b = i*0.1;
break;
case 2:
b = ((i-10)*0.075) + (10 * 0.1);
break;
case 3:
case 4:
b = ((i-20)*0.05) + (10 * 0.1) + (10 * 0.075);
break;
case 5:
case 6:
b = ((i-40)*0.03) + (10 * 0.1) + (10 * 0.075) + (20 * 0.05);
break;
case 7:
case 8:
case 9:
case 10:
b = ((i-60)*0.015) + (10 * 0.1) + (10 * 0.075) + (20 * 0.05) + (20 * 0.03);
break;
default:
b = ((i-100)*0.01) + (10 * 0.1) + (10 * 0.075) + (20 * 0.05) + (20 * 0.03) + (40 * 0.015);
break;
}
printf("您的奖金为%0.2f元\n", b*10000);
return 0;
}
例题3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>
#include <math.h> //sqrt()函数(开方函数)属于math函数库,开头需要包含math函数库的头文件
int main(void)
{
int i, x, y, n=0;
for(i = 0 ; i < 100000 ; i++)
{
x = sqrt(i+100);
y = sqrt(i+268);
if( x*x == (i+100) && y*y == (i+268)) //判断是否满足题目条件
{
printf("%d\n", i);
n++; //记录满足条件的数的个数
}
}
printf("在0~100000中,总共有%d个这样的数\n", n);
return 0;
}
例题4:输入某年某月某日,判断这一天是这一年的第几天
#include <stdio.h>
#if(0)
/*方法1:用switch语句*/
int main(void)
{
int y, m, d, day;
printf("请输入年-月-日:");
scanf("%d-%d-%d", &y, &m, &d);
while(m > 12 || d > 31)
{
printf("输入有误,请重新输入!\n");
printf("请输入年-月-日:");
scanf("%d-%d-%d", &y, &m, &d);
}
switch (m)
{
case 1:
day = d;
break;
case 2:
day = d + 31;
break;
case 3:
day = d + 31 + 28;
break;
case 4:
day = d + 31 + 28 + 31;
break;
case 5:
day = d + 31 + 28 + 31 + 30;
break;
case 6:
day = d + 31 + 28 + 31 + 30 + 31;
break;
case 7:
day = d + 31 + 28 + 31 + 30 + 31 + 30;
break;
case 8:
day = d + 31 + 28 + 31 + 30 + 31 + 30 + 31;
break;
case 9:
day = d + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
break;
case 10:
day = d + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
break;
case 11:
day = d + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
break;
case 12:
day = d + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
break;
}
if( y%400 == 0 || (y%100 != 0 && y%4 == 0))
{
day++;
}
printf("这一天是该年的第%d天\n", day);
return 0;
}
#endif
/*方法2:用数组*/
int main(void)
{
int i, y, m, d, day;
int a[12] = {0,31,28,31,30,31,30,31,31,30,31,30};
printf("请输入年-月-日:");
scanf("%d-%d-%d", &y, &m, &d);
while(m > 12 || d > 31)
{
printf("输入有误,请重新输入!\n");
printf("请输入年-月-日:");
scanf("%d-%d-%d", &y, &m, &d);
}
day = d;
for(i=0 ; i<m ; i++)
{
day = day + a[i];
}
if( y%400 == 0 || (y%100 != 0 && y%4 == 0))
{
day++;
}
printf("这一天是该年的第%d天\n", day);
return 0;
}
例题5:输入三个整数x,y,z,请把这三个数由小到大输出
#include <stdio.h>
int compare(int a[]); //声明比较函数
void print(int a[]); //声明打印函数
int n;
int main(void)
{
int i;
int a[10];
printf("请输入要比较的整数个数(2~10):");
scanf("%d", &n);
while(n<2 || n>10)
{
printf("输入有误,请重新输入!\n");
printf("请输入要比较的整数个数(2~10):");
scanf("%d", &n);
}
for(i=0 ; i<n ; i++)
{
printf("请输入第%d个数:", i+1);
scanf("%d", &a[i]);
}
printf("当前数字的排列顺序为:");
print(a);
compare(a);
printf("比较后数字的排列顺序为:");
print(a);
return 0;
}
int compare(int a[])
{
int temp, i, j;
for(i=0 ; i<n ; i++)
{
for(j=i+1 ; j<n ; j++)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return a;
}
void print(int a[])
{
int i;
for(i=0 ; i<n ; i++)
{
printf(" %d ", a[i]);
}
printf("\n");
}
例子6、7:用"*"显示出子母C,输出特殊图案
#include <stdio.h>
void print1();
void print2();
int main(void)
{
print1();
printf("\n");
print2();
return 0;
}
void print1()
{
printf(" ***** \n");
printf(" * \n");
printf("* \n");
printf(" * \n");
printf(" ***** \n");
}
void print2()
{
printf(" ******* * ****** * * ****** * * ****** * * *\n");
printf(" * * * * * * * * * * * * * *\n");
printf(" * * * * * * * * * * * * * *\n");
printf(" * * * * * * ****** * * * * * *\n");
printf(" * * * * * * * * * * * * *\n");
printf(" * * * * * * * * * * * * \n");
printf(" ******* ****** ****** * ****** * ****** ****** *\n");
}
例题8、9:输出9*9乘法表、输出国际象棋棋盘
#include <stdio.h>
void print_excel(); //声明九九乘法表打印函数
void print_chess(); //声明国际象棋棋盘打印函数
int main(void)
{
print_excel();
print_chess();
return 0;
}
void print_excel()
{
int i, j;
for (i=1 ; i<10 ; i++)
{
for (j=1 ; j<i+1 ; j++)
{
printf(" %d*%d=%2d ", i, j, i*j);
}
printf("\n");
}
printf("\n");
}
void print_chess()
{
int i, j;
for (i=0 ; i<8 ; i++)
{
for (j=0 ; j<8 ; j++)
{
if((i+j)%2 == 0)
{
printf("%c%c", 168, 128);
}
else
{
printf(" ");
}
}
printf("\n");
}
}
例题10:打印楼梯,同时在楼梯上方打印两个笑脸
#include <stdio.h>
void print_stairs(int x);
int main(void)
{
int n;
printf("请输入楼梯阶层数:");
scanf("%d", &n);
printf("\1 \1\n");
print_stairs(n);
}
void print_stairs(int x)
{
int i, j;
for(i=0 ; i<x ; i++)
{
for(j=0 ; j<i+1 ; j++)
{
printf("%c%c", 168, 128);
}
printf("\n");
}
}
例子11:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,加入兔子都不死,问每个月的兔子总数为多少(输出前40个月的数据)
#include <stdio.h>
int rabbit(int x);
int main(void)
{
int n, add = 0;
printf("请输入最终月份:");
scanf("%d", &n);
add = add + rabbit(n);
printf("%d个月后兔子的总数为%d\n", n, add);
return 0;
}
int rabbit(int x)
{
int y;
if(x < 3) //
{
y = 2;
}
else
{
y = rabbit(x-1) + rabbit(x-2);
/*递归函数,第x个月兔子数量等于第x-1月与第x-2月数量之和*/
}
return y;
}
例题12:判断101-200之间有多少个素数,并输出所有素数
#include <stdio.h>
#include <math.h>
int main(void)
{
int i, j, k, l, mark;
int n = 0;
int a[50];
for(i=101 ; i<201 ; i+=2)
{
for(j=2 ; j<=(int)(sqrt(i)) ; j++) //sqrt函数包含在math.h头文件中
{
if(i%j == 0)
{
mark = 0;
}
}
if(mark != 0)
{
a[n] = i;
n++;
}
}
for(l=0 ; l<n ; l++)
{
printf("a[%d] = %d\n", l, a[l]);
}
return 0;
}
例题13:打印出所有的“水仙花”数,所谓“水仙花”数是指一个三位数,其各位数字立方和等于该数
#include <stdio.h>
int main(void)
{
int i, j, k, x, y, z, m, n = 0;
for(i=1 ; i<10 ; i++)
{
for(j=0 ; j<10 ; j++)
{
for(k=0 ; k<10 ; k++)
{
x = i*i*i;
y = j*j*j;
z = k*k*k;
m = i*100 + j*10 + k;
if(m == (x+y+z))
{
printf("%d\n", m);
n++;
}
}
}
}
printf("共有%d个水仙花数\n", n);
return 0;
}
例题14:将一个正整数分解质因数。例如:输入90,打印出90 = 2x3x3x5
/*在for循环中使用递归函数时,需要break语句和状态判断语句*/
#include <stdio.h>
void bkdown(int x);
int main(void)
{
int b;
printf("请输入正整数:");
scanf("%d", &b);
printf("%d=", b);
bkdown(b);
return 0;
}
void bkdown(int x)
{
int j;
int i = 0;
for(j=2 ; j<x ; j++)
{
if(x%j == 0)
{
x = x/j;
printf("%dx", j);;
bkdown(x);
i = 1;
break;
}
}
if(i == 0)
{
printf("%d\n", x);
}
}
例题15:利用条件运算符的嵌套完成学习成绩的转换:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示
#include <stdio.h>
int main(void)
{
int a, b;
printf("请输入学生成绩:");
scanf("%d", &a);
((a>=90) ? printf("A\n") : ((a>60 && a<90) ? printf("B\n") : printf("C\n") ));
return 0;
}
例题16:输入两个正整数m和n,求其最大公约数和最小公倍数
#include <stdio.h>
int main(void)
{
int m, n, i, j;
int t = 1;
printf("请输入正整数m,n:");
scanf("%d %d", &m, &n);
if(m>n)
{
j = m;
}
else
{
j = n;
}
for(i=1 ; i<j ; i++)
{
if(m%i == 0 && n%i == 0)
{
m = m / i;
n = n / i;
t = t * i;
i = 1; //重新循环,除数可以相同
}
}
printf("这两个数的最大公约数为%d,最小公倍数为%d\n", t, t*m*n);
return 0;
}
例题17:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
#include <stdio.h>
#include <conio.h>
int main(void)
{
char c;
int l=0, s=0, n=0, o=0;
printf("请输入字符串:\n");
while((c=getchar()) != '\n')
{
if(c >= 'A' && c <= 'z')
{
l++;
}
else if(c == ' ')
{
s++;
}
else if(c >= '0' && c <= '9')
{
n++;
}
else
{
o++;
}
}
printf("输入字符串中有%d个字母,%d个空格,%d个数字,%d个其他字符\n", l, s, n, o);
return 0;
}
例题18:求s=a+aa+aaa+aaaa+aa...a的值
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, i, j;
int s = 0;
printf("请输入数字以及项数:");
scanf("%d %d", &a, &b);
for(j=b ; j>0 ; j--) //外循环为每一项
{
for(i=j ; i>0 ; i--) //从最后一项开始算起,内循环为每一项的和
{
s = s + a * pow(10, i-1);
}
}
for(j=1 ; j<b+1 ; j++)
{
for(i=j ; i<b+1 ; i++)
{
printf("%d", a);
}
if(j != b)
{
printf("+");
}
else
{
printf("=%d\n", s);
}
}
return 0;
}
例题19:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数
#include <stdio.h>
int bkdown(int x);
int main(void)
{
int i, r;
int m = 0;
int a[100];
for(i=1 ; i<1001 ; i++)
{
r = bkdown(i);
if(r != 0)
{
a[m] = r;
m++;
}
}
printf("1000以内有%d个完全数,分别为:\n", m);
for(i=0 ; i<m ; i++)
{
if(i != m-1)
{
printf("%4d ", a[i]);
}
else
{
printf("%4d\n", a[i]);
}
}
return 0;
}
int bkdown(int x)
{
int j, l;
int s = 0;
l = x;
for(j=1 ; j<l ; j++)
{
if(l%j == 0)
{
s = s + j;
}
}
if(s == x)
{
return x;
}
else
{
return 0;
}
}
例题20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
int main(void)
{
int i;
float s = 0;
float h = 100;
for(i=0 ; i<10 ; i++)
{
s = s + h; //球每次从最高点落地时的高度
h = h / 2.0;
if(i != 9)
{
s = s + h; //球每次从地面反弹到最高点的高度
}
}
printf("小球第10次落地时,共经过%f米,第10次反弹%f米\n", s, h);
return 0;
}