习题集1
题目:






习题讲义1:
8:A二维数组前下标表示行号,第一行用x[0]表示,所以可以表示3个int组成的一维数组。
B:同A选项,它是一维数组名。
C:2*3=6
D:没有这种赋值方法,x[0]是一个地址。
10:C:一方为真,整体就为真,x肯定只能等于一个数,所以不可能同时等于5和10,所以x!=5和x!=10必有一个是真。
14:typedef是将中间的类型定义到后面的。如typedef int size;
,此时size就成了int。
18:A:声明是5个,赋值了6个,可能会越界。B:可以这样,转换为ASCII码对应的字符。C:不是字符数组,不能赋值多个字符。D:int数组不能赋值字符串。
21:在C语言里这个符号“ ^ ”表示“按位异或”运算符,主要用在二进制。先将两个整数化成二进制位数。在每个对应的位数中,只有两者的该位上一个是1或者0,而另一个的该位上必须是相反的,那么做该运算该位的结果就是1。否则结果就是0。也就是说,相同就是0不相同才是1。
3(DEC)->0011(BIN) 2(DEC)->0010(BIN)
所以3^2为0001(BIN)->1(DEC)
~表示取二进制的反码,如~0010为1101。
|是二进制或运算符1010 | 1011 == 1011,一个为1即为1。
所以b=~(0101|0010|11110000)==~11110111==00001000(BIN)->8(DEC)
所以答案:1和8
25:a[6-8/2]==a[6-4]==a[2]==3;这种题为什么要问?
36:A:abs()是stdlib.h中的函数,用于取整型的绝对值。但A无号,错误;B:无号,看都不用看,错的。C……这题我不想讲了,肯定少了某些符号。
39:切换指针位置的函数rewind()所以选D
40:B:真值逻辑是不为0。而不仅仅是1。
46:mark是一个数组名,是地址,数组的地址是const常量(常量指针),不能赋值。
48:A选项用rand()%10000来产生10000以内的随机数,再/100.0转换为100以内的浮点数,因为之前是10000以内的int数,除了100,后面两位就变成了小数。
49:略
55:你给我解释一下你为什么选D?C:如果空语句出现在语句中间呢?
59:A:’’只能用在一个字符上,不能用在字符串上。D是八进制011的ASCII码也就是9转换的字符。注意,八进制以0开头。且后面的数不能超过7,逢8进1。
60:C:不是路径信息,而是地址信息。D你可能把fscanf和fprintf的作用搞反了。。。
61:A选项其实有问题,应该是FILE。B:两个指针不是一个东西。
64:D是一个返回int类型的函数,pt是函数名。A表示指向数组pt的指针。
65:我说过很多次8进制是0开头,不是o。
71:前面有,原题。
75:运算符优先级的问题,->优先级高于++,多看看书吧,优先级我也记不全。
76:C明显是错的,int a怎么传入多个数呢?应该声明为数组或者指针。
77:形参声明请用分号分开。A和D简直是瞎胡闹。
81:都是学过的,自己看它算的什么。
题目来自我的室友,讲义本人亲自编写。2020-08-12
习题集2
题目:










习题讲义2:
53: 首先运算符优先级 左移<<
比 异或^
高,所以c=a^(b<<2)
先执行b左移2位操作,b的二进制为110,左移两位11000
然后执行异或操作(同一个位置的二进制不同取1,相同取0),a的二进制为 011,所以011^11000= 00011^11000 = 11011
所以答案是11011
57:略
61:书上写的很清楚
63:将文件指针重置
64:声明但未定义,k值不确定
66:数组名就是指针,是一个地址
71:书上有具体介绍,w是清除原内容再进行写操作,所以不能读
72:指针可以指向结构体,访问结构体成员需要用->而不是用指针。
75:case1和2虽然看起来没有任何语句,但是缺少break;所以程序会运行case1或2之后的case语句部分
76:声明不能连等!
77:D选项scanf接收一个字符串,后面得填一个地址(数组首地址)也就是数组名s.所以D是错的;A是gets函数,注意和getchar的区别,错误和D差不多,这道题的A选项应该是漏写了&,A其实也是错的,应该改为gets(&s[0])。
81:A形参不影响实参,不是占用同一个单元。B形参是临时存在,不是不存在,函数调用结束后释放。C与A同理。
83:略
86:转换为弧度制即可,C语言不用角度制。
88:&&有一个假就是假,至于另一个是真还是假,不重要,所以另一个短路,A选项a=0未假,所以后面的b++被短路,不做运算。
90:feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值;文件未结束:返回0值)。
91:把2*
写在malloc外面,直接将malloc分配的空间破坏了,p指向另一块内存了,A错误。C可以是对的,在32位架构中int就占2个字节,所以malloc(2*
2)不算错。
95:略,自行查阅相关math.h中的函数。
96:C可以用表达式。
比如
#define X1 2
#define X2 3
int main() {
int a[X1 + X2];
}
D不能用浮点数。
97:A指针的运算,正确的。D指针只能写地址,地址通常为16进制。
98:二维数组基础,略。
99:A不一定,可以只存在函数,被另一个C程序include。C不能调用main函数。
题目来自我的室友,讲义本人亲自编写。2020-08-12
习题集3
题目:




习题讲义3:
6:j++就是j=j+1,j+=1;,所谓的自增运算,是赋值。
17:是个难题,看图,看不懂就算了,不强求。

(右键将图片另存为就看得清楚了)
20:B:格式描述项个数不足,那就不输出k,不会输出0或不定值。
22:不写类型那么默认是int 如:main()等价于int main()。
28:A:基类型相同可以指向同一块内存,一个地址可以被多个指针指向。B:指针的运算
29:D错在void (*pf)(int ,char)
标红部分应该是char*而不是char。
45:强制类型转换为int型指针,所以是int *
,你选个*int
是什么意思?
52:C本身就是二进制,不需要转换,不可读,需要用fwrite写,fread读。
69:此题乱七八糟,到处都是语法错误,不说了。
73:A漏写分号
75:表达式可以简化为x!=0,x!=0
又可以简化为x。B是正确的。
76:典型的||短路计算,n=c>d
被短路,n不做改变,依旧是2。
85:略
99:fread()函数用法:fread(&s[i], sizeof(stu), 1, fp)
四个参数分别为,数据要存入的地址;这块内存的字节大小;读取次数;文件指针
题目来自我的室友,讲义本人亲自编写。2020-08-22
持续更新中…