求解答,大一刚学C语言,学到循环结构,请问下面代码有什么问题(好像问题挺大),编译成功,但运行总是有问题,不能交换两数,即使输出有结果,也会在结果后输出一个error,帮忙解答一下,写的很乱,麻烦大家帮忙解答一下,非常感谢。
完数是指一个整数恰好等于它的因子之和(除自身外),则称这个数为完数。从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。
【输入形式】
先后输入两个正整数m和n,用逗号分隔
【输出形式】
输出所有完数,每两个数之间用逗号分隔。若输入非法,则输出“error”
【样例输入】
1,2000
【样例输出】
6,28,496
【样例说明】
无
【评分标准】
正确性
#include
int main(){
int m,n,a,b,sum;
scanf("%d,%d",&m,&n);
if(m>9999||n>9999) printf("error");
else {if(m>n){
n=m;
m=n;
}
for(a=m;a<=n;a++){
for(b=1,sum=0;bif(a%b==0) sum=sum+b;
}
if(sum==a) printf("%d,",a);
}
if(a!=sum) printf("error");
}
return 0;
}
在这段代码中,有以下问题:
if (m > n) {
int temp = m;
m = n;
n = temp;
}
if (m > 9999 || n > 9999) {
printf("error");
} else {
// ...
}
for (b = 1, sum = 0; b <= a / 2; b++) {
if (a % b == 0) {
sum += b;
}
}
if (sum == a) {
printf("%d,", a);
}
参考GPT和自己的思路:这段代码存在以下问题:
下面是修改过的代码:
#include<stdio.h>
int main(){
int m,n,a,b,sum;
scanf("%d,%d",&m,&n);
if(m>9999||n>9999) printf("error");
else {
if(m>n){
int a = m;
m = n;
n = a;
}
for(a=m;a<=n;a++){
sum = 0;
for(b=1;b<a;b++){
if(a%b==0) sum=sum+b;
}
if(sum==a) printf("%d,",a);
}
if(a-1!=sum) printf("error");
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
#define N 5
int main() {
int a[N], b[N], m;
printf("请输入m的值:\n");
scanf_s("%d",&m);
//1 2 3 4 5
for (int i = 0; i < N; i++) {
printf("请输入第%d个元素:\n",i+1);
scanf_s("%d", &a[i]);
}//m=2
for (int i = 0; i < m; i++) {//4 5
b[i] = a[N - m + i];//将要移动的最后元素保存在数组b中
}
for (int i = N - 1; i >= m; i--) {//1 2 3 4 5 -> 1 2 1 2 3
a[i] = a[i - m];//拿到其他元素从后往前一次赋值
}
for (int i = 0; i < m; i++) {//1 2 1 2 3 -> 4 5 1 2 3
a[i] = b[i];//将保存在数组b中的元素依次赋值到a数组中的前面位置
}
printf("移动后的数组:\n");
for (int i = 0; i < N; i++) {
printf("%-3d", a[i]);
}
return 0;
}
18.运输公司对用户计算运输费用,距离(s)越长,每公里运费越低。
每公里每吨货物的基本运费3元,距离不同标准不同,标准如下:
S<250公里 标准运价的100% 没有折扣
250<=s<500 公里 标准运价的98% 2%折扣
500<=s<1000 公里 标准运价的95% 5%折扣
1000<=s<2000 公里 标准运价的92% 8%折扣
2000<=s<3000 公里 标准运价的90% 10%折扣
3000<=s 公里 标准运价的85% 15%折扣
编写程序根据距离和货物重量计算运费
#include <stdio.h>
int main(){
float w, sum, z;
int x, s;
printf("请输入重量:");
scanf_s("%f", &w);
printf("请输入距离:");
scanf_s("%d", &s);
if (s >= 3000)
x = 12;
else
x = s / 250;
switch (x) {
case 0: z = 0; break; //代表250km以下,折扣z = 0
case 1: z = 2; break; //代表250~500km以下,折扣z=2%
case 2: break;
case 3: z = 5; break; //代表500~1000km,折扣z=5%
case 4: break;
case 5: break;
case 6: break;
case 7: z = 8; break; //代表1000~2000km,折扣z=8%
case 8: break;
case 9: break;
case 10: break;
case 11: z = 10; break; //代表2000~3000km,折扣z=10%
case 12: z = 15; break; //代表3000km以上,折扣z=15%
default:printf("输入数据错误!\n"); break;
}
sum = 3 * w * s * (1 - z / 100);
printf("总运费是:%f\n", sum);
return 0;
}