C语言程序设计谭浩强(第四版)部分课后习题作答——第八章——8.1 8.2 8.16 8.20

代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string>

//输入三个整数,从小到大输出
void q8_1(int *a, int *b, int *c) {
	if (*a < *b && *a<*c) {
		printf("%d ", *a);
		if (*b < *c) {
			printf("%d ", *b);
			printf("%d", *c);
		}
		else {
			printf("%d ", *c);
			printf("%d", *b);
		}
	}
	else if (*b < *a&&*b < *c) {
		printf("%d ", *b);
		if (*a < *c) {
			printf("%d ", *a);
			printf("%d", *c);
		}
		else {
			printf("%d ", *c);
			printf("%d", *a);
		}
	}
	else{
		printf("%d ", *c);
		if (*a < *b) {
			printf("%d ", *a);
			printf("%d", *b);
		}
		else {
			printf("%d ", *b);
			printf("%d", *a);
		}
	}
}

//输入3个字符串,按照从小到大输出
void q8_2(char *a, char *b, char *c) {
	int i = 0;
	if (strcmp(a, b) < 0 && strcmp(a,c)<0) {
		printf("%s ", *a);
		if (strcmp(b, c) < 0) {
			printf("%s ", *b);
			printf("%s", *c);
		}
		else {
			printf("%s ", *c);
			printf("%s", *b);
		}
	}
	else if (strcmp(a, b) < 0 && strcmp(a, c) > 0) {
		printf("%d ", *c);
		printf("%d ", *a);
		printf("%d", *b);
	}
	else if (strcmp(a, c) < 0 && strcmp(a, c) > 0) {
		printf("%d ", *b);
		printf("%d ", *a);
		printf("%d", *c);
	}
	else {
		if (strcmp(b, c) < 0) {
			printf("%d ", *b);
			printf("%d ", *c);
			printf("%d", *a);
		}
		else {
			printf("%d ", *c);
			printf("%d ", *b);
			printf("%d", *a);
		}
	}
}

//输入一个含有数字和非数字的字符串,统计并输出整数
int getInt(char temp[], int n) {//将字符串转为整数

	int sum = 0;
	for (int i = 0; i < n; i++) {
		printf("%c", temp[i]);
		sum += (int)(temp[i]-48) * (pow(10, n - 1 - i));
	}
	return sum;
}
void q8_16() {
	char *str = (char*)malloc(256 * sizeof(char));
	char temp[256];
	int a[256];
	int i = 0,j=0, count=0, sign = 0;//sign 标记一个整数的开始
	printf("请输入字符串\n");
	fgets(str, 255, stdin);
	while (1) {
		if (*(str + i) >= 48 && *(str + i) <= 57) {
			if (sign == 0) {
				count++;
				sign = 1;
			}
			temp[j] = *(str + i);
			j++;
		}
		else {
			if (sign == 1) {
				sign = 0;
				a[count-1] = getInt(temp, j);
				j = 0;
			}
		}
		if (*(str + i) == '\n') {
			break;
		}
		i++;
	}
	printf("共有%d个整数\n", count);
	for (int i = 0; i < count; i++) {
		printf("%d ", a[i]);
	}
}

//用指向指针的方法对五个字符串排序
//其实就是使用指针数组
void q8_20() {
	char *str[5];//指针数组,数组内存放每个字符串的指针
	char **q, **p , *temp;
	int i;
	for (i = 0; i < 5; i++)
		str[i] = (char *)malloc(256*sizeof(char));
	printf("请依次输入五个字符串:\n");
	for (i = 0; i < 5; i++)
		fgets(str[i], 255, stdin);
	for (q = str; q < str + 4; q++)
	{
		for (p = q + 1; p < str + 5; p++)
		{
			if (strcmp(*q, *p) > 0)
			{
				temp = *q;
				*q = *p;
				*p = temp;
			}
		}
	}
	printf("排序后输出为:\n");
	for (i = 0; i < 5; i++)
	{
		printf("%s", str[i]);
	}
}
int main() {
	//int a, b, c;
	//scanf_s("%d,%d,%d", &a, &b, &c);
	//printf("\n");
	//int *m = &a, *n = &b, *q = &c;
	//q8_1(m, n, q);

	//char str1[20], str2[20], str3[20];
	char* str1 = (char*)malloc(15 * sizeof(char));
	//scanf_s("%s", str1);
	//scanf_s("%s", str1);
	//scanf_s("%s", str1);
	//printf("\n");
	//char *a = str1;
	//char *b = str1;
	//char *c = str1;
	//q8_2(a, b, c);

	//q8_16();
	q8_20();

	system("pause");
	return 0;
}

运行:

8.16

8.20

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值