浙大的c语言入门课程的练习题:
DEVC++运行结果是这样:
上传到慕课却显示不对
代码如下:
#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标准,建议直接定义一个定长的数组
无法解决该问题,需要更多信息和具体的运行结果才能进行诊断和优化。建议提供完整的代码和更多详细信息,例如预期结果和实际结果的差异以及出现该问题的具体情况。