C语言程序设计现代方法(第二版)十二章编程题答案

作为一名C语言初学者,以下答案为随手练习笔记,均已通过编译器实现书上功能,如有错误之处欢迎指出。


1、
(a)

# include <cstdio>
# include <iostream>

# define N 30

void reverse(char [], int);

int main(void)
{
    int sign = N;
    char  a[N];//数组初始化
    printf("Enter a message: ");


    for (int i = 0; i < N; ++i)//将输入的字符存进数组
    {
        a[i] = getchar();
        if (a[i] == '\n')
        {
            sign = i;//标记存入字符的末尾
            break;
        }
    }

    reverse(a, sign);//反转存入的字符

    printf("Reversal is: ");

    for (int i = 0; i < sign; ++i)//打印字符
    {
        printf("%c", a[i]);
    }

    system("pause");
    return 0;
}

void reverse(char a[], int sign)//反转字符函数定义
{
    int temp, i(0),j(sign-1);
    for (; i <j; )
    {
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
        ++i;
        --j;
    }
}

(b)

# include <cstdio>
# include <iostream>

# define N 30

char *p, *q;

void reverse(char []);

int main(void)
{
    char  a[N];//数组初始化
    printf("Enter a message: ");

    p = a;
    q = a;
    for (; p < p+N; ++p )//将输入的字符存进数组
    {
        *p = getchar();
        if (*p == '\n')
            break;
    }

    reverse(a);//反转存入的字符

    printf("Reversal is: ");

    for (p = a; p < q+1;++p)//打印字符
    {
        printf("%c", *p);

    }

    system("pause");
    return 0;
}

void reverse(char a[])//反转字符函数定义
{
    int temp, i;
    i = p - q;
    for (; q < p; )
    {
        temp = *q;
        *q = *p;
        *p = temp;
        --p;
        ++q;
    }
    p = q = a;
    q += i;
}

2、

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

# define N 30

void reverse(char[], char[], int);
bool check(char[], char[], int);

int main(void)
{
    int sign = N;
    char  a[N] = { 0 };//数组初始化
    char  b[N] = { 0 };
    printf("Enter a message: ");

    for (int i = 0; i < N; ++i)//将输入的字符存进数组
    {
        a[i] = getchar();

        if (a[i] == '\n')
        {
            sign = i;//标记存入字符的末尾
            break;
        }

        if (toupper(a[i]) < 'A' || toupper(a[i]) > 'Z')//检查字符是否为字母
            --i;
    }

    reverse(a, b, sign);//将a反转并存入b

    bool CHE = check(a, b, sign);
    if (CHE)
        printf("Palindrome\n");
    else
        printf("Not a palindrome\n");

    system("pause");
    return 0;
}

void reverse(char a[], char b[], int sign)//反转字符函数定义
{
    int i(0), j(sign - 1);
    for (; i < sign; ++i)
    {
        b[j] = a[i];
        --j;
    }
}

bool check(char a[], char b[], int sign)
{
    int sum(0);
    for (int i = 0; i < sign; ++i)
    {
        if (a[i] == b[i])
            ++sum;
    }
    return ((sum == sign&& sign>0) ? true : false);
}

3、

# include <cstdio>
# include <iostream>

# define N 30

int main(void)
{
    char  a[N];//数组初始化
    int i;

    printf("Enter a message: ");

    for ( i = 0 ; i <  N; ++i)//将输入的字符存进数组
    {
        *(a + i) = getchar();
        if (*(a + i) == '\n')
            break;
    }

    printf("Reversal is: ");

    for (; i >= 0; --i)//打印字符
        printf("%c", *(a + i));

    system("pause");
    return 0;
}

4

# include <cstdio>
# include <iostream>
# include <ctype.h>

# define N 30

int main(void)
{
    char  a[N], b[N];//数组初始化
    int i, sign, same(0);

    printf("Enter a message: ");

    for ( i = 0 ; i <  N; ++i)//将输入的字符存进数组a
    {
        *(a + i) = getchar();
        if (*(a + i) == '\n')
            break;
        if (toupper(*(a+i)) < 'A' || toupper(*(a+i)) > 'Z')//检查字符是否为字母
            --i;
    }

    sign = i;//标记存入的字符个数

    for (int j = 0; j < sign; ++j)//倒转字符并存入b
    {
        *(b + j) = *(a + i-1);
        --i;
    }

    for (i = 0; i < sign; ++i)
    {
        if (*(a + i) == *(b + i))
            ++same;
    }

    if (same == sign && sign != 0)
        printf("Palindrome\n");
    else
        printf("Not a palindrome\n");

    system("pause");
    return 0;
}
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值