热门搜索 :
考研考公
您的当前位置:首页正文

C语言程序设计基础习题集

来源:伴沃教育


C语言程序设计基础习题集

一、选择填空

知识点1:C程序的基本结构和算法基本概念

1. C语言程序的基本单位为_______。

2. A) 程序行 B) 语句 C) 函数 D) 字符

3. 用C语言编写的代码程序______。

4. A)可立即执行 B)是一个源程序

C)经过编译即可执行 D)经过编译解释才能执行

5. 以下叙述中正确的是______。

6. 出操作

A)用C程序实现的算法必须要有输入和输

7. 须要输入

B)用C程序实现的算法可以没有输出但必

8. 须要有输出

C)用C程序实现的算法可以没有输入但必

1

9. 没有输出

D)用C程序实现的算法可以既没有输入也

10.

结构组成的算法____。

结构化程序由三种基本结构组成,三种基本

11.

B)只能完成部分复杂的任务

A)可以完成任何复杂的任务

12.

D)只能完成一些简单的任务

C)只能完成符合结构化的任务

13. 在一个C程序中______。

14. A) main函数必须出现在所有函数之前

15. B) main函数可以在任何地方出现

16. C) main函数必须出现在所有函数之后

17. D) main函数必须出现在固定位置

18. 下列关于C语言的叙述错误的是______。

19. A) 大写字母和小写字母的意义相同

2

20. B) 不同类型的变量可以出现在同一个表达式中

21. C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型

22. D) 同一个运算符号在不同的场合可以有不同的含义

23. 以下叙述中错误的是_______。

24. A)C程序中的#include和#define行均不是C语句

25. B)除逗号运算符外,赋值运算符的优先级最低

26. C)C程序中,j++;是赋值语句

27. D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算

28. 以下程序的功能是给r输入数据后计算半径为r的圆面积s。程序在编译时出错,

出错的原因是________。

29. main()

30. /* Beginning */

31. { int r; float s;

32. scanf(\"%d\

3

33. s=p*r*r; printf(\"s=%f\\n\

34. }

35. 整型

A)注释语句书写位置错误 B)存放圆半径的变量r不应该定义为

36. 法变量

C)输出语句中格式描述符非法 D)计算圆面积的赋值语句中使用了非

知识点2:数据和表达式计算

37. 以下标识符中,不能作为合法的C语言用户定义标识符的是_____。

38. A) a3 B) if C) _123 D) IF

39. 以下数据中,不正确的数值或字符常量是_____。

40. 0xabcd

A) 011 B) 3.987E-2 C) 018 D)

41. 若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是______。

42. A) ++x, y=x- - B) x+1=y C) x=x+10=x+y D)

double(x)/10

4

43. 以下不正确的C语言标识符是____。

44. A) int B) a_1_2 C) ab1exe D) _x

45. 以下是正确的C语言标识符是____。

A) #define B) _123 C) %d D) \\n

46. 下列不属于C语言关键字的是 ____。

A) default B) register C) enum D) external

47. 正确的自定义标识符是_______。

A)if B)iF C)a*b D)8bq

48. 正确的

自定义标识符是

________。

A)a=2 B)a+b C)name D)default

49. C语言的关键字是________。

A)NULL B)file C)include D)typedef

50. C语言程序从main()函数开始执行,所以main函数要写在____。

5

51. A) 程序文件的开始 B) 程序文件的最后 C) 它所调用的函数的前面 D) 程

序文件的任何位置

52. 在C语言中,错误的常数是______。

53. A)1E+0.0 B)5 C)0xaf D)0L

54. 在C语言中,错误的int类型的常数是____ 。

55. A) 32768 B) 0 C) 037 D) 0xAF

56. C语言中最简单的数据类型包括_______。

57. A)整型、实型、逻辑型 B)整型、实型、字符型

58. C)整型、字符型、逻辑型 D)整型,实型,逻辑型,字符型

59. 下列变量定义中合法的是_______。

60. A) short _a=1-.le-1; B) double b=1+5e2.5;

61. C) long do=0xfdaL; D) float 2_and=1-e-3;

62. 在C语言中,整数-8在内存中的存储形式是________ 。

63. A) 1111 1111 1111 1000 B) 1000 0000 0000 1000

6

64. C) 0000 0000 0000 1000 D) 1111 1111 1111 0111

65. C语言中字符型(char)数据在内存中的存储形式是____。

66. A) 原码 B) 补码 C) 反码 D) ASCII码

67. 将字符g赋给字符变量c,正确的表达式是____ 。

68. A) c=\\147 B) c=\"\\147\" C) c=' \\147' 69. 将空格符赋给字符变量c,正确的赋值语句是____。

70. A) c='\\0' B) c=NULL C) c=0 71. 字符串\"\\\"EOF\\n=-\\61\\\"\"的长度是____。

72. A) 8 B) 9 C) 14 73. 字符串\"\"的长度是____。

74. A) 0 B) 1 C) 2 75. 错误的转义字符是____。

76. A) '\\091' B) ' \\\\' C) '\\0' 7

D) c='0147'

D) c=32

非法字符串

D) 非法字符串 D) ' \\''

D)

77. 以下两组字符中,不正确的C语言转义字符分别是_____。

78. A) '\\\\' B) '071' C) '\\b' D) ' \\xaa'

79. 若有以下程序段,c3中的值是_____。

80. int c1=1,c2=2,c3;

81. c3=c1/c2;

82. A) 0 B) 1/2 C) 0.5 D ) 1

83. 设有 int x=11; 则表达式 (x++ * 1/3) 的值是_____。

84. A) 3 B) 4 C) 11 D) 12

85. 以下选项中,值为1的表达式______。

86. A)1-\"0\" B)1-\"\\0\" C)\"1\"-0 D)\"\\0\"-\"0\"

87. 设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两

位,并将第三位四舍五入的是_____ 。

88. A) x=x*100+0.5/100.0 B) x=(x*100+0.5)/100.0

89. C) x=(int)(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0

8

90. 表达式3.6-5/2+1.2+5%2的值是______。

91. A)4.3 B)4.8 C)3.3 D)3.8

92. 已知 int a[3][2]={3,2,1};则表达式\"a[0][0]/a[0][1]/a[0][2]\"的值是____。

93. A) 0.166667 B) 1 C) 0 D) 错误的表达式

94. 逗号表达式\"(a=3*5,a*4),a+15\"的值是____。

95. A) 15 B) 60 C) 30 D) 不确定

96. 已知int x=(1,2,3,4);变量x的值是____。

97. A) 1 B) 2 C) 3 D) 4

98. 如果int a=1,b=2,c=3,d=4;则条件表达式\"a99. A) 1 B) 2 C) 3 D) 4

100. 与条件表达式\"(n)?(c++):(c--)\"中的表达式(n)等价的表达式是____。

101. A) (n==0) B) (n==1) C) (n!=0) D) (n!=1)

102. 已知 int x=1,y=1,z=1;表达式\"x+++y+++z++\"的值是____。

9

103. A) 3 B) 4 C) 5 D) 表达式错误

104. 已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是_____。

105. A) c=(c-'A')%26+'a' B) c=c+32 C) c=c-'A'+'a' D) c=('A'+c)%26-'a'

106. 表达式sizeof(double)是 _____。

107. A) 函数调用 B) double型表达式 C) int型表达式 表达式

知识点3:输入输出

108. 下列程序的输出结果是_____。

109. A) 3 B) 3.2 C) 0 D) 3.07

110. main()

111. { double d=3.2; int x,y;

112. x=1.2; y=(x+3.8)/5.0;

113. printf(\"%d \\n\

10

D) 非法

114. }

115. 下列程序执行后的输出结果是(小数点后只写一位)_____。

116. A) 6 6 6.0 6.0 B) 6 6 6.7 6.7

117. C) 6 6 6.0 6.7 D) 6 6 118. main()

119. { double d; float f; ling l; int i;

120. i=f=1=d=20/3;

121. printf(\"%d %ld %f %f \\n\

122. }

123. 执行语句 printf(\"%x\;屏幕显示____。124. A) -1 B) 1 125. 若a为整型变量,则以下语句______。

126. a=-2L;

11

6.7 6.0

C) -ffff

D) ffff

127. printf(\"%d\\n\",a);

128. A) 赋值不合法 B) 输出值为-2 C)输出为不确定值 D) 输出值为2

129. 若变量都已正确定义,则程序段______。

130. a=3; b=4;

131. a>b?printf(\"* * *a=%d\=%d\",b++);

132. A) 输出为:* * * a=4 B) 输出为:* * * a=3

133. C) 输出为:# # # b=4 D) 输出为:# # # b=5

134. 使用语句scanf(\"x=%f,y=%f\输入变量x、y的值(□代表空格),正确的输入是____。

135. A) 1.25,2.4 B) 1.25□2.4 C) x=1.25,y=2.4 D) x=1.25□y=2.4

136. 设有输入语句 scanf(\"a=%d b=%d\如果运行程序,该如何输入数据______。

137. A) a=6,b=7 B) 6 7 C) a=6 b=7 D) 6,7

12

138. 设int a=3,b=4; 执行printf(\"%d,%d\后的输出结果是_____

139. A) 3,4 B)4,3 C)4,4 D)3,3

140. 有以下程序,以下叙述中正确的是_____。

141. main()

142. { char a1='M', a2='m';

143. printf(\"%c\\n\

144. A)程序输出大写字母M 145. C)格式说明符不足,编译出错 146. 有以下程序

147. main()

148. { int m=12,n=34;

149. printf(\"%d%d\

150. printf(\"%d%d\\n\

B)程序输出小写字母m

D)程序运行时产生出错信息

13

151. }

152. 程序运行后的输出结果是______。

153. A)12353514 B)12353513 C)12343514 D)12343513

知识点4:逻辑量和逻辑表达式

154. 在C语言中,能代表逻辑值“真”的是______。

155. A) true B)大于0的数 C)非0整数 D)非0的数

156. 设int x=0,y=1;则表达式(x&&- -y)运算完毕后,y的值是_____。

157. A) 0 B) 1 C) 2 D) –1

158. 设 int x=1, y=1; 表达式(!x||y--)的值是

159. A) 0 B) 1 C) 2 D) -1

160. 设int x=1,y=1;则表达式(x||- -y)运算完毕后,y的值是( ):

161. A) 0 B) 1 C) 2

14

D) –1

162. 已知:char a;int b;float c;double d;执行语句\"c=a+b+c+d;\"后,变量c的数据类型是____ 。

163. A) int B) char C) float D) double

164. 设int a=0,b=5; 执行表达式++a||++b,a+b后,a,b和表达式的值分别是_____。

165. A)0,0,0 B)0,5,5 C)1,5,6 D)1,6,7

166. 已知int x=1,y;执行下述语句后变量x的值是____。

167. y=++x>5&&++x<10;

168. A) 1 B) 2 C) 3 D) 4

169. 关系表达式a≤x<b的正确描述是

170. A)a<=x=a&&x=a||x=b)

171. 设有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&k 的值为

172. A)0 B)1 C)2 D)3

173. 为判断字符变量c的值不是数字也不是字母时,应采用下述表达式____。

15

174. A) c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122

175. B) !(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)

176. C) c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122

177. D) !(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)

178. 设有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&k 的值为

179. A)0 B)1 C)2 D)3

知识点5:位运算

180. 在位运算中,操作数每右移一位,其结果相当于____。

181. A) 操作数乘以2 B) 操作数除以2 C) 操作数除以16 D) 操作数乘以16

182. 已知二进制数a是00101101,如果想通过整型变量b与a做异或运算,使变量a的高4位取反,低4位不变,则二进制数b的值应是____。

183. A) 11110000 B) 00001111 C) 11111111 D) 00000000

184. 已知 int a=15,执行语句a=a<<2以后,变量a的值是____。

16

185. A) 20 B) 40 C) 60 D) 80

知识点6:选择结构和if、switch 语句

186. 把以下四个表达式用作if语句的控制表达式时,选项_______与其它三个选项含义不同。

187. 188. 189. 190. 191. 192. 193. 194. 195. 196. A)k%2 B)k%2==1 C)(k%2)!=0 D)!k%2==1

在嵌套使用if语句时,C语言规定else总是________。

A)和之前与其具有相同缩进位置的if配对

B)和之前与其最近的if配对

C)和之前与其最近的且不带else的if配对

D)和之前的第一个if配对

在以下给出的表达式中,与while(E)中的(E)不等价的表达式是_______。

A)(!E==0) B)(E>0‖E<0)

C)(E==0) D)(E!=0)

下列叙述中正确的是________。

17

197. A)break语句只能用于switch语句

198. B)在switch语句中必须使用default

199. C)break语句必须与switch语句中的case配对使用

200. D)在switch语句中,不一定使用break语句

201. 下列条件语句中,功能与其他语句不同的是______。

202. A) if(a) printf(\"%d\\n\

203. B) if(a==0) printf(\"%d\\n\

204. C) if (a!=0) printf(\"%d\\n\

205. D) if(a==0) printf(\"%d\\n\

206. 以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是________。

A) if((a>b) &&(b>C) ) k=1; B) if((a>b) ||(b>C) ) k=1

else k=0;

C) if(a<=b) k=0; D) if(a>b) k=1;

18

else if(b<=C) k=1; else if(b>C) k=1;

else k=0;

207. 已知int i=1,j=0;执行下面语句后j的值是____。

208. while(i)

209. switch(i)

210. { case 1: i+=1;j++;break;

211. case 2: i+=2;j++;break;

212. case 3: i+=3;j++;break;

213. default: i--;j++;break;

214. }

215. A) 1 B) 2 C) 3 知识点7:循环结构 while 、do~while和for语句

216. 下面的for语句______ 。

19

死循环

D)

217. for(x=0,y=10;(y>0)&&(x<4);x++,y-- ) ;

218. A) 是无限循环 B) 循环次数不定 C) 循环执行4次 D) 循环执行3次

219. 在以下给出的表达式中,与while(E)中的(E)不等价的表达式是______。

220. A)(!E==0) B)(E>0‖E<0) C)(E==0) D)(E!=0)

221. 有以下程序段,则while循环执行的次数为_______。

222. int k=0;while(k=1) k++;

223. while循环执行的次数为_______。

224. A)无限次 B)有语法错,不能执行 C)一次也不执行 D)执行1次

225. 要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是________。

226. A)while((ch=getchar())!=′N′)printf(\"%c\

227. B)while(ch=getchar()!=′N′)printf(\"%c\

228. C)while(ch=getchar()==′N′)printf(\"%c\

20

229. D)while((ch=getchar())==′N′)printf(\"%c\

230. 已知int i=1; 执行语句while (i++<4) ;后,变量i的值为____。

231. A) 3 B) 4 C) 5 D) 6

232. 233. 234. 235. 236. 237. 238. 239. _____。

240. 241. 以下程序执行后的输出结果是______。

main()

{int y=10;

while(y--);printf(\"y=%d\\n\",y);

}

A)y=0 B)y=-1

C)y=1 D)while构成无限循环

若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是A)for(i=1,p=1;i<=5;i++) p*=i;

B)for(i=1;i<=5;i++){ p=1; p*=i;}

21

242. C)i=1;p=1;while(i<=5){p*=i; i++;}

243. D)i=1;p=1;do{p*=i; i++; }while(i<=5);

244. 有以下程序段,为使此程序段不陷入死循环,从键盘输入的数据应该是______。

245. int n,t=1,s=0;

246. scanf(\"%d\

247. do{ s=s+t; t=t-2; }while (t!=n);

248. A)任意正奇数 B)任意负偶数 C)任意正偶数 D)任意负奇数

249. 以下程序执行后的输出结果是_______。

250. main( )

251. { int i,s=0;

252. for(i=1;i<10;i+=2) s+=i+1;

253. printf(“%d\\n”,s);

254. }

22

255. A) 自然数1~9的累加和 B) 自然数1~10的累加和

256. C) 自然数1~9中的奇数之和 D) 自然数1~10中的偶数之和

知识点8:数组的基本概念和引用

257. 258. 259. 260. 261. 262. ______。

263. 264. 265. 266. 下述对C语言字符数组的描术中错误的是______。

A)字符数组可以存放字符串

B)字符数组中的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是A)#define N 10 B)#define n 5

int a[N] int a[2*n]

C)int a[5+5] D)int n=10,a[n]

以下语句中存在语法错误的是________。

23

267. A)char ss[6][20];ss[1]= \"right? \";

268. B)char ss[][20]={ \"right? \

269. C)char *ss[6];ss[1]= \"right? \";

270. D)char *ss[]={\"right? \

271. 设有数组定义:char array [ ]=\"China\"; 则数组 array所占的空间为______。

272. A)4字节 B)5字节 C)6字节 D)7字节

273. 二维数组的正确说明是____。

274. A) int a[][]={1,2,3,4,5,6}; B) int a[2][]={1,2,3,4,5,6};

275. C) int a[][3]={1,2,3,4,5,6}; D) int a[2,3]={1,2,3,4,5,6};

276. 对字符数组s赋值,不合法的一个是____。

277. A) char s[]=\"Beijing\";

278. B) char s[20]={\"beijing\;

279. C) char s[20];s=\"Beijing\";

24

280. D) char s[20]={'B','e','i','j','i','n','g'};

281. 字符数组str赋初值,str不能作为字符串使用的一个是____。

282. A) char str[]=\"shanghai\";

283. B) char str[]={\"shanghai\;

284. C) char str[9]={'s','h','a','n','g','h','a','i'};

285. D) char str[8]={ 's','h','a','n','g','h','a','i'};

286. 以下能正确定义字符串的语句是_____。

287. A)char str[ ]={′\\064′}; B)char str=\"kx43\";

288. C)char str=\"; D)char str[ ]=\"\\0\";

289. 有以下程序,则以下叙述中正确的是______。

290. #include

291. main()

292. { char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};

25

293. printf(\"%d %d\\n\

294. }

295. A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3

296. 3

297. 3

298. 299. 300. 301. 302. 303. 304. B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为D)由于p和q数组中都没有字符串结束符,故长度都不能确定

已有定义:char a[]=\"xyz\,以下叙述中正确的是______。

A)数组a和b的长度相同 B)a数组长度小于b数组长度

C)a数组长度大于b数组长度 D)上述说法都不对

以下叙述中错误的是______。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B)数组名代表的是数组所占存储区的首地址,其值不可改变

26

305. C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

306. D)可以通过赋初值的方式确定数组元素的个数

知识点9:变量的作用域和生存期

307. 如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。

308. A) 静态变量 B) 动态变量 C) 外部变量 D) 内部变量

309. 在一个C源程序文件中,•若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是 。

310. A) extern B) register C) auto D) static

311. 某文件中定义的静态全局变量(或称静态外部变量)其作用域是______。

312. A)只限某个函数 B)本文件 C)跨文件 D)不限制作用域

知识点10:函数

313. 函数返回值的类型是由______。

27

314. A)return决定 B)调用函数决定 C)定义函数时指定

D)main函数决定

315. 若用数组名作为函数调用时的实参,则实际上传递给形参的是 。

316. A) 数组首地址 B) 数组的第一个元素值

317. C) 数组中全部元素的值 D) 数组元素的个数

318. 当调用函数时,实参是一个数组名,则向函数传递的是______。

319. A)数组的长度 B)数组每一个元素地址 C)数组的首地址 每个元素中的值

320. 以下说法中正确的是_____。

321. A) C语言程序总是从第一个的函数开始执行

322. B) 在C语言程序中,要调用的函数必须在main()函数中定义

323. C) C语言程序总是从main()函数开始执行

324. D) C语言程序中的main()函数必须放在程序的开始部分

325. 在C语言中,正确的说法是_____。

28

D)数组

326. A)函数内部和外部定义的变量同名是合法的

327. B)没有return 的函数就失去了返回功能

328. C)变量的定义和声明(也称说明)功能是相同的

329. 330. 331. 332. 333. 334. 335. 336. 337. 法确定

338. D)只要形参和实参都是变量,那么形实结合一定是地址传递

在C语言中,函数的数据类型是指____。

A) 函数返回值的数据类型 B) 函数形参的数据类型

C) 调用该函数时的实参的数据类型 D) 任意指定的数据类型

已知如下定义的函数,则该函数的数据类型是______。

fun1(a)

{ printf(\"\\n%d\;

}

A) 与参数a的类型相同 B) void型 C) 没有返回值 D) 无一个函数内有数据类型说明语句double x,y,z(10); ,关于此语句的解释,下

29

面说法正确的是____。

339. A) z是一个数组,它有10个元素。

340. B) z是一个函数,小括号内的10是它的实参的值。

341. 342. 343. ____。

344. 345. 346. 347. 348. 349. 350. C) z是一个变量,小括号内的10是它的初值。

D) 语句中有错误。

已知函数定义如下,主调函数中有int a=1,b=0;可以正确调用此函数的语句是float fun1(int x,int y)

{ float z;

z=(float)x/y;

return(z);

}

A) printf(\"%f\; B) printf(\"%f\;

C) printf(\"%f\; D) 调用时发生错误

30

351. 下面函数的功能是____。

352. a(s1,s2)

353. char s1[],s2[];

354. 355. 356. 接 357. 358. 359. 360. 361. 362. 363. { while(s2++=s1++) ;

}

A) 字符串比较 B) 字符串复制 C) 字符串连 D) 字符串反向

函数调用语句是:fun (e1,(e2,e3),(e4,e5,e6)); 实际参数的个数是_____。

A)1 B)2 C)3 D)6

以下关于函数的叙述中正确的是

A)每个函数都可以被其它函数调用(包括main函数)

B)每个函数都可以被单独编译

C)每个函数都可以单独运行

D)在一个函数内部可以定义另一个函数

31

364. 若有以下函数首部,则下面针对此函数声明语句中正确的是______。

365. int fun(double x[10],int *n)

366. A)int fun(double x,int *n); B)int fun(double ,int);

367. C)int fun(double*x,int n); D)int fun(double *,int*);

368. 若程序中定义了以下函数,并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是______。

369. double myadd(double a,double B)

370. { return (a+B) ;}

371. A) double myadd(double a,B) ;

372. B) double myadd(double,double);

373. C) double myadd(double b,double A) ;

374. D) double myadd(double x,double y);

375. 设函数fun的定义形式为则以下对函数fun的调用语句中,正确的是______。

376. void fun(char ch, float x ) { … }

32

377. A)fun(\"abc\ B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32);

378. 以下程序运行后的输出结果是______。

379. int f1(int x,int y){return x>y?x:y;}

380. 381. 382. 383. 384. 385. 386. 387. 388. 5,7

int f2(int x,int y){return x>y?y:x;}

main()

{ int a=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,b),f1(c,d));

f=f1(f2(a,b),f2(c,d));

g=a+b+c+d-e-f;

printf(\"%d,%d%d\\n\

}

A)4,3,7 B)3,4,7 33

C)5,2,7 )2, D

389. 以下程序执行后输出结果是______。

390. void f(int v , int w)

391. { int t;

392. t=v;v=w;w=t;

393. }

394. main( )

395. { int x=1,y=3,z=2;

396. if(x>y) f(x,y);

397. else if(y>z) f(y,z);

398. else f(x,z);

399. printf(“%d,%d,%d\\n”,x,y,z);400. }

401. A) 1,2,3 B) 3,1,2 C) 1,3,2 34

D) 2,3,1

402. 若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是______。

403. A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参

404. C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参

405. 已定义以下函数,则fun函数返回值是______。

406. int fun(int *p)

407. {return *p;)

408. A)不确定的值 B)一个整数 C)形参p中存放的值 的地址值

409. 有如下程序,执行后输出结果是______。

410. void f(int x,int y)

411. { int t;

412. if(x413. }

414. main()

35

形参P D)

415. { int a=4,b=3,c=5;

416. f(a,b); f(a,c); f(b,c);

417. printf(\"%d,%d,%d\\n\

418. }

A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5

419. C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。

420. A) void B) int C) float D) double

421. 若有以下程序,则以下叙述中不正确的是_____。

422. #include

423. void f(int n);

424. main()

425. { void f(int n);

426. f(5);

36

427. }

428. void f(int n)

429. { printf(\"%d\\n\}

430. A) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

431. B) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f

432. C) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明

433. D) 函数f无返回值,所以可用void将其类型定义为无值型

434. 以下函数值的类型是_______。

435. fun ( float x )

436. { float y;

437. y= 3*x-4;

438. return y;

439. }

37

440. A) int B) 不确定 C) void D) float

441. 以下所列的各函数首部中,正确的是________。

442. A) void play(var :Integer,var b:Integer) B) void play(int a,b)

443. C) void play(int a,int b) integer,b as integer)

444. 以下程序的输出结果是________。

445. A) 0 B) 29 C) 31 446. fun(int x, int y, int z)

447. { z=x*x+y*y; }

448. main()

449. { int a=31;

450. fun(5,2,a);

451. printf(“%d”,a);

452. }

38

D) Sub play(a as 无定值

D)

453. 有如下函数调用语句,该语句中含有的实参个数是______。

454. func(rec1,rec2+rec3,(rec4,rec5);

455. A) 3 B) 4 C) 5 D) 有语法错

456. 以下程序的执行结果是_______。

457. char fun(char x , char y)

458. { if(x459. return y;

460. }

461. main( )

462. { int a=’9’,b=’8’,c=’7’;

463. printf(“%c\\n”,fun(fun(a,B) ,fun(b,C) ));464. }

465. A) 函数调用出错 B)8 39

C)9 D)7

466. 设函数fun的定义形式如下,则以下对函数fun的调用语句中,正确的是_____

467. void fun(char ch, float x ) { … }。

468. A) fun(\"abc\ B) t=fun('D',16.5);

469. C) fun('65',2.8); D) fun(32,32);

470. 以下叙述中不正确的是______。

471. A) 在不同的函数中可以使用相同名字的变量

472. B) 函数中的形式参数是局部变量

473. C) 在一个函数内定义的变量只在本函数范围内有效

474. D) 在一个函数内的复合语句中定义的变量在本函数范围内有效

475. 以下程序输出结果是_______。

476. viod fun (int a,int b,int c)

477. { a=456; b=567; c=678;}

478. main()

40

479. { int x=10, y=20,z=30;

480. fun (x,y,z);

481. printf(\"%d,/%d\\n\

482. }

483. A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,456

知识点11:指针及其应用

484. 设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是______。

485. A)10,11,12 B)11,12,12 C)10,12,12 D)11,11,12

486. 设char s [10], *p; 正确的操作语句是_______。

487. A)p=\"MBA\"; B)s++; C)s=\"MBA\"; D)s[ ]=\"MBA\"

488. 设置int a[10],*p=a;与a[1]等价的是______。

41

489. A)*(a+1) B)*(p+1) C)p[1] D)(*p)++

490. 变量的指针含意是指变量的______。

491. A)值 B)地址 C)存储 D)

名字

492. 493. 量地址

494. 495. 496. 497. ______。

498. 499. 设int a,*p;则语句p=&a;中的运算符“&”的含义是______

A)位与运算 B)逻辑与运算 C)取指针内容 D)取变已知:int a, *y=&a;则下列函数调用中错误的是_______ 。

A) scanf(\"%d\; B) scanf(\"%d\;

C) printf(\"%d\; D) printf(\"%d\;

若有定义:char *x= “abcdefghi”;,以下选项中正确运用了strcpy函数的是A)char y[10]; strcpy(y,x[4]);

B)char y[10]; strcpy(++y,&x[1]);

42

500. C)char y[10],*s; strcpy(s=y+5,x);

501. D)char y[10],*s; strcpy(s=y+1,x+1);

502. 说明语句\"int (*p)( );\"的含义是_______ 。

503. A) p是一个指向一维数组的指针变量

504. B) p是指针变量,指向一个整型数据

505. C) p是一个指向函数的指针,该函数的返回值是一个整型

506. D) 以上都不对

507. 设有说明int (*p)[4];其中的标识符p是______ 。

508. A) 4个指向整型变量的指针变量

509. B) 指向4个整型变量的函数指针

510. C) 一个指向具有4个整型元素的一维数组的指针

511. D) 具有4个指向整型变量的指针元素的一维指针数组

512. 已知:char s[10], *p=s,则在下列语句中,错误的语句是_____ 。

43

513. A) p=s+5; B) s=p+s; C) s[2]=p[4]; D) *p=s[0];

514. 已知:char s[100];int i;则引用数组元素的错误的形式是______ 。

515. A) s[i+10] B) *(s+i) C) *(i+s) D) *((s++)+i)

516. 已知:char s[6], *ps=s;则正确的赋值语句是 _________。

517. A) s=\"12345\"; B) *s=\"12345\"; C) ps=\"12345\"; ps=\"12345\";

518. 以下函数的功能是______。

519. fun(char *a,char *b)

520. { while((*a!='\\0')&&(*b!='\\0')&&(*a==*b))

521. { a++;b++; }

522. return(*a-*b);

523. }

524. A)计算a和b所指字符串的长度之差

44

D) *

525. B)将b所指字符串连接到a所指字符串中

526. C)将b所指字符串连接到a所指字符串后面

527. D)比较a和b所指字符串的大小

528. 若有定义:int w[3][5];,则以下不能正确表示该数组元素的表达式是______。

529. A) *(*w+3) B) *(w+1)[4] C) *(*(w+1)) D) *(&w[0][0]+1)

530. 若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是________。

531. A)pk=k; B)pk[0]=&k[1][2]; C)pk=k[0]; D)pk[1]=k;

532. 已知:char a[3][10]={\"BeiJing\;不能正确显示字符串\"ShangHai\"的语句是_____ 。

533. A) printf(\"%s\; B) printf(\"%s\;

534. C) printf(\"%s\; D) printf(\"%s\;

535. 已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};

536. int (*ptr)[3]=a,*p=a[0];

537. 则以下能够正确表示数组元素a[1][2]的表达式是_______ 。

45

538. A)

*(*(a+1)+2) B) *(*(p+5)) C) (*ptr+1)+2 D) *((ptr+1)[2])

539. 已知:int a[]={1,2,3,4}, y, *p=a;则执行语句y = (*++p)--;之后, 数组a各元素的值变为______。

540. A) 0,1,3,4 B) 1,1,3,4 C) 1,2,2,4 D) 1,2,3,3

541. 已知:int x[ ]={ 1,3,5,7,9,11 },*ptr=x;则能够正确引用数组元素的语句是_____ 。

542. A) x B) *(ptr--) C) x[6] D) *(--ptr)

543. 若有语句:char *line[5];,以下叙述中正确的是_____。

544. A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量

545. B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

546. C)定义line是一个指针数组,语句中的*号称为间址运算符

547. D)定义line是一个指向字符型函数的指针

548. 程序中对fun函数有如下说明,此说明的含义是______。

46

549. void *fun();

550. A) fun函数无返回值

551. B )fun函数的返回值可以是任意的数据类型

552. C) fun函数的返回值是无值型的指针类型

553. D) 指针fun指向一个函数,该函数无返回值

554. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是_____。

555. A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;

556. 若有定义:int x=0, *p=&x;,则语句printf(\"%d\\n\的输出结果是______。

557. A)随机值 B)0 C)x的地址 D)p的地址

558. 有以下程序,经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行:

559. ex abcd efg h3 k44 ,执行后输出结果是________。

560. #include

47

561. main(int argc ,char *argv[ ])

562. { int i,len=0;

563. for(i=1;i564. printf(\"5d\\n\

565. }

566. A) 14 B) 12 C) 8 D) 6

知识点12:结构体和共用体

567. 有定义如下,如果 p=&data;则对于结构变量data的成员a的正确引用是______。

568. struct sk

569. { int a;

570. float b;

571. }data ,*p;

572. A)(*).data.a B) (*p).a C) p->data.a D) p.data.

48

a

573. 已知有如下声明,则sizeof(test)的值是_______。

574. struct

575. { int i;

576. char c;

577. float a;

578. }test;

579. A) 4 B) 5 C) 6 D) 7

580. 已知有如下声明,则执行\"temp.i=266;printf(\"%d\的结果是_____。

581. union u_type

582. { int i;

583. char ch;

584. float a;

49

585. }temp;

586. A) 266 B) 256 C) 10 D) 1

587. 若有以下说明语句,则对结构变量pup中sex域的正确引用是________ 。

588. struct pupil

589. { char name[20];

590. int sex;

591. }pup,*p;

592. p=&pup;

593. A) p.pup.sex B) p->pup.sex D) (*p).sex

594. 以下对结构变量stul中成员age的非法引用是______ 。

595. struct student

596. { int age;

597. int num;

50

C) (*p).pup.sex

598. }stu1,*p;

599. p=&stu1;

600. A) stu1.age B) student.age C) p->age D) (*p).age

601. 若有以下说明和定义,则以下叙述中错误的是______。

602. union dt

603. {int a;char b;double c;}data;

604. A) data的每个成员起始地址都相同

605. B) 变量data所占的内存字节数与成员c所占字节数相等

606. C) 程序段:data.a=5;printf(\"%f\\n\输出结果为5.000000

607. D) data可以作为函数的实参

608. 若有以下定义和语句,则以下语句正确的是_____。

609. union data

610. { int i;

51

611. char c;

612. float f;

613. }a;

614. int n;

615. A) a=5; B) a={2,'a',1.2}; C) printf(\"%d\\n\; D) n=a;

知识点13:用typedef声明数据类型

616. 设有以下语句

617. typedef struct TT

618. {char c; int a[4];}CIN;

619. 则下面叙述中正确的是______。

620. A)可以用TT定义结构体变量 B)TT是struct类型的变量

621. C)可以用CIN定义结构体变量 D)CIN是struct TT类型的变量

622. 以下叙述中错误的是_______。

52

623. A)可以通过typedef增加新的类型

624. B)可以用typedef将已存在的类型用一个新的名字来代表

625. C)用typedef定义新的类型名后,原有类型名仍有效

626. D)用typedef可以为各种类型起别名,但不能为变量起别名

知识点14:文件

627. 以下叙述中正确的是_______。

628. A)C语言中的文件是流式文件,因此只能顺序存取数据

629. B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

630. C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

631. D)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失

632. 设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为_______。

633. A)EOF B)非0值 C)0 D)NULL

53

634. 数字12345写入二进制文件和文本文件所占用的字节数分别是____。

635. A)5,5 D)2,5

B)5,2 C)2,2

636. C语言中文件的存取的单位是

637. D)记录

638. 639. 640. 641. 642.

643. 644. 645. A)函数 B)语句 C)字节 要打开一个已存在的非空文件\"file\"用于修改,选择正确的语句_______。

A) fp=fopen(\"file\; B) fp=fopen(\"file\;

C) fp=fopen(\"file\; D) fp=fopen('file\

当顺利执行了文件关闭操作时,fclose函数的返回值是 _____。

A) -1 B) TRUE C) 0 D) 1为了向二进制文件尾部增加数据,打开文件的方式应采用_______。

A)″ab″ B)″rb+″ C)″wb″ D)″wb+″

fscanf函数的正确调用形式是_______。

54

646. A) fscanf (文件指针, 格式字符串, 输出列表);

647. B) fscanf (格式字符串, 输出列表, 文件指针);

648. C) fscanf (格式字符串, 文件指针, 输出列表);

649. D) fscanf (文件指针, 格式字符串, 输入列表);

知识点15:编译预处理

650. 以下叙述中正确的是______。

651. A)预处理命令行必须位于源文件的开头

652. B)在源文件的一行上可以有多条预处理命令

653. C)宏名必须用大写字母表示

654. D)宏替换不占用程序的运行时间

655. 已知宏定义如下,执行语句z=2*(N+Y(5+1));后,变量z的值是____。

656. #define N 3

657. #define Y(n) ((N+1)*n)

55

658. A) 42 B) 48 C) 52 D) 出错

659. 已知宏定义 #define SQ(x) x*x,执行语句printf(\"%d\;后的输出结果是____。

660. A) 1 B) 3 C) 9 D) 10

661. 以下程序执行后输出结果是_______。

#define f(x) x*x

main( )

{ int i;

i=f(4+4)/f(2+2);

printf(“%d\\n”,i);

}

A) 28 B) 22 C) 16 D) 4

662. 已知宏定义如下,若程序中的语句是 PR(D1,a);经预处理后展开为____。

663. #define PR printf

56

664. #define NL \"\\n\"

665. #define D \"%d\"

666. #define D1 DNL

667. A) printf(%d\\n,a); 668. C) printf(\"%d\"\"\\n\",a); 二、程序填空

一顺序,选择结构

1下面程序的功能是计算圆的面积。#define __________________

main()

{

float r,s;

printf(\"Enter a number r:\");

B) printf(\"%d\\n\; D) 原语句错误

57

___________________;

s=PI*r*r;

printf(\"s=%f\

}

2下面程序的功能是输入一个三位数,将它反向输出,如输入258,输出852。

main()

{ int x ,a ,b ,c, y;

;

a =x/100;

b=x/10-a*10;

c= ;

y=100*c+10*b+a;

printf(\"y=%d\\n\

58

}

3 判断输入字符种类

#include

main( )

{ char c;

printf(\"Enter a character:\");

;

if(c<0x20) printf(\"This is a control character\\n\");

else if( ) printf(\"This is a digit\\n\");

else if(c>='A'&&c<='Z') printf(\"This is a capital letter\\n\");

else if(c>='a'&&c<='z') printf(\"This is a lower letter\\n\");

else printf(\"This is other character\\n\");

}

59

4 填空使运行结果为a=2,b=1

main()

{ int x=1,y=0,a=0,b=0;

switch(x)

{ case 1:

switch(y)

{ case 0: ; break;

case 1: b++; break;

}

case 2: a++;b++; ;

case 3: a++;b++;

}

printf(“\\na=%d,b=%d”,a,b);

60

}

5.将大写字母改为小写字母

#include

main()

{

;

scanf(“%c”,&a);

if( a>=‘A’ && a<=‘Z’ )

printf(“%c”, );

else

printf(“please input right char!\\n”);

}

二循环结构

61

1下面程序的功能是计算n!。

main()

{

int i,n;

float fac;

;

scanf(\"%d\

for(i=1;i<=n;i++)

;

printf(\"%.0f\\n\

}

2读入1 个正实数eps,计算并输出1-1/3+1/5-1/7+⋯⋯对值小于eps。

#include

62

,直到最后一项的绝#include

void main( )

{

int temp, flag;

double eps, item, sum;

___________ ;

sum = 0; item = flag = temp = 1;

while(fabs(item)>=eps){

sum = sum + item;

temp =___________ ;

___________;

item =flag/temp;

}

63

printf(\"%f\\n\

}

3从键盘输入一个正整数,如果它是素数,则输出该数,否则输出该数的所有因子(除去1和自身)

main()

{ int m,i,flag;

flag=1;

scanf(\"%d\

for(i =2; i if(____________)

{flag=0;printf(\"%5d\printf(\"\\n\");

if(____________)

printf(\"%d\\n\

64

}

4 /*有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…

求出这个数列的前20项之和*/

main()

{ int i ,t,n=20;

float a=2,b=1,_______________;

for(i=1; i<=n; i++)

{ s=s+a/b;

_________________;

a=a+b;

__________________;_}

printf(\"sum=%9.6f\\n\

}

65

5 /*判断某个一位数n是否在一个不高于四位的整数m中出现*/

main()

{int m,n;

int flag;

___________;

scanf(\"%d,%d\

while(m!=0)

{ if(n==m%10)

{ flag=0; ___________;} ___________;

}

if(flag= =0)

printf(\"yes\\n\");

66

else

printf(\"no\\n\");

}

6以下程序求1+2+...+100。

main( )

{ int a=1,b=________;

while (a<=100)

{b=b+a;

________;}

printf(\"\\n a=%d,b=%d\

}

7 求两个数的最大公约数

main()

67

{

int m,n,r,t;

scanf(“%d%d”,&m,&n);

if(m{t=m;m=n;n=t;}

do

{

________;

m=n;

n=r;

}

while(________);

prinf(“fac=%d”,m);

68

}

8 把100~200 之间的不能被3 整除的数打印出来.

main()

{

int n;

printf(\"不能被3整除的数是:\\n\");

for(________;n<=200;n++)

{

if(n%3==0)

________;

printf(\"%-5d\\n\

}

}

69

9求sn=a+aa+aaa+…+a…a,其中a是一个一位整数。

main()

{long int s=0,t;

int a,n,i;

________;

t=a;

for(i=1;i<=n;i++)

{

s+=t;

________

}

printf(\"s=%ld\\n\

}

70

10 打印九九乘法表

main()

{

int i,j;

for(i=1;i<10;i++)

{

for(j=1; ________;j++)

printf(________________);

printf(\"\\n\") ;

}

}

三函数

1下面程序的功能是求10个数平均值。

71

float av(float a[],int n)

{

int i;float s=0;

for(i=0;is=s+a[i];

return (s/n);

}

main()

{ int i;

float a[10];

;

for (i=0; ;i++) scanf(\"%f\ );

72

printf(\"%f\

}

2 定义函数f(number),它的功能是返回number 的逆序数。例如f(-123)的返回值是-321。

long f(long number)

{ int flag, digit;

long res = 0;

flag = number<0 ? -1 : ___________; if(number<0) number = - number;

while(number!=0) {

___________ ;

number /= 10;

}

___________ ;

73

}

3 请仔细阅读函数f1,然后在函数f2 中填入正确的内容,使函数f1 和函数f2 有相同的功能。

void f1(char s[ ], char t[ ])

{

int j, k;

j=k=0;

while(s[j]!='\\0')

j++;

while((s[j++]=t[k++])!='\\0') ;

}

void f2(char *s, char *t)

{

while(___________ )

74

___________ ++;

while(___________ )

;

}

4下面程序的功能是计算100~1000之间有多少个这样的整数:它的各位数字之和等于5。

int f(int m )

{ int a,b,c,d;

a=m/100;

b=(m-a*100)/10;

c=m%10;

d=a+b+c;

____________;

}

75

main()

{ int n,count=0;

for(n=100;n<1000;n++)

if(____________) count++;

printf(\"%d\\n\

}

5以下函数fun用于求两个整数a和b的最大公约数.

int fun (int a, int b)

{ int m;

m=a%b;

while ( )

{

;

76

;

m=a%b;

}

return ;

}

6以下cpy函数把字符串数组s1中全部字符复制到字符数组s2中。

void cpystr( )

{ int i ;

for (i=0; ; i++)

=s1[ i ] ;

s2[ i ]= '\\0';

}

7输入年月日,编一函数,计算该日是该年的第几天,要求年月日的输入及结果输出在主函数中实现

77

int pro(int y,int m,int d)

{

int i,n=0;

for(i=1;iif _________

if(i%2) n+=31;

else if(i!=2) n+=30;

else if(y%4==0&&y%100!=0||y%400==0) n+=29;

else n+=28;

else if(i%2) n+=30;

else n+=31;

_______________;

return(n);

78

}

main()

{

printf(\"Input a Date(Year/Mouth/Day):\\n\");

scanf(\"%d/%d/%d\

n=pro(y,m,d);

printf(\"N=%d\\n\

}

8下面程序能够统计主函数调用count函数的

次数(用字符#作为结束输入的标志),请

在 处填入正确内容。

main ( )

79

char ch;

while ( )

scanf(\"%c\" , &ch) ;

if( )

break;

count( );

count (char c)

static int i=0;

80

i++;

if ( )

printf(\"count = %d\\n\" ,i) ;

}

9求两个数的最大公约数和最小公倍数

int maxcom(int x,int y)

{

int z,i;

for(i=x>y?x:y;i>0;i--)

if(x%i==0&&y%i==0)

{ z=i;

;

}

81

return z;

}

int mincom(int x,int y)

{int z;

z=x*y/maxcom(x,y);

;

}

main()

{int a,b,p,q;

scanf(\"%d%d\

;

q=mincom(a,b);

printf(\"%d,%d,maxcom=%d,mincom=%d\\n\

82

}

10 填空使程序的运行结果为7 8 9。

#include

int f(int a)

{

auto int b=0;

;

b=b+1; c=c+1;

return (a+b+c);

}

main()

{

int a=2,i;

83

for(i=0;i<3;i++)

printf(\"%d \ );

}

四数组

1下面程序的功能是求主次对角线之和。

main()

{

int a[ ][3]={9,7,5,1,2,4,6,8};

int i,j,s1=0,s2=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{if( )

s1=s1+a[i][j];

84

if( )

s2=s2+a[i][j];

}

printf(\"%d\\n%d\\n\

}

2 /*下面程序能够按以下形式输出杨辉三角形

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

..................... */

85

#define N 11

main( )

{int i,j,a[N][N];

for (i=1,i{ ________________=1;

_______________=1;

for (______________;ifor (j=2;j<= i -1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i

for (j=1;j<=i;j++)

86

printf(\"%6d\j]);

printf (\"\\n\" );

printf (\"\\n\" );

3下面程序用来找出三个字符串中的最大者,请在 处填入正确内容:

main( )

char str[20], s[3][20];

int i;

for (i =0;i<3;i++)

gets( );

if (strcmp( )>0) strcpy (str,s[0]);

87

else strcpy(str,s[1]);

if (strcmp(s[2],str)> 0) strcpy(str,s[2]);

printf(\"The largest string is :\\n%s\\n\

4下面程序的作用是将以下给出的字符按其格式读入数组ss中,然后输出行、列号之和为3的数组元素,请在 处填入正确内容。

A a f

c B d

e b C

g f D

main( )

static char ss [4][3]= {'A' ,'a' ,'f' ,'c' ,'B' ,'d' ,'e' ,'b','C', 'g','f','D'};

int x,y,z;

88

for(x =0; ;x++)

for(y= 0; ;y++)

{ z=x+y;

if( )

printf(\" %c\\n\

5 下面程序用来输出两个字符串中短串的长度,

请在 处填入正确内容。

#include

#include

main( )

89

char p1[20],p2[20];

int i1,i2,num;

gets(p1);

gets (p2) ;

i1= ; i2= ; num=(i1printf(\"%d\\n\

}

6 冒泡法排序

#define N 10

main()

{

90

int a[N];

int i,j,t;

printf(\"Input 10 numbers:\\n\");

for(i=0;i;

for(i=1;ifor(j=0; ; j++)

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

91

printf(\"The sorted numbers:\\n\");

for(i=0;iprintf(\"%d \

printf(\"\\n\");

}

7 选择法排序

#define N 10

main()

{

int a[N];

int i,j,t;

printf(\"Input 10 numbers:\\n\");

for(i=0;i92

scanf(\"%d\

for(i=0;i{

min=i;

for(j=i+1; ;j++) if(a[min]>a[j]) ; t=a[i]; a[i]=a[min]; a[min]=t;

}

printf(\"The sorted numbers:\\n\");

for(i=0;iprintf(\"%d \

printf(\"\\n\");

}

93

8 求2×3矩阵的转置矩阵

main()

{

int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

printf(\"Array a:\\n\");

for(i=0;i<2;i++)

{

for(j=0;j<3;j++)

{printf(\"%5d\

;

}

printf(\"\\n\");

94

}

printf(\"Array b:\\n\");

for(i=0;i<3;i++)

{

for(j=0;j<2;j++)

printf(\"%5d\j]);

;

}

}

9 输入10个数,输出其中的最大值和最小值

#define N 10

main()

{

95

int i,a[N],max,min;

printf(\"Input Data:\\n\");

for(i=0;iscanf(\"%d\

;

for(i=1;i{

if(max;

} printf(\"Max=%d,Min=%d\

}

10 输入一串字符,逆序排列并输出。(要求只用一个数组)

#include\"stdio.h\"

96

#include\"string.h\"

main()

{

char str[80],c;

int i,j;

;

for(i=0, ; ic=str[i];

str[i]=str[j];

str[j]=c;

}

puts(str);

97

}

五指针

1将两个数按大小顺序输出,程序为;

main()

{int a, b, *p1, *p2, t;

scanf(\"%d%d\

if(*p1>*p2) { t =*p1; }

printf(\"%5d%5d\ );

}

2输入a 和b 两个整数,按先大后小的顺序输出a 和b 。

void swap(pa,pb)

int *pa,*pb;

98

{

int t;

t=*pa;*pa=*pb;*pb=t;

}

main()

{

int a,b,*p1=&a,*p2=&b;

;

printf(\"A=%d,B=%d\\n\

if(a;

printf(\"A=%d,B=%d\\n\

}

99

3输入一行字符,求其中字母、数字、空格和其它字符的个数(函数实现)。

#include\"stdio.h\"

#include\"string.h\"

void pro(s,n,p1,p2,p3,p4)

{

int i;

for(i=0;iif( ) (*p1)++;

else if(s[i]>='0'&&s[i]<='9') else if(s[i]==' ') (*p3)++;

else (*p4)++;

}

(*p2)++;

100

main()

{

char str[80];

int n1,n2,n3,n4;

gets(str);

;

pro(str,strlen(str),&n1,&n2,&n3,&n4);

printf(\"N1=%d,N2=%d,N3=%d,N4=%d\\n\

}

4把字符串a 复制给字符串b

main()

{

char a[]=\"Hello world\";

101

char b[20];

char *p1,*p2;

p1=a;p2=b;

for(; ;p1++,p2++)

*p2=*p1;

;

printf(\"a:%s\\n b:%s\\n\

}

5 利用指针变量实现数组的输入输出#define N 10

main()

{

int a[N],*p;

102

for( ;pscanf(\"%d\

for(p=a;pprintf(\"%d \ );

}

三、程序阅读

1.循环结构

(1)从键盘输入15002,运行结果为

main()

{

long m,p,q,t;

p=q=0;

scanf(\"%ld\

103

do

{

t=m%10;

if(t==0) p++;

else

if(q<=t) q=t;

m/=10;

}while(m);

printf(\"Count=%ld,Max=%ld\\n\

}

(2)从键盘输入1 2 3 4 5 -1,程序运行结果为

main()

{

104

int k=0,n;

do

{

scanf(\"%d\

k+=n;

}while(n!=-1);

printf(\"k=%d n=%d\\n\

}

(3)程序的运行结果为

main()

{

int i,x,y;

i=x=y=0;

105

do

{

++i;

if(i%2!=0) {x=x+i++;}

y=y+++i;

}while(i<=7);

printf(\"x=%d,y=%d\\n\

}

(4)程序的运行结果为

main()

{

int a,b,i;

a=1;b=3;i=1;

106

do

{

printf(\"%5d%5d\

a=(b-a)*2+b;

b=(a-b)*2+a;

if(++i%2==0) printf(\"\\n\");

}while(b<=20);

}

(5)从键盘输入-1 0,程序运行结果为

main()

{

int a,b,m,n;

m=n=1;

107

scanf(\"%d%d\

do

{

if(a>0) {m=2*n;b++;}

else {n=n+m;a+=2;b++;}

}while(a==b);

printf(\"m=%d,n=%d\\n\

}

(6)程序运行结果为

main()

{

int i;

for(i=1;i<=5;i++)

108

switch(i%2)

{

case 0:i++;printf(\"#\");break;

case 1:i+=2;printf(\"*\");

default:printf(\"\\n\");

}

}

(7)程序运行结果为

main()

{

int i,j=4,n=0;

for(i=j;i<=4*j;i++)

{

109

switch(i/j)

{

case 0:

case 1:printf(\"*\");break;

case 2:printf(\"#\");

}

n++;

if(n%j==0) printf(\"\\n\");

}

}

(8)写出程序运行结果

main()

{

110

int y,a;

y=2;a=1;

while(y--!=-1)

do

{

a*=y;a++;

printf(\"%d,%d\\n\

}while(y--);

}

(9)写出程序运行结果

main()

{

int i,j,k=19;

111

while(i=k-1)

{

k-=3;

if(k%3==0)

{

i++;

continue;

}

else

if(k<5) break;

j=++i;

}

printf(\"j=%d,k=%d\\n\

112

}

(10)写出程序运行结果

main()

{

int a,y;

a=1;y=0;

do

{

a+=2;

y+=a;

if(y>10) break;

}while(a=4);

printf(\"a=%d,y=%d\\n\

113

}

2.数组习题

(1)

main()

{

int i=1,n=3,j,k=3;

int a[5]={1,4,5};

while(i<=n&&k>a[i]) i++;

for(j=n-1;j>=i;j--)

a[j+1]=a[j];

a[i]=k;

for(i=0;i<=n;i++)

printf(\"%8d\

114

}

(2)

main()

{

int a[10]={10,12,13,14,15,16,17,18,19,11};

int k,s,i;

float ave;

for(k=s=i=0;i<10;i++)

{

if(a[i]%2==0)

continue;

s+=a[i];

k++;

115

}

if(k!=0)

{

ave=(float)s/k;

printf(\"%d,%f\\n\

}

}

(3)

main()

{

int a[10]={10,10,13,13,15,16,17,10,19,13};

int n=0,i,j,c,k;

for(i=0;i<10-n;i++)

116

{

c=a[i];

for(j=i+1;j<10-n;j++)

if(a[j]==c)

{

for(k=j;k<10-n;k++)

a[k]=a[k+1];

n++;

}

}

for(i=0;i<10-n;i++)

printf(\"%8d\

printf(\"\\n\");

117

}

(4)

main()

{

char str[]=\"ssswlia\

int k;

for(k=2;(c=str[k])!='\\0';k++)

{

switch(c)

{

case 'i':++k;break;

case 'l':continue;

default:putchar(c);continue;

118

}

putchar('*');

}

printf(\"\\n\");

}

(5)输入1 2 0 3 5,输出程序运行结果

main()

{

int a[5],i,*m,*n,t;

for(i=0;i<5;i++)

scanf(\"%d\

m=n=a;

for(i=1;i<5;i++)

119

{

if(*(a+i)<*n)

n=a+i;

if(*(a+i)>*m)

m=a+i;

}

t=*m;*m=*n;*n=t;

for(i=0;i<5;i++)

printf(\"%5d\

}

(6)

main()

{

120

int a[2][9];

int i,j;

for(i=0;i<2;i++)

for(j=0;j<9;j++)

a[i][j]=j+1;

for(i=0;i<9;i++)

{

for(j=0;j<=i;j++)

printf(\"%d*%d=%-3d\j],a[1][i],a[0][j]*a[1][i]);

if(a[0][i]<=a[1][j])

printf(\"\\n\");

}

}

121

(7)

main()

{

int i;

char a[]=\"Time\

for(i=0;a[i]!='\\0'&&b[i]!='\\0';i++)

if(a[i]==b[i])

if(a[i]>='a'&&a[i]<='z')

printf(\"%c\

else printf(\"%c\

else printf(\"*\");

printf(\"\\n\");

}

122

(8)输入“abcdefghigk”,输出程序运行结果

#include \"stdio.h\"

#define N 100

void fun(char string1[],char string2[]);

void main()

{

char st1[N],st2[N];

gets(st1);

fun(st1,st2);

puts(st1);

puts(st2);

}

void fun(char string1[],char string2[])

123

{

int i,j,k;

for(i=0,j=0,k=0;string1[i]!='\\0';i++)

{

if(string1[i]%2==0)

{

string2[j]=string1[i];

j++;

}

if(string1[i]%2!=0)

{

string1[k]=string1[i];

k++;

124

}

}

string2[j]=string1[k]='\\0';

}

(9)输入“abcdefghigk”和“tgywabfhk”,输出程序运行结果

main()

{

char st1[N],st2[N];

gets(st1);

gets(st2);

fun(st1,st2);

puts(st1);

puts(st2);

125

}

void fun(char string1[],char string2[])

{

int i,j,k;

for(i=0;string2[i]!='\\0';i++)

{

for(j=0,k=0;string1[j]!='\\0';j++)

if(string1[j]!=string2[i])

{

string1[k]=string1[j];

k++;

}

string1[k]='\\0';

126

}

}

(10)输入12 32 6 45 17 3,输出程序运行结果

#define M 2

#define N 3

#include \"stdio.h\"

main( )

{

int a[M][N],b[N][M],t ;

int i,j;

for (i=0;ifor(j=0;j{

127

scanf(\"%d\j]);

}

for (i=0;ifor(j=0;jb[j][i]=a[i][j] ;

printf(\"a array:\\n\");

for (i=0;ifor(j=0;jprintf(\"b array:\\n\");

128

for (i=0;i{

for(j=0;jprintf(\"%10d\j]);

printf(\"\\n\");

}

}

3.函数习题

(1)

int func(int a,int b);

main( )

{

int k=4,m=1,p;

129

p=func(k,m);

printf(\"%d\\n\

p=func(k,m);

printf(\"%d\\n\

}

int func(int a,int b)

{

static int m=0,i=2;

i+=m+1;

m=i+a+b;

return m;

}

(2)

130

void func();

int x,y;

main( )

{

int a=7,b=5;

x=a+b;

y=a-b;

func();

printf(\"%d,%d\\n\

}

void func()

{

extern int x,y;

131

int a=15,b=10;

x=a-b;

y=a+b;

}

(3)

#define MAX 10

int a[MAX],i;

void sub1();

void sub2();

void sub3(int a[]);

main()

{

sub1();

132

sub2();

sub3(a);

}

void sub1()

{

for(i=0;ia[i]=i+i;

}

void sub2()

{

int a[MAX],i,max;

max=5;

for(i=0;i133

{

a[i]=i;

printf(\"%5d\

}

printf(\"\\n\");

}

void sub3(int a[])

{

int i;

for(i=0;iprintf(\"%5d\

printf(\"\\n\");

}

134

(4)

void m(int b[],int n);

main()

{

int a[10]={0,1,3,2,56,100,32,4,7,10};

int i;

m(a,10);

for(i=0;i<=9;i++)

printf(\"%8d\

}

void m(int b[],int n)

{

int i,j,p,t;

135

for(j=1;j<=n-1;j++)

{

p=0;

for(i=0;i<=n-j;i++)

if(b[i]>b[p])

p=i;

t=b[p];b[p]=b[n-j];b[n-j]=t;

}

}

(5)输入“wrwqfd4543 tret54grey”,输出程序运行结果。

void string_put(char str_2[]);

#include \"string.h\"

main()

136

{

char str_1[200];

gets(str_1);

string_put(str_1);

}

void string_put(char str_2[])

{

int i;

for(i=0;str_2[i]!='\\0';i++)

{

if(str_2[i]>='0'&&str_2[i]<='9')

continue;

if(str_2[i]>='a'&&str_2[i]<='z')

137

printf(\"%3c\

if(str_2[i]==' ')

printf(\"\\n\");

}

}

(6)

#define N 100

void fun(char str1[],char str2[]);

main()

{

char string1[N]=\"China is a beautiful country\";

char string2[N]=\"I love China\";

puts(string1);

138

fun(string1,string2);

puts(string1);

}

void fun(char str1[],char str2[])

{

int j=0,k=0;

while(str1[j]!='\\0')

j++;

str1[j]=' ';

while(str2[k]!='\\0')

str1[++j]=str2[k++];

str1[++j]='\\0';

}

139

(7)

4.指针习题

(1)

main()

{

char c[]=\"china good\";

char *p=c;

while(p<=c+5)

printf(\"%c\

printf(\"\\n\");

while(*p!='\\0')

printf(\"%c\

printf(\"\\n\");

140

}

(2)输入5和2 7 0 5 1,输出程序运行结果。

#define N 100

void fun(int *a,int *b);

main()

{

int s[N],n,i,j,*p;

scanf(\"%d\

for(i=0;iscanf(\"%d\

for(i=0;iprintf(\"%5d\

for(j=1;j141

{

p=s;

for(i=0;iif(*p<=*(s+i))

p=s+i;

fun(p,s+n-j);

}

printf(\"\\n\");

for(i=0;iprintf(\"%5d\

printf(\"\\n\");

}

void fun(int *a,int *b)

142

{

int t;

if(*a>*b)

{ t=*a,*a=*b,*b=t;}

}

(3)

main()

{

char *st=\"I am a student. I am 21 years old.\";

int p,q,w,i;

p=q=w=0;

for(i=0;*(st+i)!='\\0';i++)

{

143

if(*(st+i)>='a'&&*(st+i)<='z'||*(st+i)>='A'&&*(st+i)<='Z')

p++;

else

if(*(st+i)>='0'&&*(st+i)<='9')

q++;

if(*(st+i)==' ')

w++;

}

printf(\"p=%d,q=%d,w=%d\\n\

for(i=0;*(st+i)!='\\0';i++)

{

printf(\"%c\

if(*(st+i)=='.')

144

printf(\"\\n\");

}

}

(4)输入qwderftgyhujbfd,输出程序运行结果。

#define N 100

main()

{

char ch[N],*p,t;

int i,n;

gets(ch);

for(p=ch,n=0;*p!='\\0';p++)

n++;

puts(ch);

145

for(p=ch,i=0;i{

t=*(p+i);*(p+i)=*(p+n-i-1);*(p+n-i-1)=t;

}

puts(ch);

}

(5)

四、编程题

编程题,按题目要求编写程序,并画出N-S流程图

1.有一分段函数

2x12ysinxx12x2x2x2

并编写程序,输入x,计算并输出y。

146

2.有分段函数

2x1x2y43sinx6x33x6x6

并编写程序,输入x,计算并输出y。

3.输入一字符c,若c为小写字母,则改为大写字母,若c为大写字母,则改为小写字母,若c为其它字母则原样输出。

4.输入三个正数a,b,c,若a,b,c能构成三角形则计算其面积,否则,求a,b,c三个数的最大值。

5.某邮局对邮寄包裹有如下规定:包裹每件收手续费2,再加上根据按重量计算的邮资,邮资计算方法如下:当重量w≤10kg时,收费标准为0.80元/kg,10kg20kg时,收费标准为0.70元/kg,输入包裹重量,计算收费数量。

6.某书店对售书折扣有如下规定:购书数量不超过100本时,没有折扣;购书数量为100~500本时打9折,购书500~1000本时打8.5折,购1000本以上打8折。输入购书数量,计算应付款项。

7.输入三个数a,b,c,求最大值与最小值之差。

8.把百分制成绩score,转为5分制成绩:score≥90,等级为A;80≤score<90,

147

等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。输入百分制成绩,输出5分制成绩。

9.输入4个数,要求从小到大排序。

13599...100的值。 10.编写程序求数列:24611.编写程序,计算以下数列前n项的和,n从键盘输入。

23581321,,,,,, 1235813

nCm12.输入m>n,求

13. 用下列泰勒多项式求sin(x)的值,要求误差(最后一项)小于10-4

xx3x5x7x2n1nsin(x)...(1)...1!3!5!7!(2n1)!

14.一球从100m高度自由落下,每次落地后反弹回上次高度的一半,再落下。求球第十次落地时共经过多少米,第十次反弹多高?

15.输入两个正整数,求它们的最大公约数和最小公倍数。

16.瓜农有1020个西瓜,第一天卖掉一半多两个,以后每天卖剩下的一半多两个,编写程序计算几天能卖完。

148

17.编写程序,计算福利彩票中35选择7(在1~35中任选7个数字)的一等奖中奖概率是多少。

18.输入10个数,统计其中正数、0、负数的个数。

19.编写程序,输入某班15个同学C语言的考试成绩,求平均成绩,并对考试成绩从高到低排队。

20.输入某班20个同学C语言的考试成绩,分别统计其中85分以上,60~85分,和不及格人数。

21.输入一个字符串分别统计其中英文字母、数字、空格和其它字符的个数。

22.有一行电文,已按下列规律译成了密码:

AZ az

BY by

CX cx

… …

即第1个字母变成第26个字母,第i个字母变成第26-i+1个字母,其它非字母字符不变。编写程序,输入密码,将密码译回原文。

149

23.编写程序,分别用选择排序法和起泡排序法对十个数排序,输入输出在主函数中,排序用函数实现。

24.编写函数,现实两个字符串的连接,不要调用函数strcat()。

25.编写函数,使一个输入的字符串按反序存放,在主函数中输入输出字符串。

26.输入一个3*4的矩阵,求每行的最大值。

27.编写函数,求两向量的内积。

28.编写程序,将数组中的10个数按逆序存放。

29.求某班10个同学C语言考试成绩的最高分及平均成绩。

30.求解方程:ax2+bx+c=0的实根。

150

因篇幅问题不能全部显示,请点此查看更多更全内容

Top