#include<stdio.h> int sum(int n) { int r = 0,i; for (i = 0; i < n; i++); { r += i; } return r; } long fac(int n) { int r = 1, i=0; for (i = 1; i < n + 1; i++) { r *= i; } return r; } int main(void) { int n; //scanf_s("%d", &n); printf("%d\n", sum(n)); printf("%d\n", fac(n)); return 0; }这段代码有什么问题
时间: 2023-12-04 11:02:25 浏览: 82
这段代码可能存在以下两个问题:
1. 在求和函数 sum 中,for 循环的语句块后面多了一个分号,这会导致循环体内的语句不会被执行,因此 sum 函数的返回值始终为 0。
2. 在计算阶乘时,变量 r 的类型应该为 long 或者 long long,否则当 n 较大时会导致结果出错。
下面是修改建议:
1. 删除 sum 函数中多余的分号。
```
int sum(int n) {
int r = 0, i;
for (i = 0; i < n; i++) {
r += i;
}
return r;
}
```
2. 将 fac 函数中的变量 r 的类型改为 long 或 long long。
```
long long fac(int n) {
long long r = 1, i;
for (i = 1; i < n + 1; i++) {
r *= i;
}
return r;
}
```
3. 在 main 函数中,应该先读入 n 的值再进行计算。
```
int main(void) {
int n;
scanf("%d", &n);
printf("%d\n", sum(n));
printf("%lld\n", fac(n));
return 0;
}
```
相关问题
从键盘输入任意10个整数,计算平均值。将程序补充完整。 #include<stdio.h> int main() { int i, ; int ; double aver; for(i=0;i<10;i++) { printf("请输入第%d个整数:\n",i+1); scanf("%d", ); } for(i=0;i<10;i++) { printf("%-5d",a[i]); sum+= ; } aver= ; printf("\nsum=%d\n",sum); printf("aver=%f\n",aver); return 0; } 第1空: 第2空: 第3空: 第4空: 第5空:
#include<stdio.h>
int main() {
int i, a[10]; //补充第一空
int sum = 0; //补充第二空
double aver;
for(i=0;i<10;i++)
{
printf("请输入第%d个整数:\n",i+1);
scanf("%d",&a[i]); //补充第三空
}
for(i=0;i<10;i++)
{
printf("%-5d",a[i]);
sum+=a[i]; //补充第四空
}
aver= sum/10.0; //补充第五空
printf("\nsum=%d\n",sum);
printf("aver=%f\n",aver);
return 0;
}
以下程序是编写函数判断数n是否是素数,在主函数中通过调用该函数计算并输出100以内所有素数之和,请判断错误,并进行详细分析#include <stdio.h>void prime(int n) { int k,i,flag; k = n/2;flag=1; for(i=2; i<=k; i++) if (n % i = 0 ) flag=0; return flag ; } void main() { int i,sum; sum=0;for(i=2;i<100;i++) if (!prime(i)) { sum=sum+i; }printf("%d\n",sum); }
这个程序存在一些错误:
1. prime函数的返回值类型应该是int而不是void,因为它需要返回一个整数类型的结果。
2. if条件语句中的判断符号应该是==而不是=,因为后者是赋值符号,会改变变量的值。
3. prime函数的最后应该返回flag的值而不是return flag,因为flag是局部变量,如果返回flag会导致编译错误。
4. prime函数中的循环条件应该是i<n而不是i<=k,因为i<=k只需要判断n的一半就可以判断是否为质数,但是i<n可以更快地排除非质数。
5. 在main函数中调用prime函数时,if条件语句的判断应该是if (prime(i))而不是if (!prime(i)),因为prime函数返回1表示n是质数,返回0表示n不是质数。
修改后的程序如下:
```c
#include <stdio.h>
int prime(int n)
{
int k, i, flag;
k = n / 2;
flag = 1;
for (i = 2; i < n; i++)
if (n % i == 0)
flag = 0;
return flag;
}
int main()
{
int i, sum;
sum = 0;
for (i = 2; i < 100; i++)
if (prime(i))
sum = sum + i;
printf("%d\n", sum);
return 0;
}
```
该程序的功能是计算100以内所有质数的和,输出结果为1060。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)