学习 C/C++ 资料(案例)

今天了解C语言中常案例

C 语言实例

1、C 语言实例 - 输出 “Hello, World!”

1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
// printf() 中字符串需要引号
printf("Hello, World!");
return 0;
}

2、 C 语言实例 - 输出整数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main()
{
int number;

// printf() 输出字符串
printf("输入一个整数: ");

// scanf() 格式化输入
scanf("%d", &number);

// printf() 显示格式化输入
printf("你输入的整数是: %d", number);
return 0;
}

3、 C 语言实例 - 输出单个字符

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {
char c; // 声明 char 变量

c = 'A'; // 定义 char 变量

printf("c 的值为 %c", c);

return 0;
}

4、 C 语言实例 - 输出浮点数

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

int main() {
float f; // 声明浮点数变量

f = 12.001234; // 定义浮点数变量

printf("f 的值为 %f", f);

return 0;
}

5、 C 语言实例 - 输出双精度数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
double d; // 声明双精度变量

d = 12.001234; // 定义双精度变量

printf("d 的值为 %le", d);

return 0;
}
//使用 printf() 与 %e 输出双精度数。
//输出结果:
//d 的值为 1.200123e+01

6、 C 语言实例 - 两个数字相加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 使用 scanf() 来接收输入, printf() 与 %d 格式化输出整数。

#include <stdio.h>
int main()
{
int firstNumber, secondNumber, sumOfTwoNumbers;

printf("输入两个数(以空格分割): ");

// 通过 scanf() 函数接收用户输入的两个整数
scanf("%d %d", &firstNumber, &secondNumber);

// 两个数字相加
sumOfTwoNumbers = firstNumber + secondNumber;

// 输出结果
printf("%d + %d = %d", firstNumber, secondNumber, sumOfTwoNumbers);

return 0;
}

// 运行结果:

// 输入两个数(以空格分割): 1 2
// 1 + 2 = 3

7、 C 语言实例 - 两个浮点数相乘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
输入两个浮点数,计算乘积。

#include <stdio.h>
int main()
{
double firstNumber, secondNumber, product;
printf("输入两个浮点数: ");

// 用户输入两个浮点数
scanf("%lf %lf", &firstNumber, &secondNumber);

// 两个浮点数相乘
product = firstNumber * secondNumber;

// 输出结果, %.2lf 保留两个小数点
printf("结果 = %.2lf", product);

return 0;
}

运行结果:
输入两个浮点数: 1.2 2.345
结果 = 2.81

8、 C 语言实例 - 字符转 ASCII 码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
ASCII 定义了 128 个字符。
分类:
一:0-31127(删除键)是控制字符
二:空白字符:空格(32)、 制表符、 垂直制表符、 换行、 回车。
三:可显示字符:a-z、A-Z、0-9、~、!、@、、%、^、&、#、$、*、(、)、-、+、{、}、[、]、'、"、<、>、,、?、/、|、\、_、:、;、.,还有顿号、。
ASCII 表:

ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 ' 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL

#include <stdio.h>
int main()
{
char c;
printf("输入一个字符: ");

// 读取用户输入
scanf("%c", &c);

// %d 显示整数
// %c 显示对应字符
printf("%c 的 ASCII 为 %d", c, c);
return 0;
}

运行结果:
输入一个字符: a
a 的 ASCII 为 97

9、 C 语言实例 - 两数相除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
两数相除,如果有余数,输出余数。

#include <stdio.h>

int main(){

int dividend, divisor, quotient, remainder;

printf("输入被除数: ");
scanf("%d", &dividend);

printf("输入除数: ");
scanf("%d", &divisor);

// 计算商
quotient = dividend / divisor;

// 计算余数
remainder = dividend % divisor;

printf("商 = %d\n", quotient);
printf("余数 = %d", remainder);

return 0;
}

运行结果:

输入被除数: 5
输入除数: 2
商 = 2
余数 = 1

10、 C 语言实例 - 数值比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main() {
int a, b;

a = 11;
b = 99;

// 也可以通过以下代码实现让用户在终端输入两个数
// printf("输入第一个值:");
// scanf("%d", &a);
// printf("输入第二个值:");
// scanf("%d", &b);

if(a > b)
printf("a 大于 b");
else
printf("a 小于等于 b");

return 0;
}

输出结果:

a 小于等于 b

比较三个数

以下实例中定义了两个整数变量,并使用 if 来比较三个数值,可以先看下逻辑图:

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main() {
int a, b, c;

a = 11;
b = 22;
c = 33;

if ( a > b && a > c )
printf("%d 最大", a);
else if ( b > a && b > c )
printf("%d 最大", b);
else if ( c > a && c > b )
printf("%d 最大", c);
else
printf("有两个或三个数值相等");

return 0;
}

输出结果:

1
33 最大

11、 C 语言实例 - 计算 int, float, double 和 char 字节大小

​ 使用 sizeof 操作符计算int, float, double 和 char四种变量字节大小。

​ sizeof 是 C 语言的一种单目操作符,如C语言的其他操作符++、–等,它并不是函数。

​ sizeof 操作符以字节形式给出了其操作数的存储大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main()
{
int integerType;
float floatType;
double doubleType;
char charType;

// sizeof 操作符用于计算变量的字节大小
printf("Size of int: %ld bytes\n",sizeof(integerType));
printf("Size of float: %ld bytes\n",sizeof(floatType));
printf("Size of double: %ld bytes\n",sizeof(doubleType));
printf("Size of char: %ld byte\n",sizeof(charType));

return 0;
}

运行结果:

Size of int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of char: 1 byte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main()
{
int a;
long b;
long long c;

double e;
long double f;


printf("Size of int = %ld bytes \n", sizeof(a));
printf("Size of long = %ld bytes\n", sizeof(b));
printf("Size of long long = %ld bytes\n", sizeof(c));

printf("Size of double = %ld bytes\n", sizeof(e));
printf("Size of long double = %ld bytes\n", sizeof(f));

return 0;
}
运行结果:

Size of int = 4 bytes
Size of long = 8 bytes
Size of long long = 8 bytes
Size of double = 8 bytes
Size of long double = 16 bytes

12、 C 语言实例 - 交换两个数的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

int main()
{
double firstNumber, secondNumber, temporaryVariable;

printf("输入第一个数字: ");
scanf("%lf", &firstNumber);

printf("输入第二个数字: ");
scanf("%lf",&secondNumber);

// 将第一个数的值赋值给 temporaryVariable
temporaryVariable = firstNumber;

// 第二个数的值赋值给 firstNumber
firstNumber = secondNumber;

// 将 temporaryVariable 赋值给 secondNumber
secondNumber = temporaryVariable;

printf("\n交换后, firstNumber = %.2lf\n", firstNumber);
printf("交换后, secondNumber = %.2lf", secondNumber);

return 0;
}
运行结果:

输入第一个数字: 1
输入第二个数字: 2

交换后, firstNumber = 2.00
交换后, secondNumber = 1.00

不使用临时变量交换两个整数的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main() {
int a, b;

a = 11;
b = 99;

printf("交换之前 - \n a = %d, b = %d \n\n", a, b);

a = a + b; // ( 11 + 99 = 110) 此时 a 的变量为两数之和,b 未改变
b = a - b; // ( 110 - 99 = 11)
a = a - b; // ( 110 - 11 = 99)

printf("交换后 - \n a = %d, b = %d \n", a, b);
}
运行结果:

交换之前 -
a = 11, b = 99

交换后 -
a = 99, b = 11

13、 C 语言实例 - 判断奇数/偶数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main()
{
int number;

printf("请输入一个整数: ");
scanf("%d", &number);

// 判断这个数除以 2 的余数
if(number % 2 == 0)
printf("%d 是偶数。", number);
else
printf("%d 是奇数。", number);

return 0;
}
运行结果:

请输入一个整数: 5
5 是奇数。

14、 C 语言实例 - 循环区间范围内的奇数/偶数

循环输出区间范围内的奇数/偶数可以通过除于 2 的余数来判断。

以下实例通过循环输出指定区间范围的偶数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
int i;

for(i = 1; i <= 10; i++) {
if(i%2 == 0)
printf(" %2d\n", i);
}
return 0;
}
运行结果:

2
4
6
8
10

以下实例通过循环输出指定区间范围的奇数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
int i;

for(i = 1; i <= 10; i++) {
if(i%2 != 0)
printf("%d\n", i);
}
return 0;
}
运行结果:

1
3
5
7
9

15、 C 语言实例 - 判断元音/辅音

判断输入的字母是元音,还是辅音。

英语有26个字母,元音只包括 a、e、i、o、u 这五个字母,其余的都为辅音。y是半元音、半辅音字母,但在英语中都把他当作辅音。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main()
{
char c;
int isLowercaseVowel, isUppercaseVowel;

printf("输入一个字母: ");
scanf("%c",&c);

// 小写字母元音
isLowercaseVowel = (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');

// 大写字母元音
isUppercaseVowel = (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');

// if 语句判断
if (isLowercaseVowel || isUppercaseVowel)
printf("%c 是元音", c);
else
printf("%c 是辅音", c);
return 0;
}
运行结果:

输入一个字母: G
G 是辅音

16、 C 语言实例 - 判断三个数中的最大数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main()
{
double n1, n2, n3;

printf("请输入三个数,以空格分隔: ");
scanf("%lf %lf %lf", &n1, &n2, &n3);

if( n1>=n2 && n1>=n3 )
printf("%.2f 是最大数。", n1);

if( n2>=n1 && n2>=n3 )
printf("%.2f 是最大数。", n2);

if( n3>=n1 && n3>=n2 )
printf("%.2f 是最大数。", n3);

return 0;
}
运行结果:

请输入三个数,以空格分隔: 1 2 3
3.00 是最大数。

17、 C 语言实例 - 一元二次方程

求一元二次方程:ax2+bx+c=0 的根。

输入三个实数a,b,c的值,且a不等于0。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <math.h>

int main()
{
float a,b,c,x1,x2,d;
printf("输入方程的三个系数:");
scanf("%f %f %f",&a,&b,&c);
if(a!=0)
{
d=sqrt(b*b-4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
if(x1<x2)
printf("%0.2f %0.2f\n",x2,x1);
else
printf("%0.2f %0.2f\n",x1,x2);
}
return 0;
}
运行结果:

输入方程的三个系数:1 2 1
-1.00 -1.00

18、 C 语言实例 - 判断闰年

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main()
{
int year;

printf("输入年份: ");
scanf("%d",&year);

if(year%4 == 0)
{
if( year%100 == 0)
{
// 这里如果被 400 整数是闰年
if ( year%400 == 0)
printf("%d 是闰年", year);
else
printf("%d 不是闰年", year);
}
else
printf("%d 是闰年", year );
}
else
printf("%d 不是闰年", year);

return 0;
}
运行结果:

输入年份: 1990
1990 不是闰

19、 C 语言实例 - 判断正数/负数/零

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int main()
{
double number;

printf("输入一个数字: ");
scanf("%lf", &number);

if (number <= 0.0)
{
if (number == 0.0)
printf("你输入的是 0。");
else
printf("你输入的是负数。");
}
else
printf("你输入的是正数。");
return 0;
}
运行结果:

输入一个数字: 9
你输入的是正数。

20、 C 语言实例 - 判断字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main()
{
char c;
printf("输入一个字符: ");
scanf("%c",&c);

if( (c>='a' && c<='z') || (c>='A' && c<='Z'))
printf("%c 是字母",c);
else
printf("%c 不是字母",c);

return 0;
}
运行结果:

输入一个字符: a
a 是字母

21、 C 语言实例 - 计算自然数的和

自然数是指表示物体个数的数,即由0开始,0,1,2,3,4,……一个接一个,组成一个无穷的集体,即指非负整数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
int main()
{
int n, i, sum = 0;

printf("输入一个正整数: ");
scanf("%d",&n);

for(i=1; i <= n; ++i)
{
sum += i; // sum = sum+i;
}

printf("Sum = %d",sum);

return 0;
}

// 方法二:
#include <stdio.h>
int main()
{
int n, i, sum = 0;

printf("输入一个正整数: ");
scanf("%d",&n);

i = 1;
while ( i <=n )
{
sum += i;
++i;
}

printf("Sum = %d",sum);

return 0;
}

// 方法三:递归
#include <stdio.h>
int addNumbers(int n);

int main()
{
int num;
printf("输入一个整数: ");
scanf("%d", &num);
printf("Sum = %d",addNumbers(num));
return 0;
}

int addNumbers(int n)
{
if(n != 0)
return n + addNumbers(n-1);
else
return n;
}
运行结果:

输入一个正整数: 100
Sum = 5050

22、 C 语言实例 - 输出九九乘法口诀表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h> 

int main(){
//外层循环变量,控制行
int i = 0;
//内层循环变量,控制列
int j = 0;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++){
printf("%dx%d=%d\t",j,i,i*j);
}
//每行输出完后换行
printf("\n");
}
}
运行结果:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

23、 C 语言实例 - 斐波那契数列

提示:斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……..

这个数列从第3项开始,每一项都等于前两项之和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>

int main()
{
int i, n, t1 = 0, t2 = 1, nextTerm;

printf("输出几项: ");
scanf("%d", &n);

printf("斐波那契数列: ");

for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
return 0;
}
运行结果:

输出几项: 10
斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

//输出指定数字前的斐波那契数列
#include <stdio.h>

int main()
{
int t1 = 0, t2 = 1, nextTerm = 0, n;

printf("输入一个正数: ");
scanf("%d", &n);

// 显示前两项
printf("斐波那契数列: %d, %d, ", t1, t2);

nextTerm = t1 + t2;

while(nextTerm <= n)
{
printf("%d, ",nextTerm);
t1 = t2;
t2 = nextTerm;
nextTerm = t1 + t2;
}

return 0;
}
运行结果:

输入一个正数: 100
斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,

24、 C 语言实例 - 求两数的最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// 使用 for 和 if
#include <stdio.h>

int main()
{
int n1, n2, i, gcd;

printf("输入两个正整数,以空格分隔: ");
scanf("%d %d", &n1, &n2);

for(i=1; i <= n1 && i <= n2; ++i)
{
// 判断 i 是否为最大公约数
if(n1%i==0 && n2%i==0)
gcd = i;
}

printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);

return 0;
}
运行结果:

输入两个正整数,以空格分隔: 81 153
81153 的最大公约数是 9

//使用 while 和 if
#include <stdio.h>
int main()
{
int n1, n2;

printf("输入两个数,以空格分隔: ");
scanf("%d %d",&n1,&n2);

while(n1!=n2)
{
if(n1 > n2)
n1 -= n2;
else
n2 -= n1;
}
printf("GCD = %d",n1);

return 0;
}
运行结果:

输入两个数,以空格分隔: 81 153
GCD = 9

//适用正数和负数
#include <stdio.h>

int main()
{
int n1, n2;

printf("输入两个数,以空格分隔: ");
scanf("%d %d",&n1,&n2);

// 如果输入的是负数,将其转换为正数
n1 = ( n1 > 0) ? n1 : -n1;
n2 = ( n2 > 0) ? n2 : -n2;

while(n1!=n2)
{
if(n1 > n2)
n1 -= n2;
else
n2 -= n1;
}
printf("GCD = %d",n1);

return 0;
}
运行结果:

输入两个数,以空格分隔: 81 -153
GCD = 9

//使用递归
#include <stdio.h>
int hcf(int n1, int n2);
int main()
{
int n1, n2;
printf("输入两个正整数: ");
scanf("%d %d", &n1, &n2);

printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2));
return 0;
}

int hcf(int n1, int n2)
{
if (n2 != 0)
return hcf(n2, n1%n2);
else
return n1;
}

25、 C 语言实例 - 求两数最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//使用 while 和 if
#include <stdio.h>

int main()
{
int n1, n2, minMultiple;
printf("输入两个正整数: ");
scanf("%d %d", &n1, &n2);

// 判断两数较大的值,并赋值给 minMultiple
minMultiple = (n1>n2) ? n1 : n2;

// 条件为 true
while(1)
{
if( minMultiple%n1==0 && minMultiple%n2==0 )
{
printf("%d 和 %d 的最小公倍数为 %d", n1, n2,minMultiple);
break;
}
++minMultiple;
}
return 0;
}
运行结果:

输入两个正整数: 72 120
72120 的最小公倍数为 360

//通过最大公约数计算
#include <stdio.h>

int main()
{
int n1, n2, i, gcd, lcm;

printf("输入两个正整数: ");
scanf("%d %d",&n1,&n2);

for(i=1; i <= n1 && i <= n2; ++i)
{
// 判断最大公约数
if(n1%i==0 && n2%i==0)
gcd = i;
}

lcm = (n1*n2)/gcd;
printf("%d 和 %d 的最小公倍数为 %d", n1, n2, lcm);

return 0;
}
运行结果:

输入两个正整数: 72 120
72120 的最小公倍数为 360

26、 C 语言实例 - 阶乘

提示:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>

int main()
{
int n, i;
unsigned long long factorial = 1;

printf("输入一个整数: ");
scanf("%d",&n);

// 如果输入是负数,显示错误
if (n < 0)
printf("Error! 负数没有阶乘jiechen");

else
{
for(i=1; i<=n; ++i)
{
factorial *= i; // factorial = factorial*i;
}
printf("%d! = %llu", n, factorial);
}

return 0;
}
运行结果:

输入一个整数: 10
10! = 3628800

//使用递归
#include <stdio.h>
long int multiplyNumbers(int n);

int main()
{
int n;
printf("输入一个整数: ");
scanf("%d", &n);
printf("%d! = %ld", n, multiplyNumbers(n));
return 0;
}
long int multiplyNumbers(int n)
{
if (n >= 1)
return n*multiplyNumbers(n-1);
else
return 1;
}

27、 C 语言实例 - 循环输出26个字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>

int main()
{
char c;

for(c = 'A'; c <= 'Z'; ++c)
printf("%c ", c);

return 0;
}
运行结果:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

// 输出大写或小写字母
#include <stdio.h>

int main()
{
char c;

printf("输入 u 显示大写字母,输入 l 显示小写字母: ");
scanf("%c", &c);

if(c== 'U' || c== 'u')
{
for(c = 'A'; c <= 'Z'; ++c)
printf("%c ", c);
}
else if (c == 'L' || c == 'l')
{
for(c = 'a'; c <= 'z'; ++c)
printf("%c ", c);
}
else
printf("Error! 输入非法字符。");
return 0;
}
运行结果:

输入 u 显示大写字母,输入 l 显示小写字母: l
a b c d e f g h i j k l m n o p q r s t u v w x y z

28、 C 语言实例 - 判断数字为几位数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int main()
{
long long n;
int count = 0;

printf("输入一个整数: ");
scanf("%lld", &n);

while(n != 0)
{
// n = n/10
n /= 10;
++count;
}

printf("数字是 %d 位数。", count);
}
运行结果:

输入一个整数: 2345
数字是 4 位数。

29、 C 语言实例 - 计算一个数的 n 次方

提示:计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
使用 while
#include <stdio.h>

int main()
{
int base, exponent;

long long result = 1;

printf("基数: ");
scanf("%d", &base);

printf("指数: ");
scanf("%d", &exponent);

while (exponent != 0)
{
result *= base;
--exponent;
}
printf("结果:%lld", result);

return 0;
}
运行结果:

基数: 2
指数: 3
结果:8

//使用 pow() 函数
#include <stdio.h>
#include <math.h>

int main()
{
double base, exponent, result;

printf("基数: ");
scanf("%lf", &base);

printf("指数: ");
scanf("%lf", &exponent);

// 计算结果
result = pow(base, exponent);

printf("%.1lf^%.1lf = %.2lf", base, exponent, result);

return 0;
}
运行结果:

基数: 2
指数: 3
2.0^3.0 = 8.00

// 递归
#include <stdio.h>

int power(int n1, int n2);

int main()
{
int base, powerRaised, result;

printf("基数: ");
scanf("%d",&base);

printf("指数(正整数): ");
scanf("%d",&powerRaised);

result = power(base, powerRaised);

printf("%d^%d = %d", base, powerRaised, result);
return 0;
}

int power(int base, int powerRaised)
{
if (powerRaised != 0)
return (base*power(base, powerRaised-1));
else
return 1;
}

30、 C 语言实例 - 判断回文数

提示:判断一个数是否为回文数。

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main()
{
int n, reversedInteger = 0, remainder, originalInteger;

printf("输入一个整数: ");
scanf("%d", &n);

originalInteger = n;

// 翻转
while( n!=0 )
{
remainder = n%10;
reversedInteger = reversedInteger*10 + remainder;
n /= 10;
}

// 判断
if (originalInteger == reversedInteger)
printf("%d 是回文数。", originalInteger);
else
printf("%d 不是回文数。", originalInteger);

return 0;
}
运行结果:

输入一个整数: 12321
12321 是回文数

31、 C 语言实例 - 判断素数

提示:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdio.h>

int main()
{
int n, i, flag = 0;

printf("输入一个正整数: ");
scanf("%d",&n);

for(i=2; i<=n/2; ++i)
{
// 符合该条件不是素数
if(n%i==0)
{
flag=1;
break;
}
}

if (flag==0)
printf("%d 是素数",n);
else
printf("%d 不是素数",n);

return 0;
}
运行结果:

输入一个正整数: 29
29 是素数

//判断两个数之间的素数
#include <stdio.h>

int main()
{
int low, high, i, flag;
printf("输入两个整数: ");
scanf("%d %d", &low, &high);

printf("%d 与 %d 之间的素数为: ", low, high);

while (low < high)
{
flag = 0;

for(i = 2; i <= low/2; ++i)
{
if(low % i == 0)
{
flag = 1;
break;
}
}

if (flag == 0)
printf("%d ", low);

++low;
}

return 0;
}
运行结果:

输入两个整数: 100 200
100200 之间的素数为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199


//使用函数判断两数间的素数
#include <stdio.h>

int checkPrimeNumber(int n);
int main()
{
int n1, n2, i, flag;

printf("输入两个正整数: ");
scanf("%d %d", &n1, &n2);
printf("%d 和 %d 间的素数为: ", n1, n2);

for(i=n1+1; i<n2; ++i)
{
// 判断是否为素数
flag = checkPrimeNumber(i);

if(flag == 1)
printf("%d ",i);
}
return 0;
}

// 函数定义
int checkPrimeNumber(int n)
{
int j, flag = 1;

for(j=2; j <= n/2; ++j)
{
if (n%j == 0)
{
flag =0;
break;
}
}
return flag;
}
输出结果为:

输入两个正整数: 10 30
1030 间的素数为: 11 13 17 19 23 29

32、 C 语言实例 - 判断Armstrong数(阿姆斯壮数)

提示:Armstrong 数,就是n位数的各位数的n次方之和等于该数,如:

1
2
153=1^3+5^3+3^3
1634=1^4+6^4+3^4+4^4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <stdio.h>
int main()
{
int number, originalNumber, remainder, result = 0;

printf("输入三位数: ");
scanf("%d", &number);

originalNumber = number;

while (originalNumber != 0)
{
remainder = originalNumber%10;
result += remainder*remainder*remainder;
originalNumber /= 10;
}

if(result == number)
printf("%d 是 Armstrong 数",number);
else
printf("%d 不是 Armstrong 数",number);

return 0;
}
运行结果:

输入三位数: 371
371 是 Armstrong


//两数之间的 Armstrong 数
#include <stdio.h>
#include <math.h>

int main()
{
int low, high, i, temp1, temp2, remainder, n = 0, result = 0;

printf("输入两个整数: ");
scanf("%d %d", &low, &high);
printf("%d 和 %d 之间的 Armstrong 数为: ", low, high);

for(i = low + 1; i < high; ++i)
{
temp2 = i;
temp1 = i;

// 计算
while (temp1 != 0)
{
temp1 /= 10;
++n;
}

while (temp2 != 0)
{
remainder = temp2 % 10;
result += pow(remainder, n);
temp2 /= 10;
}

if (result == i) {
printf("%d ", i);
}

n = 0;
result = 0;

}
return 0;
}
运行结果:

输入两个整数: 100 1000
1001000 之间的 Armstrong 数为: 153 370 371 407


// 使用函数判断Armstrong 数
#include <stdio.h>
#include <math.h>

int checkPrimeNumber(int n);
int checkArmstrongNumber(int n);

int main()
{
int n, flag;

printf("输入正整数: ");
scanf("%d", &n);

// 检测素数
flag = checkPrimeNumber(n);
if (flag == 1)
printf("%d 是素数。\n", n);
else
printf("%d 不是素数\n", n);

// 检测 Armstrong 数
flag = checkArmstrongNumber(n);
if (flag == 1)
printf("%d 是 Armstrong 数。", n);
else
printf("%d 不是 Armstrong 数。",n);
return 0;
}

int checkPrimeNumber(int n)
{
int i, flag = 1;

for(i=2; i<=n/2; ++i)
{

// 非素数条件
if(n%i == 0)
{
flag = 0;
break;
}
}
return flag;
}

int checkArmstrongNumber(int number)
{
int originalNumber, remainder, result = 0, n = 0, flag;

originalNumber = number;

while (originalNumber != 0)
{
originalNumber /= 10;
++n;
}

originalNumber = number;

while (originalNumber != 0)
{
remainder = originalNumber%10;
result += pow(remainder, n);
originalNumber /= 10;
}

// 判断条件
if(result == number)
flag = 1;
else
flag = 0;

return flag;
}
输出结果为:

输入正整数: 371
371 不是素数
371 是 Armstrong 数。

33、 C 语言实例 – 求一个整数的所有因数

提示:假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main()
{
int number, i;

printf("输入一个整数: ");
scanf("%d",&number);

printf("%d 的因数有: ", number);
for(i=1; i <= number; ++i)
{
if (number%i == 0)
{
printf("%d ",i);
}
}

return 0;
}
运行结果:

输入一个整数: 60
60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60

34、 C 语言实例 - 创建各类三角形图案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
使用 * 号
#include <stdio.h>

int main()
{
int i, j, rows;

printf("行数: ");
scanf("%d",&rows);

for(i=1; i<=rows; ++i)
{
for(j=1; j<=i; ++j)
{
printf("* ");
}
printf("\n");
}
return 0;
}

*
* *
* * *
* * * *
* * * * *

// 使用数字
#include <stdio.h>

int main()
{
int i, j, rows;

printf("行数: ");
scanf("%d",&rows);

for(i=1; i<=rows; ++i)
{
for(j=1; j<=i; ++j)
{
printf("%d ",j);
}
printf("\n");
}
return 0;
}

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5


// 使用字母
#include <stdio.h>
int main()
{
int i, j;
char input, alphabet = 'A';

printf("输入大写字母: ");
scanf("%c",&input);

for(i=1; i <= (input-'A'+1); ++i)
{
for(j=1;j<=i;++j)
{
printf("%c", alphabet);
}
++alphabet;

printf("\n");
}
return 0;
}

A
B B
C C C
D D D D
E E E E E


//倒三角形
#include <stdio.h>
int main()
{
int i, j, rows;

printf("行数: ");
scanf("%d",&rows);

for(i=rows; i>=1; --i)
{
for(j=1; j<=i; ++j)
{
printf("* ");
}
printf("\n");
}

return 0;
}

* * * * *
* * * *
* * *
* *
*



// 倒三角形数字
#include <stdio.h>
int main()
{
int i, j, rows;

printf("行数: ");
scanf("%d",&rows);

for(i=rows; i>=1; --i)
{
for(j=1; j<=i; ++j)
{
printf("%d ",j);
}
printf("\n");
}

return 0;
}

1 2 3 4 5
1 2 3 4
1 2 3
1 2
1



//金字塔
#include <stdio.h>
int main()
{
int i, space, rows, k=0;

printf("Enter number of rows: ");
scanf("%d",&rows);

for(i=1; i<=rows; ++i, k=0)
{
for(space=1; space<=rows-i; ++space)
{
printf(" ");
}

while(k != 2*i-1)
{
printf("* ");
++k;
}

printf("\n");
}

return 0;
}

*
* * *
* * * * *
* * * * * * *
* * * * * * * * *



//数字金字塔
#include <stdio.h>
int main()
{
int i, space, rows, k=0, count = 0, count1 = 0;

printf("行数: ");
scanf("%d",&rows);

for(i=1; i<=rows; ++i)
{
for(space=1; space <= rows-i; ++space)
{
printf(" ");
++count;
}

while(k != 2*i-1)
{
if (count <= rows-1)
{
printf("%d ", i+k);
++count;
}
else
{
++count1;
printf("%d ", (i+k-2*count1));
}
++k;
}
count1 = count = k = 0;

printf("\n");
}
return 0;
}

1
2 3 2
3 4 5 4 3
4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5



// 倒金字塔
#include<stdio.h>
int main()
{
int rows, i, j, space;

printf("行数: ");
scanf("%d",&rows);

for(i=rows; i>=1; --i)
{
for(space=0; space < rows-i; ++space)
printf(" ");

for(j=i; j <= 2*i-1; ++j)
printf("* ");

for(j=0; j < i-1; ++j)
printf("* ");

printf("\n");
}

return 0;
}

* * * * * * * * *
* * * * * * *
* * * * *
* * *
*



//杨辉三角
#include <stdio.h>
int main()
{
int rows, coef = 1, space, i, j;

printf("行数: ");
scanf("%d",&rows);

for(i=0; i<rows; i++)
{
for(space=1; space <= rows-i; space++)
printf(" ");

for(j=0; j <= i; j++)
{
if (j==0 || i==0)
coef = 1;
else
coef = coef*(i-j+1)/j;

printf("%4d", coef);
}
printf("\n");
}

return 0;
}

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

//弗洛伊德三角形
#include <stdio.h>
#define N 10
int main()
{
int i,j,l;
for(i=1,j=1;i<=N;i++)
{
for(l=1;l<=i;l++,j++)
printf("%5d",j);
printf("\n");
}
return 0;
}

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55

35、 C 语言实例 - 表格形式输出数据

提示:将 1~100 的数据以 10x10 矩阵格式输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>

int main() {
int i, j, count;

for(i = 1; i <= 10; i++) {
for(j = i; j <=100; j += 10 )
printf(" %3d", j);

printf("\n");
}

return 0;
}
运行结果:

1 11 21 31 41 51 61 71 81 91
2 12 22 32 42 52 62 72 82 92
3 13 23 33 43 53 63 73 83 93
4 14 24 34 44 54 64 74 84 94
5 15 25 35 45 55 65 75 85 95
6 16 26 36 46 56 66 76 86 96
7 17 27 37 47 57 67 77 87 97
8 18 28 38 48 58 68 78 88 98
9 19 29 39 49 59 69 79 89 99
10 20 30 40 50 60 70 80 90 100


//等差数列输出 10x10 矩阵格式。
#include <stdio.h>

int main() {
int i, j, count;
int start, end;

start = 2, end = 10;

for(i = start; i <= end; i++) {
count = i;

for(j = 1; j <= 10; j++) {
printf(" %3d", count*j);
}

printf("\n");
}

return 0;
}
运行结果:

2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100


//乘法运算格式。
#include <stdio.h>

int main() {
int i, j, n;

n = 3;
j = 1;

for(i = n; i <= (n*10); i+=n) {
printf("%3d x %2d = %3d\n", n, j, i);
j++;
}

return 0;
}
运行结果:

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10 = 30

36、 C 语言实例 - 实现简单的计算器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# include <stdio.h>

int main() {

char operator;
double firstNumber,secondNumber;

printf("输入操作符 (+, -, *,): ");
scanf("%c", &operator);

printf("输入两个数字: ");
scanf("%lf %lf",&firstNumber, &secondNumber);

switch(operator)
{
case '+':
printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber + secondNumber);
break;

case '-':
printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber - secondNumber);
break;

case '*':
printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber * secondNumber);
break;

case '/':
printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber / secondNumber);
break;

// operator doesn't match any case constant (+, -, *, /)
default:
printf("Error! operator is not correct");
}

return 0;
}
输出结果为:

输入操作符 (+, -, *,): *
输入两个数字: 4 5
4.0 * 5.0 = 20.0

37、 C 语言实例 - 计算一个数是否可为两个素数之和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>

int checkPrime(int n);
int main()
{
int n, i, flag = 0;

printf("输入正整数: ");
scanf("%d", &n);

for(i = 2; i <= n/2; ++i)
{
// 检测判断
if (checkPrime(i) == 1)
{
if (checkPrime(n-i) == 1)
{
printf("%d = %d + %d\n", n, i, n - i);
flag = 1;
}

}
}

if (flag == 0)
printf("%d 不能分解为两个素数。", n);

return 0;
}

// 判断素数
int checkPrime(int n)
{
int i, isPrime = 1;

for(i = 2; i <= n/2; ++i)
{
if(n % i == 0)
{
isPrime = 0;
break;
}
}

return isPrime;
}
输出结果为:

输入正整数: 34
34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17

38、 C 语言实例 - 二进制与十进制相互转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
二进制转换为十进制
#include <stdio.h>
#include <math.h>

int convertBinaryToDecimal(long long n);

int main()
{
long long n;
printf("输入一个二进制数: ");
scanf("%lld", &n);
printf("二进制数 %lld 转换为十进制为 %d", n, convertBinaryToDecimal(n));
return 0;
}

int convertBinaryToDecimal(long long n)
{
int decimalNumber = 0, i = 0, remainder;
while (n!=0)
{
remainder = n%10;
n /= 10;
decimalNumber += remainder*pow(2,i);
++i;
}
return decimalNumber;
}
输出结果为:

输入一个二进制数: 110110111
二进制数 110110111 转换为十进制为 439


// 十进制转换为二进制
#include <stdio.h>
#include <math.h>

long long convertDecimalToBinary(int n);

int main()
{
int n;
printf("输入一个十进制数: ");
scanf("%d", &n);
printf("十进制数 %d 转换为二进制位 %lld", n, convertDecimalToBinary(n));
return 0;
}

long long convertDecimalToBinary(int n)
{
long long binaryNumber = 0;
int remainder, i = 1, step = 1;

while (n!=0)
{
remainder = n%2;
printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, n, remainder, n/2);
n /= 2;
binaryNumber += remainder*i;
i *= 10;
}
return binaryNumber;
}
输出结果为:

输入一个十进制数: 100
Step 1: 100/2, 余数 = 0, 商 = 50
Step 2: 50/2, 余数 = 0, 商 = 25
Step 3: 25/2, 余数 = 1, 商 = 12
Step 4: 12/2, 余数 = 0, 商 = 6
Step 5: 6/2, 余数 = 0, 商 = 3
Step 6: 3/2, 余数 = 1, 商 = 1
Step 7: 1/2, 余数 = 1, 商 = 0
十进制数 100 转换为二进制位 1100100

39、 C 语言实例 - 八进制与十进制相互转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
十进制转换为八进制
#include <stdio.h>
#include <math.h>

int convertDecimalToOctal(int decimalNumber);
int main()
{
int decimalNumber;

printf("输入一个十进制数: ");
scanf("%d", &decimalNumber);

printf("十进制数 %d 转换为八进制为 %d", decimalNumber, convertDecimalToOctal(decimalNumber));

return 0;
}

int convertDecimalToOctal(int decimalNumber)
{
int octalNumber = 0, i = 1;

while (decimalNumber != 0)
{
octalNumber += (decimalNumber % 8) * i;
decimalNumber /= 8;
i *= 10;
}

return octalNumber;
}
输出结果为:

输入一个十进制数: 78
十进制数 78 转换为八进制为 116



//八进制转换为十进制
#include <stdio.h>
#include <math.h>

long long convertOctalToDecimal(int octalNumber);
int main()
{
int octalNumber;

printf("输入一个八进制数: ");
scanf("%d", &octalNumber);

printf("八进制数 %d 转换为十进制为 %lld", octalNumber, convertOctalToDecimal(octalNumber));

return 0;
}

long long convertOctalToDecimal(int octalNumber)
{
int decimalNumber = 0, i = 0;

while(octalNumber != 0)
{
decimalNumber += (octalNumber%10) * pow(8,i);
++i;
octalNumber/=10;
}

i = 1;

return decimalNumber;
}
输出结果为:

输入一个八进制数: 116
八进制数 116 转换为十进制为 78

40、 C 语言实例 - 八进制与二进制相互转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
二进制转换为八进制
#include <stdio.h>
#include <math.h>

int convertBinarytoOctal(long long binaryNumber);
int main()
{
long long binaryNumber;

printf("输入一个二进制数: ");
scanf("%lld", &binaryNumber);

printf("二进制数 %lld 转换为八进制为 %d", binaryNumber, convertBinarytoOctal(binaryNumber));

return 0;
}

int convertBinarytoOctal(long long binaryNumber)
{
int octalNumber = 0, decimalNumber = 0, i = 0;

while(binaryNumber != 0)
{
decimalNumber += (binaryNumber%10) * pow(2,i);
++i;
binaryNumber/=10;
}

i = 1;

while (decimalNumber != 0)
{
octalNumber += (decimalNumber % 8) * i;
decimalNumber /= 8;
i *= 10;
}

return octalNumber;
}
输出结果为:

输入一个二进制数: 101001
二进制数 101001 转换为八进制为 51


//八进制转换为二进制
#include <stdio.h>
#include <math.h>

long long convertOctalToBinary(int octalNumber);
int main()
{
int octalNumber;

printf("输入一个八进制数: ");
scanf("%d", &octalNumber);

printf("八进制数 %d 转二进制为 %lld", octalNumber, convertOctalToBinary(octalNumber));

return 0;
}

long long convertOctalToBinary(int octalNumber)
{
int decimalNumber = 0, i = 0;
long long binaryNumber = 0;

while(octalNumber != 0)
{
decimalNumber += (octalNumber%10) * pow(8,i);
++i;
octalNumber/=10;
}

i = 1;

while (decimalNumber != 0)
{
binaryNumber += (decimalNumber % 2) * i;
decimalNumber /= 2;
i *= 10;
}

return binaryNumber;
}
输出结果为:

输入一个八进制数: 51
八进制数 51 转二进制为 101001

41、 C 语言实例 - 字符串翻转

提示:使用递归来翻转字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 字符串翻转
#include <stdio.h>
void reverseSentence();

int main()
{
printf("输入一个字符串: ");
reverseSentence();

return 0;
}

void reverseSentence()
{
char c;
scanf("%c", &c);

if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}
输出结果为:

输入一个字符串: runoob
boonur

42、 C 语言实例 - 计算数组元素平均值

使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;
float avg;

sum = avg = 0;

for(loop = 0; loop < 10; loop++) {
sum = sum + array[loop];
}

avg = (float)sum / loop;

printf("平均值为 %.2f", avg);

return 0;
}
输出结果为:

平均值为 4.50



//用户自定义输入:

实例 2
#include <stdio.h>

int main()
{
int n, i;
float num[100], sum = 0.0, average;

printf("输入元素个数: ");
scanf("%d", &n);

while (n > 100 || n <= 0)
{
printf("Error! 数字需要在1 到 100 之间。\n");
printf("再次输入: ");
scanf("%d", &n);
}

for(i = 0; i < n; ++i)
{
printf("%d. 输入数字: ", i+1);
scanf("%f", &num[i]);
sum += num[i];
}

average = sum / n;
printf("平均值 = %.2f", average);

return 0;
}
输出结果为:

输入元素个数: 4
1. 输入数字: 1
2. 输入数字: 2
3. 输入数字: 4
4. 输入数字: 8
平均值 = 3.75

43、 C 语言实例 - 输出数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop;

for(loop = 0; loop < 10; loop++)
printf("%d ", array[loop]);

return 0;
}
输出结果为:

1 2 3 4 5 6 7 8 9 0


//使用 for 循环逆向输出数组:

实例
#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop;

for(loop = 9; loop >= 0; loop--)
printf("%d ", array[loop]);

return 0;
}
输出结果为:

0 9 8 7 6 5 4 3 2 1

44、 C 语言实例 - 计算数组元素之和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
使用 for 循环迭代出输出元素,并将各个元素相加:
#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;

sum = 0;

for(loop = 9; loop >= 0; loop--) {
sum = sum + array[loop];
}

printf("元素和为:%d", sum);

return 0;
}
输出结果为:

元素和为:45

45、 C 语言实例 - 查找数组中最大的元素值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop, largest;

largest = array[0];

for(loop = 1; loop < 10; loop++) {
if( largest < array[loop] )
largest = array[loop];
}

printf("最大元素为 %d", largest);

return 0;
}
输出结果为:

最大元素为 9


//用户自定义输出:

实例 2
#include <stdio.h>

int main()
{
int i, n;
float arr[100];

printf("输入元素个数(0~100): ");
scanf("%d", &n);
printf("\n");

// 接收用户输入
for(i = 0; i < n; ++i)
{
printf("输入数字 %d: ", i+1);
scanf("%f", &arr[i]);
}

// 循环,并将最大元素存储到 arr[0]
for(i = 1; i < n; ++i)
{
// 如果要查找最小值可以将 < 换成 >
if(arr[0] < arr[i])
arr[0] = arr[i];
}
printf("最大元素为 = %.2f", arr[0]);

return 0;
}
输出结果为:

输入元素个数(0~100): 4

输入数字 1: 12
输入数字 2: 23
输入数字 3: 1
输入数字 4: 3
最大元素为 = 23.00

46、 C 语言实例 - 查找数组中最小的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
使用 for 循环迭代出输出元素,并将各个元素相加算出总和,再除于元素个数:

实例
#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop, smallest;

smallest = array[0];

for(loop = 1; loop < 10; loop++) {
if( smallest > array[loop] )
smallest = array[loop];
}

printf("最小元素为 %d", smallest);

return 0;
}
输出结果为:

最小元素为 0

47、 C 语言实例 - 数组拆分与合并

将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>

int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int even[10], odd[10];
int loop, e, d;

e = d = 0;

for(loop = 0; loop < 10; loop++) {
if(array[loop]%2 == 0) {
even[e] = array[loop];
e++;
}else {
odd[d] = array[loop];
d++;
}
}

printf(" 原始数组 -> ");

for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]);

printf("\n 偶数 -> ");
for(loop = 0; loop < e; loop++)
printf(" %d", even[loop]);

printf("\n 奇数 -> ");
for(loop = 0; loop < d; loop++)
printf(" %d", odd[loop]);

return 0;
}
输出结果为:

原始数组 -> 0 1 2 3 4 5 6 7 8 9
偶数 -> 0 2 4 6 8
奇数 -> 1 3 5 7 9


//将奇数数组与偶数数组合并为一个数组:

实例
#include <stdio.h>

int main() {
int array[10];
int even[5] = {0, 2, 4, 6, 8};
int odd[5] = {1, 3, 5, 7, 9};

int loop, index, e_len, o_len;

e_len = o_len = 5;

index = 0;

for(loop = 0; loop < e_len; loop++) {
array[index] = even[loop];
index++;
}

for(loop = 0; loop < o_len; loop++) {
array[index] = odd[loop];
index++;
}

printf("\n偶数 -> ");

for(loop = 0; loop < e_len; loop++)
printf(" %d", even[loop]);
printf("\n奇数 -> ");

for(loop = 0; loop < o_len; loop++)
printf(" %d", odd[loop]);

printf("\n合并后 -> ");

for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]);

return 0;
}
输出结果为:

偶数 -> 0 2 4 6 8
奇数 -> 1 3 5 7 9
合并后 -> 0 2 4 6 8 1 3 5 7 9

48、 C 语言实例 - 数组拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
将一个数组复制给另外一个数组:

实例
#include <stdio.h>

int main() {
int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int copied[10];
int loop;

for(loop = 0; loop < 10; loop++) {
copied[loop] = original[loop];
}
printf("元素数组 -> 拷贝后的数组 \n");

for(loop = 0; loop < 10; loop++) {
printf(" %2d %2d\n", original[loop], copied[loop]);
}


return 0;
}
输出结果为:

元素数组 -> 拷贝后的数组
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
0 0

49、 C 语言实例 - 计算标准偏差

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <math.h>

float calculateSD(float data[]);

int main()
{
int i;
float data[10];

printf("输入10个元素: ");
for(i=0; i < 10; ++i)
scanf("%f", &data[i]);

printf("\n标准偏差 = %.6f", calculateSD(data));

return 0;
}

float calculateSD(float data[])
{
float sum = 0.0, mean, standardDeviation = 0.0;

int i;

for(i=0; i<10; ++i)
{
sum += data[i];
}

mean = sum/10;

for(i=0; i<10; ++i)
standardDeviation += pow(data[i] - mean, 2);

return sqrt(standardDeviation/10);
}
输出结果为:

输入10个元素: 1
2
3
4
5
6
7
8
9
10

标准偏差 = 2.872281

59、 C 语言实例 - 两个矩阵相加

使用多维数组将两个矩阵相加。

51、 C 语言实例 – 矩阵转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdio.h>

int main()
{
int a[10][10], transpose[10][10], r, c, i, j;
printf("输入矩阵的行与列: ");
scanf("%d %d", &r, &c);

// 存储矩阵的元素
printf("\n输入矩阵元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("输入元素 a%d%d: ",i+1, j+1);
scanf("%d", &a[i][j]);
}

// 显示矩阵 a[][] */
printf("\n输入矩阵: \n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("%d ", a[i][j]);
if (j == c-1)
printf("\n\n");
}

// 转换
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
transpose[j][i] = a[i][j];
}

// 显示转换后的矩阵 a
printf("\n转换后矩阵:\n");
for(i=0; i<c; ++i)
for(j=0; j<r; ++j)
{
printf("%d ",transpose[i][j]);
if(j==r-1)
printf("\n\n");
}

return 0;
}
输出结果为:

输入矩阵的行与列: 2 3

输入矩阵元素:
输入元素 a11: 2
输入元素 a12: 3
输入元素 a13: 4
输入元素 a21: 5
输入元素 a22: 6
输入元素 a23: 4

输入矩阵:
2 3 4

5 6 4


转换后矩阵:
2 5

3 6

4 4

52、 C 语言实例 - 使用指针访问数组元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>

int main()
{
int data[5], i;
printf("输入元素: ");

for(i = 0; i < 5; ++i)
scanf("%d", data + i);

printf("你输入的是: \n");
for(i = 0; i < 5; ++i)
printf("%d\n", *(data + i));

return 0;
}
输出结果为:

输入元素: 1
2
3
5
4
你输入的是:
1
2
3
5
4

53、 C 语言实例 - 使用引用循环替换数值

a、b、c 三个变量,通过引用按顺序循环替换他们的值。

54、 C 语言实例 - 判断最大值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>

int main()
{
int i, num;
float *data;

printf("输入元素个数(1 ~ 100): ");
scanf("%d", &num);

// 为 'num' 元素分配内存
data = (float*) calloc(num, sizeof(float));

if(data == NULL)
{
printf("Error!!! 内存没有分配。");
exit(0);
}

printf("\n");

// 用户输入
for(i = 0; i < num; ++i)
{
printf("输入数字 %d: ", i + 1);
scanf("%f", data + i);
}

// 循环找出最大值
for(i = 1; i < num; ++i)
{
// 如果需要找出最小值可以将 < 改为 >
if(*data < *(data + i))
*data = *(data + i);
}

printf("最大元素 = %.2f", *data);

return 0;
}
输出结果为:

输入元素个数(1 ~ 100): 5

输入数字 1: 12
输入数字 2: 32
输入数字 3: 6
输入数字 4: 56
输入数字 5: 21
最大元素 = 56.00

55、 C 语言实例 - 删除字符串中的特殊字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>

int main()
{
char line[150];
int i, j;
printf("输入一个字符串: ");
fgets(line, (sizeof line / sizeof line[0]), stdin);

for(i = 0; line[i] != '\0'; ++i)
{
while (!( (line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') || line[i] == '\0') )
{
for(j = i; line[j] != '\0'; ++j)
{
line[j] = line[j+1];
}
line[j] = '\0';
}
}
printf("输出: ");
puts(line);
return 0;
}
输出结果为:

输入一个字符串: run4#$1oob
输出: runoob

56、 C 语言实例 – 连接字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
int main()
{
char s1[100], s2[100], i, j;

printf("输入第一个字符串: ");
scanf("%s", s1);

printf("输入第二个字符串: ");
scanf("%s", s2);

// 计算字符串 s1 长度
for(i = 0; s1[i] != '\0'; ++i);

for(j = 0; s2[j] != '\0'; ++j, ++i)
{
s1[i] = s2[j];
}

s1[i] = '\0';
printf("连接后: %s", s1);

return 0;
}
输出结果为:

输入第一个字符串: google
输入第二个字符串: runoob
连接后: googlerunoob

57、 C 语言实例 – 计算字符串长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
使用 strlen()
#include <stdio.h>
#include <string.h>

int main()
{
char s[1000];
int len;

printf("输入字符串: ");
scanf("%s", s);
len = strlen(s);

printf("字符串长度: %d", len);
return 0;
}
输出结果为:

输入字符串: runoob
字符串长度: 6
实例 - 不使用 strlen()
#include <stdio.h>

int main()
{
char s[1000], i;

printf("输入字符串: ");
scanf("%s", s);

for(i = 0; s[i] != '\0'; ++i);

printf("字符串长度: %d", i);
return 0;
}
输出结果为:

输入字符串: runoob
字符串长度: 6

58、 C 语言实例 – 查找字符在字符串中的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
查找字符在字符串中的起始位置(索引值从 0 开始)。

实例
#include <stdio.h>

int main()
{
char str[1000], ch;
int i, frequency = 0;

printf("输入字符串: ");
fgets(str, (sizeof str / sizeof str[0]), stdin);

printf("输入要查找的字符: ");
scanf("%c",&ch);

for(i = 0; str[i] != '\0'; ++i)
{
if(ch == str[i])
++frequency;
}

printf("字符 %c 在字符串中出现的次数为 %d", ch, frequency);

return 0;
}
输出结果为:

输入字符串: runoob
输入要查找的字符: o
字符 o 在字符串中出现的次数为 2

59、 C 语言实例 – 字符串中各种字符计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
计算字符串中的元音、辅音、数字、空白符。

实例
#include <stdio.h>

int main()
{
char line[150];
int i, vowels, consonants, digits, spaces;

vowels = consonants = digits = spaces = 0;

printf("输入一个字符串: ");
scanf("%[^\n]", line);

for(i=0; line[i]!='\0'; ++i)
{
if(line[i]=='a' || line[i]=='e' || line[i]=='i' ||
line[i]=='o' || line[i]=='u' || line[i]=='A' ||
line[i]=='E' || line[i]=='I' || line[i]=='O' ||
line[i]=='U')
{
++vowels;
}
else if((line[i]>='a'&& line[i]<='z') || (line[i]>='A'&& line[i]<='Z'))
{
++consonants;
}
else if(line[i]>='0' && line[i]<='9')
{
++digits;
}
else if (line[i]==' ')
{
++spaces;
}
}

printf("元音: %d",vowels);
printf("\n辅音: %d",consonants);
printf("\n数字: %d",digits);
printf("\n空白符: %d", spaces);

return 0;
}
输出结果为:

输入一个字符串: runoob123 erkcomsww dfrunoob
元音: 8
辅音: 15
数字: 3
空白符: 2

60、 C 语言实例 - 字符串复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
将一个变量的字符串复制到另外一个变量中。

实例 - 使用 strcpy()
#include <stdio.h>
#include <string.h>

int main()
{
char src[40];
char dest[100];

memset(dest, '\0', sizeof(dest));
strcpy(src, "This is runoob.com");
strcpy(dest, src);

printf("最终的目标字符串: %s\n", dest);

return(0);
}
输出结果为:

最终的目标字符串: This is runoob.com
实例 - 不使用 strcpy()
#include <stdio.h>

int main()
{
char s1[100], s2[100], i;

printf("字符串 s1: ");
scanf("%s",s1);

for(i = 0; s1[i] != '\0'; ++i)
{
s2[i] = s1[i];
}

s2[i] = '\0';
printf("字符串 s2: %s", s2);

return 0;
}
输出结果为:

字符串 s1: runoob
字符串 s2: runoob

61、 C 语言实例 - 字符串排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
按字典顺序排序。

实例
#include<stdio.h>
#include <string.h>

int main()
{
int i, j;
char str[10][50], temp[50];

printf("输入10个单词:\n");

for(i=0; i<10; ++i) {
scanf("%s[^\n]",str[i]);
}


for(i=0; i<9; ++i) {
for(j=i+1; j<10 ; ++j)
{
if(strcmp(str[i], str[j])>0)
{
strcpy(temp, str[i]);
strcpy(str[i], str[j]);
strcpy(str[j], temp);
}
}
}

printf("\n排序后: \n");
for(i=0; i<10; ++i)
{
puts(str[i]);
}

return 0;
}
输出结果为:

输入10个单词:
C
C++
Java
PHP
Python
Perl
Ruby
R
JavaScript
PHP

排序后:
C
C++
Java
JavaScript
PHP
PHP
Perl
Python
R
Ruby

62、 C 语言实例 - 使用结构体(struct)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
使用结构体(struct)存储学生信息。

实例
#include <stdio.h>
struct student
{
char name[50];
int roll;
float marks;
} s;

int main()
{
printf("输入信息:\n");

printf("名字: ");
scanf("%s", s.name);

printf("编号: ");
scanf("%d", &s.roll);

printf("成绩: ");
scanf("%f", &s.marks);


printf("显示信息:\n");

printf("名字: ");
puts(s.name);

printf("编号: %d\n",s.roll);

printf("成绩: %.1f\n", s.marks);

return 0;
}
输出结果为:

输入信息:
名字: runoob
编号: 123
成绩: 89
显示信息:
名字: runoob
编号: 123
成绩: 89.0

63、 C 语言实例 - 复数相加

使用结构体(struct)将两个复数相加。

我们把形如 a+bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>

typedef struct complex
{
float real;
float imag;
} complex;
complex add(complex n1,complex n2);

int main()
{
complex n1, n2, temp;

printf("第一个复数 \n");
printf("输入实部和虚部:\n");
scanf("%f %f", &n1.real, &n1.imag);

printf("\n第二个复数 \n");
printf("输入实部和虚部:\n");
scanf("%f %f", &n2.real, &n2.imag);

temp = add(n1, n2);
printf("Sum = %.1f + %.1fi", temp.real, temp.imag);

return 0;
}

complex add(complex n1, complex n2)
{
complex temp;

temp.real = n1.real + n2.real;
temp.imag = n1.imag + n2.imag;

return(temp);
}
输出结果为:

第一个复数
输入实部和虚部:
2.3 4.5

第二个复数
输入实部和虚部:
3.4 5
Sum = 5.7 + 9.5i

64、 C 语言实例 - 计算两个时间段的差值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>

struct TIME
{
int seconds;
int minutes;
int hours;
};
void differenceBetweenTimePeriod(struct TIME t1, struct TIME t2, struct TIME *diff);

int main()
{
struct TIME startTime, stopTime, diff;

printf("输入开始时间: \n");
printf("输入小时、分钟、秒:");
scanf("%d %d %d", &startTime.hours, &startTime.minutes, &startTime.seconds);

printf("输入停止时间: \n");
printf("输入小时、分钟、秒: ");
scanf("%d %d %d", &stopTime.hours, &stopTime.minutes, &stopTime.seconds);

// 计算差值
differenceBetweenTimePeriod(startTime, stopTime, &diff);

printf("\n差值: %d:%d:%d - ", startTime.hours, startTime.minutes, startTime.seconds);
printf("%d:%d:%d ", stopTime.hours, stopTime.minutes, stopTime.seconds);
printf("= %d:%d:%d\n", diff.hours, diff.minutes, diff.seconds);

return 0;
}

void differenceBetweenTimePeriod(struct TIME start, struct TIME stop, struct TIME *diff)
{
if(stop.seconds > start.seconds){
--start.minutes;
start.seconds += 60;
}

diff->seconds = start.seconds - stop.seconds;
if(stop.minutes > start.minutes){
--start.hours;
start.minutes += 60;
}

diff->minutes = start.minutes - stop.minutes;
diff->hours = start.hours - stop.hours;
}
输出结果为:

输入开始时间:
输入小时、分钟、秒:12 34 55
输入停止时间:
输入小时、分钟、秒: 8 12 5

差值: 12:34:55 - 8:12:5 = 4:22:50

65、 C 语言实例 - 将字符串写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h> /* exit() 函数 */

int main()
{
char sentence[1000];
FILE *fptr;

fptr = fopen("runoob.txt", "w");
if(fptr == NULL)
{
printf("Error!");
exit(1);
}

printf("输入字符串:\n");
fgets(sentence, (sizeof sentence / sizeof sentence[0]), stdin);

fprintf(fptr,"%s", sentence);
fclose(fptr);

return 0;
}
输出结果为:

输入字符串:
runoob.com
打开文件 runoob.txt:

$ cat runoob.txt
runoob.com

66、 C 语言实例 - 从文件中读取一行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
从文件中读取一行。

文件 runoob.txt 内容:

$ cat runoob.txt
runoob.com
google.com
实例
#include <stdio.h>
#include <stdlib.h> // exit() 函数
int main()
{
char c[1000];
FILE *fptr;

if ((fptr = fopen("runoob.txt", "r")) == NULL)
{
printf("Error! opening file");
// 文件指针返回 NULL 则退出
exit(1);
}

// 读取文本,直到碰到新的一行开始
fscanf(fptr,"%[^\n]", c);

printf("读取内容:\n%s", c);
fclose(fptr);

return 0;
}
输出结果为:

读取内容:
runoob.com

67、 C 语言实例 - 输出当前文件执行代码

输出当前文件执行代码,FILE 为当前执行的文件常量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
int main() {
FILE *fp;
char c;
fp = fopen(__FILE__,"r");
do {
c = getc(fp);
putchar(c);
}
while(c != EOF);
fclose(fp);
return 0;
}
输出结果为:

#include <stdio.h>
int main() {
FILE *fp;
char c;
fp = fopen(__FILE__,"r");
do {
c = getc(fp);
putchar(c);
}
while(c != EOF);
fclose(fp);
return 0;
}

68、C 语言实例 - 约瑟夫生者死者小游戏

30 个人在一条船上,超载,需要 15 人下船。

于是人们排成一队,排队的位置即为他们的编号。

报数,从 1 开始,数到 9 的人下船。

如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<stdio.h>

int c = 0;
int i = 1;
int j = 0;
int a[30] = { 0 };
int b[30] = { 0 };

int main()
{
while (i<=31)
{
if (i == 31)
{
i = 1;
}
else if (c == 15)
{
break;
}
else
{
if (b[i] != 0)
{
i++;
continue;
}
else
{
j++;
if (j != 9)
{
i++;
continue;
}
else
{
b[i] = 1;
a[i] = j;
j = 0;
printf("第%d号下船了\n", i);
i++;
c++;
}
}
}
}
}
执行以上实例,输出结果为:

9号下船了
18号下船了
27号下船了
6号下船了
16号下船了
26号下船了
7号下船了
19号下船了
30号下船了
12号下船了
24号下船了
8号下船了
22号下船了
5号下船了
23号下船了

69、C 语言实例 - 五人分鱼

A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。

日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。

B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。

C、D、E依次醒来,也按同样的方法拿鱼。

问他们台伙至少捕了多少条鱼?以及每个人醒来时见到了多少鱼?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main(){
int n,x,j,k,l,m;
for(n=5;;n++){
j=4*(n-1)/5;
k=4*(j-1)/5;
l=4*(k-1)/5;
m=4*(l-1)/5;
if(n%5==1&&j%5==1&&k%5==1&&l%5==1&&m%5==1){
printf("至少合伙捕鱼:%d条\n",n);
printf("分别见到鱼的条数:%d %d %d %d\n",j,k,l,m);
break;
}
}
return 0;
}
以上实例输出结果为:

至少合伙捕鱼:3121
分别见到鱼的条数:2496 1996 1596 1276