C语言程序设计现代方法_第二版,CH12第十二章编程题(Programming_Projects)

CH12_1
(a):

#include <stdio.h>

#define MAX_LEN 100     

int main(void)
{
    char a[MAX_LEN];
    int i;

    printf("Enter a message: ");
    for (i = 0; i < MAX_LEN; i++) {
        a[i] = getchar();
        if (a[i] == '\n')
            break;
    }

    printf("Reversal is: ");
    for (i--; i >= 0; i--) {
        putchar(a[i]);
    }
    putchar('\n');

    return 0;
}

(b):

#include <stdio.h>

#define MAX_LEN 100     

int main(void)
{
    char a[MAX_LEN];
    int* p;

    printf("Enter a message: ");
    for (p = a; p < a + MAX_LEN; p++) {
        a[p - a] = getchar();
        if (a[p - a] == '\n')
            break;
    }

    printf("Reversal is: ");
    for (p--; p >= a; p--) {
        putchar(a[p - a]);
    }
    putchar('\n');

    return 0;
}

CH12_2
(a):

#include <stdio.h>
#include <ctype.h>

#define MAX_LEN 100     

int main(void)
{
    char a[MAX_LEN];
    char ch;
    int i, num;
    int flag = 0;

    printf("Enter a message: ");
    for (i = 0; i < MAX_LEN; ) {
        ch = toupper(getchar());
        if (ch == '\n') {
            break;
        }
        else if (ch >= 'A' && ch <= 'Z') {
            a[i] = ch;
            i++;
        }
    }

    num = --i;
    for (int i = num, j = 0; i >= num / 2 && j <= num / 2; i--, j++) {
        if (a[i] == a[j]) {
            flag++;
        }
    }

    if (flag == num / 2 + 1) {
        printf("Palindrome\n");
    }
    else {
        printf("Not a palindrome\n");
    }

    return 0;
}

(b):

#include <stdio.h>
#include <ctype.h>

#define MAX_LEN 100     

int main(void)
{
    char a[MAX_LEN];
    char ch;
    int flag = 0;
    char* p, * num;

    printf("Enter a message: ");
    for (p = a; p < a + MAX_LEN; ) {
        ch = toupper(getchar());
        if (ch == '\n') {
            break;
        }
        else if (ch >= 'A' && ch <= 'Z') {
            a[p - a] = ch;
            p++;
        }
    }

    num = --p;
    for (char* p = num, *q = a; p >= a + (num - a) / 2 && q <= a + (num - a) / 2; p--, q++) {
        if (a[p - a] == a[q - a]) {
            flag++;
        }
    }

    if (flag == (num - a) / 2 + 1) {
        printf("Palindrome\n");
    }
    else {
        printf("Not a palindrome\n");
    }

    return 0;
}

CH12_3

//已经在CH12_1(b)中采用了该方式,无需简化

CH12_4

//已经在CH12_2(b)中采用了该方式,无需简化

CH12_5

#include <stdio.h>

int main(void)
{
	char ch[100];
	char* p = ch;
	char* t1;
	char* t2;

	printf("Enter a sentence: ");
	while ((ch[p - ch] = getchar()) != '.' && ch[p - ch] != '?' && ch[p - ch] != '!') {
		t1 = ++p;
	}

	char sign = ch[p - ch];	//记录符号位
	if (p == ch) {
		printf("Reversal of sentence: %c\n", sign);
		return 0;
	}
	ch[p - ch] = ' ';

	t2 = t1;	//t2表示一个单词左方指示,t1表示该单词右方指示,并将t2至t1单词输出
		//然后再重复移动t1,t2。具体见下面循环
	printf("Reversal of sentence: ");
	while (1) {
		while (ch[t2 - ch] != ' ') {
			t2--;
			if (t2 - ch == -1) {
				break;
			}
		}
		for (char* i = t2 + 1; i <= t1; i++) {
			printf("%c", ch[i - ch]);
		}
		t1 = t2--;
		if (t2 - ch == -2) {
			break;
		}
	}

	printf("\b%c\n", sign);

	return 0;
}

CH12_6

#include <stdio.h>

#define N 10

void quicksort(int* low, int* high);
int* split(int* low, int* high);

int main(void)
{
    int a[N], i;

    printf("Enter %d numbers to be sorted: ", N);
    for (i = 0; i < N; i++)
        scanf("%d", &a[i]);

    quicksort(a, a + N - 1);

    printf("In sorted order: ");
    for (i = 0; i < N; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}

void quicksort(int* low, int* high)
{
    int* middle;

    if (low >= high) return;
    middle = split(low, high);
    quicksort(low, middle - 1);
    quicksort(middle + 1, high);
}

int* split(int* low, int* high)
{
    int part_element = *low;

    for (;;) {
        while (low < high && part_element <= *high)
            high--;
        if (low >= high) break;
        *low++ = *high;

        while (low < high && *low <= part_element)
            low++;
        if (low >= high) break;
        *high-- = *low;
    }

    *high = part_element;
    return high;
}

CH12_7

#include <stdio.h>

#define N 10

void max_min(int a[], int n, int* max, int* min);

int main(void)
{
    int b[N], i, big, small;

    printf("Enter %d numbers: ", N);
    for (i = 0; i < N; i++)
        scanf("%d", &b[i]);

    max_min(b, N, &big, &small);

    printf("Largest: %d\n", big);
    printf("Smallest: %d\n", small);

    return 0;
}

void max_min(int a[], int n, int* max, int* min)
{
    int* p;

    *max = *min = a[0];
    for (p = a + 1; p < a + n; p++) {
        if (*p > * max)
            *max = *p;
        else if (*p < *min)
            *min = *p;
    }
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值