抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

函数编程练习题

编程练习1

已知函数头为 void avg(void) ,写出函数定义。函数 avg 的功能:输入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
#include <stdio.h>
void avg(void);
int main(void)
{
printf("******************************** 编程练习8.1 ********************************\n");
avg( );
}
void avg(void)
{
double score[10], max, min, average, sum = 0.0;
int i;
for(i = 0;i < 10;i ++)
{
printf("请输入第%d个分数:", i + 1);
scanf("%lf", &score[i]);
}
max = score[0];
min = score[0];
for(i = 0;i < 10;i ++)
{
sum += score[i];
if(max < score[i])
{
max = score[i];
}
if(min > score[i])
{
min = score[i];
}
}
average = (sum - max - min) / 8;
printf("平均分:%.1lf\n", average);
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
******************************** 编程练习8.1 ********************************
请输入第1个分数:95
请输入第2个分数:88
请输入第3个分数:77
请输入第4个分数:86
请输入第5个分数:93
请输入第6个分数:86
请输入第7个分数:79
请输入第8个分数:83
请输入第9个分数:92
请输入第10个分数:99
平均分:87.8

编程练习2

$$
已知函数头为 void calroot(double a, double b, double c) ,写出函数定义。函数calroot的功能:求一元二次方程ax^2+bx+c=0的根。形参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
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>
#include <math.h>
void calroot(double a, double b, double c);
int main(void)
{
double a1,b1,c1;
printf("********************************* 编程练习8.2 *********************************\n");
printf("请输入a的值:");
scanf("%lf", &a1);
printf("请输入b的值:");
scanf("%lf", &b1);
printf("请输入c的值:");
scanf("%lf", &c1);

calroot(a1, b1, c1);
}
void calroot(double a, double b, double c)
{
double x1, x2, d, e, real, imaginarys;
d = b * b - 4 * a * c;

if ( 0 == a)
{
if( 0 == b)
{
printf("error!\n");
}
else
{
printf("x = %f\n", -c / b);
}
}
else if(0 == d)
{
x1 = x2 = -b / (2 * a);
printf("x1 = x2 = %f\n", x1);
}
else if(d > 0)
{
e = sqrt(d);
x1 = (-b + e) / (2 * a);
x2 = (-b - e) / (2 * a);
printf("x1 = %f\n", x1);
printf("x2 = %f\n", x2);
}
else
{
e = sqrt(-d);
real = -b / (2 * a);
imaginarys = e / (2 * a);
printf("x1 = %f + %fi\n", real, imaginarys);
printf("x2 = %f - %fi\n", real, imaginarys);
}
}

运行结果:

1
2
3
4
5
********************************* 编程练习8.2 *********************************
请输入a的值:0
请输入b的值:1.5
请输入c的值:-5.4
x = 3.600000

编程练习3

$$
已知函数头为 double sum(int n) ,写出函数定义。函数sum的功能:返回1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+…+\frac{(-1)^{n+1}}{n}的值,其中n即为形参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
#include <stdio.h>
double sum(int n);
int main(void)
{
int n;
printf("请输入n的值:");
scanf("%d", &n);
double result = sum(n);
printf("********************************* 编程练习8.3 *********************************\n");
printf("result = %.2lf\n", result);
}
double sum(int n)
{
int i;
double sum = 0.0;
for(i = 1;i <= n;i ++)
{
if(i % 2 == 0)
{
sum -= 1.0 / i;
}
else
{
sum += 1.0 / i;
}
}
return sum;
}

运行结果:

1
2
3
请输入n的值:4
********************************* 编程练习8.3 *********************************
result = 0.58

编程练习4

已知函数头为 int getgcd(int m, int n) ,写出函数定义。函数 getgcd 的功能:返回形参m 、 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
#include <stdio.h>
int getgcd(int m, int n);
int main(void)
{
int a, b;
printf("********************************* 编程练习8.4 *********************************\n");
printf("请输入m的值:");
scanf("%d", &a);
printf("请输入n的值:");
scanf("%d", &b);
int result = getgcd(a, b);
printf("最大公约数为:%d\n", result);
}
int getgcd(int m, int n)
{
int gcd;
if(m > n)
{
gcd = n;
}
else
{
gcd = m;
}
while(m % gcd || n % gcd)
{
gcd --;
}
return gcd;
}

运行结果:

1
2
3
4
********************************* 编程练习8.4 *********************************
请输入m的值:9
请输入n的值:3
最大公约数为:3

编程练习5

已知函数头为 int prime(int n) , 写出函数定义。函数 prime 的功能,如果 n 是质数,返回1;否则,返回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
#include <stdio.h>
#include <math.h>
int prime(int n);
int main(void)
{
int a;
printf("请输入n的值:");
scanf("%d", &a);
int result = prime(a);
printf("%d\n", result);
}
int prime(int n)
{
int i;
if(n == 2)
{
return 1;
}
else if(n > 2)
{
for(i = 2;i < sqrt(n) + 1;i ++)
{
if(n % i == 0)
{
return 0;
break;
}
}
return 1;
}
else
{
printf("error\n");
return 0;
}
}

运行结果:

1
2
请输入n的值:5
1
1
2
请输入n的值:4
0

函数练习6

已知函数头为 void avg(void) ,函数 avg 的功能:输入10个分数,去掉最高分和最低分,求平均分,保留一位小数。编写并调用函数avg。

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>
void avg(void);
int main(void)
{
avg( );
return 0;
}
void avg(void)
{
int i;
double max, min, sum = 0.0, average, score[10];
for(i = 0;i < 10;i ++)
{
printf("请输入第%d个成绩:", i + 1);
scanf("%lf", &score[i]);
}
max = score[0];
min = score[0];
for(i = 0;i < 10;i ++)
{
sum += score[i];
if(max < score[i])
{
max = score[i];
}
if(min > score[i])
{
min = score[i];
}
}
average = (sum - max - min) / 8;
printf("去掉最高分:%.1lf 分\n", max);
printf("去掉最低分:%.1lf 分\n", min);
printf("平均分为:%.1lf\n", average);
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
请输入第1个成绩:95
请输入第2个成绩:99
请输入第3个成绩:78
请输入第4个成绩:85
请输入第5个成绩:93
请输入第6个成绩:85
请输入第7个成绩:86
请输入第8个成绩:91
请输入第9个成绩:87
请输入第10个成绩:91
去掉最高分:99.0 分
去掉最低分:78.0 分
平均分为:89.1

编程练习7

$$
已知函数头为 void calroot(double a, double b, double c) ,函数 calroot 的功能:求一元二次方程ax^2+bx+c=0的根。形参a、b、c是一元二次方程的系数,编写并调用函数 calroot。
$$

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>
#include <math.h>
void calroot(double a, double b, double c);
int main(void)
{
double a1, b1, c1;
printf("请输入a的值:");
scanf("%lf", &a1);
printf("请输入b的值:");
scanf("%lf", &b1);
printf("请输入c的值:");
scanf("%lf", &c1);
calroot(a1, b1, c1);
return 0;
}
void calroot(double a, double b, double c)
{
double d, e, x1, x2, real, imaginarys;
d = b * b - 4 * a * c;
if(0 == a)
{
if(0 == b)
{
printf("error\n");
}
else
{
printf("x = %lf\n", -c / b);
}
}
else if( 0 == d)
{
x1 = x2 = -b / (2 * a);
printf("x1 = x2 = %lf\n", x1);
}
else if(d > 0)
{
e = sqrt(d);
x1 = (-b + e) / (2 * a);
x2 = (-b - e) / (2 * a);
printf("x1 = %lf\n", x1);
printf("x2 = %lf\n", x2);
}
else
{
e = sqrt(-d);
real = -b / (2 * a);
imaginarys = e / (2 * a);
printf("x1 = %lf + %lfi\n", real, imaginarys);
printf("x2 = %lf - %lfi\n", real, imaginarys);
}

}

运行结果:

1
2
3
4
请输入a的值:0
请输入b的值:1.5
请输入c的值:-5.4
x = 3.600000

编程练习8

$$
已知函数头为 double sum(int n) ,写出函数定义。函数sum的功能:返回1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+…+\frac{(-1)^{n+1}}{n}的值,其中n即为形参n。编写并调用函数sum。
$$

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>
double sum(int n);
int main(void)
{
int a;
double result;
printf("Please input value of n: ");
scanf("%d", &a);
result = sum(a);
printf("result = %.2lf\n", result);
return 0;
}
double sum(int n)
{
int i;
double s;
for(i = 1;i <= n;i ++)
{
if(i % 2 == 0)
{
s -= 1.0 / i;
}
else
{
s += 1.0 / i;
}
}
return s;
}

运行结果:

1
2
Please input value of n: 4
result = 0.58

编程练习9

已知函数头为 int getgcd(int m, int n) ,写出函数定义。函数 getgcd 的功能:返回形参m 、 n 的最大公约数。编写并调用函数 getgcd 。

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
#include <stdio.h>
int getgcd(int m, int n);
int main(void)
{
int a, b, result;
printf("请输入m的值:");
scanf("%d", &a);
printf("请输入n的值:");
scanf("%d", &b);
result = getgcd(a, b);
printf("%d 和 %d 的最大公约数为:%d\n", a, b, result);
return 0;
}
int getgcd(int m, int n)
{
int gcd;
if(m > n)
{
gcd = m;
}
else
{
gcd = n;
}
while(gcd % m || gcd % n)
{
gcd ++;
}
return gcd;
}

运行结果:

1
2
3
请输入m的值:9
请输入n的值:6
9 和 6 的最大公约数为:18

编程练习10

已知函数头为 int prime(int n) , 写出函数定义。函数 prime 的功能,如果 n 是质数,返回1;否则,返回0 。编写并调用函数 prime 输出 100 以内所有的质数,每行输出5个 。

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
#include <stdio.h>
#include <math.h>
int prime(int n);
int main(void)
{
int i, res, times = 0;
for(i = 2;i < 100;i ++)
{
res = prime(i);
if(res == 1)
{
times ++;
if(times % 5 == 0)
{
printf("%d\n", i);
}
else
{
printf("%d\t", i);
}
}
}
return 0;
}
int prime(int n)
{
int j, flag = 1;
if(n == 2)
{
return 1;
}
for(j = 2;j < sqrt(n) + 1;j ++)
{
if(n % j == 0)
{
flag = 0;
break;
}
}
return flag;
}

运行结果:

1
2
3
4
5
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

编程练习11

定义两个函数分别计算球体的表面积和体积,在main函数中输入球体的半径,调用这两个函数,在 main 函数中输出球体的表面积和体积。

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>
double get_ball_s(double r);
double get_ball_v(double r);
int main(void)
{
double a, s, v;
printf("请输入球体的半径:");
scanf("%lf", &a);
s = get_ball_s(a);
v = get_ball_v(a);
printf("球体的表面积为:%.2lf\n", s);
printf("球体的体积为:%.2lf\n", v);
return 0;
}
double get_ball_s(double r)
{
return 4 * 3.14 * r * r;
}
double get_ball_v(double r)
{
return (4 / 3.0) * 3.14 * r * r * r;
}

运行结果:

1
2
3
请输入球体的半径:5
球体的表面积为:314.00
球体的体积为:523.33

编程练习12

已知函数头为 int avg(int n, int t[ ]) ,函数avg的功能:去掉长度为 n 的一维数组 t 中的最大值和最小值,计算并返回平均值。编写并调用函数avg。

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 avg(int n,int t[ ]);
int main(void)
{
int s[9] = {52, 99, 33, 44, 20, 13, 14, 9, 101};
int average;
average = avg(9, s);
printf("average = %d\n", average);
return 0;
}
int avg(int n, int t[ ])
{
int max, min, i, sum;
max = t[0];
min = t[0];
for(i = 0;i < n;i ++)
{
sum += t[i];
if(max < t[i])
{
max = t[i];
}
if(min > t[i])
{
min = t[i];
}
}
return (sum - max - min) / (n - 2);
}

运行结果:

1
average = 39

编程练习13

已知函数头为 int str_cmp(char s1[ ], char s2[ ]) ,函数 str_cmp 的功能:比较数组 s1 和 s2 中字符串的大小,如果 s1 中的字符串大于 s2 中的字符串,返回一个正整数;如果 s1 中的字符串等于 s2 中的字符串,返回0;如果 s1 中的字符串小于 s2 中的字符串,返回一个负整数。输入两个字符串,编写并调用函数 str_cmp,比较两个字符串的大小(要求不调用库函数 strcmp)。

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 str_cmp(char s1[ ], char s2[ ]);
int main(void)
{
char ch1[100], ch2[100];
int result;
printf("请输入第一段字符:");
scanf("%s", ch1);
printf("请输入第二段字符:");
scanf("%s", ch2);
result = str_cmp(ch1, ch2);
if(result > 0)
{
printf("%s > %s\n", ch1, ch2);
}
else if(result == 0)
{
printf("%s == %s\n", ch1, ch2);
}
else
{
printf("%s < %s\n", ch1, ch2);
}
return 0;
}
int str_cmp(char s1[ ], char s2[ ])
{
int i = 0, length1 = 0, length2 = 0;
// 计算s1数组长度
while(s1[length1] != '\0')
{
length1 ++;
}
while(s2[length2] != '\0')
{
length2 ++;
}
while(s1[i] != '\0' || s2[i] != '\0')
{
if(s1[i] > s2[i])
{
return 1;
}
else if(s1[i] < s2[i])
{
return -1;
}
else
{
if(length1 > length2)
{
return 1;
}
else if(length1 == length2)
{
return 0;
}
else
{
return -1;
}
}
i ++;
}
}

运行结果:

1
2
3
请输入第一段字符:com
请输入第二段字符:computer
com < computer

编程练习14

已知函数头为 void output(int row, int t[ ][5]),函数output 的功能:输出行数为row,列数为5的二维数组 t 中所有的数组元素。编写并调用函数 output,输出 3 行 5 列的二位数组,再次调用 output,输出 4 行 5 列的二维数组。

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>
void output(int row, int t[ ][5]);
int main(void)
{
int i, j, r = 3;
int t1[][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
int t2[][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}};
output(3, t1);
printf("\n");
output(4, t2);
}
void output(int row, int t[ ][5])
{
int i, j;
for(i = 0;i < row;i ++)
{
for(j = 0;j < 5;j ++)
{
printf("%6d", t[i][j]);
}
printf("\n");
}
}

运行结果:

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

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

编程练习15

已知函数头为 int getmin(int n, int r[ ][3]),函数 getmin 的功能:计算并返回行数为 n 列数为 3 的二维数组 t 中的最小值。编写并调用函数 getmin 。

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
#include <stdio.h>
int getmin(int n, int r[ ][3]);
void copyright(void);
int main(void)
{
int a[4][3] = {{2, 1, 3}, {4, 6, 5}, {7, 8,9} ,{ 10, 12, 11}};
int min;
copyright( );
min = getmin(4, a);
printf("最小值为:%d\n", min);
return 0;
}
int getmin(int n, int r[ ][3])
{
int i,j, min, b[n];
for(i = 0;i < n;i ++)
{
for(j = 0;j < 3;j ++)
{
b[i] = r[i][2];
}
}
min = b[0];
for(i = 1;i < n;i ++)
{
if(min > b[i])
{
min = b[i];
}
}
return min;
}
void copyright(void)
{
printf("******************************* 编程练习8.15 *******************************\n");
printf("2\t1\t3\n");
printf("4\t6\t5\n");
printf("7\t8\t9\n");
printf("10\t12\t11\n");
}

运行结果:

1
2
3
4
5
6
******************************* 编程练习8.15 *******************************
2 1 3
4 6 5
7 8 9
10 12 11
最小值为:3

编程练习16

在 main 函数中输入两个整数 m 和 n ,调用函数 change,要求函数 change 调用完成后,整数 m 的值加 5,整数 n 的值减 3,在主函数中输出改变后的 m 和 n。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
void change(int *x, int *y);
int main(void)
{
int m, n;
printf("请输入m的值:");
scanf("%d", &m);
printf("请输入n的值:");
scanf("%d", &n);
printf("Before function call:\tm = %d , n = %d\n", m , n);
change(&m, &n);
printf("After function call:\tm = %d , n = %d\n", m, n);
return 0;
}
void change(int *x, int *y)
{
*x += 5;
*y -= 3;
}

运行结果:

1
2
Before function call:   m = 5 , n = 3
After function call: m = 10 , n = 0

编程练习17

已知函数头及功能如下:

1
2
3
void input(int n1, int t1[ ]);		// 输入n1个整数到一维数组t1中
void sort(int n2, int t2[ ]); // 对长度为n2的一维数组t2中的数组元素按升序排序
void output(int n3, int t3[ ]); // 输出长度为n3的一维数组t3中的数组元素

编写并调用函数输入10个整数,对这10个整数按升序排序,输出排序后的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
42
43
44
45
46
#include <stdio.h>
void input(int n1, int t1[ ]);
void sort(int n2, int t2[ ]);
void output(int n3, int t3[ ]);
int main(void)
{
int i,s1[10];
input(10, s1);
sort(10, s1);
output(10, s1);
return 0;
}
void input(int n1, int t1[ ])
{
int i;
printf("请输入10个整数:\n", i);
for(i = 0;i < n1;i ++)
{
scanf("%d", &t1[i]);
}
}
void sort(int n2, int t2[ ])
{
int i, j, temp;
for(i = 0;i < n2;i ++)
{
for(j = 0;j < 9 - i;j ++)
{
if(t2[j] > t2[j + 1])
{
temp = t2[j];
t2[j] = t2[j + 1];
t2[j + 1] = temp;
}
}
}
}
void output(int n3, int t3[ ])
{
int i;
for(i = 0;i < n3;i ++)
{
printf("%d\t", t3[i]);
}
printf("\n");
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
请输入10个整数:
95
77
99
36
56
85
19
74
69
88
19 36 56 69 74 77 85 88 95 99

编程练习18

已知函数头及功能如下:

1
2
3
4
void input(int n1, int t1[ ]);		// 输入n1个整数到一维数组t1中
void swapmin(int n2, int t2[ ]); // 将数组t2中最小数组元素与t2[0]交换
void swapmax(int n3, int t3[ ]); // 将数组t3中最大数组元素与t3[n3 - 1]交换
void output(int n4, int t4[ ]); // 输出长度为n4的一维数组t4中的数组元素

编写并调用函数输入10个整数,完成数据交换,输出交换后的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
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>
void input(int n1, int t1[ ]);
void swapmin(int n2, int t2[ ]);
void swapmax(int n3, int t3[ ]);
void output(int n4, int t4[ ]);

int main(void)
{
int i, s[10];
input(10, s);
swapmin(10, s);
swapmax(10, s);
output(10, s);
return 0;
}

void input(int n1, int t1[ ])
{
int i;
for(i = 0;i < n1; i ++)
{
printf("请输入第%d个整数:", i + 1);
scanf("%d", &t1[i]);
}
}

void swapmin(int n2, int t2[ ])
{
int min = 0;
int i, temp;
for(i = 0;i < n2;i ++)
{
if(t2[min] > t2[i])
{
min = i;
}
}
if(min != 0)
{
temp = t2[0];
t2[0] = t2[min];
t2[min] = temp;
}
}

void swapmax(int n3, int t3[ ])
{
int max = 0;
int i, temp;
for(i = 0;i < n3;i ++)
{
if(t3[max] < t3[i])
{
max = i;
}
}
if(max != n3 - 1)
{
temp = t3[n3 - 1];
t3[n3 - 1] = t3[max];
t3[max] = temp;
}
}

void output(int n4, int t4[ ])
{
int i;
for(i = 0;i < n4;i ++)
{
printf("%d\t", t4[i]);
}
printf("\n");
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
请输入第1个整数:74
请输入第2个整数:20
请输入第3个整数:99
请输入第4个整数:13
请输入第5个整数:14
请输入第6个整数:52
请输入第7个整数:33
请输入第8个整数:44
请输入第9个整数:66
请输入第10个整数:99
13 20 99 74 14 52 33 44 66 99

编程练习19

已知函数头及功能如下:

1
2
3
void input(int row1, int t1[ ][3]);		// 输入row1 * 3个整数到二维数组t1中
void change(int row2, int t2[ ][3]); // 使数组t2中每个元素的值增1
void output(int row3, int t3[ ][3]); // 输出二维数组t3中的数组元素

编写并调用函数输入6个整数,完成数据处理,输出处理后的6个整数。

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
#include <stdio.h>
void input(int row1, int t1[ ][3]);
void change(int row2, int t2[ ][3]);
void output(int row3, int t3[ ][3]);

int main(void)
{
int t[2][3];
input(2, t);
change(2, t);
output(2, t);
return 0;
}

void input(int row1, int t1[ ][3])
{
int i, j;
for(i = 0;i < row1;i ++)
{
for(j = 0;j < 3;j ++)
{
scanf("%d", &t1[i][j]);
}
}
}

void change(int row2, int t2[ ][3])
{
int i, j;
for(i = 0;i < row2;i ++)
{
for(j = 0;j < 3;j ++)
{
t2[i][j] += 1;
}
}
}

void output(int row3, int t3[ ][3])
{
int i, j;
for(i = 0;i < row3;i ++)
{
for(j = 0;j < 3;j ++)
{
printf("%d\t", t3[i][j]);
}
printf("\n");
}
}

运行结果:

1
2
3
1 2 3 4 5 6
2 3 4
5 6 7

编程练习20

此题略

编程练习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
#include <stdio.h>
int get_s(int x1, int y1);
int get_l(int x2, int y2);
int get(int x3, int y3, int (*p)(int m, int n));
int main(void)
{
int a, b, s, l;
printf("请输入长方形的长:");
scanf("%d", &a);
printf("请输入长方形的宽:");
scanf("%d", &b);
s = get(a, b, get_s);
l = get(a, b, get_l);
printf("长方形的面积为:%d\n", s);
printf("长方形的周长为:%d\n", l);
return 0;
}
int get_s(int x1, int y1)
{
return x1 * y1;
}
int get_l(int x2, int y2)
{
return 2 * (x2 + y2);
}
int get(int x3, int y3, int (*p)(int m, int n))
{
return (*p)(x3, y3);
}

运行结果:

1
2
3
4
请输入长方形的长:5
请输入长方形的宽:6
长方形的面积为:30
长方形的周长为:22

编程练习22

采用递归的函数调用求 1 + 2 + 3 + … + 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
#include <stdio.h>
double factorial(int n);
int main(void)
{
int a;
double sum;
printf("请输入n的值:");
scanf("%d", &a);
sum = factorial(a);
printf("sum = %.0lf\n", sum);
return 0;
}
double factorial(int n)
{
double sum;
if(n > 1)
{
sum = n + factorial(n - 1);
}
else
{
sum = 1;
}
return sum;
}

运行结果:

1
2
请输入n的值:20
sum = 210

编程练习23

$$
采用递归的函数调用求x^n的值,x的类型是double,n的类型是int,且n≥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
#include <stdio.h>
#include <math.h>
double power(double x, int n);
int main(void)
{
int a;
double b, result;
printf("请输入x的值:");
scanf("%lf", &b);
printf("请输入n的值:");
scanf("%d", &a);
result = power(b, a);
printf("result = %.2lf\n", result);
return 0;
}
double power(double x, int n)
{
double s;
if(n > 0)
{
s = x * power(x, n - 1);
}
else
{
s = 1;
}
return s;
}

运行结果:

1
2
3
请输入x的值:2
请输入n的值:10
result = 1024.00

编程练习24

已知函数头为 int hanoi(int n, char first, char second, char third) , 函数 hanoi 的功能:输出汉诺塔问题中圆盘的移动步骤,计算并返回圆盘移动的总次数。编写并调用函数 hanoi 。

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>
#include <math.h>
int hanoi(int n, char first, char second, char third);
int main(void)
{
int m, times;
printf("请输入圆盘的个数:");
scanf("%d", &m);
times = hanoi(m, 'A', 'B', 'C');
printf("共移动了%d次\n", times);
return 0;
}
int hanoi(int n, char first, char second, char third)
{
if(n > 1)
{
hanoi(n - 1, first, third, second);
printf("将第%d个圆盘从%c移动到%c\n", n, first, third);
hanoi(n - 1, second, first, third);
}
else
{
printf("将第%d个圆盘从%c移动到%c\n", n, first, third);
}
return pow(2, n) - 1;
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
请输入圆盘的个数:4
将第1个圆盘从A移动到B
将第2个圆盘从A移动到C
将第1个圆盘从B移动到C
将第3个圆盘从A移动到B
将第1个圆盘从C移动到A
将第2个圆盘从C移动到B
将第1个圆盘从A移动到B
将第4个圆盘从A移动到C
将第1个圆盘从B移动到C
将第2个圆盘从B移动到A
将第1个圆盘从C移动到A
将第3个圆盘从B移动到C
将第1个圆盘从A移动到B
将第2个圆盘从A移动到C
将第1个圆盘从B移动到C
共移动了15次

评论




2019-2022 覃浩的博客 鄂ICP备2021017381号-1 正在载入...

PoweredHexo
HostedGitHub & Coding
DNSDNSPod
CDN腾讯云CDN
PictureBed腾讯云CDN
ThemeVolantis