作为一名C语言初学者,以下答案为随手练习笔记,均已通过编译器实现书上功能,如有错误之处欢迎指出。
1、
(a)
# include <cstdio># include <iostream># define N 30void 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 30char *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 30void 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反转并存入bbool CHE = check(a, b, sign);if (CHE)printf("Palindrome\n");elseprintf("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 30int 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 30int 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");elseprintf("Not a palindrome\n");system("pause");return 0;}