C语言:菜鸟教程经典100例题(1-50)

C语言经典100例
注:以下答案与原文不完全相同

实例51-100

实例1

有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
*/

实例2

企业发放的奖金根据利润提成。
利润(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.
*/

实例3

一个整数,它加上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
*/

实例4

输入某年某月某日,判断这一天是这一年的第几天?

#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.
*/

实例5

输入三个整数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
*/

实例6

用*号输出字母C的图案。

#include 

int main(void)
{
	printf("  * * \n");
	printf(" *   * \n");
	printf("*     \n");
	printf("*     \n");
	printf("*     \n");
	printf(" *   *\n");
	printf("  * * \n");


	return 0;
}

/*
  * *
 *   *
*
*
*
 *   *
  * *
*/

实例7

输出特殊图案,请在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;
}

实例8

输出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
*/

实例9

要求输出国际象棋棋盘。

//  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;
}

实例10

打印楼梯,同时在楼梯上方打印两个笑脸。

//  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;
}

实例11

古典问题(兔子生崽):
有一对兔子,从出生后第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
*/

实例12

判断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
*/

实例13

打印出所有的"水仙花数",
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如: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
*/

实例14

将一个正整数分解质因数。
例如:输入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
*/

实例15

利用条件运算符的嵌套来完成此题:
学习成绩>=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
*/

实例16

输入两个正整数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.
*/

实例17

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#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
*/

实例18

求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
*/

实例19

一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如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
*/

实例20

一球从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
*/

实例21

猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第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
*/

实例22

两个乒乓球队进行比赛,各出三人。
甲队为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

实例23

打印出如下图案(菱形)。

//  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");
    }
  
}
/*
   *
  ***
 *****
*******
 *****
  ***
   *
*/

实例24

有一分数序列: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
*/

实例25

求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
*/

实例26

利用递归方法求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
*/

实例27

利用递归函数调用方式,将所输入的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);
	}
}

实例28

有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
*/

实例29

给一个不多于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.
*/

实例30

一个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.
*/

实例32

请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#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
*/

实例32

删除一个字符串中的指定字母,如:字符串 “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
*/

实例33

判断一个数字是否为质数。

#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.
*/

实例34

练习函数调用。

#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.
*/

实例35

字符串反转,如将字符串 “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
*/

实例36

求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
*/

实例37

对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
*/

实例38

求一个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
*/

实例39

有一个已经排好序的数组。
现输入一个数,要求按原来的规律将它插入数组中。

#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
*/

实例40

将一个数组逆序输出。

#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
*/

实例41 - static

学习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
*/

实例42 - auto

学习使用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
*/

实例43 - static

学习使用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
*/

实例44 - external

学习使用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

实例45 - register

学习使用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

实例46 - #define

宏#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
*/

实例47 - #define

宏#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

实例48 - #define

宏#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
*/

实例49 - #if/#ifdef/#ifndef

#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
*/

实例50 - #include

#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

你可能感兴趣的:(C/C++)