明解C语言入门(第八章习题答案)

文章介绍了C语言中的几个基础练习,包括函数定义(如比较函数、交换变量和计算阶乘等)、数据结构(如数组和枚举)以及基本算法(如冒泡排序、组合计算和GCD)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define _CRT_SECURE_NO_WARNINGS 1

练习8-1

#include<stdio.h>
#define diff(x,y) ((x)>(y))?((x)-(y)):((y)-(x))
int main() 
{
    int a;
    int b;
    scanf("%d %d", &a, &b);

    printf("%d", diff(a, b));

    return 0;
}

练习8-2

#include<stdio.h>
#define max(x,y) ((x)>(y))?(x):(y) //注意
int main()
{
    int a, b, c, d = 0;
    scanf("%d %d %d %d", &a, &b, &c, &d);
 
    printf("%d\n", max(max(a, b), max(c, d)));
    printf("%d\n", max(max(max(a, b), c), d));

    return 0;
}

练习8-3

#include<stdio.h>
#define swap(int,x,y) {int tmp=x;x=y;y=tmp;} //注意
int main()
{
    int a;
    int b;
    scanf("%d %d", &a, &b);

    swap(int, a, b);
    printf("%d %d", a, b);

    return 0;
}

练习8-4

#include<stdio.h>
#define NUMBER 5
void Bubble_sort(int arr[], int n)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < n-1; i++) //重要
	{
		for (j = 0; j < n-1-i; j++)
		{
			if (arr[j] > arr[j+1])
			{
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
			}
		}
	}
}
int main()
{
	int arr[NUMBER] = { 0 };
	int i = 0;
	for (i = 0; i < NUMBER; i++)
	{
		scanf("%d", &arr[i]);
	}
	Bubble_sort(arr, NUMBER);

	for (i = 0; i < NUMBER; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

练习8-5

#include<stdio.h>
enum season { Invalid, Spring, Summer, Autumn, Winter };
void spring()
{
	puts("春天");
}
void summer()
{
	puts("夏天");
}
void autumn()
{
	puts("秋天");
}
void winter()
{
	puts("冬天");
}

int main()
{
	int k = 0;
	do
	{
		printf("0--结束  1--春天  2--夏天  3--秋天  4--冬天\n");
		printf("请选择:");
		scanf("%d", &k);
	} while (k < Invalid || k > Winter); //注意

	enum season selected; //注意

	switch (k)
	{
	case Spring:
		spring();
		break;
	case Summer:
		summer();
		break;
	case Autumn:
		autumn();
		break;
	case Winter:
		winter();
		break;
	default:
		break;
	}

	return 0;
}

练习8-6

#include <stdio.h>
int factorial(int n) 
{
    int i;
    int sum = 1;

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

int main() 
{
    int x;
    printf("请输入一个数:");
    scanf("%d", &x);

    printf("它的阶乘是:%d", factorial(x));

    return 0;
}

练习8-7

#include<stdio.h>
int combination(int n, int r)
{
	if (r == 0 || r == n)
	{
		return 1;
	}
	else if (r == 1)
	{
		return n;
	}
	else
		return combination(n - 1, r - 1) + combination(n - 1, r);
}

int main()
{
	int n = 0;
	int r = 0;
	scanf("%d %d", &n, &r);

	printf("%d", combination(n, r));

	return 0;
}

练习8-8

#include<stdio.h>
int gcd(int a, int b)
{
	if (a < b)
	{
		int tmp = a;
		a = b;
		b = tmp;
	}
	
	while (a % b != 0) //重要
	{
		int c = a%b;
		a = b;
		b = c;
	}
	return b;
}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);

	printf("%d", gcd(a, b));

	return 0;
}

练习8-9

#include<stdio.h>
int main()
{
	int cnt = 0;
	int ch; //注意

	while ((ch = getchar()) != EOF)
	{
		if (ch == '\n')
		{
			cnt++;
		}
	}
	printf("%d", cnt);

	return 0;
}

练习8-10

#include <stdio.h>
int main()
{
    int ch, i, j;
    int cnt[10] = { 0 };

    while ((ch = getchar()) != EOF) 
    {
        if (ch >= '0' && ch <= '9') 
            cnt[ch - '0']++; //重要
    }

    puts("数字字符的出现次数:");
    for (i = 0; i < 10; i++) 
    {
        printf("'%d':", i);
        for (j = 0; j < cnt[i]; j++) 
        {
            putchar('*');
        }
        putchar('\n');
    }

    return 0;
}

### 明解C语言入门篇中的题目解析 #### 题目描述 书中提供了多个练习题来帮助读者巩固所学的知识。例如,在第九章中有如下两个例子: - **统计特定字符的数量** 给定一段字符串 `s` 和一个目标字符 `c`, 要求计算并返回该字符在给定字符串中出现的次数。 ```c #include<stdio.h> int str_chnum(const char s[], int c) { int len = 0; int count = 0; while (s[len] != '\0') { if (s[len] == c) { count++; } len++; } return count; } int main(void) { char inputString[128]; char targetChar; puts("请输入要查找的字符串:"); scanf("%s", inputString); getchar(); puts("请输入要查找的目标字符:"); scanf("%c", &targetChar); int result = str_chnum(inputString, targetChar); printf("目标字符 '%c' 出现了 %d 次\n", targetChar, result); return 0; } ``` 此段代码实现了对指定字符计数的功能[^2]。 - **使用qsort函数进行排序** 为了更好地理解如何利用标准库提供的工具简化编程工作,《明解C语言入门篇》还介绍了`qsort()`函数的应用场景及其基本用法。下面是一个简单的整型数组升序排列的例子: ```c #include <stdio.h> #include <stdlib.h> // 包含 qsort 的声明 // 定义比较函数用于升序排列 int compare_int_asc(const void *a, const void *b){ return (*(int*)a - *(int*)b); } int main(){ int numbers[] = {5, 3, 8, 4, 2}; size_t n_elements = sizeof(numbers)/sizeof(int); // 使用 qsort 对数组进行排序 qsort(numbers, n_elements, sizeof(int), compare_int_asc); // 输出已排序后的数组元素 for(size_t i=0; i<n_elements ;i++){ printf("%d ",numbers[i]); } return 0; } ``` 这段代码展示了怎样通过自定义比较函数配合`qsort()`实现数据结构的有效管理[^3]。 #### 学习建议 对于希望深入理解和实践《明解C语言入门篇》内容的学习者而言,除了完成书本上的练习外,还可以尝试解决更多实际问题,比如参与开源项目贡献或是参加在线竞赛平台的比赛活动等。这有助于提高解决问题的能力以及积累宝贵的实战经验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值