可以帮麻瓜看看代码吗thx!

浙大的c语言入门课程的练习题:

img

DEVC++运行结果是这样:

img

上传到慕课却显示不对

img

代码如下:


#include
int main(){    
    const int number1=7;
    int count1[number1]={0};
    const int number2=7;
    int count2[number2]={0};
    count2[1]=1;
    int num,a,i,j,k,l;
    int shuwei=0;
    int b=1;
    int sum=0;
    
    scanf("%d",&num);

    for(i=10;i<1000001;i*=10){
        a=num%i/(i/10);
        shuwei++;
        if((a%2)==(shuwei%2)){
            count1[shuwei]=1;
        }else
        count1[shuwei]=0;
 
        printf("count1[%d]=%d ",shuwei,count1[shuwei]);
    }

    printf("\n");
    
    for(j=2;j<7;j++){
        b*=2;
        count2[j]=b;
    }
    for(k=1;k<7;k++){
        printf("count2[%d]=%d ",k,count2[k]);
    }
    printf("\n");
    
   for(l=1;l<7;l++){
       sum+=((count1[l])*(count2[l]));
   }
   
   printf("sum=%d",sum);

    return 0;
}

zhe.c: In function ‘main’:
zhe.c:14:5: error: variable-sized object may not be initialized
   14 |     int count1[number1]={0};
      |     ^~~
zhe.c:16:5: error: variable-sized object may not be initialized
   16 |     int count2[number2]={0};

在linux上编译跟你一样的错误,意思是你定义数组时可以用变量定义数组长度,但不可初始化。
解决方法:开头定义的count1、count2数组不初始化,或者不用变量名字充当数组长度,直接 int count1[7] = {0};即可。
有什么不对的地方,欢迎指正。


#include <stdio.h>

int main() {
    const int MAX_DIGITS = 20;   // 最大位数
    int num, digits[MAX_DIGITS], count1[MAX_DIGITS] = {0}, count2[MAX_DIGITS] = {0};
    int i, j;

    // 输入整数num
    scanf("%d", &num);

    // 将num的每一位数字从右往左存储到digits数组中
    int length = 0;   // 数字位数
    while (num > 0 && length < MAX_DIGITS) {
        digits[length] = num % 10;
        num /= 10;
        length++;
    }

    // 判断digits数组中每个数字的奇偶性是否和它们的位置奇偶性相同
    for (i = 0; i < length; i++) {
        if ((digits[i] % 2) == ((i + 1) % 2)) {
            count1[i] = 1;
        } 
    }

    // 计算二进制数从右往左每一位的值
    int b = 1;
    for (j = 0; j < length; j++) {
        count2[j] = b;
        b *= 2;
    }

    // 将count1和count2对应位置的值相乘并累加到sum中
    int sum = 0;
    for (i = 0; i < length; i++) {
        sum += count1[i] * count2[i];
    }

    // 输出sum的值
    printf("sum = %d\n", sum);

    return 0;
}

数组长度在标准C中是不允许设置不定长的,允许数组使用已赋值的变量作为长度是在后面C99标准才允许的。
你这报错可能是慕课上环境不支持C99标准,建议直接定义一个定长的数组

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    无法解决该问题,需要更多信息和具体的运行结果才能进行诊断和优化。建议提供完整的代码和更多详细信息,例如预期结果和实际结果的差异以及出现该问题的具体情况。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^