版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 简单程序设计3.1 流程结构和语句1 . 三种流程结构顺序结构,选择结构,循环结构程序在逻辑上执行的流程。顺序结构:按语句在源程序中出现的次序依次执行; 选择结构:根据一定的条件有选择地执行或不执行某些语句。 循环结构:在一定条件下重复执行相同的语句。所有的流程控制都是由语句实现的,且任何一个表达式都可作为一个语句使用, 称之为表达式语句2. 表达式语句任何表达式通过在其末尾加一个“; ”,可使表达式成为一个语句,形式为: 表达式;其中“;”是 C 语句的组成部分,表示一个语句结束。表达式语句能够独立出现 在程序中,而表达式则不能独立出现。例如: x=y+1 是表达式x=y+1 ; 是
2、语句习惯上把赋值表达式语句如: x=y+1 ;称为赋值语句。函数调用也是表达式,因 此:printf (“ hellow ”)是表达式;printf (“ hellow ”);是语句,习惯上称为输出语句。scanf(“%d%d”, &x,&y );函数调用表达式语句(输入语句)3. C 的语句概述C 的一个“说明”也必须以分号结束,也称为语句,因此 C 的语句分说明语句和 执行语句两类。说明语句可以出现在程序中任何块 (函数或复合语句) 的外面称为外部说明 或块内称为局部说明(在执行语句的前面) 。外部说明必须放在一个源程序文件中所有函数定义的外面; 局部说明包括类型定 义、变
3、量和函数说明,其作用是描述程序中被处理数据(变量或函数)的名称和类型 供解释程序使用。执行语句只能出现在函数体内且处于局部说明的后面, 执行语句完成对数据的处 理和对程序流程的控制。常用的程序结构为 :常量说明类型说明变量说明 /* 外部说明 */返回类型 函数名(参数表) 变量说明 /* 局部说明 */ 执行语句 C 的执行语句共有六种: 表达式语句 复合语句 标号语句 选择语句( if 和 switch ) 循环语句( while,for,do-while ) 转移语句( break,continue,goto,return )3.2 标准的文件输入与输出函数一个 C 的源程序要能够从外部
4、设备(文件)输入数据并将执行 (或处理)的结果 输出到外部设备上。C 语言的输入和输出操作是通过调用 C 标准函数库中的函数来实现的, 标准函数 库是由 C 编译程序提供的。 以编译后的目标代码形式存储的函数的集合。 用户程序可 根据需要按规定的格式调用其中的函数来完成相应的功能。 C 语言中从标准输入和输 出文件(设备)中进行读(写)的四个标准函数是:格式输出函数 printf、格式输入函数 scanf、字符输入函数 getchar和字符输出函 数putchar。其他函数以后讲。3.2.1 字符输入和输出函数1. 字符输入函数 getchar 函数原型为: int getchar(void)
5、其中 int 说明函数的返回值的类型, void 说明函数没有参数,该函数的调用格式 为:getchar() 系统将输出设备和输入设备都看成文件,标准输入设备(键盘)和标准输出设备(显示器)是由字符的序列(字符流)组成的文本文件,称为输入流和输出流。getchar每调用一次则从终端(键盘)读取一个字符。这个字符的字符码就是getchar的返回值(即函数值),其类型为由unsigned char转换的int。例如:c=getchar ();执行时键入字符 a赋值后变量c的值为97即字符 a'的值。 输入文件的结束标志称为文件尾。DOS系统中键入ctrl+z时产生文件结束标志。getcha
6、r遇到文件结束标志时返回值EOF,EOF是在头文件stdio.h 中定义的符号常量,其值通常为-1。程序中如果要测试getchar ()的值是否文件尾应使用EOF而不用 -1 ,这样做可使程序不依赖于某个特定环境。2. 字符输出函数 putchar 函数原型为: int putchar(char ch )putchar 函数将所要输出的字符码转换为 unsigned char 送到标准输出设备中去, 返回值是被输出的字符,如果出错则返回EOF,调用形式为:putchar(ch)其中 ch 为实际参数,可以是char、 short 或 int 类型的表达式,其值是要被输出字符的字符码。每调用一次
7、则将字符 ch 输出到标准输出设备上。例如:int i=7;char ch;说明:(1) 下面四个语句是等价的,同为输出一个响铃字符: putchar(i);putchar(7);putchar(, 07?);putchar(, a?);(2) 下面三个语句分别输出字符a,3 和换行putchar(,a?);putchar(,3?);putchar(,n?);注: putchar(3) 输出是 ? 而不是整数 3。( 3) putchar(c=getchar()>= ?a?&&c<= ?z?)?c-,a?+?A?:c);该语句先输入一个字符存入变量C,如果c是小写字
8、母则将其转换成大写字母后输出,否则直接输出原字符。注意:凡是程序中调用了输入、输出库函数,必须在函数第一次调用之前写上# in clude<stdio.h> 或# in elude “ stdio.h ”,预处理控制(对于 DOS 上的 scanf 和 printf 可省略)。3.2.2 格式输出函数 (printf)getchar 和 putchar 函数用于输入和输出单个字符,输入和输出过程中不进行格式 上的任何转换。printf和scanf函数在数据的输入和输出过程中能够将计算机内部形式的数据和输 入输出任务上的数据相互转换,称为格式输出和格式输入。1. printf 函数的
9、原型int printf(char format,args)参数的数目可变,中间用“, ”分隔,是要被转换并写到输出设备的数据。函数 的返回值是实际输出字符的数目。2. 调用形式printf (格式字符串,输出参数1输出参数2,);调用 printf 函数时至少要给出第一个参数, 即格式字符串。 格式字符串式是用 “” 括起来的字符串;输出参数1,输出参数n是n个表达式,可以为任何基本类型,也可以是指针或枚举类型(较少使用) 。输出数据项的数目任意,末尾 加“;” 表示 printf 函数通常作为语句使用。printf 函数将参数的值按格式字符串规定的格式从内部形式转换成外部字符形 式并输出设
10、备,返回值是实际输出字符的数目。例如:printf("%d%8.3f",i,x);参数中的格式为"d %8.3f" , i和x是要输出的数据,d表示i要用十进制整数3 / 10形式输出,宽度为数据实际宽度。8.3f表示x要用小数形式浮点数格式输出,输出总宽度为8个字符,其中小数部分保留3位,若i=15 , X=-8.2 该语句输出为15-8.2003. 格式字符串格式字符串包含两种字符:普通字符和用于转换说明的字符,普通字符照原样输出,转换说明用于说明数据输出格式。其形式为:%域宽转换字符一个转换说明以开头。域宽部分是可选的,用于指定输出数据的宽度。每个
11、转 换说明对应于一个输出参数,该参数被转换成由转换说明规定的数据格式后输出。普通字符通常用作输出提示信息,它可以与转换说明交替出现,例如printf ( "i=%d,x=%8.3fn" , i,x); 输出为:i=15,x= -8.200ANSI C的转换字符及其规定的输出格式见教材p44。注:如果游面是一个字符,则标准 C无此定义,将它作为普通字符输出。 在和转换字符之间可以加域宽说明,用于指定输出时的对齐方向、输出数据的 域宽度、小数部分的位数等要求。用于域宽说明的字符列于下表中,域宽说明可以是 其中之一或多个字符的组合。表3.1 printf 域宽说明字符域宽说明符号
12、意义-(减号):在指定的区域内以左对齐方式输出(默认右对齐)+输出正值时前面冠以符号 +空格输出的第一个字符不是符号时,要输出一个空格作参照0 (零)在域宽范围内用前导 0填补空位#对于o格式输出前导0,对于x或X格式要输出0x或0X前缀,对 于g或G格式不删除尾部零。m (正整数)指出输出数据的最小宽度。如果实际宽度>m,则按实际宽度;如果实际宽度则左边(左对齐时为右边)补上空格或零(当有0域宽说明字符时)。.(小数点)分隔域宽与精度。小数点前面可以没有域宽说明。n (正整数)指出输出数据的精度。对于e、E、f格式为小数部分的位数,对于g或G格式为有效字的个数,对于整数为至少应输出的数
13、字的个数(添加前导0来满足所需宽度)。h指出输出参数是短整型l指出输出参数是长整型L指出输出参数是高精度浮点型在域宽说明中还可以使用字符 *,*代表一个整型值,这个整型值是由包含*的转换说明对应的参数决定的。例如:printf ( "%.*s" , max, s);该语句执行时从串s中打印至多max个字符。4 / 10域宽说明示例见教材 p45注意(1) : printf 函数根据格式串中的转换说明来决定输出数据的数目和类型, 如果转换说明项数多于参数个数,或参数类型不正确,则会输出错误的数据(不报语 法错);如果输出参数的数目多于转换说明项数则多余的参数不被输出。例.Pr
14、intf(%d,%”,3,4);结果为:%d,3例:int i=-6;double x=5.7,y=123.4567 ;printf ("%-4d,%g",i,y,x);输出形式为:-6 ,123.457(2)printf 中参数右结合,如设int i=1;则 printf("%d,%d %d",+i,+i,+i);输出结果为4, 3,2printf("%d,%d %d",i+,i+,i+);输出结果为3,2,13.2.2 格式输入函数(seanf)1. seanf函数的原型int seanf( char *format , args
15、)scanf 函数是具有int类型返回值(返回读入参数的个数)的函数。第一个参数 format是格式字符串,它指出输入数据的数目、类型和格式,args为指向存放输入数据的变量的指针,输入参数的数目可变。2. scanf 函数的调用格式scanf(格式字符串,输入参数1,,输入参数n);scanf 函数是printf函数的逆过程,它从标准输入设备(键盘)读入字符流,并按照格式字符串中转换字符规定的格式转换成相应类型的值后赋予由输入参数所 指的变量。format串可以包含如下字符:(1)空格或制表符,它们被忽略(2)非滴通字符,它需要输入流中有同样的非空白字符与之匹配(3) 以为开头以转换字符为结
16、尾的转换说明符,常见的转换字符与 printf 类似(4)在与转换字符之间可以有下列选项赋值抑制符*说明最大域宽的整数指出参数所指变量类型的字母h,I或L具体形式为:%*m I或 h格式字符抑制符 域宽长度修正说明符格式字符与printf 中使用方式相同,把输入数据分为整型(int *用d、o、x指定)、字符型(char *,用c指定)、实型(float * ,用f,e指定)。在整型和实型中可再加长度修正说明符:加 h (短整型)、加I (长整型)、加 L (高精度型)、m (注意没有n)用以指定输入数据的宽度。输入参数 1 至输入参数 n 可以为简单变量的地址或字符串变量的地址, 简单变量
17、的地址用变量前面加取地址运算符 &表示,字符串变量的地址用字符数组名(或指向 字符串变量的指针)表示。scanf 函数被正确执行时返回被转换并赋值的数据项的数目,遇到文件尾或出错 时返回 EOF。例如:int i;fIoat x;char name10; scanf("%d %f %s",&i,&x,name);输入: 25 61.37e-1program输入字符串时不加双引号,因双引号也会作为字符号的内容。不能用赋值语句给数组赋值如:name="program"因为name不是变量而是一个地址常量。不能将 scanf(%d&qu
18、ot;,&i) 写成 scanf( “ %d",i) 也不能将 scanf("%s",name) 写 成 scanf("%s",&name);3 . 输入形式(1) 构成一个被转换数据的字符序列称为一个输入域,输入域为下面三种情况之一。以输入流中当前字符开始直到第一个空白字符之前。 根据转换说明不能被转换的字符之前。指定域宽用完。输入域之间一般可用空白字符(空白、换行、制表符)隔开,整型、浮点型或字 符型后的字符型数据不用空白字符分隔 (注意字符型数据同样不用单引号) ,在整型、 浮点型或字符型后的字符串数据可以有或无空白符(因
19、为字符串前无前导空白符),当遇到空白符时表示一个字符串结束(见后面内容) 。例1 int i;char c;scanf("%d%c",&i,&c);执行时输入: 1234a则i被赋值1234, c为'a'.但若输入 1234 a ,则 i 值同上, c 为' '若要读入一个非空白字符了可用下面形式:scanf("%d%1s",&i,&c);输入:1234 a,贝U i 为 1234,c 为'a'。例 2 char c1,c2;scanf("%c%c",&a
20、mp;c1,&c2);输入:12则 c1 为 '1',c2 为 '2'例 3: int day,year ;char month10; scanf("%d%s%d",&dat,month,&year); 执行时输入: 25 dec 1996 输入流还可以是下列形式25Dec 1996(回车)但不能为25 Dec1996例 4Char name20 ;scanf(“ %s”, name);执行时输入 programming Ianguage (回车) 则字符串“ programming ”将被赋予 name。注:用get
21、s函数时,串中可含有空格,此时以回车键表示输入的结束。个输入域与转换说明项不能匹配时( 2)当键入回车时 scanf 开始执行,当固定格式字符串中的转换说明项或者某scanf 停止执行, 返回已成功匹配且被赋值的输入注意:当下一次调用数据个数;当遇到文件结尾时返回EOF。scanf 时从上一次 scanf 调用以被匹配转换的最后一个字符的后面那一个字符开始读取。例 1int i , j ; fIoat x , y; scanf (“ %d%”d, &i,&j,&x ) scanf( “ %f” ,&y);执行时输入12 34 56.7 89执行第一个scanf调
22、用时i被赋值为12, j为34,x未被赋值。Scanf返回值为2; 输入流中的56.7未被读取,该指针处于34后面的第一个空格字符。 执行第2个scanf 时,将56.7赋予y, 89多余,scanf返回值为1。注意:转换说明应与输入参数所指变量的类型一致,否则,输入数据不是所需要的结果; 转换说明项个数也应与输入参数个数相同, 如果转换说明项个数少于输入参数个数,右边多出的输入参数所指变量将不被赋值,反之,数据不存放。例 2int i,j;scanf(“%d%d”,&i,&j);执行时输入 12a则i为12,j未被赋值,scanf返回值为1。( 3)当 scanf 的格式字符
23、串包含有普通字符时,在输入流中相应位置必须有相 同的字符与之匹配; 对于空白字符, 格式字符串的一个空白字符可以与输入流中 0 个 或多个连续的空白字符匹配;对于非空白字符的普通字符则要求一一对应。设 i,j,k 为 int 类型。例1 Scanf (“ %d %d %d”,&i,&j,&k ); 执行是应输入10 20 30其中 10,20, 30 之间可以是一个或多个空白字符、制表符或换行符。 例2 Scanf (“%d,%d,%d”,&i,&j,&k );执行时应输入10, 20,30其中 10,20, 30 之间必须有且仅有一个逗号。例
24、3 Scanf (“ i=%d;j=%d;k=%d ” ,&i,&j,&k ) 输入应输入i=10;j=20;k=304转换说明中的可选项scanf 转换说明中的可选项有指定域宽的整数:h、l 、 L、 * 。如果一个输入域前面有空行, scanf 全自动跳过空行直到发现输入域。 指定域宽的整数:如果说明了域宽,则输入域直到域宽用完时为止。例 1 int i,j;scanf( “ %3d%”d ,&i,&j);执行时输入 1234 5678 。整数123被赋值i , 4被赋值j。例 2 char name20 scanf( “%8s” ,name);若输
25、入 abcdefghi 则字符串“ abcdefgh ”被赋给数组 name。 h,l , L :如果参数是 short * (而不是int * ),则转换字符 d、i、n、0、u 和 x 的前面要加 h ;如果参数是 long * 则加 l ;如果参数是 double * (而不是 float * )则转换字符 e,f 和 g 的前面要加 l ;如果参数是 long double * ,则加 L。例 1 short i; long j; double x; scanf(%hd%ld ”,&i,&j); scanf( “%lf ” ,&x);例 2 long doubl
26、e y;scanf( “%lf ” ,&y); * :如果指定了 *,则输入域被跳过,不赋值。 *指出按转换说明匹配相应的输 入域。但转换结果不被赋值给任何变量,因此称为“虚读” 。虚读用于从输入流中有 选择的读取部分内容。例如: double v1,v2,v3;scanf( “%lf%*d%lf%*d %lf%*d” ,&v1,&v2,&v3);执行时输入: 22 33 44 55 6611.0 赋予v1 , 33.0赋予v2, 55.0赋予v3;输入域 22, 44, 66被跳过。3.3 简单程序设计举例一个简单的c程序仅包含一个 main函数且程序流程是顺
27、序结构,程序的执行部 分通常含三种基本操作的语句,即输入、输出、赋值语句或用于计算的其他表达式语 句。程序中出现的任何变量必须进行变量说明;如果有常量最好定义成符号常量; 如果需要将处理结果暂时保存还要说明所须的辅助变量。例 1 从终端输入一个字符,如果是小写字母,则转换成大写后输出,否则原 样输出。#include <stdio.h>void main(void)int c;printf( “ intput a charctor:”);c=getcher();c>= a ' &&c<= z ' ?putcher(c+ A'- a'):putchar(c); putcher( n ' );注意:用put
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火锅底料定制合同范本
- 4.4.3 探索三角形相似的条件 教学设计 2024-2025学年北师大版数学九年级上册
- 炸鸡队长加盟合同范本
- 礼品代理销售合同范本
- 租地共享民宿合同范本
- 灯光舞美改造合同范本
- 网络项目合作合同协议
- 物业服务托管合同范本
- 货物试用买卖合同范本
- 物业广告宣传合同范本
- 二手房买卖合同范本下载可打印
- 2021利达JB-QG-LD988EL JB-QT-LD988EL 火灾报警控制器 消防联动控制器调试手册
- 焊接变形的数值模拟分析方法
- 脾栓塞术后护理查房
- (完整版)分布式流域水文模型
- 因孩子上学房子过户协议书
- 学校校舍安全管理制度
- 燃料电池-课件
- GB/T 31521-2015公共信息标志材料、构造和电气装置的一般要求
- GB/T 1185-2006光学零件表面疵病
- 高考体育单招英语复习连词讲解4教案
评论
0/150
提交评论