函数fun的功能是:分别统计出形参str所指的字符串中的大写字母和小写字母的个数,并传递回主函数输出。例如,若str所指的内容为“BAY23Kill”,其中大写字母数为4,小写字母数为3,则应输出:c0=4,c1=3。 请改正程序中的错误,使它能得出正确的结果。错误在每个/****found***/下面的一句代码中。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include <stdio.h> #include <string.h> void fun(char* str, int *c0, int *c1) { int k;int len=strlen(str); /**********found*****1*****/ c0 = c1 = 0; for (k=0; k < len; k++) { /**********found*****2*****/ if ( (str[k] >= 'A') && (str[k] <= 'Z') ) *c0++; if ( (str[k] >= 'a') && (str[k] <= 'z') ) (*c1)++; } } main() { char str[100]; int c0,c1; printf("input string:"); /**********found*****3*****/ scanf("%c", str); /**********found*****4*****/ fun(str, &c0, c1); printf("c0=%d,c1=%d\n", c0, c1); }
时间: 2023-07-18 11:42:47 浏览: 144
改正后的程序如下:
```c
#include <stdio.h>
#include <string.h>
void fun(char* str, int *c0, int *c1) {
int k;
int len = strlen(str);
*c0 = *c1 = 0; // 将c0和c1的值初始化为0
for (k = 0; k < len; k++) {
if ((str[k] >= 'A') && (str[k] <= 'Z')) (*c0)++; // 将c0和c1的自增改为指针自增
if ((str[k] >= 'a') && (str[k] <= 'z')) (*c1)++;
}
}
int main() {
char str[100];
int c0, c1;
printf("input string:");
scanf("%s", str); // 读入字符串时应使用%s格式符
fun(str, &c0, &c1); // 将c1的地址传递给fun函数
printf("c0=%d,c1=%d\n", c0, c1);
return 0;
}
```
程序中的错误及改正如下:
- 错误1:将c0和c1的值初始化为0的方式错误,应该使用指针间接赋值的方式:`*c0 = *c1 = 0;`
- 错误2:在统计大写字母和小写字母的个数时,将指针自增改为了变量自增,应该改回来:`(*c0)++;`、`(*c1)++;`
- 错误3:使用%c格式符读入字符串时只会读入一个字符,应该使用%s格式符:`scanf("%s", str);`
- 错误4:将c1的值传递给fun函数时没有加取地址符&,应该改正为:`fun(str, &c0, &c1);`
阅读全文