新编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");
}