公司动态

《C程序设计(第五版)》第1章 程序设计和C语言:知识要点、案例分析与课后习题解析

📅 2026/8/20 23:37:10
《C程序设计(第五版)》第1章 程序设计和C语言:知识要点、案例分析与课后习题解析
1. 章节概述第1章是整本《C程序设计》的入门章节核心目标是帮助读者建立对程序“程序设计”程序设计语言的基本认知了解 C 语言的发展历史、主要特点以及一个 C 程序从编写到运行的完整过程。本章不涉及复杂的语法细节但它是后续所有章节的地基。理解清楚源程序 → 目标程序 → 可执行程序的转换关系以及函数是 C 程序的基本单位这一思想对后续学习函数、编译链接、模块化编程都非常关键。2. 知识要点2.1 程序与程序设计程序一组计算机能识别和执行的指令。具体到 C 语言程序就是用 C 语言编写的、能够完成特定功能的一组指令序列。程序设计从确定任务到得到结果、写出文档的全过程通常包括分析问题明确需求设计算法编写程序对程序进行编译、调试、运行整理并写出程序文档。通俗地说程序是指令的集合程序设计是造出这组指令的完整过程。2.2 计算机语言的发展计算机只能直接识别由 0 和 1 组成的机器指令人类直接编写机器指令非常繁琐且容易出错因此产生了计算机语言这一工具。按照发展历程计算机语言分为三个阶段阶段语言类型特点第一代机器语言由 0 和 1 组成计算机可直接执行难编写、难阅读、难移植第二代汇编语言用助记符表示指令稍易读写但仍依赖具体机型第三代高级语言接近自然语言和数学语言易学易用、可读性好、可移植性强C 语言属于高级语言。高级语言编写的程序需要经过编译或解释翻译成机器指令后计算机才能执行。2.3 C 语言的发展历程C 语言的发展脉络可以简要概括如下ALGOL 60CPLBCPLB 语言C 语言(1972—1973)ANSI C / C89 (1988)ISO C / C90 (1990)C99 (1999)C11 (2011)关键时间节点1972—1973 年美国贝尔实验室的 Dennis M. Ritchie 设计了 C 语言1978 年Kernighan 和 Ritchie 合著《The C Programming Language》成为事实上的C 语言标准基础1983 年美国国家标准协会ANSI成立委员会制定 C 标准1988 年完成 ANSI C即 C891990 年国际标准化组织ISO采纳该标准称为 C90之后陆续发布 C99、C11 等标准版本。2.4 C 语言的主要特点教材对 C 语言的特点概括为以下几点语言简洁、紧凑使用方便、灵活只有 32 个关键字、9 种控制语句运算符丰富共有 34 种运算符表达能力强数据类型丰富包括整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等具有结构化的控制语句支持if、switch、for、while、do-while等符合结构化程序设计思想语法限制不太严格程序设计自由度大这是优点也是陷阱初学者要特别注意书写规范允许直接访问物理地址能进行位操作兼有高级语言和低级语言的功能生成目标代码质量高程序执行效率高可移植性好用 C 编写的程序基本不用修改即可在不同系统上运行。2.5 程序设计的三种基本结构结构化程序设计方法主张使用三种基本结构来构建程序顺序结构按语句书写顺序依次执行选择结构分支结构根据条件判断选择执行某一路径如if、switch循环结构重复结构在条件满足时重复执行某段代码如for、while。由这三种基本结构可以组合出任意复杂的程序。结构化编程强调自顶向下、逐步细化、模块化设计。2.6 C 程序的基本结构与书写规范一个规范的 C 程序具有以下结构特征一个程序由一个或多个源程序文件组成可以包含预处理指令、全局声明、函数定义等函数是 C 程序的主要组成部分程序中的几乎全部功能都由函数完成一个函数由函数首部和函数体组成函数体用一对花括号{ }括起来程序总是从main函数开始执行无论main函数写在什么位置程序中应当包含必要的注释注释不参与编译、不影响运行。补充几个容易考到的概念名词含义源程序用高级语言如 C编写的、以文本形式保存的程序如.c文件目标程序源程序经编译后生成的机器指令程序如.obj/.o文件可执行程序目标程序与系统库函数连接后生成的可直接运行的程序如.exe文件2.7 运行 C 程序的步骤一个 C 程序从编写到运行一般经过以下四个步骤编辑 Edit编译 Compile连接 Link执行 Run编辑用编辑器编写源程序.c文件编译编译器将源程序翻译成目标程序.obj文件连接连接器将目标程序与系统库函数等连接生成可执行程序.exe文件执行运行可执行程序得到结果。编译阶段主要检查语法错误连接阶段主要解决函数、符号的引用关系。日常使用 IDE如 VS Code、Dev-C、Visual Studio时这四个环节被一键运行封装在一起但底层流程仍然如此。3. 案例分析下面通过教材第1章的三个典型例题理解 C 程序的基本结构和运行方式。案例 1第一个 C 程序输出一行文字题目编写一个 C 程序在屏幕上输出 “This is a C program.”。#includestdio.hintmain(){printf(This is a C program.\n);return0;}分析#include stdio.h预处理指令把标准输入输出库的头文件包含进来这样程序才能使用printf函数int main()主函数程序执行的入口int表示 main 函数返回整型值printf(...)输出函数\n是换行符return 0;main 函数正常结束返回 0。运行结果This is a C program.案例 2求两个整数之和题目设a、b为两个整数求它们的和并输出。#includestdio.hintmain(){inta,b,sum;// 定义三个整型变量a123;// 给 a 赋值b456;// 给 b 赋值sumab;// 计算两数之和printf(sum is %d\n,sum);// 输出结果return0;}分析int a, b, sum;是变量定义语句声明三个整型变量sum a b;是赋值语句把右边表达式的值赋给左边的变量printf中的%d是格式控制符表示以十进制整数形式输出对应变量sum的值。运行结果sum is 579案例 3求两个整数中的较大者引入自定义函数题目输入两个整数输出其中较大的一个。#includestdio.h// 自定义函数求两个整数中的较大者intmax(intx,inty){intz;if(xy)zx;elsezy;returnz;// 将较大值返回给主调函数}intmain(){inta,b,c;scanf(%d,%d,a,b);// 从键盘输入两个整数用逗号分隔cmax(a,b);// 调用 max 函数printf(max %d\n,c);return0;}分析本程序包含两个函数max和main体现了函数是 C 程序的基本单位scanf(%d,%d, a, b)表示按格式从键盘读取两个整数格式串中的逗号要求输入时也用逗号分隔例如输入3,5max函数通过return z;把计算结果返回给main中的变量c程序从main开始执行main根据需要调用其他函数。运行样例输入3,5 输出max 5这个例子说明实际程序往往由多个函数组成main只负责调度具体功能可以由其他函数完成为后续模块化编程打下基础。4. 课后习题解析下面选取第1章的常见课后习题进行解析。编程题均给出可直接编译运行的参考代码。习题 4-1什么是程序什么是程序设计答程序一组计算机能识别和执行的指令即用计算机语言编写的指令序列。程序是人与计算机交流、让计算机完成特定任务的工具。程序设计从确定任务到得到结果、写出文档的全过程包括分析问题、设计算法、编写程序、调试运行、整理文档等环节。习题 4-2为什么需要计算机语言高级语言有哪些特点答需要计算机语言的原因是计算机只认识由 0 和 1 组成的机器指令直接用机器指令编程极其繁琐、低效且容易出错因此需要一种便于人们理解和使用的语言来描述算法再通过编译或解释翻译成机器能够执行的指令。高级语言的主要特点接近自然语言英语和数学语言易学、易用可读性好便于交流和维护与具体计算机硬件无关可移植性强开发效率高能显著减少编程工作量。习题 4-3正确理解以下名词及其含义答源程序用高级语言如 C编写的程序以文本形式保存于源文件如.c中是程序员直接书写的代码。目标程序源程序经过编译后生成的、由机器指令组成的程序如.obj/.o计算机尚不能直接执行还需与库函数等连接。可执行程序目标程序与系统库函数等经过连接后生成的程序如.exe可以被计算机直接执行。三者关系可以概括为编译连接源程序(.c)目标程序(.obj)可执行程序(.exe)习题 4-4编写程序运行时输出 “Hello World!”参考代码#includestdio.hintmain(){printf(Hello World!\n);return0;}运行结果Hello World!习题 4-5编写程序运行时输出指定图形题目使用printf输出下面的阶梯状图形***** ***** ***** ***** *****参考代码#includestdio.hintmain(){printf(*****\n);printf( *****\n);printf( *****\n);printf( *****\n);printf( *****\n);return0;}说明每一行前面的空格数量逐渐增加形成阶梯效果。\n表示输出后换行。习题 4-6输入 a、b、c 三个值输出其中最大者参考代码#includestdio.hintmain(){inta,b,c,max;printf(请输入三个整数(用空格分隔));scanf(%d %d %d,a,b,c);maxa;// 先假设 a 最大if(bmax)maxb;// 若 b 更大则更新if(cmax)maxc;// 若 c 更大则更新printf(最大值为%d\n,max);return0;}运行样例请输入三个整数(用空格分隔)12 45 9 最大值为45说明这是打擂台思想的最简单形式先让第一个数当擂主其余数逐个与擂主比较谁大谁留下最终留下的就是最大值。习题 4-7输入两个整数输出它们的和参考代码#includestdio.hintmain(){inta,b,sum;printf(请输入两个整数(用空格分隔));scanf(%d %d,a,b);sumab;printf(两数之和为%d\n,sum);return0;}运行样例请输入两个整数(用空格分隔)123 456 两数之和为5795. 学习建议先建立程序观不要急于背语法先理解程序 数据结构 算法以及源程序、目标程序、可执行程序三者关系。动手跑代码本章的所有案例和习题都要自己在开发环境中敲一遍、运行一遍哪怕只是输出一行Hello World。养成规范习惯注意缩进、变量命名、添加注释从一开始就写出可读的代码。理解函数思想案例 3 已经展示了一个程序由多个函数组成这个思想贯穿全书务必在入门阶段建立起来。分清编译与连接遇到错误时先看是编译错误语法问题还是连接错误函数、符号引用问题有助于快速定位问题。6. 小结第1章虽然简单但它是理解 C 语言乃至整个程序设计体系的起点。掌握以下核心内容即可为后续章节打好基础程序、程序设计、程序设计语言的基本概念计算机语言发展的三个阶段C 语言的发展历程与主要特点程序的三种基本结构顺序、选择、循环C 程序的基本结构函数是基本单位从main开始执行源程序、目标程序、可执行程序的区别以及编译运行的四个步骤能独立完成printf输出、scanf输入、简单计算和if判断等入门编程题。