【程序改错】 题目:假定输入的字符串中只包含字母和*号。编写程序只删除字符串的前面*号。例如,水水*CFF***,删除后,字符串中的字符为ACF*F*G***** 程序中共有3条错误语句,请改正错误。 注意:不可以增加或删除程序行,也不可以更改程序的结构。 一*/ #include<stdio.h>#include<string.h> void fun(char a[]); main()
时间: 2023-07-23 19:31:07 浏览: 50
【改错后程序】
```c
#include <stdio.h>
#include <string.h>
void fun(char a[]);
int main()
{
char str[100];
printf("请输入一个字符串(只包含字母和*号):");
scanf("%s", str);
fun(str);
printf("处理后的字符串为:%s\n", str);
return 0;
}
void fun(char a[])
{
int i, j;
j = strlen(a) - 1; // 错误1:应该是strlen(a)-1,因为下标从0开始计算
while (a[j] == '*')
{
j--; // 错误2:应该是j--,因为要删除前面的*号
}
for (i = 0; i <= j; i++) // 错误3:应该是i<=j,因为只处理前面的*号
{
if (a[i] == '*')
{
a[i] = a[j];
a[j] = '*';
while (a[j] == '*')
{
j--;
}
}
}
}
```
相关问题
【程序改错】 题目:假定输入的字符串中只包含字母和*号。编写程序只删除字符串的前面*号。例如,*CFF***,删除后,字符串中的字符为CFF*** 程序中共有3条错误语句,请改正错误。 注意:不可以增加或删除程序行,也不可以更改程序的结构。 一*/ #include<stdio.h>#include<string.h> void fun(char a[]); main()
【程序改错】
题目:假定输入的字符串中只包含字母和*号。编写程序只删除字符串的前面*号。例如,*CFF***,删除后,字符串中的字符为CFF*** 程序中共有3条错误语句,请改正错误。 注意:不可以增加或删除程序行,也不可以更改程序的结构。
1. 缺少了注释的结束符号 "*/"。
2. main函数没有声明返回值类型。
3. 缺少了函数fun的定义。
改正后的程序如下:
```c
#include<stdio.h>
#include<string.h>
void fun(char a[]);
int main(void) {
char str[100];
gets(str);
fun(str);
puts(str);
return 0;
}
void fun(char a[]) {
int i, j;
for (i = 0; a[i] == '*'; i++);
for (j = 0; a[j + i] != '\0'; j++) {
a[j] = a[j + i];
}
a[j] = '\0';
}
```
【程序改错】 题目:假定输入的字符串中只包含字母和号。编写程序只删除字符串的前面号。例如,****ACFF**,删除后,字符串中的字符为ACFF** 程序中共有3条错误语句,请改正错误。 注意:不可以增加或删除程序行,也不可以更改程序的结构。 一*/ #include<stdio.h>#include<string.h> void fun(char a[]); main()
【改错后程序】
```c
#include <stdio.h>
#include <string.h>
void fun(char a[]);
int main()
{
char str[100];
printf("请输入一个字符串(只包含字母和*号):");
scanf("%s", str);
fun(str);
printf("处理后的字符串为:%s\n", str);
return 0;
}
void fun(char a[])
{
int i, j;
j = strlen(a) - 1; // 错误1:应该是strlen(a)-1,因为下标从0开始计算
while (a[j] == '*')
{
j--; // 错误2:应该是j--,因为要删除前面的*号
}
for (i = 0; a[i] == '*' && i <= j; i++); // 错误3:应该在for循环中加上a[i] == '*'的判断条件,并且要加上分号
for (; i <= j; i++)
{
a[i - j + j - 1] = a[i];
}
a[i - j + j - 1] = '\0';
}
```