




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.1 C语句概述 4.2 程序的三种基本结构 4.3 赋值语句 4.4 数据输入输出的概念及在语言中的实现 4.5 字符数据的输入输出 4.6 格式输入与输出 4.7 顺序结构程序设计举例 习题 第4章 最简单的c程序设计顺序程序设计 在上一章介绍了程序中用到的一些基本要素( 常量、变量、运算符、表达式等),它们是 构成程序的基本成分。在第1章中已经介绍 了几个简单的c程序。本章将介绍为编写简 单的程序所必需的一些内容。 4.1 C语句概述 和其他高级语言一样,c语言的语句用来向计算机系统 发出操作指令。一个语句经编译后产生若干条机器指 令。一个实际的程序应当包含若干语句。应当指出,c 语句都是用来完成一定操作任务的。声明部分的内容 不应称为语句。如:int a;不是一个c语句,它不产生 机器操作,而只是对变量的定义。从第1章已知,一 个函数包含声明部分和执行部分,执行部分即由语句 组成。c程序结构可以用图4.1表示。即一个c程序可以 由若干个源程序文件(分别进行编译的文件模块)组成 ,一个源文件可以由若干个函数和预处理命令以及全 局变量声明部分组成(关于“全局变量”见第7章,“预编 译命令”见第8章),一个函数由数据定义部分和执行语 句组成。 图4.1 在第2章中已经说明,程序应该包括数据描述(由声 明部分来实现)和数据操作(由语句来实现)。数据 描述主要定义数据结构(用数据类型表示)和数据 初值。数据操作的任务是对已提供的数据进行加 工。 C语句可以分为以下5类: (1) 控制语句,完成一定的控制功能。c只有9种控 制语句,它们是: if()else (条件语句) for() (循环语句) hile() (循环语句) dohile() (循环语句) continue (结束本次循环语句) break (中止执行switch或循环语句) sitch (多分支选择语句) goto (转向语句) return (从函数返回语句) 上面9种语句中的括号()表示其中是一个条件,表 示内嵌的语句。例如:“if()else”的具体语句 可以写成: if(xy) z=x;else z=y; (2) 函数调用语句。由一次函数调用加一个分号构 成一个语句,例如:printf(“this is a c stateent “); (3) 表达式语句。 由一个表达式构成一个语句, 最典型的是,由赋值表达式构成一个赋值语句。 a=3 是一个赋值表达式,而 a=3; 是一个赋值语句。可以看到一个表达式的最后加一 个分号就成了一个语句。一个语句必须在最后出 现分号,分号是语句中不可缺少的一部分(而不像 pascal语言那样,分号只是语句间的分隔符号)。 例如: i=i+1 (是表达式,不是语句) i=i+1; (是语句) 任何表达式都可以加上分号而成为语句,例如i+ ;是一语句,作用是使i值加1。又如x+y;也是一 个语句,作用是完成x+y的操作,它是合法的, 但是并不把x+y的和赋给另一变量,所以它并无 实际意义。 表达式能构成语句是c语言的一个重要特色。其实“ 函数调用语句”也是属于表达式语句,因为函数 调用(如sin(x)也属于表达式的一种。只是为了便 于理解和使用,我们把“函数调用语句”和“表达 式语句”分开来说明。由于c程序中大多数语句是 表达式语句(包括函数调用语句),所以有人把c语 言称作“表达式语言”。 (4) 空语句。下面是一个空语句: ; 即只有一个分号的语句,它什么也不做。有时用来 做被转向点,或循环语句中的循环体(循环体是空 语句,表示循环体什么也不做)。 (5) 可以用 把一些语句括起来成为复合语句, 又称分程序。如下面是一个复合语句。 z=x+y; t=z/100; printf(“%f“,t); 注意:复合语句中最后一个语句中最后的分号不能 忽略不写(这是和pascal不同的)。 C语言允许一行写几个语句,也允许一个语句拆开 写在几行上,书写格式无固定要求(fortran、 cobol有严格要求)。 4.2 程序的三种基本结构 为了提高程序设计的质量和效率,现在普遍采用结 构化程序设计方法。结构化程序由若干个基本结 构组成。每一个基本结构可以包含 一个或若干个 语句。有三种基本结构: (1) 顺序结构,见图4.2。先执行a操作,再执行b操作, 两者是顺序执行的关系。图中(b)是ns结构化流程 图(下同)。 图4.2图4.3 (2) 选择结构,见图4.3。p代表一个条件,当p条件成 立(或称为“真”)时执行a,否则执行b。注意,只能执 行a或b之一。两条路径汇合在一起然后出口。 (3) 循环结构,有两种循环结构: 当型循环结构,见图4.4。当p条件成立(“真”)时, 反复执行a操作。直到p为“假”时才停止循环。 直到型循环结构,见图4.5。先执行a操作,再判断p 是否为“假”,若p为“假”,再执行a,如此反复,直到p 为“真”为止。 图4.4 图4.5 由选择结构可以派生出另一种基本结构: 多分支选 择结构,见图4.6。 根据k的值(k1,k2,kn)不同而决定执行a1,a2,an 之一。 已经证明,由以上基本结构组成的程序能处理任何 复杂的问题。上面图4.2图4.7中方框中的 a,b,a1,an等可以是一个简单的语句,也可以又是 一个基本结构。例如,图4.7是一个顺序结构,它由 两个操作顺序组成。虚线框内是一个当型循环结 构,可以用“b”表示,因此图4.7就可以理解为图 4.2(a)所示的顺序结构。 图4.6 图4.7 关于三种基本结构的特征以及结构化程序设计方法 ,读者可能已在学习其他高级语言程序设计时学习 过,在此不再重复。只是应当强调说明,在今后的 程序设计中应当采用结构化程序设计方法。在本 章中,我们将介绍几种最基本的语句,以及用它们 构成顺序结构的程序。在第4、第5章介绍选择结 构和循环结构的程序设计。 4.3 赋值语句 前已介绍,赋值语句是由赋值表达式加上一个分号 构成。由于赋值语句应用十分普遍,所以专门再 讨论一下。 C语言的赋值语句具有其他高级语言的赋值语句的 一切特点和功能。但也应当注意到它们的不同: (1) C语言中的赋值号“=”是一个运算符,在其他大 多数语言中赋值号不是运算符。 (2) 关于赋值表达式与赋值语句的概念,其他多数 高级语言没有“赋值表达式”一概念。作为赋值表 达式可以包括在其他表达式之中,例如: if(a=b)0)t=a; 按语法规定if后面的( )内是一个条件,例如可以 是:“if(x0)”。现在在x的位置上换上一个赋 值表达式“a=b”,其作用是:先进行赋值运算(将 b的值赋给a),然后判断a是否大于0,如大于0, 执行t=a。在if语句中的“a=b”不是赋值语句而是 赋值表达式,这样写是合法的。如果写成if(a=b ;)0)t=a;就错了。在if的条件中不能包含赋值 语句。由此可以看到,c把赋值语句和赋值表达 式区别开来,增加了表达式的种类,使表达式的 应用几乎“无孔不入”,能实现其他语言中难以实 现的功能. 4.4 数据输入输出的概念及在C语言中的实现 (1) 所谓输入输出是以计算机主机为主体而言的。从 计算机向外部输出设备(如显示屏、打印机、磁盘 等)输出数据称为“输出” ,从外部向输入设备(如 键盘、磁盘、光盘、扫描仪等)输入数据称为“输 入”。 (2) C语言本身不提供输入输出语句,输入和输出操 作是由函数来实现的。在c标准函数库中提供了一 些输入输出函数,例如,printf函数和scanf函数。 读者在使用它们时,千万不要误认为它们是C语言 提供的“输入输出语句”。printf和scanf不是C语言 的关键字,而只是函数的名字。实际上完全可以 不用printf和scanf这两个名字,而另外编两个 输入输出函数, 用其他的函数名。C提供的 函数以库的形式存放在系统中,它们不是c语 言文本中的组成部分。 c语言函数库中有一批“标准输入输出函数” ,它是 以标准的输入输出设备(一般为终端设备)为输入 输出对象的。其中有:putchar(输出字符), getchar(输入字符),printf(格式输出),scanf(格 式输入), puts(输出字符串),gets(输入字符串) 。在本章中介绍前面4个最基本的输入输出函数 。 (3) 在使用c语言库函数时,要用预编译命令“ include”将有关的“头文件” 包括到用户源文件中。在 头文件中包含了与用到的函数有关的信息。例如使用 标准输入输出库函数时,要用到“stdio.h”文件。文件 后缀“h” 是head的缩写,#include命令都是放在程序 的开头,因此这类文件被称为“头文件” 。在调用标 准输入输出库函数时,文件开头应有以下预编译命令 : #include 或 #include “studio.h“ studioh是standard input putchar(n);putchar(b);putchar(n); putchar(c); putchar(n); 则输出结果为: b o y 也可以输出其他转义字符,如: putchar(101)(输出字符A) putchar() (输出单引号字符) putchar(015) (输出回车,不换行,使输出 的当前位置移到本行开头) 4.5.2 getchar函数(字符输入函数) 此函数的作用是从终端(或系统隐含指定的输入设 备)输入一个字符。getchar函数没有参数,其一 般形式为 getchar() 函数的值就是从输入设备得到的字符。例如: 例4.2输入单个字符 #include main() char c; c=getchar(); putchar(c); 在运行时,如果从键盘输入字符a并按回车键,就会在屏 幕上看到输出的字符a。a (输入a后,按“回车”键,字 符才送到内存) a (输出变量c的值a) 请注意,getchar()只能接收一个字符。getchar函数得到的 字符可以赋给一个字符变量或整型变量,也可以不赋给 任何变量,作为表达式的一部分。例如,例4.2第4、5行 可以用下面一行代替: putchar(getchar(); 因为getchar()的值为a,因此putchar函数输出a。也可以 用printf函数输出: printf(”%c“,getchar();请不要忘记,如果在一个函数中( 今为main函数)要调用getchar函数,应该在该函数的前面 (或本文件开头)加上“包含命令” #include 4.6.1 printf函数(格式输出函数) 在前面各章节中已用到printf函数,它的作用是向 终端(或系统隐含指定的输出设备)输出若干个任 意类型的数据(putchar只能输出字符,而且只能 是一个字符,而printf可以输出多个数据,且为 任意类型)。 1. printf函数的一般格式为printf(格式控制,输出 表列) 如:printf(“%d, %cn“,i,c) 括弧内包括两部分: 4.6 格式输入与输出 (1) “格式控制”是用双引号括起来的字符串,也称“ 转换控制字符串”,它包括两种信息: 格式说明,由“%”和格式字符组成,如%d,%f 等。它的作用是将输出的数据转换为指定的格式 输出。格式说明总是由“%”字符开始的。 普通字符,即需要原样输出的字符。例如上面 printf函数中双引号内的逗号、空格和换行符。 (2) “输出表列”是需要输出的一些数据,可以是表 达式。 2. 格式字符 对不同类型的数据用不同的格式字符。常用的有以 下几种格式字符: (1) d格式符。用来输出十进制整数。有以下几种用 法: %d, 按整型数据的实际长度输出。 %md, m为指定的输出字段的宽度。如果数 据的位数小于m,则左端补以空格,若大于, 则按实际位数输出。如 printf(“%4d,%4d“,a,b); 若a=123,b=12345,则输出结果为 123,12345 %ld,输出长整型数据。如 long a=135790; printf(“%ld“,a); 如果用%d输出,就会发生错误,因为整型数据的范围为- 3276832767。对long型数据应当用%ld格式输出。对长 整型数据也可以指定字段宽度,如将上面printf函数中的 “%ld”改为“%8ld”,则输出为: 135790 8列 一个int型数据可以用%d或%ld格式输出。 (2) o格式符,以八进制数形式输出整数。由于是将内存单 元中的各位的值(0或1)按八进制形式输出,因此输出的数 值不带符号,即将符号位也一起作为八进制数的一部分 输出。例如: int a=-1; printf(“%d,%o“,a,a); -1在内存单元中的存放形式(以补码形式存放)如下: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 输出为 -1,177777 不会输出带负号的八进制整数。对长整数(long型) 可以用“%lo”格式输出。同样可以指定字段宽度 ,如 printf(“%8o”,a) 输出为177777。 (3) x格式符,以十六进制数形式输出整数。同样不 会出现负的十六进制数。例如: int a=-1; printf(“%x,%o,%d“,a,a,a); 输出结果为 ffff,177777,-1 同样可以用“%lx”输出长整型数,也可以指定输出 字段的宽度,如“%12x”。 (4) u格式符,用来输出unsigned型数据,即无符号 数,以十进制形式输出。 一个有符号整数(int型)也可以用%u格式输出;反之 ,一个unsigned型数据也可以用%d格式输出。按 相互赋值的规则处理(见第2章2.9节)。unsigned型 数据也可用%o或%x格式输出。 例4.3无符号数据的输出。 main() unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%un“,a,a,a,a) ; printf(“b=%d,%o,%x,%un“,b,b,b, b); 运行结果为: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534 请读者自己分析。 (5) c格式符,用来输出一个字符。如: char c=a; printf(“%c“,c); 输出字符a,请注意:“%c”中的c是格式符,逗号 右边的c是变量名,不要搞混。 一个整数,只要它的值在0255范围内,也可以用 字符形式输出,在输出前,系统会将该整数作为 ascii码转换成相应的字符;反之,一个字符数据 也可以用整数形式输出。例4.4字符数据的输出。 main() char c=a; int i=97; printf(“%c,%dn“,c,c); printf(“%c,%dn“,i,i); 运行结果为: a,97 a,97 也可以指定输出字数宽度,如果有 printf(“%3c“,c) 则输出:“ a”,即c变量输出占3列,前2列补空格 。 (6) s格式符,用来输出一个字符串。有几种用法: %s, 例如: printf(“%s“,“china“) 输出“china”字符串(不包括双引号)。 %ms,输出的字符串占列,如字符串本身长 度大于m,则突破的限制,将字符串全部输出 。若串长小于m,则左补空格。 %-ms,如果串长小于,则在列范围内, 字符串向左靠,右补空格。 %mns,输出占列,但只取字符串中左端n 个字符。这n个字符输出在列的右侧,左补空格 。 %-mns,其中、n含义同上,n个字符输出 在列范围的左侧,右补空格。如果n,则 自动取n值,即保证n个字符正常输出。 例4.5字符串的输出。 main() printf(“%3s,%7.2s,%.4s,%-5.3sn“, “china“,“china“, “china“, “china“) 输出如下: china, ch,chin,chi 其中第3个输出项,格式说明为“%.4s”,即只指定 了n,没指定,自动使=n=4,故占4列。 (7) f格式符,用来输出实数(包括单、双精度),以 小数形式输出。有以下几种用法: %f,不指定字段宽度,由系统自动指定,使整 数部分全部如数输出,并输出6位小数。应当注意 ,并非全部数字都是有效数字。单精度实数的有 效位数一般为7位。 例4.6输出实数时的有效位数。 main() float x,y; x=111111111;y=222222222; printf(“%f“,x+y); 运行结果为 333333328125 显然,只有前7位数字是有效数字。千万不要以为凡是打印 出来的数字都是准确的。 双精度数也可用%f格式输出,它的有效位数一般为16 位,给出小数6位。 例4.7输出双精度数时的有效位数。 main() double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(“%f“,x+y); 输出结果为 3333333333333.333010 可以看到最后3位小数(超过16位)是无意义的。 %nf 指定输出的数据共占列,其中有 n位小数。如果数值长度小于,则左端补空格。 %-nf与%nf 基本相同,只是使输出 的数值向左端靠,右端补空格。 例4.8输出实数时指定小数位数。 main() float f=123.456; printf(“%f %10f %10.2f %.2f %- 10.2fn“,f,f,f,f,f); 输出结果如下: 123.456001 123.456001 123.46 123.46 123.46 f的值应为123.456,但输出为123.455994, 这是由于 实数在内存中的存储误差引起的。 (8) e格式符,以指数形式输出实数。可用以下形式: %e不指定输出数据所占的宽度和数字部分的小数 位数,有的c编译系统自动指定给出6位小数,指数 部分占5位(如e+002),其中“e”占1位,指数符号 占1位,指数占3位。数值按规范化指数形式输出( 即小数点前必须有而且只有1位非零数字)。例如 printf(“%e“,123456); 输出:1234560e+002。 6列 5列 输出的实数共占13列宽度。(注: 不同系统的规定略 有不同) %m.ne和%-m.ne。 、n和“-”字符含义与前相 同。此处n指拟输出的数据的小数部分(又称尾数)的 小数位数。若f=123456,则: printf(“%e %10e %10.2e %.2e %-10.2e“,f,f ,f,f,f); 输出如下: 1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002 13列 13列 10列 9列 10列 第2个输出项按%10e输出,即只指定了=10,未 指定n,凡未指定n,自动使n=6,整个数据长13 列,超过给定的10列,乃突破10列的限制,按实 际长度输出。第3个数据共占10列,小数部分占2 列。第4个数据按“%2e”格式输出,只指定n=2 ,未指定,自动使等于数据应占的长度,今 为9列。第5个数据应占10列,数值只有9列,由于 是“%-102e”,数值向左靠,右补一个空格。( 注: 有的c系统的输出格式与此略有不同) (9) g格式符,用来输出实数,它根据数值的大小,自动选f 格式或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 圆的面积课件教学评价
- 2025年医院护理部主任竞聘面试经验与题目预测
- 2025年心理治疗师初级面试模拟试卷及参考答案
- 课与课件融合案例
- 2025年安全操作规范知识题库
- 2025年农机长助理笔试核心考点精解
- 2025年无人机航拍技术初级复习手册
- 2025年干部学院教师招聘笔试模拟练习题及答案
- 乌塔课文教学课件
- 2025年新疆安全生产培训考试强化训练
- 水箱拆除专项施工方案
- YY/T 1851-2022用于增材制造的医用纯钽粉末
- GB/T 20858-2007玻璃容器用重量法测定容量试验方法
- 纪委案件审理课件教材
- 生活中的会计课件
- 辽宁大学学生手册
- 湘美版美术一年级上册全册课件
- 酒水购销合同范本(3篇)
- 师说一等奖优秀课件师说优质课一等奖
- 学习罗阳青年队故事PPT在急难险重任务中携手拼搏奉献PPT课件(带内容)
- 小学生打扫卫生值日表word模板
评论
0/150
提交评论