给定程序MODI1.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。 例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是ABBCDDEFF。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include <stdio.h> #include <string.h> #define N 80 void fun(char *s, char t[]) {int i, j=0; for(i=0; i<(int)strlen(s); i++) /***********found**********/ if(__1__) t[j++]=s[i]; /***********found**********/ __2__; } main() {char s[N], t[N]; printf("\nPlease enter string s : "); gets(s); fun(s, t); printf("\nThe result is : %s\n",t); }
时间: 2025-05-16 22:00:53 浏览: 16
### 分析题目及程序
从题目的描述来看,我们需要修改 `fun` 函数中的两个部分(标记为 `__1__` 和 `__2__`),使其能够按照以下规则筛选字符串并生成目标数组:
1. 将原字符串中**位于奇数位置的字符**添加到新字符串;
2. 或者将原字符串中**ASCII 码值为偶数的字符**也加入新字符串。
需要注意的是,“奇数位置”是从索引 0 开始计算的位置编号(即索引为奇数值的位置)。
---
#### 修改分析
##### 第一处 (`if(__1__)`)
需要判断当前字符是否满足条件之一:
- 当前字符所在位置是“奇数位置”,也就是 `(i % 2 == 1)`;
- 或者该字符的 ASCII 码值是一个“偶数值”,可以写成 `(s[i] % 2 == 0)`。
这两个条件需要用逻辑运算符连接起来,形成最终表达式:
```c
if((i % 2 == 1) || (s[i] % 2 == 0))
```
##### 第二处 (`__2__;`)
在循环结束后,为了确保返回的目标数组`t[]`以空字符`\0`结束(因为 C 字符串必须以 NULL 结束),应添加如下代码:
```c
t[j] = '\0';
```
---
#### 完整修正后的代码
下面是完整修复后的程序代码:
```c
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, char t[]) {
int i, j = 0;
for (i = 0; i < (int)strlen(s); i++) {
/***********found**********/
if ((i % 2 == 1) || (s[i] % 2 == 0)) // 条件判断:奇数位置 OR ASCII码为偶数
t[j++] = s[i]; // 满足条件则复制到t[]
}
/***********found**********/
t[j] = '\0'; // 添加字符串终止符\0
}
main() {
char s[N], t[N];
printf("\nPlease enter string s : ");
gets(s);
fun(s, t);
printf("\nThe result is : %s\n", t);
}
```
---
#### 测试案例
假设输入字符串为 `"AABBCCDDEEFF"` ,我们可以逐步验证程序的行为:
1. 遍历每个字符,并检查其位置或 ASCII 值是否符合条件;
2. 根据过滤规则保留某些字符。
| 输入字符串 | A | B | B | C | C | D | D | E | E | F | F |
|------------|---|---|---|---|---|---|---|---|---|---|
| 下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
| 是否选择 | 否| 是| 是| 是| 是| 是| 是| 是| 是| 是|
最后得到的结果是:`ABBCDDEFF`。
---
###
阅读全文
相关推荐










