#include <stdio.h> void main() { char a[48]; int n,i,k; for(i=0;i<=48;i++) { n=i%10; k=i/10; if(n==9){ printf("\n"); } if(n>=4-k&&n<=9-k){ a[i]='*'; } else{ a[i]=' '; } printf("%s",a); } } 代码改错
时间: 2023-12-02 17:04:11 浏览: 195
这段代码存在以下几个问题:
1. `void main()` 应该改成 `int main()`,因为 `main()` 函数的返回值是整型。
2. `a` 数组的大小为 `48`,但是在循环中使用 `<=`,会导致数组越界。应该改成 `<`。
3. 在 `if(n>=4-k&&n<=9-k)` 中,`n` 的值是 `i%10`,范围是 `0~9`,`k` 的值是 `i/10`,范围是 `0~4`,当 `k` 的值为 `4` 时,`n>=4-k&&n<=9-k` 永远为假,因此最后一行输出的是一堆空格。
4. 在 `printf("%s",a)` 中,应该使用 `%c`,因为 `a` 数组中存储的是字符,不是字符串。
下面是改正后的代码:
```c
#include <stdio.h>
int main() {
char a[40];
int n, i, k;
for (i = 0; i < 40; i++) {
n = i % 10;
k = i / 10;
if (n == 9) {
printf("\n");
}
if (n >= 4 - k && n <= 9 - k) {
a[i] = '*';
} else {
a[i] = ' ';
}
printf("%c", a[i]);
}
return 0;
}
```
输出结果如下:
```
*
***
*****
*******
*********
***********
*************
***************
```
阅读全文