C语言进阶-结构化的C程序设计
9unk Lv5

课上代码

fig3_06

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*程序名:fig03_06.c*/
/*
请编写程序:使用 while 循环语句,计算课程的平均分。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main(void)
{
int counter;
int grade;
int total;

float average;

total = 0;
counter = 0;

printf("")

return 0; //程序结束
}

fig03_8

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
/*程序名:fig03_08.c*/
/*
请编写程序:使用while循环语句,计算每门课程的平均分(使用float和类型强制转换)。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main(void)
{
int counter;
int grade;
int total;


float average;

total = 0;
counter = 0;

printf("Enter grade,-1 to end:");
scanf("%d", &grade);

while (grade != -1)
{
total = total + grade;
counter = counter + 1;

printf("Enter grade,-1 to end:");
scanf("%d", &grade);
}

if (counter != 0)
{
average = (float)total/counter;
printf("Class average is %.2f\n", average);
}
else
{
printf("No grades were entered\n");
}

return 0; //程序结束
}

fig03_10

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
/*程序名:fig03_10.c*/
/*
请编写程序:分析打印考试结果。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main(void)
{
int passes = 0;
int failures = 0;
int student = 1;
int result;

while (student <= 10)
{
printf("Enter result(1=pass,2=fail):");
scanf("%d", &result);

if (result == 1)
{
passes = passes + 1;
}
else
{
failures = failures + 1;
}

student = student + 1;
}

printf("Passed %d\n", passes);
printf("Failed %d\n", failures);

if (passes > 8)
{
printf("Raise tuition\n");
}
return 0; //程序结束
}

fig03_13

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
/*程序名:fig03_13.c*/
/*
增量运算
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main(void)
{
int c;

c = 5;
printf("%d\n", c);
printf("%d\n", c++);
printf("%d\n\n", c);

c = 5;
printf("%d\n", c);
printf("%d\n", ++c);
printf("%d\n", c);

return 0;
return 0; //程序结束
}

知识点回顾:C++ 表示将 “C” 备份并作为当前参数使用,”C+1”留着下次使用。++C 表示将 “C+1” 作为当前参数使用。

课后练习

1
2
3
4
5
6
7
8
9
10
11
12

3.17

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*程序名:3.17.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
float gallons = 0.00;
int miles=0;

printf("Enter the gallons used(-1 to end):");
scanf("%f", &gallons);

printf("Enter the miles driven:");
scanf("%d", &miles);

printf("The miles/gallon for this tank was %f", miles / gallons);

return 0; //程序结束
}

3.18

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
/*程序名:3.18.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int number = 0;
float balance=0.00;
float charges = 0.00;
float credits = 0.00;
float limit = 0.00;

printf("Enter account number(-1 to end):");
scanf("%d", &number);

printf("Enter beginning balance:");
scanf("%f", &balance);

printf("Enter Total charges:");
scanf("%f", &charges);

printf("Enter Total credits:");
scanf("%f", &credits);

printf("Enter credits limit:");
scanf("%f", &limit);

if (balance + charges -limit > credits)
{
printf("Account:%d\n", number);
printf("Credit limit:%.2f\n", limit);
printf("Balance:%.2f\n", balance + credits);
printf("Credit Limit Exceeded.\n");
}

return 0; //程序结束
}

3.19

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*程序名:3.19.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
float dollars = 0.00;

printf("Enter sales in dollers(-1 to end):");
scanf("%f", &dollars);

printf("Sales is $%.2f\n\n", 200 + dollars * 0.09);


return 0; //程序结束
}

3.20

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
/*程序名:3.20.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
float loan = 0.00;
double intrate = 0.00;
float days = 0;

float lixi = 0.00;

while ((int)loan != -1)
{
printf("Enter loan principal(-1 to end):");
scanf("%f", &loan);

if ((int)loan == -1)
{
break;
}

printf("Enter interest rate:");
scanf("%lf", &intrate);

printf("term of the loan in days:");
scanf("%f", &days);

printf("The interest charge is $%.2f\n\n", loan * intrate * (days / 365));
}


return 0; //程序结束
}

3.21

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
/*程序名:3.21.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
float sum = 0.00;
int hour = 0;
float doller = 0.00;

while (hour != -1)
{
printf("Enter # of hours worked(-1 to end):");
scanf("%d", &hour);

if (hour == -1)
{
break;
}

printf("Enter hourly rate of the worker($00.00):");
scanf("%f", &doller);

if (hour <= 40)
{
sum = hour * doller;
}
else
{
sum = 40 * doller;
sum = sum + (hour - 40) * doller * 1.5;
}

printf("Salary is $%.2f\n\n", sum);
}


return 0; //程序结束
}

3.22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*程序名:3.22.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int i = 2;
while (++i < 4)
{
printf("%d\n\n", i);
}

i = 2;
while (i++ < 4)
{
printf("%d\n", i);
}
return 0; //程序结束
}

3.23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*程序名:3.23.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
for (int i=1; i < 11; i++)
{
printf("%d ", i);
}
return 0; //程序结束
}

3.24

读入10个数字并判断输出最大:

变量:
counter = 10(计数器)
number(当前输入数)
largest(当前最大数)

伪代码:
1、第一次输入值传入largest
循环部分
2、第二到十次输入值传入number
3、判断largest和number哪个值大,如果 number>largest 将number值传给largest

3.25

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
/*程序名:3.25.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 1;
printf("N\t10*N\t100*N\t1000*N\n");

for (int i = 1; i < 11; i++)
{
for (int j = 0,n=1; j < 4; j++,n*=10)
{
num = i*n;
printf("%-8d\t\t\t", num);
}
printf("\n");
}
return 0; //程序结束
}

3.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
/*程序名:3.26.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 3;
printf("A A+2 A+4 A+6\n");

for (int i = 1; i < 6; i++)
{
for (int j = 0; j < 4; j++)
{
num = i*3+j*2;
printf("%-18d", num);
}
printf("\n");
}
return 0; //程序结束
}

3.27

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
/*程序名:3.27.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int counter;
int number;
int larest;
int flag[10] = { 0 };


loop:
counter = 10;
int i = 1;
while (counter > 0)
{
if (counter == 10)
{
printf("请输入第%d个数字:",i);
scanf("%d", &larest);
flag[i - 1] = larest;
}
else
{
printf("请输入第%d个数字:", i);
scanf("%d", &number);
if (number > larest)
{
larest = number;
}
flag[i - 1] = number;
}
counter--;
i++;
}

for (int i = 9; i >= 0; i--)
{
for (int j = 0; j < i; j++)
{
if (flag[j] - flag[i] == 0)
{
printf("有重复数字,清重新输入。\n\n");
goto loop;
}
}
}
return 0; //程序结束
}

3.28

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
/*程序名:3.28.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 0;
printf("请输入整数1或2:");
scanf("%d", &num);

while (num == 0||num>2)
{

printf("请输入正确的整数。\n\n");
printf("请输入整数1或2:");
scanf("%d", &num);
}

printf("输入的整数是:%d", num);
return 0; //程序结束
}

3.29

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*程序名:3.29.c*/
/*
if(count % 2 != 0){printf("****");}else{printf("++++++++");} 循环打印10次。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int count = 1;

while (count <= 10)
{
printf("%s\n", count % 2 ? "****" : "++++++++");
count++;
}
return 0; //程序结束
}

3.30

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
/*程序名:3.30.c*/
/*
if(row % 2 != 0){printf("<");}else{printf(">")},并循环打印10次。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int row = 10;
int column;

while (row >= 1) {
column = 1;

while (column <= 10)
{
printf("%s", row % 2 ? "<" : ">");
column++;
}

row--;
printf("\n");
}
return 0; //程序结束
}

3.31

3.31a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*程序名:3.31a.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x = 9, y = 11;
if (x < 10)
if (y > 10)
printf("*****\n");
else
printf("#####\n");
printf("$$$$$\n");
return 0; //程序结束
}

3.31b

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*程序名:3.31b.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x = 9, y = 11;
if (x < 10) {
if (y > 10)
printf("*****\n");
}
else {
printf("#####\n");
printf("$$$$$\n");
}
return 0; //程序结束
}

3.32

3.32a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*程序名:3.32a.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x=5, y=8;
if (y == 8)
if (x == 5)
printf("@@@@@\n");
else
printf("#####\n");
{printf("$$$$$\n");
printf(" &&&&&\n"); }

return 0; //程序结束
}

3.32b

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*程序名:3.32b.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x=5, y=8;
if (y == 8)
if (x == 5)
printf("@@@@@\n");
else
{
printf("#####\n");
printf("$$$$$\n");
printf(" &&&&&\n");
}

return 0; //程序结束
}

3.32c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*程序名:3.32c.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x=5, y=8;
if (y == 8)
if (x == 5)
printf("@@@@@\n");
else
{
printf("#####\n");
printf("$$$$$\n");
}
printf(" &&&&&\n");

return 0; //程序结束
}

3.32d

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
/*程序名:3.32d.c*/
/*
略;
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int x=5, y=7;
if (y == 8)
{
if (x == 5)
printf("@@@@@\n");
}
else
{
printf("#####\n");
printf("$$$$$\n");
printf(" &&&&&\n");
}

return 0; //程序结束
}

3.33

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
/*程序名:3.33.c*/
/*
请输入一个正方形的边长,以星号打印输出该正方形。该程序能处理1到20之间的正方形。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 0;

printf("请输入正方形的边长(1~20):");
scanf("%d", &num);


for (int i = 0; i < num; i++)
{
for (int j=0; j < num; j++)
{
printf("*");
}
printf("\n");
}

return 0; //程序结束
}

3.34

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
/*程序名:3.34.c*/
/*
请输入一个正方形的边长,以星号打印输出该正方形(中间的空的)。该程序能处理1到20之间的正方形。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 0;

printf("请输入正方形的边长(1~20):");
scanf("%d", &num);


for (int i = 0; i < num; i++)
{
for (int j=0; j < num; j++)
{
if (i == 0 || i == num - 1)
{
printf("*");
}
else
{
if (j == 0 || j == num - 1)
{
printf("*");
}
else
{
printf(" ");
}
}

}
printf("\n");
}

return 0; //程序结束
}

3.35

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
/*程序名:3.35.c*/
/*
请输入一个读入5位整数并判定其是否为回文数的程序。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}


int main(void)
{
int num = 0;
int temp = 0;
int temp1 = 0;

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

temp = num / 1000;
temp1 = num % 100;

if ((temp / 10 == temp1 % 10) && (temp % 10 == temp1 / 10))
{
printf("%d 是回文数。\n", num);
}
else
{
printf("%d 不是回文数。\n", num);
}

return 0; //程序结束
}

3.36

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
/*程序名:3.36.c*/
/*
输入仅包含0和1的整数并打印与之等价的十进制数。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int power(int x,int n)
{
int temp = 1;
if (n == 0)
{
return temp;
}
else
{
for (int i = 0; i < n; i++)
{
temp*=x;
}
return temp;
}
}

int main(void)
{
int bools = 0;
int i=0;
int temp = 0;
int sum = 0;
int two_power = 0;
printf("请输入一个二进制数:");
scanf("%d", &bools);

while (bools != 0)
{
//使用取余运算取出各个位
temp=bools % 10;

//使用循环计算2的n次方和10的n次方
two_power = power(2, i);

//计算当前结果
temp = temp * two_power;

i++;
//计算总和
sum += temp;
//使用除法保存现有的值
bools = bools / 10;
}

printf("%d\n",sum);
return 0; //程序结束
}

3.37

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*程序名:3.37.c*/
/*
请编写一个单步从1数到300000000的while循环程序。每次计数器达到100000000的倍数时就在屏幕上打印该数字。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int main(void)
{
int i=0;
while (i<=300000000)
{
if (i % 100000000 == 0)
{

printf("%d\n",i);
}
i++;
}
return 0; //程序结束
}

3.38

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
/*程序名:3.38.c*/
/*
请编写一个程序,要求一次打印100个星号,每行打印十个星号【提示:从1到100计数。使用求余运算来识别出计数器已经达到10的整数的倍数】。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int main(void)
{
int i=0;
while (i<=100)
{
if (i % 10 == 0&&i!=0)
{

printf("*\n");
}
else
{
if (i != 0)
{
printf("*");
}
}
i++;
}
return 0; //程序结束
}

3.39

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
/*程序名:3.39.c*/
/*
请编写一个程序:先读入一个整数,然后确定并打印该整数各个位上的数字是7的个数。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int main(void)
{
int num,temp=0;

printf("请输入一个少于11位正整数:");
scanf("%d", &num);

for (int i = 0; num > 0; i++)
{
if ((num % 10) == 7)
{
temp++;
}
num /= 10;
}

printf("该整数各个位上的数字7的个数是%d", temp);
return 0; //程序结束
}

3.40

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*程序名:3.40.c*/
/*
编写一个输出下面的西洋跳棋盘图样的程序。
程序中只能使用如下三条语句:
printf("* ");
printf(" ");
printf("\n");
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int main(void)
{
printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf(" "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf(" "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf(" "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
printf(" "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("* "); printf("\n");
return 0; //程序结束
}

3.41

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*程序名:3.41.c*/
/*
编写一个持续打印2的整数倍数的无限循环程序。当运行这个程序的时候会发生什么结果呢?

当结果超过 int 类型所能存储的值时,结果会变为0。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>}

int main(void)
{
int i =1 ;
while (1)
{
printf("%d\n", i *= 2);
}
return 0; //程序结束
}

3.42

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*程序名:3.42.c*/
/*
请编写一个程序,先读入圆的半径(浮点数),然后再计算并输出其直径、周长和面积。这里,Π取3.14159
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int round(float x)
{
float pi = 3.14159;
printf("该圆的直径是 %f。\n", x + x);
printf("该圆的周长是 %f。\n", pi * (x+x));
printf("该圆的面积是 %f。\n", pi * (x * x));

}

int main(void)
{
round(3.2);
return 0; //程序结束
}

3.43

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
/*程序名:3.43.c*/
/*
下面的语句有何错误?重新编写该语句可以完成其本意。
pritf("%d",++(x+y));

在C中不允许这样写,需要将 x+y 的结果赋值到另一个变量z中,最后再用++或--对变量z进行自增自减
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int right_trian(float x, float y, float z)
{
if ((x + y > z) && (x - y < z) && (x + z > y) && (x - z < y) && (y + z > x) && (y - z < x))
{
printf("%f %f %f 可以构成一个三角形。\n", x, y, z);
}
else
{
printf("%f %f %f 不可以构成一个三角形。\n", x, y, z);
}
}

int main(void)
{
int x = 1,y=2;
int z=x+y;
printf("%d", ++z);
return 0; //程序结束
}

3.44

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
/*程序名:3.44.c*/
/*
请编写一个程序,先读入三个非零的浮点数,然后判断并打印其是否可以作为边长构成一个三角形。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int right_trian(float x, float y, float z)
{
if ((x + y > z) && (x - y < z) && (x + z > y) && (x - z < y) && (y + z > x) && (y - z < x))
{
printf("%f %f %f 可以构成一个三角形。\n", x, y, z);
}
else
{
printf("%f %f %f 不可以构成一个三角形。\n", x, y, z);
}
}

int main(void)
{
right_trian(3.1, 5.1, 2.1);
return 0; //程序结束
}

3.45

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
/*程序名:3.45.c*/
/*
请编写一个程序,先读入三个非零的整数,然后判断并打印其是否可以作为边长构成直角三角形。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int right_trian(int x, int y, int z)
{
int temp;
if (x > y && x > z)
{
if ((y * y + z * z) == x * x)
{
printf("%d %d %d 可以作为边长构成直角三角形。",y,z,x);
}
else
{
printf("%d %d %d 不可以作为边长构成直角三角形。",y,z,x);
}

}
else if (y > x && y > z)
{
if ((x * x + z * z) == y * y)
{
printf("%d %d %d 可以作为边长构成直角三角形。",x,z,y);
}
else
{
printf("%d %d %d 不可以作为边长构成直角三角形。",x,z,y);
}
}
else if (z > x && z > y)
{
if ((x * x + y * y) == z * z)
{
printf("%d %d %d 可以作为边长构成直角三角形。",x,y,z);
}
else
{
printf("%d %d %d 不可以作为边长构成直角三角形。",x,y,z);
}
}


}

int main(void)
{
right_trian(3, 5, 4);
return 0; //程序结束
}

3.46

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
/*程序名:3.46.c*/
/*
读入一个四位整数,然后按照以下规则进行加密:
以每位数字与7的和除以10后的余数来替换该位上的数字,
交换第一位和第三位数字,交换第二位和第四位数字,
最后打印加密后的整数。

再编写一个数据解密的程序,首先读入加密后的四位整数,然后将其解密还原并打印。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int enc(int x)
{
int num[5] = { 0 };
int div = 1000;
int temp = 0;
for (int i = 0; i < 4; i++)
{
if (i == 0)
{
num[2] = ((x / div + 7) % 10);
}
else if (i == 1)
{
num[3] = ((x / div + 7) % 10);
}
else if (i == 2)
{
num[0]= ((x / div + 7) % 10);
}
else
{
num[1] = ((x / div + 7) % 10);
}

x %= div;
div /= 10;
}

for (int i = 0; i < 4; i++)
{
temp = temp * 10 + num[i];
}
return temp;
}

int dec(int x)
{
int num[5] = { 0 };
int temp = 0;
for (int i = 0; i < 4; i++)
{
if (i == 0)
{
if (x % 10 < 7)
{
num[1] = (x % 10) + 10 - 7;
}
else
{
num[1] = (x % 10) - 7;
}
}
else if (i == 1)
{
if (x % 10 < 7)
{
num[0] = (x % 10) + 10 - 7;
}
else
{
num[0] = (x % 10) - 7;
}
}
else if (i == 2)
{
if (x % 10 < 7)
{
num[3] = (x % 10)+10-7;
}
else
{
num[3] = (x % 10)- 7;
}

}
else
{
if (x % 10 < 7)
{
num[2] = (x % 10)+10-7;
}
else
{
num[2] = (x % 10)-7;
}
}

x /= 10;
}

for (int i = 0; i < 4; i++)
{
temp = temp * 10 + num[i];
}

return temp;
}

int main(void)
{
int num;
printf("请输入一个四位整数:");
scanf("%d", &num);

printf("%d\n",enc(num));
printf("%d", dec(enc(num)));
return 0; //程序结束
}

3.47

3.47a

递归算法

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
/*程序名:3.47a.c*/
/*
编写一个读入非负整数后计算并输出其阶乘的程序。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

/*使用递归算法计算阶乘:
factorial(3) ;计算 3 的阶乘,x == 3
3 != 0
3 * factorial(2)
2 != 0
2 * factorial(1)
1 != 0
1 * factorial(0);0 == 0 == 1

1*1=1;2*1=2;3*2=6;

3*2*1=6*/
int factorial(int x)
{
if (x == 0)
{
return 1;
}
else
{
return x * factorial(x-1);
}
}

int main(void)
{
int num;
printf("请输入一个非负整数:");
scanf("%d", &num);
printf("%d的阶乘是%d",num, factorial(num));
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
/*程序名:3.47a.c*/
/*
编写一个读入非负整数后计算并输出其阶乘的程序。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main(void)
{
int num;
int temp;
printf("请输入一个非负整数:");
scanf("%d", &num);
temp = num;

for (int i = num; i > 0; i--)
{
if (i - 1 != 0)
{
num = num * (i - 1);
}
}
printf("%d的阶乘是%d",temp, num);
return 0; //程序结束
}

3.47b

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
/*程序名:3.47b.c*/
/*
编写一个读入非负整数后计算常数e的程序。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int factor(int x)
{
for (int i = x; i > 0; i--)
{
if (i - 1 != 0)
{
x = x * (i - 1);
}
}

return x;
}

int main(void)
{
int num;
int nume=1; //分母最大的分数是 1/factor(num)
int deno; //分母
int temp=1;
printf("请输入一个非负整数:");
scanf("%d", &num);

//分母不变
deno = factor(num);

//计算分子
for (int i = num; i >= 0; i--)
{
if (i == 0)
{
temp += deno;
}
else
{
temp *= i;
nume += temp;
}
}

printf("常数%d根据公式所得结果为:%d/%d(约等于%lf)\n", num, nume, deno, (double)nume / (double)deno);

return 0; //程序结束
}

3.47c

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
/*程序名:3.47c.c*/
/*
编写一个读入非负整数后计算常数e^x的程序。
*/

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
int factor(int x)
{
for (int i = x; i > 0; i--)
{
if (i - 1 != 0)
{
x = x * (i - 1);
}
}

return x;
}

int main(void)
{
int num;
int nume = 0; //分母最大的分数是 1/factor(num)
int deno; //分母
int temp;
printf("请输入一个非负整数:");
scanf("%d", &num);

//分母不变
deno = factor(num);


//计算分子
for (int i = num; i >= 0; i--)
{
//分子等于num,同时每次循环 temp 重置
temp = num;

if (i == 0)
{
nume += deno;
}
else
{
//计算分子 x^n
for (int j = i; j > 1; j--)
{
temp *= num;
}

//计算该分数的分子要方法几倍
temp = (deno / factor(i))* temp;

//将所有分子计算结果存到nume中
nume += temp;
}
}

printf("常数%d根据公式所得结果为:%d/%d(约等于%lf)\n", num, nume, deno, (double)nume / (double)deno);

return 0; //程序结束
}
  • 本文标题:C语言进阶-结构化的C程序设计
  • 本文作者:9unk
  • 创建时间:2023-09-10 18:18:00
  • 本文链接:https://9unkk.github.io/2023/09/10/c-yu-yan-jin-jie-jie-gou-hua-de-c-cheng-xu-she-ji/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!