C语言程序设计001
C语言程序设计(第二版)习题参考答案
C语言程序设计习题参考答案习题 1一、判断题1.在计算机中,小数点和正负号都有专用部件来保存和表示。
2.二进制是由0和1两个数字组成的进制方式。
3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。
4.在整数的二进制表示方法中,0的原码、反码都有两种形式。
5.有符号数有三种表示法:原码、反码和补码。
6.常用字符的A S CII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。
解:1.F2.T 3.T 4.T 5.T 6.T二、单选题1.在计算机中,最适合进行数值加减运算的数值编码是。
A. 原码B. 反码C. 补码D. 移码2.已知英文小写字母m的A SCII码为十进制数109,则英文小写字母y的AS CII码为十进制数。
A. 112B. 120C. 121D. 1223.关于ASCII码,在计算机中的表示方法准确地描述是。
A. 使用8位二进制数,最右边一位为1B. 使用8位二进制数,最左边一位为1C. 使用8位二进制数,最右边一位为0D. 使用8位二进制数,最左边一位为04.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。
A. X∧Y=1000B. X∨Y=1111C. X⊕Y=0011D. ¯Y=10005.下列叙述中正确的是()。
A.高级语言就是机器语言B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。
C语言001_end
C源程序的基本单位是( ) 一个C源程序中至少应包括一个( ) 在一个C源程序中,注释部分两侧的分界 符分别为( )和( )
8
一个C程序的执行是从 本程序的main函数开始,到main函数结束 本程序文件的第一个函数开始,到本程序文件 的最后一个函数结束 本程序的main函数开始,到本程序文件的最后 一个函数结束 本程序文件的第一个函数开始,到本程序的 main函数结束
1
以下叙述正确的是 在C程序中,main函数必须位于程序的最 前面 C程序的每行中只能写一条语句 C语言本身没有输入输出语句 在对一个C程序进行编译的过程中,可发 现注释中的拼写错误
2
以下叙述不正确的是 一个C源程序可由一个或多个函数组成 一个C源程序必须包含一个main函数 C程序的基本组成单位是函数 在C程序中,注释说明只能位于一条语句 的后面
3
C语言规定,在一个源程序中,main函数 的位置 必须在最开始 必须在系统调用的库函数的后面 可以任意 必须在最后
4
一个C语言程序是由 一个主程序和若干子程序
以下叙述中正确的是 C语言的源程序不必通过编译就可以直接 运行 C语言中的每条可执行语句最终都将被转 换成二进制的机器指令 C源程序经编译形成的二进制代码可以直 接运行 C语言中的函数不可以单独进行编译
6
用C语言编写的代码程序 可立即执行 是一个源程序 经过编译即可执行 经过编译解释才能执行
7
C语言程序设计_进制
+0的补码表示为:00000000
一0的补码可以这样求(1)最高位为1,其余各位为 原码取反,即对00000000求反得1111111 1;②加1,得100000000,进位1被丢弃(因 为一个字节只能容纳8位,256 只能被存储为00000 000)
0的补码是唯一的。
这样, 用补码进行运算,减法可以用加法来实现,如十7一6应 得1。可以将十7的补码和一6的 补码相加,就得到结果值的补码。 十7的补码: 0000011 1 一6的补码: 11111010 ----------------------------------------------( 相 加) 1 0 0 0 0 0 0 0 1 进位被舍去。后面8位00000001就是1的补码
“大于”、“小于”、“等于”、 等等
算术运算 逢二进一,向高位进位
加法
0+0=0 0+1=1+0=1 1+1=1
逻辑运算
与(逻辑乘) 0 × 0 = 0 1×0=0×1=0 1×1=1
或(逻辑加) 0 + 0 = 0 0+1=1+0=1 1+1=1
非 1=0 0=1
二进制的优点: 可行性 只有0和1两个状态 简易性 运算法则简单 逻辑性 1和0正好与逻辑代数中的真和假相 对应 可靠性 0和1两个符号,存储、传输和处理 时不容易出错
十进制数转换为二进制数:
整数——“除2取余”;小数——“乘2取整”。
转换为八进制数:
整数 ——“除8取余”,小数—— “乘8取整”。
转换为十六进制数:
整数——“除16取余”;小数——“乘16取整”。
例 将十进制数125.6875转换成二进制数。 整数部分125转换如下:
C_C++程序设计与上机指导001
1.3.2 语句
语句是程序的基本单位。 语言语句可分为以下 语句是程序的基本单位。C语言语句可分为以下 四类: 四类
1.简单语句 简单语句
• 表达式末加分号即构成 语言的语句。大多数C语句都必 表达式末加分号即构成C语言的语句。大多数 语句都必 语言的语句 须以分号结束。 须以分号结束。
2.复合语句 复合语句
C程序基本结构 1.3 C程序基本结构
C程序是由函数组装而成的,每个函数完成一个 程序是由函数组装而成的, 程序是由函数组装而成的 独立的功能。 独立的功能。这些函数中必须有一个主函数 main(),它是整个程序的入口。函数间通过调 ,它是整个程序的入口。 用来完成一个任务。 用来完成一个任务。 1.3.1 C语言基本词汇 1.3.2 语句 1.3.3 函数 1.3.4 标准库 1.3.5 C源程序的结构特点
1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6
格式输出函数printf() 格式输出函数 格式输入函数scanf( ) 格式输入函数 字符输出函数putchar() 字符输出函数 字符输入函数getchar() 字符输入函数 赋值语句 简单程序举例
①标准C虽不限制标识符的长度,但它受各种版本C 语言编译系 统的限制,同时也受到具体机器的限制。 ②标识符区分大小写。例如BOOK和book 是两个不同的标识符。 ③C语言有32个关键字,它们已有具体含义。用户不能定义与其 相同的标识符。 ④系统内部常使用一些以下划线开头的标识符,因此,为防止冲 突,建议用户自定义标识符不要以下划线开头。 ⑤标识符虽然可由程序员随意定义,但标识符是用于标识某个量 的符号。因此,命名时应尽量作到“顾名思义”,以便阅读理解。
• 用一对花括号括起来的一组语句,称为复合语句。 用一对花括号括起来的一组语句,称为复合语句。
c语言第二部分 实验内容
三、实验内容
1.阅读并输入如下程序,查看运行结果,并分析其功能。 # include "stdio.h" main ( ) { int a, b, c, s ; a = 5; b = 4; c = 6; s = (a+b+c)/ 3; printf (" a = %d, b = %d, c = %d \n, s = %d ", a, b, c, s) ; }
C语言程序设计实验·设计·习题
2.下面是一正方形面积的计算程序,通过输入不同的边长,求 出不同的面积。输入此程序并试运行。 注意:程序中含有输入语句,运行时将会停留在另一窗口中等待 输入数据。 # include"stdio.h" main ( ) { int r, s ; scanf (" %d ",&r) ; s= r*r; printf (" s = %d ", s) ; } 3.在Turbo C中调试并修改以下C程序中的错误。
C语言程序设计实验·设计·习题
三、实验内容
1.改正书中所给的相关程序的错误。 2.程序填空。 (1)按程序中注释的要求填输出语句。 (2)要求运行时必须按如下格式输入数据,请填空。 3.程序编译成功,只是说明没有语法错误,但并不一定能得出 正确结果,因为有可能存在编程逻辑错误。这时,我们需要跟踪变量、 调试程序,找出问题所在。调试的一般方法有: (1)单步跟踪:选择Run菜单下的Step命令,也可以直接按快捷键 F7(可跟踪进函数、过程)或快捷键F8,这样可以每条语句单独运行。 (2)运行至光标处:先将光标移至目标语句,然后选择Run菜单下 的Go to Cursor命令,或按快捷键F4,这样可以连续运行从开始到光 标处的一段程序。
(2021年整理)谭浩强c语言程序设计习题集
(完整)谭浩强c语言程序设计习题集编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)谭浩强c语言程序设计习题集)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)谭浩强c语言程序设计习题集的全部内容。
目录重要次重要重复或欲删除基础第一章 C语言概述1。
1 选择题1.2 填空题第二章数据类型、运算符与表达式2。
1 选择题2.2 填空题第三章最简单的C程序设计3。
1 选择题3。
2 填空题第四章逻辑运算和判断选取控制4。
1 选择题4。
2 填空题4。
3 编程题第五章循环控制5。
1 选择题5。
2 填空题5.3 编程题第六章数组6。
1 选择题6.2 填空题6.3 编程题第七章函数7。
1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8。
3 编程题第九章指针9.1 选择题9.2 填空题9。
3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11。
2 填空题11。
3 编程题第十二章文件12。
1 选择题12。
2 填空题12.3 编程题第一章 C语言概述1。
1 选择题*1.1一个C程序的执行是从 A 。
A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。
但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。
C语言程序设计实验指导
C语⾔程序设计实验指导C语⾔实验指导吴元斌编重庆三峡学院计算机科学与⼯程学院实验总体说明⼀、实验的⽬的学习C语⾔程序设计不能满⾜于学会C语⾔的语法规则,能看懂书上的程序,⽽应当熟练地掌握程序设计的全过程,即独⽴编写源程序、独⽴上机调试、独⽴运⾏程序和分析结果。
上机实验的⽬的,不仅仅是为了验证教材和讲课的内容,或者验证⾃⼰所编写的程序的正确与否。
实验的主要⽬的⾄少包括如下⼏点:1.加深对讲授内容的理解,尤其是⼀些语法规定。
通过实验来掌握语法规则是⾏之有效的⽅法。
2.熟悉所⽤的开发平台。
3.学会上机调试程序。
通过反复调试程序掌握根据出错信息修改程序的⽅法。
4.通过调试完善程序。
⼆、实验前的准备1.了解所⽤的计算机系统(包括C语⾔开发平台)的性能和使⽤⽅法。
2.复习和掌握与本实验有关的教学内容。
3.准备好上机所需的程序,切忌不编程或抄别⼈的程序去上机。
4.对程序中出现的问题应事先估计,对程序中⾃⼰有疑问的地⽅应先作上记号,以便上机时给予注意。
5.准备好调试程序和运⾏程序所需的数据。
三、实验过程中应注意的问题1.上机实验应⼀⼈⼀组,独⽴实验。
2.上机过程中出现的问题,⾸先⼒争⾃⾏解决,若不⾏可求助于同学和⽼师。
尤其对“出错信息”,应善于分析判断,找出出错的⾏,然后检查该⾏或其上⼀⾏。
3.记录好上机过程中出现的各种问题和解决的⽅法。
4.上机实验平台的使⽤⽅法见附录A和附录B。
5.上机结束后,应及时写出实验报告(主要内容:题⽬、程序清单与结果、)。
四、完成实验报告实验报告包括以下内容:1.实验⽬的2.实验内容3.程序清单、运⾏结果4.调试过程记录5.总结经验与教训:对运⾏结果的分析,以及本次调试程序所取得的经验。
实验⼀C语⾔编程初步⼀、⽬的和要求1.熟悉Visual C++ 6.0开发环境(或Eclipse+MinGW),掌握编辑、编译、连接和运⾏C程序的⽅法。
2.通过运⾏简单的C程序,初步理解C源程序的特点和编程⽅法。
C语言程序设计案例教程课件 1第一章 C语言概述
1.启动Visual C++6.0环境
启动Visual C++ 6.0方法
单击 “开始”-“程序”-“Microsoft Visual studio 6.0”“Microsoft Visual C++ 6.0”命令
标题栏 工具栏
菜单栏
项目工作区窗口
文档窗口
输出窗口
状态栏
1. 4 C语言程序上机调试步骤和方法
连接。执行连接命令后,输出窗口会显示出连接结果。
1. 4 C语言程序上机调试步骤和方法
4.程序执行
执行方法
在VC++环境中单击工具栏
中的 按钮,或者按
Ctrl+F5键,或者选择“组建”菜单中的“全部重建” 3种方式都可
以运行程序。可执行程序运行后,将显示为DOS控制台状态,按任
意键返回Visual C++ 6.0环境。
在编程时应力求遵循这些规则, 以养成良好的编程风格。
1. 4 C语言程序上机调试步骤和方法
1.4.2 Visual C++集成开发环境
利用Visual C++ 6.0集成环境开发C程序的过程如下: 1.启动Visual C++ 6.0环境 2.编辑源程序文件 3.编译和连接 4.执行
1. 4 C语言程序上机调试步骤和方法
1. 3 软件开发方法
算法的概念 广义上讲,算法是解决某一问题的方法和步骤.
算法的特性 (1)有穷性 (2)确定性 (3)可行性 (4)有零个或多个输入 (5)有一个或多个输出
1. 3 软件开发方法
算法表示方法
1. 3 软件开发方法
三种基本结构
c语言 01交替异或
c语言 01交替异或描述一、简介异或运算一般指异或。
异或(xor)是一个数学。
它应用于逻辑运算。
异或的数学符号为“⊕”,计算机符号为“xor”。
其运算法则为:a⊕b=(¬a∧b)∨(a∧¬b)如果a、b两个值不相同,则异或结果为1。
如果a、b两个值相同,异或结果为0。
异或也叫半加运算,其运算法则相当于不带进位的加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。
异或略称为XOR、EOR、EX-OR程序中有三种演算子:XOR、xor、⊕。
使用方法如下z=x⊕yz=xxory二、异或运算法则1.a⊕a=02.a⊕b=b⊕a3.a⊕b⊕c=a⊕(b⊕c)=(a⊕b)⊕c;4.d=a⊕b⊕c可以推出a=d⊕b⊕c.5.a⊕b⊕a=b.6.若x是二进制数0101,y是二进制数1011;则x⊕y=1110只有在两个比较的位不同时其结果是1,否则结果为0即“两个输入相同时为0,不同则为1”!三、异或运算的作用在计算机中普遍运用,异或(xor)的逻辑符号一般用xor,也有用⊕的:真⊕假=真假⊕真=真假⊕假=假真⊕真=假或者为:True⊕False=TrueFalse⊕True=TrueFalse⊕False=FalseTrue⊕True= False部分计算机语言用1表示真,用0表示假,所以两个字节按位异或如下下面是两个二进制数值进行异或计算:现实中用的都是十进制的数值,那么我们来看一看两个十进制数值是怎么进行异或计算:5⊕3=?1.进行异或计算前会把数值都转换为二进制:5和3转为二进制分别为:0101、00112.再把结果0110转换为十进制的:63.所以5⊕3=6四、C语言异或运算异或运算符是指:参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。
即:0^0=0,1^0=1,0^1=1,1^1=0例如:10100001^00010001=101100000^0=0,0^1=1可理解为:0异或任何数,其结果=任何数1^0=1,1^1=0可理解为:1异或任何数,其结果=任何数取反任何数异或自己,等于把自己置01)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2位翻转,可以将数与00000110进行按位异或运算。
c程序设计第三版习题参考解答(全)
C程序设计(第三版)课后习题参考解答第1章 C语言概述1.5 参照本章例题,编写一个C程序,输出以下信息:******************************Very Good!******************************解:main ( ){printf(“****************************** \n”);printf(“\n”);printf(“ Very Good! \n”);printf(“\n”);printf(“****************************** \n”);}1.6 写一个程序,输入a,b,c三个值,输出其中最大者。
解:main ( ){int a,b,c,max;printf(“请输入三个数a,b,c: \n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf(“最大数为:%d ”,max);}第2章程序的灵魂——算法2.1 什么叫结构化的算法?为什么要提倡结构化的算法?解:由一些基本结构顺序组成的算法称为结构化的算法。
由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。
2.7 什么叫结构化程序设计?它的主要内容是什么?解:结构化程序就是用高级语言表示的结构化算法。
它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。
第3章数据类型、运算符与表达式3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。
注:如果没有学过二进制和补码,此题可以不做。
解:各数据在内存中的存储形式如下表所示:变量的类型25 -2 32769int型00 (000011001)8 位111111111111111015100 … 001(溢出)14long型00 (000011001)24 11 (1110)3100... 0100 (001)16 14short型100 (000011001)8 111111111111111015100 … 001(溢出)14signed char(8位)100011001 11111110 00000001(溢出)unsigned int型00 (000011001)8 11 (110)15100 (001)14unsigned long型00 (000011001)24 11 (110)3100... 0100 (001)16 14unsigned short型00 (000011001)8 11 (110)15100 (001)8unsigned char型00011001 11111110 00000001其中int和short类型,其取值范围是-32768~32767。
《C语言程序设计》基本知识点解答(一)
《C语言程序设计》基本知识点解答(一)C语言程序设计基本知识点解答(一)第○章计算机基础知识Q001 计算机的基本原理是什么?(计算机的基本原理)A001 计算机的基本原理有两个:1.二进制:是指计算机中所有的信息都是以二进制形式的数据来表示、存储、传递和运算的。
2.存储程序控制:是指在利用计算机解决问题时,首先需要人找出解决方法,然后将这个方法用某种计算机语言转换成计算机程序(包含了原始数据和处理指令),再送入计算机中存储,最后由人发出命令,计算机开始按照程序中的指令和流程执行这个程序(即对数据进行加工处理)。
Q002 为什么计算机内部使用二进制?(二进制)A002 使用二进制的主要原因是:1.物理上很容易实现两种相对立的稳定的能量状态(如晶体管的导通与不导通、高电平与低电平、磁性材料中剩磁的顺时针或逆时针方向等)2.二进制数据的运算规则数量少而且简单,操作实现简便Q003 计算机硬件的基本结构是什么?(硬件)A003硬件系统运算器中央处理器CPU主机内存储器存储器外存储器外设输入输出设备(I/O)控制器Q004 计算机硬件系统的核心部件有哪些?它们的作用是什么?(硬件)A004 计算机硬件系统的四大核心部件是控制器、运算器、存储器和输入输出设备。
其中:控制器是计算机的指挥控制中心。
其主要功能是识别翻译指令代码并向计算机各部分发出适当的控制信号,以便执行机器指令。
运算器是对数据进行加工、运算的部件。
其主要功能是对二进制数据进行算术运算和逻辑运算。
存储器是存放数据和程序的部件。
其主要功能是按照要求向指定的位置存进或取出信息。
输入设备的功能是将数据和程序送入到计算机的存储器中。
常见的输入设备有键盘、鼠标等。
输出设备的功能是将计算机产生的结果送出计算机外。
常见的输出设备有显示器、打印机等。
Q005 计算机的基本工作过程是怎样的?(硬件)(工作过程)A005 控制流数据流Q006 内存储器和外存储器有哪些区别?(存储器)(内存)Q007 什么叫存储单元的“位”和“字节”?(内存)(字节)(位)A007 “位”(bit):是最小的电子线路单元,只能保存一位二进制数即一个0或一个1。
标准C语言程序设计及应用周纯杰版习题参考答案
注:以下内容为教材部分习题答案,如发现错误请告知,欢迎讨论——张惕远习题二一、选择题1、C2、BCD3、A4、A(注:本题强调用户标识符,所以if、int不是,但是sin是用户标识符,原因是库函数不是标准语法成分,开发库函数的程序员也是用户,main虽然不是语法成分,但开发平台预定义了main为console application的执行入口,并且规定了定义格式,所以用户不能用作它用,但_main可以)5、(D)(C)6、C7、D8、B9、A10、 D11、B(注:本题是求strlen("\\\”DEF\”\\”)的值,即字符串中有效字符的个数,不含串结尾符,sizeof(“…”)的值与前者不同,含串结尾符)12、 D13、 C14、 D15、 A16、 B17、 A18、 B二、判断题(对)(错)(错)(对)三、填空题1、B 66回车2、n1=%d\nn2=%d3、5四、计算下列各表达式的值1、注:本书假设采用16位编译平台,所以int和unsigned int均为2字节类型。
(1)47(2)38(3)9(4)0xFFC6 or 65478(5)104(6)22、(1)6(2)50(3)1(4)-16 or 0xFFF0(5)1(6)203、表达式值a的值b的值(1)0 5 3(2)1 5 3(3)3 1 3(4)15 10 4(5)8 8 3(6)1 5 34、表达式值x的值y的值(1)12 25 2(2)0 24 3(3)1 24 3(4) 27 24 3(5) 1 24 3(6)6 6 3(7)24 24 24(y<<=3)(8)27 24 3(9)-29or0xffe3 24 3以上类型均为int5、表达式值x的值y的值(1)0 0 1(2)1 2 1(3)1 0 0(4)-3 -3 3(5)4 2 4以上类型均为int五、程序分析题b=20(注:中间4个空格)a=3600回车习题三一、填空题1、s=6回车2、s=96回车3、(1) c=getchar() or scanf(“%c”,&c)(2) c-32 or c-‘a’+’A’习题四一、写出程序运行结果:1、no 1 a=1no 1 a=0no 1 a=1no 1 a=0(注:教材中关于func函数的原型有错,应该改为:void func();)2、a=0 b=0 c=0a=1 b=0 c=0a=2 b=0 c=03、main:x=5,y=1,n=1fun:x=6,y=21,n=11main:x=5,y=1,n=11fun:x=8,y=31,n=21习题五一、选择题和填空题1、D2、D3、C4、65、C DABC6、(1)j+=2(2)a[j]>a[i](注:教材中for语句有错,应该去掉表达式3后面的分号“;”)最后输出为u nalggace7、(1) s[j] (2)s[j]8、D9、B10、 611、isdigit(s[i])该带参数的宏用来判断字符s[i]是不是数字字符,该宏的定义在头文件ctype.h中12、‘\0’和str1[i] -str2[i]二、1、第7行sum=0;第10行改为:scanf(“%d”,&a[i][j]);习题六一、选择题1、D2、D3、D4、C5、C D6、D7、B8、B二、填空题1、*(p+3) 2 222、cdefgbcdefgabcdefg73、6385三、程序分析题9、第5行改为:p =&s[0]; or p=s;10、第4,5行合为:double x,y,*p;11、第4行改为:int x,*p=&x;否则p为“野指针”或者在给p赋值之前定义一个int变量y,然后p=&y;12、第4,5行交换书写次序。
C语言程序设计教材答案
第1章C语言概述1.一个主函数多个2.main()3.c obj exe三、程序填空题main()printf四、运行结果$$$$$$$$$$$$$$$$AAAAAAAAASSSSSSSSSSSSSS五、编程题void main(){printf("**********************************\n");printf("* 请完成以下功能*\n");printf("* 1、进入程序2、切换用户*\n");printf("* 3、更新程序4、删除程序*\n");printf("* 请选择(1-4):*\n");printf("**********************************\n");}第2章数据类型、运算符、表达式与基本输入输出二、填空题1.3,12.不定值3.14.05.1,0,0,06.-2647.88.8,8,109.1三、运行结果题1.n=12.n=3,a=2,b=33.32767,327684.<1>7.000000<2>6<3>3.000000<4>2<5>6.000000<!>0.0000003.<1>0.000000<2>0<3>0<4>2<5>10<6>5第3章顺序程序设计二、填空题1.dec:-1,oct:37777777777,hex:ffffffff,unsigned:4294967295 2.dec:1,oct:1,hex:1,unsigned:13.dec:65,oct:41,AXCII:A4.3.141593,,3.1425.3.500000,3.56.31.415920,3.141592e+0017.c=K8.a=1,b= ,c=29.a=12,b=34510.c=A三、编程题1.#include<stdio.h>void main(){float r,h,v;scanf("%f%f",&r,&h);v=3.14*r*r*h;printf("v=%f\n",v);}2.#include<stdio.h>void main(){int n,s=0;scanf("%d",&n);s=(n+1)*(n+2)*n/3;printf("1*2+2*3+...+n(n+1)=%d\n",s);}3.#include<stdio.h>void main(){int a,b,n=0;scamf("%d%d",&a,&b);n=a/2+b/4;printf("n=%d\n",n);}4.#include<stdio.h>void main(){printf(" O\n");printf("OOOOOOOOOOO000\n");printf("O O 0\n");printf("O O 0\n");printf("OOOOOOOOOOO000\n");printf(" O\n");}第4章分支结构程序设计习题解1.缺省{ }时,else总是与上面最近的、没有匹配过的if 匹配。
《C语言程序设计(第五版)》习题答案
《C语⾔程序设计(第五版)》习题答案各章习题参考答案第1章习题参考答案1. 简述C程序的结构特点。
答:(1) ⼀个C语⾔源程序由⼀个或多个源⽂件组成。
每个源⽂件由⼀个或多个函数构成,其中有且仅有⼀个主函数(main函数)。
(2) ⼀个函数由函数⾸部(即函数的第⼀⾏)和函数体(即函数⾸部下⾯的⼤括号内的部分)组成。
函数⾸部包括函数类型、函数名和放在圆括号内的若⼲个参数。
函数体由声明部分和执⾏部分组成。
(3) C程序书写格式⾃由,⼀⾏内可以写多条语句,⼀个语句也可以分写在多⾏中,每个语句必须以分号结尾。
(4)程序的注释内容放在“/*”和“*/之”间,在‘/’和‘*’之间不允许有空格;注释部分允许出现在程序中的任何位置处。
2. 分析例1.3程序的结构。
答:下⾯是例1.3的程序,它的结构是:有且只有⼀个主函数main以及若⼲个其它函数,还有⼀个被主函数调⽤的sumab函数。
函数有⾸部,包括类型和名称,⾸部下的⼤括号中有变量定义、输⼊、计算和输出等语句。
#includeint sumab (int x, int y); /*函数声明*/int main () /*主函数*/{ int a,b,sum; /*定义变量*/printf("请输⼊变量a与b的值:"); /*提⽰信息*/scanf ("%d %d", &a, &b); /*输⼊变量a和b的值*/sum=sumab(a,b); /*调⽤sumab函数*/printf("a与b的和等于%d", sum);/*输出sum的值*/return 0;}int sumab (int x, int y) /*定义sumab函数,并定义形参x、y */{ int z;z=x+y;return z;}3. 分别编写完成如下任务的程序,然后上机编译、连接并运⾏。
(1) 输出两⾏字符,第1⾏是“The computer is our good friends!”,第2⾏是“We learnC language.”。
C语言程序设计001
和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部(临时)
变量的子程序。通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序。这
使得编写共享代码段的程序变得十分简单。如果开发了一些分离很好的函数,在引用时我们
仅需要知道函数做什么,不必知道它如何做。切记:过度使用全局变量(可以被全部程序访
鼓励)分别编译,所以
C语言可使程序员方便地管理大型项目,最大限度地减少重复劳动。
1.3 C语言的程序结构
1.3.1 基本程序结构
任何一种程序设计语言都具有特定的语法规则和规定的表达方法。一个程序只有严格按
集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用
无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它
的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完
全不用关心,C + +、V B、D e l p h i就是典型代表。
执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而
运算效率是所有语言中最高的。机器语言,是第一代计算机语言。
2. 汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字
母、符号串来替代一个特定的指令的二进制串,比如,用“
A D D”代表加法,“M O V”代表
是计算机的灵魂,没有软件,计算机是一台“裸机”,是什么也不能干的,有了软件,才能灵
动起来,成为一台真正的“电脑”。所有的软件,都是用计算机语言编写的。
计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由陈洋48671155贡献 pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
下载 第1章 程序设计与算法 1.1 程序设计语言的发展 自1 9 4 6年世界上第一台电子计算机问世以来,计算机科学及其应用的发展十分迅猛,计 算机被广泛地应用于人类生产,生活的各个领域,推动了社会的进步与发展.特别是随着国 际互联网( I n t e r n e t)日益深入千家万户,传统的信息收集,传输及交换方式正被革命性地改 变,我们已经难以摆脱对计算机的依赖,计算机已将人类带入了一个新的时代 — 信息时代. 新的时代对于我们的基本要求之一是:自觉地,主动地学习和掌握计算机的基本知识和 基本技能,并把它作为自己应该具备的基本素质.要充分认识到,缺乏计算机知识,就是信 息时代的"文盲" . 对于理工科的大学生而言,掌握一门高级语言及其基本的编程技能是必需的.大学学习, 除了掌握本专业系统的基础知识外,科学精神的培养,思维方法的锻炼,严谨踏实的科研作 风养成,以及分析问题,解决问题的能力的训练,都是日后工作的基础.学习计算机语言, 正是一种十分有益的训练方式,而语言本身又是与计算机进行交互的有力的工具. 一台计算机是由硬件系统和软件系统两大部分构成的,硬件是物质基础,而软件可以说 是计算机的灵魂,没有软件,计算机是一台"裸机" ,是什么也不能干的,有了软件,才能灵 动起来,成为一台真正的"电脑" .所有的软件,都是用计算机语言编写的. 计算机程序设计语言的发展,经历了从机器语言,汇编语言到高级语言的历程. 1. 机器语言 电子计算机所使用的是由" 0"和"1"组成的二进制数,二进制是计算机的语言的基础. 计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就 是写出一串串由" 0"和" 1"组成的指令序列交由计算机执行,这种语言,就是机器语言. 使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此.而且,由于每台计 算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上 执行,必须另编程序,造成了重复工作.但由于使用的是针对特定型号计算机的语言,故而 运算效率是所有语言中最高的.机器语言,是第一代计算机语言. 2. 汇编语言 为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字 母,符号串来替代一个特定的指令的二进制串,比如,用" A D D"代表加法, "M O V"代表 数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了, 这种程序设计语言就称为汇编语言,即第二代计算机语言.然而计算机是不认识这些符号的, 这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序 被称为汇编程序. 汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬 件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以 2 C语言程序设计 下载 至今仍是一种常用而强有力的软件开发工具. 3. 高级语言 从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言 接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上 通用.经过努力, 1 9 5 4年,第一个完全脱离机器硬件的高级语言 — FORTRAN问世了, 4 0多 年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大,使用较普遍的有 F O RT R A N,A L G O L,C O B O L,B A S I C,L I S P,S N O B O L,P L / 1,P a s c a l,C,P R O L O G, Ada,C++,VC,VB,Delphi,JAVA等. 高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程 序语言的过程.相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业 化,流水线式的工业化生产. 6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏 科学规范的系统规划与测试,评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于 含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有 不出错的软件.这一切,极大地震动了计算机界,史称"软件危机" .人们认识到:大型程序 的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过 程.程序的设计应易于保证正确性,也便于验证正确性. 1 9 6 9年,提出了结构化程序设计方 法,1 9 7 0年,第一个结构化程序设计语言 — P a s c a l语言出现,标志着结构化程序设计时期的 开始. 8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设 计.在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被 执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向.这和人们日常处理事 物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程, 而应是面向具体的应用功能,也就是对象( o b j e c t) .其方法就是软件的集成化,如同硬件的 集成电路一样,生产一些通用的,封装紧密的功能模块,称之为软件集成块,它与具体应用 无关,但能相互组合,完成具体的应用功能,同时又能重复使用.对使用者来说,只关心它 的接口(输入量,输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完 全不用关心,C++,VB,Delphi就是典型代表. 高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序 就能自动生成算法,自动进行处理,这就是非过程化的程序语言. 1.2 C语言的特点 1.2.1 C语言是中级语言 C语言通常称为中级计算机语言.中级语言并没有贬义,不意味着它功能差,难以使用, 或者比BASIC,Pascal那样的高级语言原始,也不意味着它与汇编语言相似,会给使用者带来 类似的麻烦. C语言之所以被称为中级语言,是因为它把高级语言的成分同汇编语言的功能结 合起来了.表1-1表明了C语言在计算机语言中所处的地位. 下载 高级 中级 低级 第1章 程序设计与算法 3 表1-1 C语言在计算机语言中的地位 Ada,Modula-2,Pascal,COBOL,FORTRAN,BASIC C,FORTH,Macro-assembler Assembler 作为中级语言, C允许对位,字节和地址这些计算机功能中的基本成分进行操作. C语言 程序非常容易移植.可移植性表示为某种计算机写的软件可以用到另一种机器上去.举例来 说,如果为苹果机写的一个程序能够方便地改为可以在 IBM PC 上运行的程序,则称为是可移 植的. 所有的高级语言都支持数据类型的概念.一个数据类型定义了一个变量的取值范围和可 在其上操作的一组运算.常见的数据类型是整型,字符型和实数型.虽然 C语言有五种基本数 据类型,但与 P a s c a l或A d a相比,它却不是强类型语言. C程序允许几乎所有的类型转换.例 如,字符型和整型数据能够自由地混合在大多数表达式中进行运算.这在强类型高级语言中 是不允许的. C语言的另一个重要特点是它仅有 3 2个关键字,这些关键字就是构成 C语言的命令.和 IBM PC的BASIC相比,后者包含的关键字达 159个之多. 1.2.2 C语言是结构化语言 虽然从严格的学术观点上看, C语言是块结构( b l o c k - s t r u c t u r e d)语言,但是它还是常被 称为结构化语言.这是因为它在结构上类似于 A L G O L,P a s c a l和M o d u l a - 2(从技术上讲,块 结构语言允许在过程和函数中定义过程或函数.用这种方法,全局和局部的概念可以通过 "作用域"规则加以扩展, "作用域"管理变量和过程的"可见性" .因为C语言不允许在函数 中定义函数,所以不能称之为通常意义上的块结构语言) . 结构化语言的显著特征是代码和数据的分离.这种语言能够把执行某个特殊任务的指令 和数据从程序的其余部分分离出去,隐藏起来.获得隔离的一个方法是调用使用局部(临时) 变量的子程序.通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序.这 使得编写共享代码段的程序变得十分简单.如果开发了一些分离很好的函数,在引用时我们 仅需要知道函数做什么,不必知道它如何做.切记:过度使用全局变量(可以被全部程序访 问的变量)会由于意外的副作用而在程序中引入错误. 结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清晰性使得它 们更易于维护.这已是人们普遍接受的观点了. C语言的主要结构成分是函数 C的独立子程序. 在C语言中,函数是一种构件(程序块) ,是完成程序功能的基本构件.函数允许一个程序的 诸任务被分别定义和编码,使程序模块化.可以确信,一个好的函数不仅能正确工作且不会 对程序的其它部分产生副作用. 1.2.3 C语言是程序员的语言 也许你会问"所有的计算机语言不都是程序员使用的吗?" ,回答是断然的"否" .我们 考虑典型的非程序员的语言 C O B O L和B A S I C.C O B O L的设计使程序员难以改变所编写代码 的可靠性,甚至不能提高代码的编写速度. 然而 C O B O L设计者的本意却是打算使非程序员能读程序(这是不大可能的事) .注意, 4 C语言程序设计 下载 这并不是攻击COBOL的优点,而是想指出,它没有被设计成为程序员的理想语言. BASIC 的 主要目的是允许非专业程序员在计算机上编程解决比较简单的问题.与其形成鲜明对照的是 C 语言,由于程序生成,修改和现场测试自始至终均由真正的程序员进行,因而它实现了程序 员的期望:很少限制,很少强求,块结构,独立的函数以及紧凑的关键字集合.用 C语言编程, 程序员可以获得高效机器代码,其效率几乎接近汇编语言代码. C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言.汇编语言使用的汇编指 令,是能够在计算机上直接执行的二进制机器码的符号表示.汇编语言的每个操作都对应为 计算机执行的单一指令.虽然汇编语言给予程序员达到最大灵活性和最高效率的潜力,但开 发和调试汇编语言程序的困难是难以忍受的.非结构性使得汇编语言程序难于阅读,改进和 维护.也许更重要的是,汇编语言程序不能在使用不同 CPU的机器间移植. 最初,C语言被用于系统程序设计.一个"系统程序"是一大类程序的一部分,这一大类 构成了计算机操作系统及实用程序.通常被称为系统程序的有: 操作系统. 翻译程序. 编辑程序. 汇编程序. 编译程序. 数据库管理程序. 随着C语言的普及,加之其可移植性和高效率,许多程序员用它设计各类程序.几乎所有 的计算机上都有 C语言编译程序,这使我们可以很少改动甚至不加改动地将为一种机器写的 C 语言源程序在另一种机器上编译执行.可移植性节省了时间和财力. C语言不仅在速度和结构上有它的优势,而且每个 C语言系统都提供了专门的函数库,程 序员可以根据不同需要对其进行剪裁,以适应各种程序的设计.由于它允许(更准确地说是 鼓励)分别编译,所以 C语言可使程序员方便地管理大型项目,最大限度地减少重复劳动. 1.3 C语言的程序结构 1.3.1 基本程序结构 任何一种程序设计语言都具有特定的语法规则和规定的表达方法.一个程序只有严格按 照语言规定的语法和表达方式编写,才能保证编写的程序在计算机中能正确地执行,同时也 便于阅读和理解. 为了了解C语言的基本程序结构,我们先介绍几个简单的 C程序. [例1-1] # include main() /* 主函数*/ { printf("This is a sample of c program. \n"); } 调用标准函数, /* 显示引号中的内容 */ 下载 RUN This is a sample of c program. 第1章 程序设计与算法 5 这是一个最简单的 C程序,其执行结果是在屏幕上显示一行信息: [例1-2] main() /*主函数*/ { void proc(); /* 函数声明 */ int a=3; /*指定a为整数,初始值为 3*/ proc(); /* 调用函数proc, 无返回*/ a=func(); /*调用函数func, 结果返回给a*/ printf("This is a sample of c program. \n"); } void proc() /* 定义函数proc,void 指定该函数不返回结果*/ { printf("Hello. \n"); } int func() { return(2); } /*定义函数func,int 指定该函数返回一个整数*/ /* 返回整数2*/ 本程序的执行过程是: 程序从main()处开始. 变量a代表一个整数,并且初始值为 3. 执行程序(函数) proc();屏幕上显示Hello,\n为转义字符,代表换行的意思. 执行程序(函数) func();并将结果赋予 a,此时,a的值为2. 屏幕上显示"This is a sample of c program." . 程序执行的结果是在屏幕显示两行信息: RUN Hello. This is a sample of c program. 程序中/ * . . . . . * /表示对程序的说明(称为注释) ,不参与程序的运行.注释文字可以是任意 字符,如汉字,拼音,英文等. [例1-3] /*输入长方体的长,宽,高,计算长方体体积 */ main() { int x,y,z,v; /* 定义整型变量 */ scanf("%d,%d,%d",&x,&y,&z); / *调用标准函数,从键盘输入x,y,z 的值* / v = volume(x,y,z); /* 调用volume 函数,计算体积 */ prinf("v = %d\n",v); } 6 C语言程序设计 下载 /* 定义volume 函数*/ /* 对形参a,b,c 作类型定义*/ /* 定义函数内部使用的变量p*/ /* 计算体积p的值*/ /* 将p值返回调用处*/ int volume(a,b,c) int a,b,c; { int p; p = a*b*c; return(p); } 本程序的功能是对从键盘输入的长方体的长,宽,高三个整型量求其体积的值.程序运 行的情况如下: RUN 5,8,6 v = 240 在本例中, main函数在调用 volume函数时,将实际参数 x,y,z的值分别传送给 volume函 数中的形式参数 a,b,c.经过执行 v o l u m e函数得到一个结果(即 v o l u m e函数中变量 p的值) 并把这个值赋给变量 v. 从上面程序例子,可以看出 C程序的基本结构. C程序为函数模块结构,所有的 C程序都是由一个或多个函数构成,其中必须只能有一个 主函数main().程序从主函数开始执行,当执行到调用函数的语句时,程序将控制转移到调用 函数中执行,执行结束后,再返回主函数中继续运行,直至程序执行结束. C程序的函数是由 编译系统提供的标准函数(如 p r i n t f,s c a n f等)和由用户自己定义的函数(如 p r o c,f u n c, volume等) .虽然从技术上讲,主函数不是 C语言的一个成分,但它仍被看做是其中的一部分, 因此, ain"不能用作变量名. "m 函数的基本形式是: 函数类型 函数名(形式参数) 形式参数说明; { 数据说明部分; 语句部分; } 其中: 函数头 包括函数说明,函数名和圆括号中的形式参数(如 int volume(a,b,c)) ,如果函数 调用无参数传递,圆括号中形式参数为空(如 void proc()函数) . 形式参数说明 指定函数调用传递参数的数据类型(如例 1.3中语句int a,b,c;) . 函数体 包括函数体内使用的数据说明和执行函数功能的语句,花括号 {和}表示函数体的 开始和结束. 1.3.2 函数库和链接 从技术上讲,纯粹由程序员自己编写的语句构成 C语言程序是可能的,但这却是罕见的. 因为所有的 C编译程序都提供能完成各种常用任务的函数 — 函数库(如 printf,scanf等) . C编译程序的实现者已经编写了大部分常见的通用函数.当我们调用一个别人编写的函数 下载 目标码结合起来,这个过程称为"链接" . 第1章 程序设计与算法 7 时编译程序"记忆"它的名字.随后, "链接程序"把我们编写的程序同标准函数库中找到的 保存在函数库中的函数是可重定位的.这意味着其中机器码指令的内存地址并未绝对地 确定, 只有偏移量是确定的.当把程序与标准函数库中的函数相链接时,内存偏移量被用来产 生实际地址.有关重定位的详细内容,请查阅其他技术书籍. 编写程序时用到的函数,许多都可以在标准函数库中找到.它们是可以简单地组合起来 的程序构件.编写了一个经常要用的函数之后,可将其放入库中备用. 1.3.3 开发一个C程序 开发一个C程序,包括以下四步: 1) 程序设计 程序设计亦称程序编辑.程序员用任一编辑软件(编辑器)将编写好的 C程 序输入计算机,并以文本文件的形式保存在计算机的磁盘上.编辑的结果是建立 C源程序文件. C程序习惯上使用小写英文字母,常量和其他用途的符号可用大写字母. C语言对大,小写字 母是有区别的.关键字必须小写. 2) 程序编译 编译是指将编辑好的源文件翻译成二进制目标代码的过程.编译过程是使用 C语言提供的编译程序(编译器)完成的.不同操作系统下的各种编译器的使用命令不完全相 同,使用时应注意计算机环境.编译时,编译器首先要对源程序中的每一个语句检查语法错 误,当发现错误时,就在屏幕上显示错误的位置和错误类型的信息.此时,要再次调用编辑 器进行查错修改.然后,再进行编译,直至排除所有语法和语义错误.正确的源程序文件经 过编译后在磁盘上生成目标文件. 3) 链接程序 编译后产生的目标文件是可重定位的程序模块,不能直接运行.链接就是把 目标文件和其他分别进行编译生成的目标程序模块(如果有的话)及系统提供的标准库函数 链接在一起,生成可以运行的可执行文件的过程.链接过程使用 C语言提供的链接程序(链接 器)完成,生成的可执行文件存在磁盘中. 4) 程序运行 生成可执行文件后,就可以在操作系统控制下运行.若执行程序后达到预期 目的,则 C程序的开发工作到此完成.否则,要进一步检查修改源程序,重复编辑 — 编译 — 链接 — 运行的过程,直到取得预期结果为止. 大部分C语言都提供一个独立的开发集成环境,它可将上述四步连贯在一个程序之中.本 书所涉及的程序全部在 Turbo C环境中进行. 1.3.4 C语言的关键字 表1-2列举了32个关键字,它们与标准 C句法结合,形成了程序设计语言 C. 表1-2 关 键 字 auto double int struct break else long switch case enum register typedef char extern short union const float signed unsigned continue for sizeof void default goto static volatile do if return while 8 C语言程序设计 下载 C语言的关键字都用小写字母. C语言中区分大写与小写, e l s e是关键字, L S E"则不 "E 是.在C程序中,关键字不能用于其它目的,即不允许将关键字作为变量名或函数名使用. 1.4 算法 什么是程序?程序 = 数据结构 + 算法. 对于面向对象程序设计,强调的是数据结构,而对于面向过程的程序设计语言如 个扎实的基础.那么,什么是算法呢? 人们使用计算机,就是要利用计算机处理各种不同的问题,而要做到这一点,人们就必 须事先对各类问题进行分析,确定解决问题的具体方法和步骤,再编制好一组让计算机执行 的指令即程序,交给计算机,让计算机按人们指定的步骤有效地工作.这些具体的方法和步 骤,其实就是解决一个问题的算法.根据算法,依据某种规则编写计算机执行的命令序列, 就是编制程序,而书写时所应遵守的规则,即为某种语言的语法. 由此可见,程序设计的关键之一,是解题的方法与步骤,是算法.学习高级语言的重点, 就是掌握分析问题,解决问题的方法,就是锻炼分析,分解,最终归纳整理出算法的能力. 与之相对应,具体语言,如 C语言的语法是工具,是算法的一个具体实现.所以在高级语言的 学习中,一方面应熟练掌握该语言的语法,因为它是算法实现的基础,另一方面必须认识到 算法的重要性,加强思维训练,以写出高质量的程序. 下面通过例子来介绍如何设计一个算法: [例1-4] 输入三个数,然后输出其中最大的数. 首先,得先有个地方装这三个数,我们定义三个变量 A,B,C,将三个数依次输入到A, B,C中,另外,再准备一个 MAX装最大数. 由于计算机一次只能比较两个数,我们首先把 A与B比,大的数放入 M A X中,再把 M A X 与C比,又把大的数放入 MAX中. 最后,把 M A X输出,此时 M A X中装的就是A,B, C三数中最大的一个数.算法可以表 示如下: 1) 输入A,B,C. 2) A 与B中大的一个放入 MAX中. 3) 把C与MAX中大的一个放入 MAX中. 4) 输出MAX,MAX即为最大数. 其中的2),3)两步仍不明确,无法直接转化为程序语句,可以继续细化: 2) 把A与B中大的一个放入 MAX中,若A>B,则MAX ← A;否则MAX ← B. 3) 把C与MAX中大的一个放入 MAX中,若C>MAX,则MAX←C. 于是算法最后可以写成: 1) 输入A,B,C. 2) 若A>B,则MAX ← A; 否则MAX←B. 3) 若C>MAX,则MAX← C. 4) 输出MAX,MAX即为最大数. C, P a s c a l,F O RT R A N等语言,主要关注的是算法.掌握算法,也是为面向对象程序设计打下一 下载 [例1-5] 第1章 程序设计与算法 9 这样的算法已经可以很方便地转化为相应的程序语句了. 猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又 多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上, 猴子发现只剩一只桃子了,问这堆桃子原来有多少个? 此题粗看起来有些无从着手的感觉,那么怎样开始呢?假设第一天开始时有 a 1只桃子,第 二天有a2只,……,第9天有a9只,第10天是a10只,在a 1,a2,……,a10 中,只有a10=1是知道的,现要求 a1,而我们可以看出, a1,a2,..,a 10之间存在一个简单的关系: a9=2*(a 10+1) a8=2*(a9+1) ┇ a1=2*(a 2+1) 也就是:ai=2*(ai+1+1) i=9,8,7,6,……,1 这就是此题的数学模型. 再考察上面从 a9,a8直至a1的计算过程,这其实是一个递推过程,这种递推的方法在计算 机解题中经常用到.另一方面,这九步运算从形式上完全一样,不同的只是 a i的下标而已.由 此,我们引入循环的处理方法,并统一用 a0表示前一天的桃子数, a1表示后一天的桃子数,将 算法改写如下: 1) a 1=1; {第10天的桃子数,a1的初值} {计算当天的桃子数} i=9. {计数器初值为 9} 2) a 0=2*(a 1+1). 3) a 1=a0. 4) i=i-1. 5) 若i>=1,转2). 6) 输出a0的值. 其中2)~5)步为循环. 这就是一个从具体到抽象的过程,具体方法是: 1) 弄清如果由人来做,应该采取哪些步骤. 2) 对这些步骤进行归纳整理,抽象出数学模型. 3) 对其中的重复步骤,通过使用相同变量等方式求得形式的统一,然后简练地用循环解 决. 算法的描述方法有自然语言描述,伪代码,流程图, N-S图,PAD图等. 1.4.1 流程图与算法的结构化描述 1. 流程图 流程图是一种传统的算法表示法,它利用几何图形的框来代表各种不同性质的操作,用 流程线来指示算法的执行方向.由于它简单直观,所以应用广泛,特别是在早期语言阶段, 只有通过流程图才能简明地表述算法,流程图成为程序员们交流的重要手段,直到结构化的 程序设计语言出现,对流程图的依赖才有所降低. 下面介绍常见的流程图符号及流程图的例子. {将当天的桃子数作为下一次计算的初值} 10 C语言程序设计 下载 本章例1-1的算法的流程图如图 1-2所示.本章例1-2的算法的流程图如图 1-3所示. 在流程图中,判断框左边的流程线表示判断条件为真时的流程,右边的流程线表示条件为假 时的流程,有时就在其左,右流程线的上方分别标注"真""假"或"T""F"或"Y""N" , , , . 起止框 判断框 输入,输出框 注释框 执行框 连接点 流程线 图1-1 常见的流程图符号 开始 输入A,B,C 开始 T A>B F i=9 a1=1 i=i-1 MAX<=A MAX<=B T F C>MAX a0=2*(a1+1) a1=a0 i>1 MAX<=C 输出a0 输出MAX 结束 结束 图1-2 例1-1的算法流程图 图1-3 例1-2的算法流程图 另外还规定,流程线是从下往上或从右向左时,必须带箭头,除此以外,都不画箭头。