C语言经典100例
注:以下答案与原文不完全相同
实例51-100
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include
int main(void)
{
int i, j, k;
int n = 0;
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("count:%d\n", n);
return 0;
}
/*
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
count:24
*/
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?
#include
#define r1 0.1
#define r2 0.075
#define r3 0.05
#define r4 0.03
#define r5 0.015
#define r6 0.01
int main(void)
{
double l;
double bonus;
printf("Please enter monthly profit:\n");
scanf("%lf", &l);
do
{
if (l <= 10)
bonus = l * r1;
else if (l > 10 && l <= 20)
bonus = 10 * r1 + (l - 10) * r2;
else if (l > 20 && l <= 40)
bonus = 10 * r1 + 10 * r2 + (l - 20) * r3;
else if (l >= 40 && l < 60)
bonus = 10 * r1 + 10 * r2 + 20 * r3 + (l - 40) * r4;
else if(l >= 60 && l < 100)
bonus = 10 * r1 + 10 * r2 + 20 * r3 + 20 * r4 + (l - 60) * r5;
else
bonus = 10 * r1 + 10 * r2 + 20 * r3 + 20 * r4 + 40 * r5 + (l - 100) * r5;
printf("Your bonus is %lf\n", bonus);
printf("Please enter monthly profit:\n");
scanf("%lf", &l);
} while (l > 0);
printf("Done.\n");
return 0;
}
/*
Please enter monthly profit:
12
Your bonus is 1.150000
Please enter monthly profit:
22
Your bonus is 1.850000
Please enter monthly profit:
52
Your bonus is 3.110000
Please enter monthly profit:
82
Your bonus is 3.680000
Please enter monthly profit:
102
Your bonus is 3.980000
Please enter monthly profit:
0
Done.
*/
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include
/*
i + 100 = n²
i + 100 + 168 = m²
m² - n² = 168 = (m + n)(m - n)
13 * 13 = 169
m >= 13
n >= 1
m + n 为偶数
m - n 为偶数
m - n >= 2
m + n <= 84
*/
int main(void)
{
int i;
for (int m = 13; m < 84; m++)
{
for (int n = 1; n < 84; n++)
{
if (m * m - n * n == 168)
{
i = n * n - 100;
printf("i = %d\n", i);
}
}
}
return 0;
}
/*
i = -99
i = 21
i = 261
i = 1581
*/
输入某年某月某日,判断这一天是这一年的第几天?
#include
/*
#include
int main(void)
{
int y;
printf("请输入年份,回车结束\n");
scanf("%d",&y);
if((y % 4== 0 && y % 100 != 0) || ( y % 400 == 0 && y % 3200 != 0)|| y % 172800 == 0)
printf("%d是闰年\n",y);
else
printf("%d是平年\n",y);
return 0;
}
*/
int main(void)
{
int year, month, day, sum;
int leap = 0;
int D[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
printf("Please enter date:(eg:1997 12 26)\n");
scanf("%d %d %d", &year, &month, &day);
while (year > 0)
{
switch (month)
{
case 1:
sum = 0;
break;
case 2:
sum = D[1];
break;
case 3:
sum = D[1] + D[2];
break;
case 4:
sum = D[1] + D[2] + D[3];
break;
case 5:
sum = D[1] + D[2] + D[3] + D[4];
break;
case 6:
sum = D[1] + D[2] + D[3] + D[4] + D[5];
break;
case 7:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6];
break;
case 8:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7];
break;
case 9:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7] + D[8];
break;
case 10:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7] + D[8] + D[9];
break;
case 11:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7] + D[8] + D[9] + D[10];
break;
case 12:
sum = D[1] + D[2] + D[3] + D[4] + D[5] + D[6] + D[7] + D[8] + D[9] + D[10] + D[11];
break;
}
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 3200 != 0) || year % 172800 == 0)
{
printf("%d is leap\n", year);
leap = 1;
}
else
printf("%d is not leap\n", year);
if (leap == 1 && month > 2)
sum = sum + 1;
sum = sum + day;
printf("This is the %dth day of %d\n\n", sum, year);
printf("Please enter date:(eg:1997 12 26)\n");
scanf("%d %d %d", &year, &month, &day);
}
printf("Done.\n");
return 0;
}
/*
Please enter date:(eg:1997 12 26)
1997 12 26
1997 is not leap
This is the 360th day of 1997
Please enter date:(eg:1997 12 26)
2004 12 26
2004 is leap
This is the 361th day of 2004
Please enter date:(eg:1997 12 26)
0 0 0
Done.
*/
输入三个整数x,y,z,请把这三个数由小到大输出。
//该方法太复杂
#include
int main(void)
{
int x, y, z;
int i,j,k;
printf("Please enter 3 integers:(x y z)\n");
scanf("%d %d %d", &x, &y, &z);
if (x < y)
{
if (x < z)
{
i = x;
if (z < y)
{
j = z;
k = y;
}
else
{
j = y;
k = z;
}
}
else
{
j = x;
i = y;
k = z;
}
}
else
{
if (x > z)
{
k = x;
if (z > y)
{
j = z;
i = y;
}
else
{
j = y;
k = z;
}
}
else
{
k = z;
j = x;
i = y;
}
}
printf("%d %d %d\n", i, j, k);
return 0;
}
/*
Please enter 3 integers:(x y z)
9 3 7
3 7 9
*/
#include
int main(void)
{
int x, y, z;
int t;
printf("Please enter 3 integers:(x y z)\n");
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 = y;
y = z;
z = t;
}
printf("%d %d %d\n", x, y, z);
return 0;
}
/*
Please enter 3 integers:(x y z)
9 3 7
3 7 9
*/
用*号输出字母C的图案。
#include
int main(void)
{
printf(" * * \n");
printf(" * * \n");
printf("* \n");
printf("* \n");
printf("* \n");
printf(" * *\n");
printf(" * * \n");
return 0;
}
/*
* *
* *
*
*
*
* *
* *
*/
输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
#include
/*
字符共有256个。不同字符,图形不一样。
VC6.0下出现中文乱码(原因+解决方法):
176的16进制是B0,219的16进制是DB,0xB0DB是"佰"字的内码,所以输出的就是"佰"了。
主要原因是文件信息的代码页不同,我们所使用的操作系统中文状态下的代码页,要显示扩展的ASCII码需要在437 OEM-美国这个下面显示,这样就可以显示出你所希望的。具体修改控制台的默认代码页步骤如下:
1.点击运行界面左上角标题栏图标【c:\】,选择默认值一项
2.修改默认代码页,936(ANSI/OEM-简体中文GBK)为437 OEM-美国
3、关闭后重新运行一下即可
*/
int main()
{
char a = 176, b = 219;
printf("%c%c%c%c%c\n", b, a, a, a, b);
printf("%c%c%c%c%c\n", a, b, a, b, a);
printf("%c%c%c%c%c\n", a, a, b, a, a);
printf("%c%c%c%c%c\n", a, b, a, b, a);
printf("%c%c%c%c%c\n", b, a, a, a, b);
return 0;
}
输出9*9口诀。
#include
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
printf("%d * %d = %-2d ", i, j, i*j);
}
printf("\n");
}
printf("\n");
return 0;
}
/*
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72
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
*/
#include
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d * %d = %-2d ", j, i, i*j);
}
printf("\n");
}
printf("\n");
return 0;
}
/*
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
*/
要求输出国际象棋棋盘。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c%c",219,219);
else printf(" ");
printf("\n");
}
return 0;
}
打印楼梯,同时在楼梯上方打印两个笑脸。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
int i,j;
printf("\1\1\n"); /*输出两个笑脸*/
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
printf("%c%c",219,219);
printf("\n");
}
return 0;
}
古典问题(兔子生崽):
有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
#include
//兔子的规律为数列1,1,2,3,5,8,13,21....
//即每个月个数是前两个月个数之和(从第三个月开始)
int main()
{
int i = 1;
int j = 1;
int k = 0;
int m = 1;
for (m = 1; m <= 40; m++)
{
printf("%12d\t", 2 * i);
if (m % 4 == 0)
printf("\n");
k = i + j;
i = j;
j = k;
}
return 0;
}
/*
2 2 4 6
10 16 26 42
68 110 178 288
466 754 1220 1974
3194 5168 8362 13530
21892 35422 57314 92736
150050 242786 392836 635622
1028458 1664080 2692538 4356618
7049156 11405774 18454930 29860704
48315634 78176338 126491972 204668310
*/
判断101到200之间的素数。
#include
#include
//判断素数的方法:
//用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
int main()
{
int i, j;
int n = 1;
for (i = 101; i <= 200; i++)
{
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
else
{
if (j == (int)(sqrt(i)))
{
printf("%d ", i);
n++;
}
}
}
}
return 0;
}
/*
01 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
*/
打印出所有的"水仙花数",
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
#include
int main()
{
int i;
int x, y, z;
for (i = 100; i < 1000; i++)
{
x = i % 10;
y = i / 10 % 10;
z = i / 100;
if (i == (x * x * x + y * y * y + z * z * z))
printf("%d ", i);
}
return 0;
}
/*
153 370 371 407
*/
将一个正整数分解质因数。
例如:输入90,打印出90=233*5。
#include
int main()
{
int n, i;
printf("请输入整数:");
scanf("%d", &n);
printf("%d = ", n);
for (i = 2; i <= n; i++)
{
while (n%i == 0)
{
printf("%d ", i);
n = n / i;
if (n != 1)
printf("* ");
}
}
printf("\n");
return 0;
}
/*
请输入整数:90
90 = 2 * 3 * 3 * 5
*/
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
//(a>b)?a:b这是条件运算符的基本例子。
#include
int main()
{
int score;
char grade;
printf("Enter your score: ");
scanf("%d", &score);
while (score > 0)
{
grade = (score >= 90) ? 'A' : (score >= 60 && score < 90) ? 'B' : 'C';
printf("Your grade is %c\n", grade);
printf("Enter your score: ");
scanf("%d", &score);
}
return 0;
}
/*
Enter your score: 99
Your grade is A
Enter your score: 88
Your grade is B
Enter your score: 22
Your grade is C
Enter your score: 0
*/
输入两个正整数m和n,求其最大公约数和最小公倍数。
1、最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
2、求最大公约数用辗转相除法(又名欧几里德算法)
1)证明:
设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。
2)算法描述:
第一步:a ÷ b,令r为所得余数(0≤r )
第二步:互换:置 a←b,b←r,并返回第一步。
#include
int main()
{
int x, y;
int t;
int r;
int n;
printf("Enter 2 integers:(x y)\n");
scanf("%d %d", &x,&y);
while (x > 0)
{
if (x < y)
{
t = y;
y = x;
x = t;
}
r = x % y;
n = x * y;
while (r != 0)
{
x = y;
y = r;
r = x % y;
}
printf("gcd = %d, lcm = %d\n\n", y, n / y);
printf("Enter 2 integers:(x y)\n");
scanf("%d %d", &x, &y);
}
printf("Done.\n");
return 0;
}
/*
Enter 2 integers:(x y)
12 26
gcd = 2, lcm = 156
Enter 2 integers:(x y)
3 4
gcd = 1, lcm = 12
Enter 2 integers:(x y)
0 0
Done.
*/
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include
int main()
{
char c;
int letters = 0, spaces = 0, digits = 0, others = 0;
printf("Enter:\n");
while ((c = getchar()) != '\n')
{
if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z'))
letters++;
else if (c >= '0'&&c <= '9')
digits++;
else if (c == ' ')
spaces++;
else
others++;
}
printf("letters = %d, digits = %d, spaces = %d, others = %d\n", letters, digits, spaces, others);
return 0;
}
/*
Enter:
hello,123!love you hahaha
letters = 18, digits = 3, spaces = 2, others = 2
*/
#include
#include
int main()
{
char c;
int letters = 0, spaces = 0, digits = 0, others = 0;
printf("Enter:\n");
while ((c = getchar()) != '\n')
{
if (isalpha(c))
letters++;
else if (isdigit(c))
digits++;
else if (isspace(c))
spaces++;
else
others++;
}
printf("letters = %d, digits = %d, spaces = %d, others = %d\n", letters, digits, spaces, others);
return 0;
}
/*
Enter:
hello,123!love you hahaha
letters = 18, digits = 3, spaces = 2, others = 2
*/
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
#include
int main()
{
int a, n;
int sum = 0;
int t;
printf("Enter the number and times: \n");
scanf("%d %d", &a, &n);
t = a;
while (n > 0)
{
sum = sum + t;
a = a * 10;
t = a + t;
n--;
}
printf("sum = %d\n", sum);
return 0;
}
/*
Enter the number and times:
2 5
sum = 24690
*/
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完数。
#include
int main()
{
int i, j, k, n, sum;
int a[256];
for (i = 2; i <= 1000; i++)
{
sum = a[0] = 1;
k = 0;
for (j = 2; j <= (i / 2); j++)
{
if (i%j == 0)
{
sum = sum + j;
a[++k] = j;
}
}
if (i == sum)
{
printf("%d=%d", i, a[0]);
for (n = 1; n <= k; n++)
printf("+%d", a[n]);
printf("\n");
}
}
return 0;
}
/*
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
*/
#include
int main()
{
int i, j, sum;
for (i = 2; i <= 1000; i++)
{
sum = 1;
for (j = 2; j <= (i / 2); j++)
{
if (i%j == 0)
sum = sum + j;
}
if (i == sum)
printf("%d\n",i);
}
return 0;
}
/*
6
28
496
*/
一球从100米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include
int main()
{
float h = 100;
float s;
s = 100;
for (int i = 2; i <= 10; i++)
{
h = h / 2;
s = s + h * 2;
}
printf("through 10 times: sum = %f h = %f\n", s, h / 2);
return 0;
}
/*
through 10 times: sum = 299.609375 h = 0.097656
*/
猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
#include
int main()
{
int sum = 0;
int i = 1;
int day;
for (day = 9; day > 0; day--)
{
i = 2 * i + 2;
sum = i;
}
printf("sum = %d\n", sum);
return 0;
}
/*
sum = 1534
*/
两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
#include
int main()
{
char i,j,k;
for(i='x';i<='z';i++)
{
for(j='x';j<='z';j++)
{
if(i!=j)
{
for(k='x';k<='z';k++)
{
if(i!=k&&j!=k)
{
if(i!='x'&&k!='x'&&k!='z')
{
printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
}
}
}
//顺序为:a--z b--x c--y
打印出如下图案(菱形)。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
{
printf(" ");
}
for(k=0;k<=2*i;k++)
{
printf("*");
}
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
{
printf(" ");
}
for(k=0;k<=4-2*i;k++)
{
printf("*");
}
printf("\n");
}
}
/*
*
***
*****
*******
*****
***
*
*/
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
#include
int main()
{
float x = 2, y = 1;
float n = 0;
float t;
int a = 1;
while (a <= 20)
{
n = n + x / y;
t = x;
x = x + y;
y = t;
a++;
}
printf("sum = %f\n", n);
return 0;
}
/*
sum = 32.660263
*/
求1+2!+3!+…+20!的和。
#include
int main()
{
long double sum = 0;
long double s = 1;
for (int i = 1; i <= 20; i++)
{
s = 1;
for (int j = 1; j <= i; j++)
{
s = s * j;
}
sum = sum + s;
}
printf("sum = %lf\n", sum);
return 0;
}
/*
sum = sum = 2561327494111820288.000000
*/
利用递归方法求5!。
#include
int mul(int i)
{
if (i == 1)
return i;
else
return i * mul(i - 1);
}
int main()
{
int i;
i = mul(5);
printf("%d", i);
return 0;
}
/*
120
*/
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#include
void func(int n);
int main()
{
printf("please input 5 numbers:");
func(5);
return 0;
}
void func(int n)
{
if (n <= 1)
{
char next = getchar();
putchar(next);
}
else
{
char next = getchar();
func(n - 1);
putchar(next);
}
}
有5个人坐在一起,问第五个人多少岁?
他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。
请问第五个人多大?
#include
int main()
{
int a = 10;
for (int i = 1; i < 5; i++)
{
a = a + 2;
}
printf("The 5th people is %d.\n", a);
return 0;
}
/*
The 5th people is 18.
*/
#include
int age(int n)
{
if (n == 1)
return 10;
else
return age(n - 1) + 2;
}
int main(void)
{
int n;
n = age(5);
printf("%d\n", n);
return 0;
}
/*
18
*/
给一个不多于5位的正整数,
要求:
一、求它是几位数,
二、逆序打印出各位数字。
#include
int main(void)
{
int a, b, c, d, e, x;
printf("Please enter:");
scanf("%ld", &x);
while (x > 0 && x < 100000)
{
a = x / 10000;
b = x % 10000 / 1000;
c = x % 1000 / 100;
d = x % 100 / 10;
e = x % 10;
if (a != 0)
printf("5 digits: %d%d%d%d%d - %d%d%d%d%d\n",a,b,c,d,e,e,d,c,b,a);
else if(a == 0 && b != 0)
printf("4 digits: %d%d%d%d - %d%d%d%d\n", b, c, d, e, e, d, c, b);
else if(a == 0 && b ==0 && c != 0)
printf("3 digits: %d%d%d - %d%d%d\n", c, d, e, e, d, c);
else if (a == 0 && b == 0 && c == 0 && d!= 0)
printf("2 digits: %d%d - %d%d\n", d, e, e, d);
else
printf("1 digits: %d - %d\n", e, e);
printf("\n");
printf("Please enter:");
scanf("%ld", &x);
}
printf("Done.\n");
return 0;
}
/*
Please enter:1226
4 digits: 1226 - 6221
Please enter:12345
5 digits: 12345 - 54321
Please enter:456
3 digits: 456 - 654
Please enter:18
2 digits: 18 - 81
Please enter:1
1 digits: 1 - 1
Please enter:0
Done.
*/
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#include
//判断回文数
int main(void)
{
int a, b, c, d, e, x;
printf("Please enter:");
scanf("%d", &x);
while (x > 9999 && x < 100000)
{
a = x / 10000;
b = x % 10000 / 1000;
c = x % 1000 / 100;
d = x % 100 / 10;
e = x % 10;
if (a == e && b == d)
printf("Yes.\n");
else
printf("No.\n");
printf("\n");
printf("Please enter:");
scanf("%d", &x);
}
printf("Done.\n");
return 0;
}
/*
Please enter:12321
Yes.
Please enter:12345
No.
Please enter:34543
Yes.
Please enter:67854
No.
Please enter:0
Done.
*/
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#include
int main(void)
{
char i, j;
printf("Please enter the first letter:\n");
scanf("%c", &i);
getchar();
//第二次是读入的一个换行符,而不是输入的字符
//因此需要加一个getchar()吃掉换行符
switch (i)
{
case 'm':
printf("Monday\n");
break;
case 't':
printf("Please enter the next letter : \n");
scanf("%c", &j);
if (j == 'u')
{
printf("Tuesday\n");
break;
}
else if (j == 'h')
{
printf("Thursday\n");
break;
}
case 'w':
printf("Wednesday\n");
break;
case 'f':
printf("Friday\n");
break;
case 's':
printf("Please enter the next letter : \n");
scanf("%c", &j);
if (j == 'u')
{
printf("Sunday\n");
break;
}
else if (j == 'a')
{
printf("Saturday\n");
break;
}
default:
printf("error\n");
break;
}
return 0;
}
/*
Please enter the first letter:
s
Please enter the next letter :
a
Saturday
*/
删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母。
#include
#include
int main(void)
{
char ch;
char str[32] = "";
char strs[32] = "";
char s[2] = "";
s[1] = 0;
printf("Please enter a string:\n");
gets_s(str,32);
printf("Please enter a letter that you want to delete:\n");
scanf("%c", &ch);
int l;
l = strlen(str);
for (int i = 0; i < l; i++)
{
if (str[i] != ch)
{
s[0] = str[i];
strcat(strs, s);
}
}
printf("%s\n", strs);
return 0;
}
/*
Please enter a string:
helloworld
Please enter a letter that you want to delete:
o
hellwrld
*/
判断一个数字是否为质数。
#include
int main(void)
{
int num;
int n = 0;
printf("Please enter a integer:\n");
scanf("%d", &num);
while (num != 0)
{
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
printf("No.\n\n");
break;
}
else if (num % i != 0)
n++;
}
if (n == num - 2)
printf("Yes.\n\n");
printf("Please enter a integer:\n");
scanf("%d", &num);
n = 0;
}
printf("Done.\n\n");
return 0;
}
/*
Please enter a integer:
88
No.
Please enter a integer:
401
Yes.
Please enter a integer:
53
Yes.
Please enter a integer:
99
No.
Please enter a integer:
397
Yes.
Please enter a integer:
0
Done.
*/
练习函数调用。
#include
void prime(int num)
{
int n = 0;
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
printf("No.\n\n");
break;
}
else if (num % i != 0)
n++;
}
if (n == num - 2)
printf("Yes.\n\n");
}
int main(void)
{
int num;
printf("Please enter a integer:\n");
scanf("%d", &num);
while (num != 0)
{
prime(num);
printf("Please enter a integer:\n");
scanf("%d", &num);
}
printf("Done.\n\n");
return 0;
}
/*
Please enter a integer:
88
No.
Please enter a integer:
401
Yes.
Please enter a integer:
53
Yes.
Please enter a integer:
99
No.
Please enter a integer:
397
Yes.
Please enter a integer:
0
Done.
*/
字符串反转,如将字符串 “www.runoob.com” 反转为 “moc.boonur.www”。
#include
#include
int main(void)
{
char ch;
char str[32] = "";
char strs[32] = "";
char s[2] = "";
s[1] = 0;
printf("Please enter a string:\n");
gets_s(str, 32);
int l;
l = strlen(str);
for (int i = l - 1; i >= 0; i--)
{
s[0] = str[i];
strcat(strs, s);
}
printf("%s\n", strs);
return 0;
}
/*
Please enter a string:
hello,world!
!dlrow,olleh
*/
求100之内的素数。
#include
int main(void)
{
int x = 0;
int n = 0;
for (int num = 2; num < 101; num++)
{
n = 0;
for (int i = 2; i < num; i++)
{
if (num % i == 0)
break;
else if (num % i != 0)
n++;
}
if (n == num - 2)
{
printf("%-3d", num);
x++;
if (x % 5 == 0)
printf("\n");
}
}
return 0;
}
/*
2 3 5 7 11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97
*/
对10个数进行排序。
#include
int main(void)
{
int num[10];
int t;
printf("Please enter 10 numbers(with " "):\n");
scanf("%d %d %d %d %d %d %d %d %d %d", &num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &num[9]);
for (int i = 0; i < 9; i++)
{
int min = i;
for (int j = i + 1; j < 10; j++)
{
if (num[min] > num[j])
min = j;
if (min != i)
{
t = num[min];
num[min] = num[i];
num[i] = t;
}
}
}
printf("%d %d %d %d %d %d %d %d %d %d", num[0], num[1], num[2], num[3], num[4], num[5], num[6], num[7], num[8], num[9]);
return 0;
}
/*
Please enter 10 numbers(with ):
2 7 3 2 8 9 11 6 5 4
2 2 3 4 5 6 7 8 9 11
*/
求一个3*3矩阵对角线元素之和。
#include
int main(void)
{
int mat[3][3];
int sum = 0;
printf("Please enter a 3*3 matrix:\n");
for (int i = 0; i < 3; i++)
scanf("%d %d %d", &mat[i][0], &mat[i][1], &mat[i][2]);
for (int i = 0; i < 3; i++)
sum = sum + mat[i][i];
printf("sum = %d\n", sum);
return 0;
}
/*
Please enter a 3*3 matrix:
1 2 3
4 5 6
7 8 9
sum = 15
*/
有一个已经排好序的数组。
现输入一个数,要求按原来的规律将它插入数组中。
#include
int main(void)
{
int num[15] = { 1,3,5,7,9,12,15,19,22,26 };
int n;
int t,x;
int i;
printf("Please enter a integer:\n");
scanf("%d", &n);
for (i = 0; i < 10; i++)
{
if (n < num[i])
{
t = num[i];
num[i] = n;
break;
}
}
for (int j = i + 1; j < 11; j++)
{
x = num[j];
num[j] = t;
t = x;
}
for (int k = 0; k < 11; k++)
printf("%d ", num[k]);
printf("\n");
return 0;
}
/*
Please enter a integer:
16
1 3 5 7 9 12 15 16 19 22 26
*/
将一个数组逆序输出。
#include
int main(void)
{
int num[10];
int now[10];
printf("Please enter 10 numbers(with " "):\n");
scanf("%d %d %d %d %d %d %d %d %d %d", &num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &num[9]);
for (int i = 0, j = 9; i < 10, j >= 0; i++, j--)
now[i] = num[j];
for (int i = 0; i < 10; i++)
printf("%d ", now[i]);
printf("\n");
return 0;
}
/*
Please enter 10 numbers(with ):
2 8 7 6 2 3 4 9 3 7
7 3 9 4 3 2 6 7 8 2
*/
学习static定义静态变量的用法。
static 用来说明静态变量。
1、如果是在函数外面定义的,那么其效果和全局变量类似,即static说明的变量可以在当前c程序文件中使用。
2、如果是在函数内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化,于是,这个变量的取值就会一直保存着,我们再次调用该函数时,仍是保存的上一次函数调用时保存的结果。
c语言中的static有三个主要作用:
1、隐藏性。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
2、static可以保持变量内容的持久,当static定义变量在函数内部时,改变量值的生命周期和全局变量相同。
3、static可以令其定义变量内存专区所属有字节默认初始化为0,这一特点可以省去程序员许多麻烦,减少工作量。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
void fun();
for(int i=0;i<3;i++)
fun();
return 0;
}
void fun()
{
int i=0;
static int static_i=0;
printf("i=%d\n",i);
printf("static_i=%d\n",static_i);
i++;
static_i++;
}
/*
i=0
static_i=0
i=0
static_i=1
i=0
static_i=2
*/
学习使用auto定义变量的用法。
auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。
具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。
在函数内部定义的变量成为局部变量。
在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 变量为 %d \n",num);
num++;
{
auto int num=1;
printf("内置模块 num 变量为 %d \n",num);
num++;
}
}
return 0;
}
/*
num 变量为 2
内置模块 num 变量为 1
num 变量为 3
内置模块 num 变量为 1
num 变量为 4
内置模块 num 变量为 1
*/
学习使用static的另一用法。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 变量为 %d \n",num);
num++;
{
static int num=1;
printf("内置模块 num 变量为 %d\n",num);
num++;
}
}
return 0;
}
/*
num 变量为 2
内置模块 num 变量为 1
num 变量为 3
内置模块 num 变量为 2
num 变量为 4
内置模块 num 变量为 3
*/
学习使用external的用法。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int a,b,c; //全局变量
void add()
{
int a;
a=3;
c=a+b;
}
int main()
{
a=b=4;
add();
printf("c 的值为 %d\n",c);
return 0;
}
//c 的值为 7
学习使用register定义变量的方法。
https://blog.csdn.net/ccjoe/article/details/44756395?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
在C语言中的register修饰的变量表示将此变量存储在CPU的寄存器中,由于CPU访问寄存器比访问内存快很多,可以大大提高运算速度。
但在使用register时有几点需要注意:
1.用register修饰的变量只能是局部变量,不能是全局变量。CPU的寄存器资源有限,因此不可能让一个变量一直占着CPU寄存器。
2.register变量一定要是CPU可以接受的值。
4.不可以用&运算符对register变量进行取址。
5.register只是请求寄存器变量,不一定能够成功。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
int main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++)
tmp+=i;
printf("总和为 %d\n",tmp);
return 0;
}
//总和为 5050
宏#define命令练习。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
int num;
int again=1;
printf("如果值小于 50 程序将终止。\n");
while(again)
{
printf("\n请输入数字:");
scanf("%d",&num);
printf("该数字的平方为 %d \n",SQ(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
return 0;
}
/*
如果值小于 50 程序将终止。
请输入数字:100
该数字的平方为 10000
请输入数字:5
该数字的平方为 25
*/
宏#define命令练习2。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行里
int main()
{
int x=10;
int y=20;
printf("x=%d; y=%d\n",x,y);
exchange(x,y);
printf("x=%d; y=%d\n",x,y);
return 0;
}
//x=10; y=20
//x=20; y=10
宏#define命令练习3。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#define LAG >
#define SMA <
#define EQ ==
#include
int main()
{
int i,j;
printf("请输入两个数字:\n");
scanf("%d %d",&i,&j);
if(i LAG j)
printf("%d 大于 %d \n",i,j);
else if(i EQ j)
printf("%d 等于 %d \n",i,j);
else if(i SMA j)
printf("%d 小于 %d \n",i,j);
else
printf("没有值。\n");
return 0;
}
/*
请输入两个数字:
1 2
1 小于 2
*/
#if #ifdef和#ifndef的综合应用。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include
#define MAX
#define MAXIMUM(x,y)(x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{
int a=10,b=20;
#ifdef MAX
printf("更大的数字是 %d\n",MAXIMUM(a,b));
#else
printf("更小的数字是 %d\n",MINIMUM(a,b));
#endif
#ifndef MIN
printf("更小的数字是 %d\n",MINIMUM(a,b));
#else
printf("更大的数字是 %d\n",MAXIMUM(a,b));
#endif
#undef MAX
#ifdef MAX
printf("更大的数字是 %d\n",MAXIMUM(a,b));
#else
printf("更小的数字是 %d\n",MINIMUM(a,b));
#endif
#define MIN
#ifndef MIN
printf("更小的数字是 %d\n",MINIMUM(a,b));
#else
printf("更大的数字是 %d\n",MAXIMUM(a,b));
#endif
return 0;
}
/*
更大的数字是 20
更小的数字是 10
更小的数字是 10
更大的数字是 20
*/
#include 的应用练习。
//test.h
#define LAG >
#define SMA <
#define EQ ==
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
//test.c
#include "test.h"
#include
int main()
{
int i=10;
int j=20;
if(i LAG j)
printf("%d 大于 %d \n",i,j);
else if(i EQ j)
printf("%d 等于 %d \n",i,j);
else if(i SMA j)
printf("%d 小于 %d \n",i,j);
else
printf("没有值。\n");
return 0;
}
//10 小于 20