2401_84568704 2024-04-25 14:46 采纳率: 50%
浏览 4
已结题

标红线的地方,第一处显示未定义标识符,第二处显示必须含有常量。怎么解决呢?

编写函数fun,它的功能是:将整数×的各个位进行降序排序,返回排序后的数。比如,整数16349,各个位降序排序后得到的数是:9643 1。在m ain函数中验证。要求:x在m ain函数中由键盘输入。

img

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2024-04-25 14:46
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题解析:

    问题分为两处错误:

    1. 第一处错误为未定义标识符,这里指的是未定义变量digits。这可能是因为在fun函数中,digits数组并未定义。

    2. 第二处错误为必须含有常量,这里指的是在函数fun中的数组初始化中,数组长度必须为常量。

    解决方案:

    1. 在fun函数中,定义一个数组digits来存储整数x的各位数字。

    2. 修改fun函数中数组初始化部分,将数组长度设为常量MAX_LENGTH,并将MAX_LENGTH设为一个合适的整数值。

    3. 在fun函数中,降序排序digits数组中的各个元素,并将排序后的数字存入sortedNum中。

    4. 将fun函数的返回值设为sortedNum。

    修改后的代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_LENGTH 10
    
    int fun(int x);
    
    int main() {
        int x, result;
        printf("请输入一个整数:");
        scanf("%d", &x);
        result = fun(x);
        printf("原来的数字为:%d\n", x);
        printf("降序后的数字为:%d\n", result);
        return 0;
    }
    
    int fun(int x) {
        int digits[MAX_LENGTH];
        int i, j, length = 0, sortedNum = 0;
        if (x < 0) x = -x;
        while (x > 0) {
            digits[length++] = x % 10;
            x /= 10;
        }
        for (i = 0; i < length - 1; i++) {
            for (j = i + 1; j < length; j++) {
                if (digits[i] < digits[j]) {
                    int temp = digits[i];
                    digits[i] = digits[j];
                    digits[j] = temp;
                }
            }
        }
        for (i = 0; i < length; i++) {
            sortedNum = sortedNum * 10 + digits[i];
        }
        return sortedNum;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月25日