当前位置:首页 » 编程语言 » c语言程序设计现代方法第2版

c语言程序设计现代方法第2版

发布时间: 2023-07-20 13:50:42

‘壹’ c语言程序设计第2版 清华大学出版社

这个教材实在是太常见了,随便到哪个大学旁边的旧书店都能找到成堆的,几块钱就可以买一本。
个人感觉纸质的书看起来比电子版的方便一些。
学C语言不需要很好的英语,但是英语好对学C语言绝对有帮助。因为毕竟常用的TurboC是英文的,记函数,看错误说明啦什么的都方便很多。
学C语言要有一些数学基础。而且只看介绍一门语言的书想学好编程是不够的,至少还要把数据结构什么的编程基础学科学好。
基础不好不要紧,英语不好可以补英语,数学不好可以补数学,关键在自己愿不愿意为之付出一些东西。

‘贰’ C语言程序设计:现代方法(第2版) c语言入门经典第四版 哪个适合初学者

我个人认为现代方法(第2版)内容安排较好,c语言入门经典第四版也是很好的教材,不过相比而言,显得有点啰嗦。

‘叁’ 《C程序设计语言第2版·新版》pdf下载在线阅读全文,求百度网盘云资源

《C程序设计语言(第2版·新版)》([美] Brian W. Kernighan)电子书网盘下载免费在线阅读

链接: https://pan..com/s/1txJqYzmjYS-BSw43eLWrnQ

提取码: sejp

书名:C程序设计语言(第2版·新版)

作者:[美] Brian W. Kernighan

译者:徐宝文

豆瓣评分:9.4

出版社:机械工业出版社

出版年份:2004-1

页数:258

内容简介:

在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。本书作者是C语言的设计者之一Dennis M. Ritchie和着名计算机科学家Brian W. Kernighan合着的一本介绍C语言的权威经典着作。我们现在见到的大量论述C语言程序设计的教材和专着均以此书为蓝本。

原着第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。人们熟知的“hello,World"程序就是由本书首次引入的,现在,这一程序已经成为众多程序设计语言入门的第一课。原着第2版根据1987年制定的ANSIC标准做了适当的修订.引入了最新的语言形式,并增加了新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述了C语言的各个特性以及程序设计的基本方法。

对于计算机从业人员来说,本书是一本必读的程序设计语言方面的参考书。

作者简介:

Brian W. Kernighan,贝尔实验室计算科学研究中心高级研究人员,着名的计算机科学家。参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的着作,如《The Elements of Programming Style》《The Practice of Programming》《The UNIX Programming Environment》《The AWK Language》《Software Tools》等。

Dennis M. Ritchie,1967年加入贝尔实验室。他和 Ken L. Thompson 两人共同设计并实现的C语言改变了程序设计语言发展的轨迹,是程序设计语言发展过程中的一个重要里程碑。与此同时,他们还设计并实现了UNIX操作系统。正是由于这两项巨大贡献,Dennis M. Ritchie 于1983年获得了计算机界的最高奖——图灵奖。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项.。

‘肆’ C语言程序设计:现代方法:第2版的目录

第1章c语言概述 1
1.1c语言的历史 1
1.1.1起源 1
1.1.2标准化 1
1.1.3基于c的语言 2
1.2c语言的优缺点 3
1.2.1c语言的优点 3
1.2.2c语言的缺点 3
1.2.3高效地使用c语言 4
问与答 5
第2章c语言基本概念 7
2.1编写一个简单的c程序 7
程序显示双关语 7
2.1.1编译和链接 8
2.1.2集成开发环境 8
2.2简单程序的一般形式 9
2.2.1指令 9
2.2.2函数 9
2.2.3语句 10
2.2.4显示字符串 10
.2.3注释 11
2.4变量和赋值 12
2.4.1类型 12
2.4.2声明 13
2.4.3赋值 13
2.4.4显示变量的值 14
程序计算箱子的空间重量 14
2.4.5初始化 15
2.4.6显示表达式的值 16
2.5读入输入 16
程序计算箱子的空间重量(改进版) 16
2.6定义常量的名字 17
程序华氏温度转换为摄氏温度 17
2.7标识符 18
2.8c程序的书写规范 19
问与答 21
练习题 23
编程题 24
第3章格式化输入/输出 26
3.1printf函数 26
3.1.1转换说明 27
程序用printf函数格式化数 28
3.1.2转义序列 28
3.2scanf函数 29
3.2.1scanf函数的工作方法 30
3.2.2格式串中的普通字符 31
3.2.3易混淆的printf函数和scanf
函数 32
程序分数相加 32
问与答 33
练习题 34
编程题 35
第4章表达式 36
4.1算术运算符 36
程序计算通用产品代码的校验位 38
4.2赋值运算符 39
4.2.1简单赋值 40
4.2.2左值 41
4.2.3复合赋值 41
4.3自增运算符和自减运算符 42
4.4表达式求值 43
4.5表达式语句 45
问与答 45
练习题 47
编程题 49
第5章选择语句 50
5.1逻辑表达式 50
5.1.1关系运算符 50
5.1.2判等运算符 51
5.1.3逻辑运算符 51
5.2if语句 52
5.2.1复合语句 53
5.2.2else子句 53
5.2.3级联式if语句 54
程序计算股票经纪人的佣金 55
5.2.4“悬空else”的问题 56
5.2.5条件表达式 57
5.2.6c89中的布尔值 58
5.2.7c99中的布尔值 58
5.3switch语句 59
程序显示法定格式的日期 61
问与答 62
练习题 65
编程题 67
第6章循环 69
6.1while语句 69
程序显示平方表 71
程序数列求和 71
6.2do语句 72
程序计算整数的位数 73
6.3for语句 73
6.3.1for语句的惯用法 74
6.3.2在for语句中省略表达式 75
6.3.3c99中的for语句 75
6.3.4逗号运算符 76
程序显示平方表(改进版) 77
6.4退出循环 78
6.4.1break语句 78
6.4.2continue语句 78
6.4.3goto语句 79
程序账簿结算 80
6.5空语句 81
问与答 83
练习题 84
编程题 85
第7章基本类型 88
7.1整数类型 88
7.1.1c99中的整数类型 90
7.1.2整数常量 90
7.1.3c99中的整数常量 91
7.1.4整数溢出 91
7.1.5读/写整数 91
程序数列求和(改进版) 92
7.2浮点类型 93
7.2.1浮点常量 94
7.2.2读/写浮点数 94
7.3字符类型 94
7.3.1字符操作 95
7.3.2有符号字符和无符号字符 95
7.3.3算术类型 96
7.3.4转义序列 96
7.3.5字符处理函数 97
7.3.6用scanf和printf读/写字符 98
7.3.7用getchar和putchar读/写
字符 98
程序确定消息的长度 99
7.4类型转换 100
7.4.1常用算术转换 101
7.4.2赋值过程中的转换 102
7.4.3c99中的隐式转换 103
7.4.4强制类型转换 103
7.5类型定义 105
7.5.1类型定义的优点 105
7.5.2类型定义和可移植性 105
7.6sizeof运算符 106
问与答 107
练习题 109
编程题 110
第8章数组 113
8.1一维数组 113
8.1.1数组下标 113
程序数列反向 115
8.1.2数组初始化 115
8.1.3 指定初始化式 116
程序检查数中重复出现的数字 116
8.1.4对数组使用sizeof运算符 117
程序计算利息 118
8.2多维数组 119
8.2.1多维数组初始化 120
8.2.2常量数组 121
程序发牌 121
8.3c99中的变长数组 122
问与答 123
练习题 124
编程题 125
第9章函数 129
9.1函数的定义和调用 129
程序计算平均值 129
程序显示倒计数 130
程序显示双关语(改进版) 131
9.1.1函数定义 132
9.1.2函数调用 133
程序判定素数 134
9.2函数声明 135
9.3实际参数 136
9.3.1实际参数的转换 137
9.3.2数组型实际参数 138
9.3.3变长数组形式参数 140
9.3.4在数组参数声明中使用
static 141
9.3.5复合字面量 141
9.4return语句 142
9.5程序终止 143
9.6递归 144
程序快速排序 146
问与答 147
练习题 150
编程题 153
第10章程序结构 155
10.1局部变量 155
10.1.1静态局部变量 156
10.1.2形式参数 156
10.2外部变量 156
10.2.1示例:用外部变量实现栈 156
10.2.2外部变量的利与弊 157
程序 猜数 158
10.3程序块 161
10.4作用域 162
10.5构建c程序 163
程序给一手牌分类 163
问与答 169
练习题 169
编程题 170
第11章指针 172
11.1指针变量 172
11.2取地址运算符和间接寻址运算符 173
11.2.1取地址运算符 173
11.2.2间接寻址运算符 174
11.3指针赋值 174
11.4指针作为参数 176
程序找出数组中的最大元素和最
小元素 177
11.5指针作为返回值 179
问与答 180
练习题 181
编程题 182
第12章指针和数组 184
12.1指针的算术运算 184
12.1.1指针加上整数 185
12.1.2指针减去整数 185
12.1.3两个指针相减 186
12.1.4指针比较 186
12.1.5指向复合常量的指针 186
12.2指针用于数组处理 186
12.3用数组名作为指针 188
程序 数列反向(改进版) 189
12.3.1数组型实际参数(改进版) 189
12.3.2用指针作为数组名 191
12.4指针和多维数组 191
12.4.1处理多维数组的元素 191
12.4.2处理多维数组的行 192
12.4.3处理多维数组的列 192
12.4.4用多维数组名作为指针 192
12.5c99中的指针和变长数组 193
问与答 194
练习题 195
编程题 197
第13章字符串 198
13.1字符串字面量 198
13.1.1字符串字面量中的转义序列 198
13.1.2延续字符串字面量 199
13.1.3如何存储字符串字面量 199
13.1.4字符串字面量的操作 200
13.1.5字符串字面量与字符常量 200
13.2字符串变量 200
13.2.1初始化字符串变量 201
13.2.2字符数组与字符指针 202
13.3字符串的读和写 203
13.3.1用printf函数和puts函数
写字符串 203
13.3.2用scanf函数和gets函数读
字符串 203
13.3.3逐个字符读字符串 204
13.4访问字符串中的字符 205
13.5使用c语言的字符串库 206
13.5.1strcpy函数 207
13.5.2strlen函数 208
13.5.3strcat函数 208
13.5.4strcmp函数 209
程序 显示一个月的提醒列表 209
13.6字符串惯用法 211
13.6.1搜索字符串的结尾 211
13.6.2复制字符串 213
13.7字符串数组 214
程序 核对行星的名字 217
问与答 218
练习题 220
编程题 222
第14章预处理器 225
14.1预处理器的工作原理 225
14.2预处理指令 227
14.3宏定义 227
14.3.1简单的宏 227
14.3.2带参数的宏 229
14.3.3#运算符 231
14.3.4##运算符 231
14.3.5宏的通用属性 232
14.3.6宏定义中的圆括号 233
14.3.7创建较长的宏 233
14.3.8预定义宏 234
14.3.9c99中新增的预定义宏 235
14.3.10空的宏参数 236
14.3.11参数个数可变的宏 236
14.3.12__func__标识符 237
14.4条件编译 237
14.4.1#if指令和#endif指令 238
14.4.2defined运算符 238
14.4.3#ifdef指令和#ifndef
指令 239
14.4.4#elif指令和#else指令 239
14.4.5使用条件编译 240
14.5其他指令 240
14.5.1#error指令 240
14.5.2#line指令 241
14.5.3#pragma指令 242
14.5.4_pragma运算符 242
问与答 243
练习题 245
第15章编写大型程序 248
15.1源文件 248
15.2头文件 249
15.2.1#include指令 249
15.2.2共享宏定义和类型定义 250
15.2.3共享函数原型 251
15.2.4共享变量声明 252
15.2.5嵌套包含 253
15.2.6保护头文件 253
15.2.7头文件中的#error指令 254
15.3把程序划分成多个文件 254
程序文本格式化 255
15.4构建多文件程序 260
15.4.1makefile 260
15.4.2链接期间的错误 262
15.4.3重新构建程序 262
15.4.4在程序外定义宏 264
问与答 264
练习题 265
编程题 266
第16章结构、联合和枚举 267
16.1结构变量 267
16.1.1结构变量的声明 267
16.1.2结构变量的初始化 269
16.1.3指定初始化 269
16.1.4对结构的操作 270
16.2结构类型 270
16.2.1结构标记的声明 271
16.2.2结构类型的定义 272
16.2.3结构作为参数和返回值 272
16.2.4复合字面量 273
16.3嵌套的数组和结构 274
16.3.1嵌套的结构 274
16.3.2结构数组 274
16.3.3结构数组的初始化 275
程序 维护零件数据库 275
16.4联合 281
16.4.1用联合来节省空间 282
16.4.2用联合来构造混合的数据
结构 284
16.4.3为联合添加“标记字段” 284
16.5枚举 285
16.5.1枚举标记和类型名 286
16.5.2枚举作为整数 286
16.5.3用枚举声明“标记字段” 286
问与答 287
练习题 289
编程题 293
第17章指针的高级应用 294
17.1动态存储分配 294
17.1.1内存分配函数 294
17.1.2空指针 295
17.2动态分配字符串 296
17.2.1使用malloc函数为字符串
分配内存 296
17.2.2在字符串函数中使用动态
存储分配 296
17.2.3动态分配字符串的数组 297
程序 显示一个月的提醒列表
(改进版) 297
17.3动态分配数组 299
17.3.1使用malloc函数为数组分配
存储空间 299
17.3.2calloc函数 300
17.3.3realloc函数 300
17.4释放存储空间 301
17.4.1free函数 301
17.4.2“悬空指针”问题 301
17.5链表 302
17.5.1声明结点类型 302
17.5.2创建结点 303
17.5.3-)运算符 303
17.5.4在链表的开始处插入结点 304
17.5.5搜索链表 306
17.5.6从链表中删除结点 307
17.5.7有序链表 308
程序 维护零件数据库(改进版) 309
17.6指向指针的指针 313
17.7指向函数的指针 314
17.7.1函数指针作为参数 314
17.7.2qsort函数 314
17.7.3函数指针的其他用途 316
程序 列三角函数表 317
17.8受限指针 318
17.9灵活数组成员 319
问与答 320
练习题 323
编程题 325
第18章声明 327
18.1声明的语法 327
18.2存储类型 328
18.2.1变量的性质 328
18.2.2auto存储类型 329
18.2.3static存储类型 329
18.2.4extern存储类型 330
18.2.5register存储类型 331
18.2.6函数的存储类型 332
18.2.7小结 332
18.3类型限定符 333
18.4声明符 334
18.4.1解释复杂声明 335
18.4.2使用类型定义来简化声明 336
18.5初始化式 336
18.6内联函数 337
18.6.1内联定义 338
18.6.2对内联函数的限制 339
18.6.3在gcc中使用内联函数 339
问与答 339
练习题 342
第19章程序设计 345
19.1模块 345
19.1.1内聚性与耦合性 347
19.1.2模块的类型 347
19.2信息隐藏 347
19.3抽象数据类型 350
19.3.1封装 351
19.3.2不完整类型 351
19.4栈抽象数据类型 352
19.4.1为栈抽象数据类型定义接口 352
19.4.2用定长数组实现栈抽象数据
类型 353
19.4.3改变栈抽象数据类型中数据
项的类型 354
19.4.4用动态数组实现栈抽象数据
类型 355
19.4.5用链表实现栈抽象数据类型 357
19.5抽象数据类型的设计问题 359
19.5.1命名惯例 359
19.5.2错误处理 359
19.5.3通用抽象数据类型 359
19.5.4新语言中的抽象数据类型 360
问与答 360
练习题 361
编程题 362
第20章底层程序设计 363
20.1位运算符 363
20.1.1移位运算符 363
20.1.2按位求反运算符、按位与运
算符、按位异或运算符和按
位或运算符 364
20.1.3用位运算符访问位 365
20.1.4用位运算符访问位域 366
程序 xor加密 366
20.2结构中的位域 367
20.3其他底层技术 369
20.3.1定义依赖机器的类型 369
20.3.2用联合提供数据的多个视角 370
20.3.3将指针作为地址使用 371
程序 查看内存单元 371
20.3.4volatile类型限定符 373
问与答 374
练习题 374
编程题 376
第21章标准库 377
21.1标准库的使用 377
21.1.1对标准库中所用名字的
限制 377
21.1.2使用宏隐藏的函数 378
21.2c89标准库概述 378
21.3c99标准库更新 380
21.4(stddef.h):常用定义 381
21.5(stdbool.h):布尔类型和值 381
问与答 382
练习题 382
编程题 383
第22章输入/输出 384
22.1流 384
22.1.1文件指针 385
22.1.2标准流和重定向 385
22.1.3文本文件与二进制文件 385
22.2文件操作 386
22.2.1打开文件 386
22.2.2模式 387
22.2.3关闭文件 388
22.2.4为打开的流附加文件 389
22.2.5从命令行获取文件名 389
程序 检查文件是否可以打开 389
22.2.6临时文件 390
22.2.7文件缓冲 391
22.2.8其他文件操作 392
22.3格式化的输入/输出 393
22.3.1…printf函数 393
22.3.2…printf转换说明 393
22.3.3c99对…printf转换说明的
修改 395
22.3.4…printf转换说明示例 396
22.3.5…scanf函数 398
22.3.6…scanf格式串 398
22.3.7…scanf转换说明 398
22.3.8c99对...scanf转换说明的
改变 400
22.3.9scanf示例 400
22.3.10检测文件末尾和错误条件 401
22.4字符的输入/输出 403
22.4.1输出函数 403
22.4.2输入函数 403
程序 复制文件 404
22.5行的输入/输出 405
22.5.1输出函数 405
22.5.2输入函数 406
22.6块的输入/输出 406
22.7文件定位 407
程序 修改零件记录文件 409
22.8字符串的输入/输出 409
22.8.1输出函数 410
22.8.2输入函数 410
问与答 411
练习题 414
编程题 416
第23章库对数值和字符数据的支持 419
23.1(float.h):浮点类型的特性 419
23.2(limits.h):整数类型的大小 421
23.3(math.h):数学计算(c89) 422
23.3.1错误 422
23.3.2三角函数 422
23.3.3双曲函数 423
23.3.4指数函数和对数函数 423
23.3.5幂函数 424
23.3.6就近取整函数、绝对值函数
和取余函数 424
23.4(math.h):数学计算(c99) 425
23.4.1ieee浮点标准 425
23.4.2类型 426
23.4.3宏 426
23.4.4错误 426
23.4.5函数 427
23.4.6分类宏 427
23.4.7三角函数 428
23.4.8双曲函数 428
23.4.9指数函数和对数函数 429
23.4.10幂函数和绝对值函数 430
23.4.11误差函数和伽玛函数 430
23.4.12就近取整函数 431
23.4.13取余函数 432
23.4.14操作函数 432
23.4.15最大值函数、最小值函数
和正差函数 433
23.4.16浮点乘加 433
23.4.17比较宏 434
23.5(ctype.h):字符处理 434
23.5.1字符分类函数 435
程序 测试字符分类函数 436
23.5.2字符大小写映射函数 437
程序 测试大小写映射函数 437
23.6(string.h):字符串处理 437
23.6.1复制函数 437
23.6.2拼接函数 438
23.6.3比较函数 439
23.6.4搜索函数 440
23.6.5其他函数 442
问与答 442
练习题 443
编程题 444
第24章错误处理 446
24.1(assert.h):诊断 446
24.2(errno.h):错误 447
24.3(signal.h):信号处理 448
24.3.1信号宏 449
24.3.2signal函数 449
24.3.3预定义的信号处理函数 450
24.3.4raise函数 450
程序 测试信号 451
24.4(setjmp.h):非局部跳转 452
程序 测试setjmp和longjmp 452
问与答 453
练习题 454
第25章国际化特性 456
25.1(locale.h):本地化 456
25.1.1类别 456
25.1.2setlocale函数 457
25.1.3localeconv函数 458
25.2多字节字符和宽字符 461
25.2.1多字节字符 461
25.2.2宽字符 461
25.2.3统一码和通用字符集 462
25.2.4统一码编码 462
25.2.5多字节/宽字符转换函数 463
25.2.6多字节/宽字符串转换函数 465
25.3双字符和三字符 465
25.3.1三字符 465
25.3.2双字符 466
25.3.3(iso646.h):拼写替换 467
25.4通用字符名 467
25.5(wchar.h):扩展的多字节和宽字符
实用工具 467
25.5.1流倾向 468
25.5.2格式化宽字符输入/输出
函数 468
25.5.3宽字符输入/输出函数 470
25.5.4通用的宽字符串实用工具 471
25.5.5宽字符时间转换函数 474
25.5.6扩展的多字节/宽字符转换
实用工具 474
25.6(wctype.h):宽字符分类和映射实
用工具 477
25.6.1宽字符分类函数 477
25.6.2可扩展的宽字符分类函数 478
25.6.3宽字符大小写映射函数 478
25.6.4可扩展的宽字符大小写映射
函数 478
问与答 479
练习题 479
编程题 480
第26章其他库函数 482
26.1(stdarg.h):可变参数 482
26.1.1调用带有可变参数列表的
函数 483
26.1.2v…printf函数 484
26.1.3v…scanf函数 485
26.2(stdlib.h):通用的实用工具 485
26.2.1数值转换函数 485
程序 测试数值转换函数 486
26.2.2伪随机序列生成函数 488
程序 测试伪随机序列生成函数 488
26.2.3与环境的通信 489
26.2.4搜索和排序实用工具 490
程序 确定航空里程 491
26.2.5整数算术运算函数 492
26.3(time.h):日期和时间 492
26.3.1时间处理函数 493
26.3.2时间转换函数 495
程序 显示日期和时间 498
问与答 500
练习题 501
编程题 502
第27章c99对数学计算的新增支持 503
27.1(stdint.h):整数类型 503
27.1.1(stdint.h)类型 503
27.1.2对指定宽度整数类型的限制 504
27.1.3对其他整数类型的限制 505
27.1.4用于整数常量的宏 505
27.2(inttypes.h):整数类型的格式
转换 506
27.2.1用于格式说明符的宏 506
27.2.2用于最大宽度整数类型的
函数 507
27.3复数 508
27.3.1复数的定义 508
27.3.2复数的算术运算 509
27.3.3c99中的复数类型 509
27.3.4复数的运算 510
27.3.5复数类型的转换规则 510
27.4(complex.h):复数算术运算 511
27.4.1(complex.h)宏 511
27.4.2cx_limited_range编译
提示 512
27.4.3(complex.h)函数 512
27.4.4三角函数 512
27.4.5双曲函数 513
27.4.6指数函数和对数函数 514
27.4.7幂函数和绝对值函数 514
27.4.8操作函数 514
程序 求二次方程的根 515
27.5(tgmath.h):泛型数学 515
27.5.1泛型宏 516
27.5.2调用泛型宏 517
27.6(fenv.h):浮点环境 518
27.6.1浮点状态标志和控制模式 518
27.6.2(fenv.h)宏 519
27.6.3fenv_access编译提示 519
27.6.4浮点异常函数 520
27.6.5舍入函数 520
27.6.6环境函数 521
问与答 521
练习题 522
编程题 523
附录ac语言运算符 524
附录bc99与c89的比较 525
附录cc89与经典c的比较 529
附录d标准库函数 532
附录eascii字符集 569
参考文献 570
索引 573

‘伍’ C语言程序设计教程答案~有追加悬赏100分!

1 【C语言】《C语言程序设计教程(第二版)》习题答案

说 明
1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理
工大学出版社出版的,绿皮。

2 第1章 程序设计基础知识
一、单项选择题(第23页)
1-4.CBBC 5-8.DACA

二、填空题(第24页)
1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分

三、应用题(第24页)
2.源程序:
main()
{int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
printf("cock hen chick\n");
for(i=1;i<=20;i++)
for(j=1;j<=33;j++)
for(k=1;k<=33;k++)
if (i+j+k*3==100&&i*5+j*3+k==100)
printf(" %d %d %d\n",i,j,k*3);}
执行结果:
cock hen chick
4 18 78
8 11 81
12 4 84
3.现计算斐波那契数列的前20项。
递推法 源程序:
main()
{long a,b;int i;
a=b=1;
for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/
{printf("%8ld%8ld",a,b);
a=a+b;b=b+a;}}
递归法 源程序:
main()
{int i;
for(i=0;i<=19;i++)
printf("%8d",fib(i));}
fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2));}
执行结果:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
4.源程序:
#include "math.h";
main()
{double x,x0,deltax;
x=1.5;
do {x0=pow(x+1,1./3);
deltax=fabs(x0-x);
x=x0;
}while(deltax>1e-12);
printf("%.10f\n",x);}
执行结果:
1.3247179572
5.源程序略。(分子、分母均构成斐波那契数列)
结果是32.66026079864
6.源程序:
main()
{int a,b,c,m;
printf("Please input a,b and c:");
scanf("%d %d %d",&a,&b,&c);
if(a<b){m=a;a=b;b=m;}
if(a<c){m=a;a=c;c=m;}
if(b<c){m=b;b=c;c=m;}
printf("%d %d %d\n",a,b,c);}
执行结果:
Please input a,b and c:123 456 789
789 456 123
7.源程序:
main()
{int a;
scanf("%d",&a);
printf(a%21==0?"Yes":"No");}
执行结果:
42
Yes

3 第2章 C语言概述
一、单项选择题(第34页)
1-4.BDCB 5-8.AABC

二、填空题(第35页)
1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6. .OBJ 7.库函数 8.文本

三、应用题(第36页)
5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。
8.源程序:
main()
{int a,b,c;
scanf("%d %d",&a,&b);
c=a;a=b;b=c;
printf("%d %d",a,b);}
执行结果:
12 34
34 12

4 第3章 数据类型与运算规则
一、单项选择题(第75页)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB

二、填空题(第77页)
1.补码 2.±(10^-308~10^308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89

三、应用题(第78页)
1.10 9
2.执行结果:
11
0
0
12
1

5 第4章 顺序结构程序设计
一、单项选择题(第90页)
1-5.DCDAD 6-10.BACBB

二、填空题(第91页)
1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)

三、编程题(第92页)
1.仿照教材第27页例2-1。
2.源程序:
main()
{int h,m;
scanf("%d:%d",&h,&m);
printf("%d\n",h*60+m);}
执行结果:
9:23
563
3.源程序:
main()
{int a[]={-10,0,15,34},i;
for(i=0;i<=3;i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);}
执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
main()
{double pi=3.14159265358979,r=5;
printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r);}
执行结果:
r=5 A=31.4159265359 S=49.3480220054
5.源程序:
#include "math.h";
main()
{double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{double s=(a+b+c)/2;
printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));}
else printf("Data error!");}
执行结果:
4 5 6
SS=9.9215674165
6.源程序:
main()
{int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56;
printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f);}
7.源程序:
main()
{int a,b,c,m;
scanf("%d %d %d",&a,&b,&c);
m=a;a=b;b=c;c=m;
printf("%d %d %d\n",a,b,c);}
执行结果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.);
执行结果:
6 7 9
average of 6,7 and 9 is 7.33
9.不能。修改后的源程序如下:
main()
{int a,b,c,x,y;
scanf("%d %d %d",&a,&b,&c);
x=a*b;y=x*c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
printf("x=%d,y=%d\n",x,y);}

6 第5章 选择结构程序设计
一、单项选择题(第113页)
1-4.DCBB 5-8.DABD

二、填空题(第115页)
1.非0 0 2.k==0
3.if (abs(x)>4) printf("%d",x);else printf("error!");
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x);
5.k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。)
6. 8! Right!11 7.$$$a=0 8.a=2,b=1

三、编程题(第116页)
1.有错。正确的程序如下:
main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
printf("min=%d\n",a>b?b>c?c:b:a>c?c:a);}
2.源程序:
main()
{unsigned long a;
scanf("%ld",&a);
for(;a;printf("%d",a%10),a/=10);}
执行结果:
12345
54321
3.(1)源程序:
main()
{int x,y;
scanf("%d",&x);
if (x>-5&&x<0)y=x;
if (x>=0&&x<5)y=x-1;
if (x>=5&&x<10)y=x+1;
printf("%d\n",y);}
(2)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1;
else y=x-1; else y=x;
printf("%d\n",y);}
(3)源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<10) if(x>=5)y=x+1;
else if(x>=0)y=x-1;
else if(x>-5)y=x;
printf("%d\n",y);}
(4)源程序:
main()
{int x,y;
scanf("%d",&x);
switch(x/5)
{case -1:if(x!=-5)y=x;break;
case 0:y=x-1;break;
case 1:y=x+1;}
printf("%d\n",y);}
4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。
现给出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procere TForm1.Button1Click(Sender: TObject);
begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)]);
end;
procere TForm1.FormCreate(Sender: TObject);
begin
Edit2.Text:=datetostr(now);
button1click(form1)
end;
C++ Builder源程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天";
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit2->Text=DateToStr(Now());
Button1Click(Form1);
}
执行结果:(运行于Windows下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg

5.源程序:
main()
{unsigned a,b,c;
printf("请输入三个整数:");
scanf("%d %d %d",&a,&b,&c);
if(a&&b&&c&&a==b&&a==c)printf("构成等边三角形\n");
else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf("构成等腰三角形\n");
else printf("构成一般三角形\n");
else printf("不能构成三角形\n");}
执行结果:
请输入三个整数:5 6 5
构成等腰三角形
6.源程序:
main()
{int x,y;
scanf("%d",&x);
if(x<20)y=1;
else switch(x/60)
{case 0:y=x/10;break;
default:y=6;}
printf("x=%d,y=%d\n",x,y);}
7.源程序:
main()
{unsigned m;float n;
scanf("%d",&m);
if(m<100)n=0;
else if(m>600)n=0.06;
else n=(m/100+0.5)/100;
printf("%d %.2f %.2f\n",m,m*(1-n),m*n);}
执行结果:
450
450 429.75 20.25
8. 2171天(起始日期和终止日期均算在内)
本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
9.源程序:
#include "math.h";
main()
{unsigned long i;
scanf("%ld",&i);
printf("%ld %d\n",i%10,(int)log10(i)+1);}
执行结果:
99887
7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0;
scanf("%ld",&i);
for(;i;){j[m++]=(i+2)%10;i/=10;}
for(;m;m--)i=i*10+j[m-1];
printf("%ld\n",i);}
执行结果:
6987
8109
(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)

7 第6章 循环结构程序设计
一、单项选择题(第142页)
1-4.BCCB 5-8.CBCA

二、填空题(第143页)
1.原题可能有误。如无误,是死循环 2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x<amin

三、编程题(第145页)
1. 源程序:
main()
{int i=1,sum=i;
while(i<101){sum+=i=-i-2;sum+=i=-i+2;}
printf("%d\n",sum);}
执行结果:
51
2.源程序:
main()
{double p=0,n=0,f;int i;
for(i=1;i<=10;i++)
{scanf("%lf",&f);
if (f>0)p+=f; else n+=f;}
printf("%lf %lf %lf\n",p,n,p+n);}
3.源程序:
main()
{unsigned a;
scanf("%ld",&a);
for (;a;printf("%d,",a%10),a/=10);
printf("\b \n");}
执行结果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i;
scanf("%ld%ld",&a,&b);
c=a%1000;
for(i=1;i<b;i++)c=c*a%1000;
if(c<100)printf("0");
if(c<10)printf("0");
printf("%ld\n",c);}
执行结果:
129 57
009
5.略
6.原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …
(1)源程序:
main()
{double e=1,f=1;int n;
for(n=1;n<=20;n++){f/=n;e+=f;}
printf("e=%.14lf\n",e);}
执行结果:
e=2.71828182845905
(2)源程序:
main()
{double e=1,f=1;int n;
for(n=1;f>1e-4;n++){f/=n;e+=f;}
printf("e=%.4f\n",e);}
执行结果:
e=2.7183
7.源程序:
main()
{unsigned long a=0,b=1,c=0;int i,d;
scanf("%d",&d);
for (i=1;i<=(d+2)/3;i++)
printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b));}
本题还可以用递归算法(效率很低),源程序如下:
unsigned long fun(int i)
{return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);}
main()
{int i,d; scanf("%d",&d);
for(i=1;i<=d;i++)
printf("%10ld",fun(i));}
执行结果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i;
for(i=1010;i<=9876;i+=2)
if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(" %d",i);}
执行结果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k;
printf("apple watermelon pear\n");
for(i=1;i<=100;i++)
for(j=1;j<=10;j++)
if((k=100-i-j)*2==400-i*4-j*40)
printf("%4d%7d%9d\n",i,j,k);}
执行结果:
apple watermelon pear
5 5 90
24 4 72
43 3 54
62 2 36
81 1 18
10.源程序:
#include "stdio.h";
#define N 4 /* N为阶数,可以改为其他正整数 */
main()
{int m=N*2,i,j;
for(i=1;i<m;printf("\n"),i++)
for(j=1;j<m;
putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));}
如果把N值改为5,则执行结果如下:
*
***
*****
*******
*********
*******
*****
***
*

作者:宁西贯通 2006-5-7 23:41 回复此发言

--------------------------------------------------------------------------------

8 说明
注意:上面最后一题的输出结果应该是由星号组成的一个菱形,

9 第7章 数 组
一、单项选择题(第192页)
1-4.BBCC 5-8.AABA

二、填空题(第194页)
1.1
2
4
8
16
32
64
128
256
512
2. ①a[age]++ ②i=18;i<26
3. ①break ②i==8
4. ①a[i]>b[j] ②i<3 ③j<5
5. ①b[j]=a[j][0] ②b[j]<a[j][k] 6.a[k++]=a[j]

三、编程题(第196页)
1.源程序:
main()
{int a[4][4],i,j,s=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j||i+j==3)s+=a[i][j];
printf("%d\n",s);} /* 注:5×5矩阵不能照此计算! */
执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
68
2. 源程序:
main()
{int i,a[36];
a[0]=2;
for(i=1;i<=29;i++)a[i]=a[i-1]+2;
for(;i<=35;i++)a[i]=a[(i-30)*5+2];
for(i=0;i<=35;i++)printf("%d\t",a[i]);}
执行结果:
2 4 6 8 10 12 14 16 18 20
22 24 26 28 30 32 34 36 38 40
42 44 46 48 50 52 54 56 58 60
6 16 26 36 46 56
3. 源程序:
#include "stdlib.h"
#include "time.h"
main()
{int a[30],i,m=0;
randomize();
for(i=0;i<=29;i++)
{a[i]=rand();
if(m<a[i])m=a[i];
printf("%d\t",a[i]);}
for(i=0;i<=29;i++)if(a[i]==m)a[i]=-1;
printf("\n-----------------\n");
for(i=0;i<=29;i++)
if(~a[i])printf("%d\t",a[i]);
printf("\n");}
执行结果:
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
32499 29305 22340 5927 13031 2161 2583 31855 22977 14283
4851 22038 6992 11394 20887 27381 6293 18347 16414 10210
-----------------
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
29305 22340 5927 13031 2161 2583 31855 22977 14283 4851
22038 6992 11394 20887 27381 6293 18347 16414 10210
4.源程序:
main()
{int i,n=0,b[16];
scanf("%d",&i);
for(;i;i>>=1)b[n++]=i&1;
for(;n;)printf("%d",b[--n]);}
执行结果:
9876
10011010010100
本题也可以不用数组。源程序如下:
#include "stdio.h"
main()
{int i,n;
scanf("%d",&i);
for(n=16;n;n--)
{asm ROL i,1
putchar(i&1|48);}
} /* ROL是循环左移的汇编指令 */
5. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j,t[M];
randomize();
/*生成M行N列随机数*/
for(i=0;i<M;printf("\n"),t[i++]=0)
for(j=0;j<N;j++)
printf("%4d",a[i][j]=random(50));
/*找出每行的最小数,t[M]是第M行的最小数所在的列数*/
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(a[i][t[i]]>a[i][j])t[i]=j;
/*比较每个最小数在其所在的列上是否也是最小*/
for(j=0;j<M;j++)
for(i=0;i<M;i++)
{if(i==j)continue;
if(a[j][t[j]]>a[i][t[j]])
{t[j]=-1;break;}
}
printf("-------------------\n");
/*输出在行和列上均为最小的数*/
for(i=0;i<M;i++)
if(t[i]!=-1)
printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]]);
}
执行结果:
13 19 13 20 0 1
20 41 6 16 35 30
3 5 37 8 23 15
6 36 24 29 18 1
1 5 28 21 46 34
-------------------
a[0,4]=0
a[1,2]=6
a[3,5]=1
a[4,0]=1
6. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 7
main()
{int a[M][N],i,j,t=0;
randomize();
for(i=0;i<M;i++)
{a[i][N-1]=0;
for(j=0;j<N-1;j++)
{printf("%4d",a[i][j]=random(91)+10);
a[i][N-1]+=a[i][j];}
printf("%4d\n",a[i][N-1]);}
for(i=1;i<M;i++)
if(a[i][N-1]>a[t][N-1])t=i;
if(t)for(j=0;j<N;j++)
{i=a[0][j];a[0][j]=a[t][j];a[t][j]=i;}
printf("-----------------\n");
for(i=0;i<M;printf("\n"),i++)

10 第7章 数 组
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
执行结果:
89 17 32 95 35 20 288
39 48 22 27 73 22 231
51 87 39 71 84 46 378
84 94 97 77 27 26 405
69 50 56 89 37 46 347
-----------------
84 94 97 77 27 26 405
39 48 22 27 73 22 231
51 87 39 71 84 46 378
89 17 32 95 35 20 288
69 50 56 89 37 46 347
7. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j;
struct data{int value,x,y;}max,min;
max.value=0;min.value=100;
randomize();
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
{printf("%4d",a[i][j]=random(100)+1);
if(max.value<a[i][j])
{max.value=a[i][j];max.x=i;max.y=j;}
if(min.value>a[i][j])
{min.value=a[i][j];min.x=i;min.y=j;}
}
printf("-----------------\n");
i=a[0][N-1];a[0][N-1]=max.value;a[max.x][max.y]=i;
i=a[M-1][0];a[M-1][0]=min.value;a[min.x][min.y]=i;
for(i=0;i<M;printf("\n"),i++)
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
}
执行结果:
51 53 74 65 30 40
30 26 50 6 61 27
47 16 54 58 76 19
57 74 44 92 71 48
73 57 60 32 73 67
-----------------
51 53 74 65 30 92
30 26 50 73 61 27
47 16 54 58 76 19
57 74 44 40 71 48
6 57 60 32 73 67
9. 源程序:
main()
{char s[255];int i,j,b=1;
printf("Input a string:");
scanf("%s",s);
i=strlen(s);
for(j=1;j<=i/2;j++)
b=b&&(s[j-1]==s[i-j]);
printf(b?"Yes\n":"No\n");}
执行结果:
Input a string:level
Yes
10. 源程序:
main()
{char s[255],t,max=0,min=0,l,i;
printf("Input a string(length>4):");
gets(s);
l=strlen(s);
for(i=0;i<l;i++)
{if(s[max]<s[i])max=i;if(s[min]>s[i])min=i;}
t=s[1];s[1]=s[max];s[max]=t;if(min==1)min=max;
t=s[l-2];s[l-2]=s[min];s[min]=t;
printf("%s\n",s);}
执行结果:
Input a string(length>4):C++Builder
Cu+Beild+r
11. 源程序:
main()
{char m[13][10]={"****","January","February","March",
"April","May","June","July","August","September",
"October","November","December"};
int i,j,k,a,s,n;
printf("Please input an integer(100..999):");
scanf("%d",&n);
printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)]);}
执行结果:
Please input an integer(100..999):539
539:5+3+9=17, 17%13=4, April

11 第8章 函 数
一、单项选择题(第241页)
1-5.BCCAA 6-10.CCDDD 11-15.ACACB

二、填空题(第243页)
1.看不出原题的意图。因为要计算1~n的累加和,n应是一个≥1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1~n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。据此猜测,原题应填为:①return(0) ②return(n+sum(n-1))
根据题意,如下程序较为合理:
int sum(int n)
{if(n<=0)return(-1); /* -1是出错标志 */
else if(n==1)return(1);
else return(n+sum(n-1));}
2. ①return(1) ②return(n*facto(n-1))

三、编程题(第244页)
3.源程序:
main()
{int i,a,b,c;
for(i=100;i<999;i++)
if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)
printf("%d\t",i);}
执行结果:
153 370 371 407
8.源程序(非递归算法):
#define P 13 /* P可以改为其他正整数 */
main()
{int a[P],r,c;
for(r=0;r<=P;r++)
{a[r]=1;
for(c=r-1;c>=1;a[c--]+=a[c-1]);
printf("%*d",(P-r)*3+1,a[0]);
for(c=1;c<=r;printf("%6d",a[c++]));
printf("\n");}
}
执行结果:
(应该排列成一个三角形,是贴吧造成现在这个样子的,不是程序有问题)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
9.源程序(递归算法):
#include "stdio.h"
void printOCT(unsigned long n)
{unsigned long i;
if(i=n>>3)printOCT(i);
putchar((n&7)+48);}
main()
{unsigned long i;
scanf("%ld",&i);
printOCT(i);}
执行结果:
1234567890
11145401322
本题也可以不用递归算法,源程序请参考第7章第三题4。

12 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
但是不同时间印刷的版本课后题不太一样呢,象我们的是1999年12月第2版,2005年12月第69次印刷的。没有选择填空,应用题和楼主不知道有多少相同的,因为看不到原题。这个比较麻烦呢。

作者:210.77.204.* 2006-5-9 18:38 回复此发言

--------------------------------------------------------------------------------

13 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
你对照一下主编和出版社,看看对吗?(见说明的第一条。)
我不是说叫你有问题另发帖子吗?

14 第9章 指 针
一、单项选择题(第276页)
1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD

二、填空题(第278页)
1.①int * ②*z
2.*p++
3.①'\0' ②++
4.①q=p+1 ②q<p+10 ③*q>max ④*q<min

三、编程题(第280页)
7.源程序:
main()
{int i=0;char c[20];
do{scanf("%s",&c);i++;}
while(strcmp(c,"stop"));
printf("%d\n",i);}
执行结果:
This car ran form Nanyang
to Luoyang without a stop
10
9.源程序:
main()
{char s[255],c[255]={0};int i;
gets(s);
for(i=0;s[i];c[s[i++]]++);
for(i=0;i<255;i++)
if(c[i])printf("%c=%d\t",i,c[i]);}
执行结果:
abcedabcdcd
a=2 b=2 c=3 d=3 e=1

‘陆’ c语言程序设计:现代方法 第二版p44中有一段语句: i = 2; j = i*i++; 的问题。

别听他们胡说 书上说得对 未定义行为指 在表达式[两个顺序点之间]里面 多次修改同行此一个变量

用编译器得到同样的结果也说明不了什么
i*i++ 是这样的做法
那么编译器怎么实现就不好说了

原文
C语言标准明确说过:
Undefined behavior:
Between two sequence points, an object is modified more than once, or is modified and the prior value is read other than to determine the value to be stored (6.5).

译文
在序列点间
多次修改同一个对象(i=++i/++i + ++i/ i++ + ++i/...)
除当前修改的需要存储的值的以外再读取该值(i+i++/++i*i/...)
或者说在修改的同时在别的表达式中再用这个对象
是未定义的行为

i*i++
可以对应 在序列点之间 在当前修改姿带漏需要存储的值以外再读取该值 后面的例子 有迹烂
i+i++
这个和你的i*i++ 雷同

‘柒’ C语言程序设计:现代方法:第2版的作者

K. N. King 世界知名的计算机程序设计教育家,现为佐治亚州立大学数学与计算机科学系副教授。他拥有耶鲁大学计算机科学硕士学位,加州大学伯克利分校计算机科学博士学位,曾任教于佐治亚理工学院。除本书外,他还撰写了广受欢迎的着作Mola-2: A Complete Guide 和Java Programming: From the Beginning,并在Dr.Dobb's Journal等权威杂志上发表了许多文章。业余时间,King教授还在多部电影中扮演过角色。
吕秀锋 亚洲理工大学( AIT )计算机软件硕士,现为北京理工大学软件学院教师。

热点内容
一台存储可以配几个扩展柜 发布:2025-02-08 01:53:22 浏览:564
分布式存储技术优缺点 发布:2025-02-08 01:51:37 浏览:245
linuxsuse重启 发布:2025-02-08 01:49:27 浏览:411
java对称加密 发布:2025-02-08 01:48:04 浏览:522
java报表框架 发布:2025-02-08 01:47:59 浏览:929
方舟手游怎么防止踢出服务器 发布:2025-02-08 01:42:44 浏览:690
c语言中函数的声明函数 发布:2025-02-08 01:41:08 浏览:70
编译termux 发布:2025-02-08 01:39:42 浏览:650
王者荣耀安卓哪里看ios国服榜 发布:2025-02-08 01:25:54 浏览:630
解压带教程 发布:2025-02-08 01:16:33 浏览:760