改正求水仙花数的这段代码#include<stdio.h> int is(int number); int main(void) { int number, m, n; scanf("%d,%d", &m, &n); for (number = m; number <= n; number++) printf("%d\n", is(number)); return 0; } int is(int number) {int x, y, z; x = number % 10; y = number / 10 % 10; z = number / 100; if (x*x*x + y*y*y + z*z*z == number) {result = number; return result;} }
时间: 2024-03-02 08:48:35 浏览: 20
在代码中,函数is没有返回值,应该将int改为void,并将if语句中的return语句改为printf语句输出水仙花数。修改后的代码如下:
```
#include <stdio.h>
void is(int number);
int main(void) {
int number, m, n;
scanf("%d,%d", &m, &n);
for (number = m; number <= n; number++) {
is(number);
}
return 0;
}
void is(int number) {
int x, y, z;
x = number % 10;
y = number / 10 % 10;
z = number / 100;
if (x*x*x + y*y*y + z*z*z == number) {
printf("%d\n", number);
}
}
```
相关问题
改正求水仙花数的这段代码且用函数int is(int number)#include<stdio.h> int is(int number); int main(void) { int number, m, n; scanf("%d,%d", &m, &n); for (number = m; number <= n; number++) printf("%d\n", is(number)); return 0; } int is(int number) {int x, y, z; x = number % 10; y = number / 10 % 10; z = number / 100; if (xxx + yyy + zzz == number) {result = number; return result;} }
改正后的代码如下所示:
```
#include <stdio.h>
int is(int number);
int main(void) {
int number, m, n;
scanf("%d,%d", &m, &n);
for (number = m; number <= n; number++) {
if (is(number)) {
printf("%d\n", number);
}
}
return 0;
}
int is(int number) {
int x, y, z, result = 0;
x = number % 10;
y = number / 10 % 10;
z = number / 100;
if (x*x*x + y*y*y + z*z*z == number) {
result = 1;
}
return result;
}
```
主要修改如下:
1. 在主函数中,调用 `is` 函数来判断一个数是否为水仙花数,如果是则输出该数;
2. `is` 函数中,如果是水仙花数,返回值为 1,否则为 0;
3. `is` 函数中,定义了一个 `result` 变量来存储判断结果,初始值为 0;
4. `is` 函数中,计算水仙花数时,将 `xxx` 改为 `x*x*x`。
#include <stdio.h> int IsDaffodilNum(int num); int main(void) { int n; printf("Input n:"); scanf("%d", &n); if (n % 3 != 0) { printf("%d is not a daffodil number\n", n); } else if (IsDaffodilNum(n)) { printf("%d is a daffodil number\n", n); } return 0; } //函数功能:验证n是黑洞数,并记录验证的步数 int IsDaffodilNum(int num) { int temp; printf("%d\n", num); if(num == 153); { return 1; } while(num != 0); { temp += (num / 10) * (num / 10) * (num / 10); num %= 10; } return IsDaffodilNum(num) ; }
这段代码存在一些问题,需要进行修改:
1. 在第12行的if语句中,判断条件为n除以3的余数不为0,这是判断一个数是否为水仙花数的错误方法,应该判断是否为三位数。
2. 在第15行和第21行的分号(;)是多余的,应该删除。
3. 在第18行计算temp的时候,应该是num除以10的余数的立方,而不是num除以10的立方。
4. 在第19行计算num的时候,应该是num除以10的商,而不是余数。
修改后的代码如下:
```
#include <stdio.h>
int IsDaffodilNum(int num);
int main(void) {
int n;
printf("Input n:");
scanf("%d", &n);
if (n < 100 || n > 999) {
printf("%d is not a three-digit number\n", n);
} else if (IsDaffodilNum(n)) {
printf("%d is a daffodil number\n", n);
} else {
printf("%d is not a daffodil number\n", n);
}
return 0;
}
//函数功能:验证n是黑洞数,并记录验证的步数
int IsDaffodilNum(int num) {
int temp = 0;
printf("%d\n", num);
if (num == 153) {
return 1;
}
while (num != 0) {
int digit = num % 10;
temp += digit * digit * digit;
num /= 10;
}
return IsDaffodilNum(temp);
}
```
修改后的代码中,增加了对输入是否为三位数的判断,修改了计算temp和num的错误,同时在输出结果时也进行了修改。