作为一名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;
}