乘除从右到左?
1.题目
:
请补充函数 fun(char *s),该函数的功能是把字符串中的内容逆置。
例如:字符串中原有的字符串为 abcde,则调用该函数后,串中的内容为 edcba。
注意:部分源程序如 blank.c 给出。
请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数的横线上填入所编写的
若干表达式或语句。
#include <string.h>
#include <conio.h>
#include <stdio.h>
#define N 81
void fun(char *s)
{
int i=0,t,n=strlen(s);
for(;___1___;i++)
{
t=*(s+i);
___2___;
___3___;
}
}
main()
{
char a[N];
clrscr();
printf("Enter a string:");
gets(a);
printf("The original string is:");
puts(a);
fun(a);
printf("\n");
printf("The string after modified:");
puts(a);
}
3
分析:
将字符串中的内容逆置主要思路分析如下:
(1)在字符串第一个字母位置和最后一个字母位置各自设置一个指示器 A 和 B,它们
分别指向第一个字母和最后一个字母,然后 A 位置的字母和 B 位置的字母进行互换。
(2)互换结束之后指示器 A 移动到第二个字母,而指示器 B 移动到倒数第二个字母,
即指示器 A 往后移动一个字母位置,而指示器 B 往前移动一个字母位置,然后 A 位置的
字母和 B 位置的字母进行互换。
(3)互换结束之后指示器 A 往后再次移动一个字母位置,而指示器 B 再次往前移动一
个字母位置,然后 A 位置的字母和 B 位置的字母进行互换。
(4)以上过程反复进行,只有指示器 B 的位置小于指示器 A 的位置,即指示器 B 指向
的位置在指示器 A 指向的位置的左边的情况下才结束,所以以上过程可以使用循环语句
实现,循环终止条件可以判断指示器 B 的位置是否小于指示器 A 的位置。
为了实现以上思路,我们观察 fun 函数。fun 函数的功能就是将传入的 s 参数作为字符串
进行内容逆置,它的逆置方法和我们分析的思路是一致的。它使用了 for 循环语句进行循
环,循环体中使用指针 s+i 作为指示器 A,而指示器 B 使用 s+n-1-i 表示。其中 i 每次循环
加一,而 n=strlen(s),为传入的字符串的长度。strlen 函数可以得到 s 参数的字符串中包含
的字母个数。
为什么指针 s+i 可以作为指示器 A 呢?由于指针 s 对应 main 函数传入的 a 数组,而 C 语
言中数组名称就是一个指向数组第一个元素的指针,所以数组 a 的名称 a 就是一个 char