新编C语言习题与解析
做习题时发现有些错误答案,写篇博客进行改正记录。不对地方欢迎指正~
第二章
C. 其中b的表达形式错误,若加上0x1e2b则正确。所以C错误。
D. e后为整数。指数命名规则:e前有数,后有整数。所以D错误。
乘除和求余的优先级一样高。 所以正确的解释如下:
2.5+1*7%2/4=2.5+7%2/4=2.5+1/4=2.5+0=2.5。
之后再统一精度。
第三章
根据后面选项,可知题目为-1.
A. case后的常量表达式不是整型,且switch后也不是整型;
B. switch(a);后有分号错误;
C. case后的常量表达式不是整型;
D. switch(a+b);后有分号。若无分号,正确答案为D。
少了个S,应该都看得出来。
输出部分偶数之和应该直接输出c,而不是c-11。
#include <stdio.h>
int main()
{
int a,b,c;
a=c=0;
for (int i = 0; i < 10; i+=2)
{
a+=i;
b=i+1;
c+=b;
}
printf("even = %d\n",a);
printf("odd = %d\n",c);
} // namespace std;
- j%2==1当判断条件为1的时候输出
- 每个集合之间有逗号(数字之间的逗号可以用个if做一下)
#include<stdio.h>
int main(){
int n,m,i,j,k;
printf("n=");
scanf("%d",&n);
//计算具有子集的个数
m=1;
for(i=1;i<=n;i++){
m=m*2;
}
m--;
for(i=0;i<=m;i++){
printf("{");
j=i;
k=0;
while(j!=0){
if(j%2==1) printf("%d",k);
k++;
j/=2;
}
printf("},");
if((i+1)%5==0) printf("\n");
}
printf("\n");
}
第四章
在定义数组时,定义赋初值的个数等于数组长度,则数组长度可以省略,所以只给部分数组元素赋初值时,对数组的长度声明不能省略。故答案为A、B。
简记:一维数组可以省略,二维数组行能省略,列不能。
这里有一个歧义题目:
书上说:定义静态数组时才会初始化全为0。该定义不是静态数组,故将初值只赋值给前两个元素。
网上说:数组为初始化,中存放的是乱码,但是只要初始化一个数,其余数据自动填充0,所以数组元素都为0。
两者歧义,先按照书上定义的来,另外苏小红书中也提到静态数组定义的时候会将数组元素赋为0。