请问 这道C语言题我哪里错了呢

img

img

img


#include <stdio.h>
int main()
{
long int n, i, a, b, c, max, min;
i = 1;
scanf("%ld", &n);
scanf("%ld", &a);
max = min = a;
for (; i < n; i++) {
scanf("%ld", &b);
if (b > a) { max = b; }
else if (b < a) { min = b; }
}
c = max - min;
if(c>=0)printf("%ld\n",c);
else printf("-%ld\n", c);
return 0;
}

if (b > a) { max = b; }
else if (b < a) { min = b; }
这段代码的逻辑不对,应该用max和min跟b进行比较,而且也不应该用else if。正确的逻辑应该是:
if(b>max) max = b;
if(b<min) min = b;
代码修改如下:

#include <stdio.h>
int main()
{
    long int n, i, a, b, c, max, min;
    i = 1;
    scanf("%ld", &n);
    scanf("%ld", &a);
    max = min = a;
    for (; i < n; i++) {
        scanf("%ld", &b);
        if (b>max) { max = b; }
        if (b<min) { min = b; }
    }
    c = max - min;
    if (c >= 0)printf("%ld\n", c);
    else printf("-%ld\n", c);
    return 0;
}

题目要求 输入应该是一个数组 是找出数组中 任意两数之差的绝对值的最大值 你这里只可以两个数 所以结果不对哟

#include<stdio.h>
#include<stdlib.h>
#include <math.h>

int func(int nums[], int n)
{
    int max = 0;
    for (int i = 0; i < n; ++i){
        for (int j = i+1; j < n; ++j){
            if (abs(nums[i] - nums[j]) > max)
                max = abs(nums[i] - nums[j]);
            if (abs(nums[j] - nums[i]) > max)
                max = abs(nums[j] - nums[i]);
        }
    }
    return max;
}

int main(void)
{
 
    int n;
    int nums[100];

    scanf("%d", &n);
    for (int i = 0; i < n; ++i){
        scanf("%d", &nums[i]);
    }

    int max = func(nums, n);
    printf("%d", max);

    system("pause");
    return 0;
}

首先我们要解决的问题是max和min的初始值该怎么设置呢?
题目并没给我们整数输入的范围,最好的方法是将第一个数组的元素给max和min做初始值。
然后if(max<数组元素),就把它们交换。
if(min>数组元素),就把它们交换。
最后跳出循环,c=max-min,直接打印c就好,不用判断c大于0还是小于0

题目要求单独定义函数

img

img

img

ld改为d

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632