修改下列程序,使之能输出完数#include <stdio.h> int is(int n); int main(void) { int i; for (i = 1; i <= 100; i++){ if ( is(i) == i ){ printf("%d ", i); } } return 0; } int is (int n) { int i, sum; sum = 0; for (i = 1; i <= n/2; i++){ if ( n % i ==0 ){ sum == sum + i; } } if ( sum!=i ) { return 1; }else{ return 0; } }
时间: 2024-01-19 12:02:33 浏览: 26
以下是修改后的程序,可以输出完数:
```c
#include <stdio.h>
int is(int n);
int main(void) {
int i;
for (i = 1; i <= 100; i++){
if (is(i) == i){
printf("%d ", i);
}
}
return 0;
}
int is(int n) {
int i, sum;
sum = 0;
for (i = 1; i <= n/2; i++){
if (n % i == 0){
sum += i;
}
}
if (sum == n){
return n;
} else {
return 0;
}
}
```
修改点:
1. `sum == sum + i;` 应该修改为 `sum += i;`,否则完数判断会失效;
2. 在 `is` 函数中,当 `sum` 等于 `n` 时应该返回 `n`,否则无法输出完数。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #define SHA1_BLOCK_SIZE 20 #define SHA1_DIGEST_SIZE 5
SHA-1是一种密码散列函数,用于产生消息的数字指纹。SHA-1算法的输出长度为160位,即20个字节。在C语言中,可以使用以下代码来实现SHA-1算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define SHA1_BLOCK_SIZE 20
#define SHA1_DIGEST_SIZE 5
void sha1(const uint8_t *message, size_t message_len, uint8_t *digest) {
// TODO: 实现SHA-1算法
}
int main() {
uint8_t message[] = "hello world";
uint8_t digest[SHA1_DIGEST_SIZE];
sha1(message, strlen((char *)message), digest);
printf("SHA-1 digest: ");
for (int i = 0; i < SHA1_DIGEST_SIZE; i++) {
printf("%02x", digest[i]);
}
printf("\n");
return 0;
}
```
#include <stdio.h> int main(void) { printf("hello world"); } 哪里错了
这段代码没有明显的语法错误,但是缺少了一个分号。在 printf 函数调用的末尾应该加上一个分号。修改后的代码如下:
```
#include <stdio.h>
int main(void) {
printf("hello world");
return 0;
}
```
注意,为了遵循 C 语言规范,main 函数需要返回一个整数值,因此添加了一个 return 0; 语句。