第三章-简单程序设计_第1页
第三章-简单程序设计_第2页
第三章-简单程序设计_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 的语句分说明语句的外面称为外部说明和执行语句两类。或块内称为局部说明在执行语句的前面外部说明必须放在一个源程序文件中所有函数定义的外面; 说明,其作用是描述程序中被处理数据变量或函数的名称和类型 执行语句只能出现在函数体内且处于局部说明的后面, 的控制。常用的程序结构为 :局部说明包括类型定供解释程序使用。执行语句完成对数据的处义、变量和函数理和对程序流程第三章简单程序设计3.1 流程结构和语句1 . 三种流程结构顺序结构,选择结构,循环结构程序在逻辑上执行的流程。 顺序结构:按语句在源程序中出现的次序依次执行; 选择结构:根据一定的条件有选择地执行或不执行某些语句。 循环结构:在一定条件

2、下重复 执行相同的语句。所有的流程控制都是由语句实现的,且任何一个表达式都可作为一个语句使用, 成之为表达式语 句2. 表达式语句任何表达式通过在其末尾加一个“; ,可使表达式成为一个语句,形式为: 表达式;其中“;是 C 语句的组成局部,表示一个语句结束。表达式语句能够独立出现 在程序中,而表 达式那么不能独立出现。例如: x=y+1 是表达式 x=y+1 ;是语句习惯上把赋值表达式语句如: x=y+1 ;新为赋值语句。函数调用也是表达式,因 此: printf “ hellow 是表达式; printf “ hellow ;是语句,习惯上称为输出语句。scanf “ %d%d , &

3、;x,&y ;函数调用表达式语句输入语句3. C 的语句概述C 的一个“说明也必须以分号结束,也称为语句,因此 说明语句可以出现在程序中任何块 函数或复合语句常量说明类型说明变量说明 /* 外部说明 */ 返回类型函数名参数表 变量说明 /* 局部说明 */ 执行语句C 的执行语句共有六种: 表达式语句复合语句标号语句 选择语句 if 和 switch 循环语句 while,for,do-while 转移语句 break,continue,goto,return 3.2 标准的文件输入与输出函数一个 C 的源程序要能够从外部设备文件输入数据并将执行或处理的结 果输出到外部设备 上。C

4、语言的输入和输出操作是通过调用 C 标准函数库中的函数来实现的,标准函 数库是由 C 编译 程序提供的。以编译后的目标代码形式存储的函数的集合。用户程 序可根据需要按规定的格式调用其中 的函数来完成相应的功能。 C 语言中从标准输入 和输出文件设备中进行读写的四个标准函数 是:格式输出函数 printf 、格式输入函数 scanf 、字符输入函数 getchar 和字符输出函数 putchar 。 其他函数以后讲。3.2.1 字符输入和输出函数1. 字符输入函数 getchar 函数原型为: int getchar void 其中 int 说明函数的返回值的类型, void 说明函数没有参数,

5、 该函数的调用格式 为: getchar 系统将输出设备和输入设备都看成文件,标准输入设备键盘和标准输出设备 显示器是由字 符的序列字符流组成的文本文件,称为输入流和输出流。getchar 每调用一次那么从终端键盘读取 一个字符。这个字符的字符码就是 getchar 的返回值 即函数值 ,其类型为由 unsigned char 转换的 int 。例如:c=getchar ;执行时键入字符 a 赋值后变量 c 的值为 97 即字符 a ' 的值。输入文件的结束标志称为文件尾。 DOS 系统中键入 ctrl+z 时产生文件结束标志。 getchar 遇到文件结束标志时返回值 EOF ,EO

6、F 是 在头文件 stdio.h 中定义的符号常量,其值通常为 -1 。程序中如果要测试 getchar 的值是 否文件尾应使用 EOF 而不用 -1 ,这样做可使程序不依赖于某个特定环境。2. 字符输出函数 putchar函数原型为: int putchar char ch putchar 函数将所要输出的字符码转换为 unsigned char 送到标准输出设备中 去,返回值是被输 出的字符,如果出错那么返回 EOF ,调用形式为:putchar ch 其中 ch 为实际参数,可以是 char 、 short 或 int 类型的表达式,其值是要被输 出字符的字符码。 每调用一次那么将字符

7、c 输出到标准输出设备上。例如: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'

8、 )?c- a' +' A': c);该语句先输入一个字符存入变量C,如果c是小写字母那么将其转换成大写字母后输出,否那么直接输出原字符。注意:但凡程序中调用了输入、输出库函数,必须在函数第一次调用之前写上 include<stdio.h> 或 include “ stdio.h ,预处理控制 (对于 DOS 上的 scanf 和 printf 可省略)。3.2.2 格式输出函数 (printf)getchar 和 putchar 函数用于输入和输出单个字符,输入和输出过程中不进行 格式上的任何转换。 printf 和 scanf 函数在数据的输入和输出过程

9、中能够将计算机内部形式的数据和 输入输出任务上 的数据相互转换,称为格式输出和格式输入。1. printf 函数的原型 int printf(char format,args)参数的数目可变,中间用“, 分隔,是要被转换并写到输出设备的数据。函数 的返回值是实际 输出字符的数目。2. 调用形式printf (格式字符串,输出参数1,输出参数 2 , ,);调用 printf 函数时至少要给出第一个参数,即格式字符串。格式字符串式是用 “括起来的字符 串;输出参数1 ,输出参数n是n个表达式,可以为任何根本类型,也可以是指针或枚举类型(较少使用) 。输出数据项的数目任意, 末尾加“; 表示 pr

10、intf 函数通常作为语句使用。printf 函数将参数的值按格式字符串规定的格式从内部形式转换成外部字符形 式并输出设备,返回值是实际输出字符的数目。例如:prin tf ("%d%8.3f',i,x );参数中的格式为"%d %8.3f" o i和x是要输出的数据 %d表示i要用十进制整数 形式输出,宽度 为数据实际宽度。%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 o注:如果%后面是一个%字符,那么标准C无此定义,将它作为普通字符输出。在%和转换字符之间可以加域宽说明,用于指定输出时的对齐方向、输出数据的域宽度、小数部

12、分的位数等要求。用于域宽说明的字符列于下表中,域宽说明可以是其中之一或多个字符的组合。表3.1 printf域宽说明字符域宽说明符号意义-减号在指定的区域内以左对齐方式输出默认右对齐+输出正值时前面冠以符号+空格输出的第一个字符不是符号时,要输出一个空格作参照0零在域宽范围内用前导 0填补空位#对于o格式输出前导0,对于x或X格式要输出Ox或0X前缀,对于g或G格式不删除尾部零。m 正整数指出输出数据的最小宽度。如果实际宽度>m,那么按实际宽度;如果实际宽度<m,那么左边左对齐时为右边补上空格或零当有0域宽说明字符时。.小数点分隔域宽与精度。小数点前面可以没有域宽说明。n 正整数指

13、出输出数据的精度。对于e、E、f格式为小数局部的位数,对于g或G格式为有效字的个数,对于整数为至少应输出的数字的个数添加刖导0来满足所需宽度。h指出输出参数是短整型l指出输出参数是长整型L指出输出参数是高精度浮点型在域宽说明中还可以使用字符* , *代表一个整型值,这个整型值是由包含*的转换说明对应的参数决定的。例如:printf "%.*s" , max , s;该语句执行时从串s中打印至多max个字符。域宽说明例如见教材 P45注意1 : printf函数根据格式串中的转换说明来决定输出数据的数目和类型,如果转换说明项数多于参数个数,或参数类型不正确,那么会输出错误的数

14、据不报语法错;如果输出参数的数目多于转换说明项数那么多余的参数不被输出。例. Printf “ d%d,%d ,3,4;结果为:%d,3 例:int i=-6 ;double x=5.7 ,y=123.4567 ;printf "%-4d ,%g" ,i,y,x;输出形式为:-6 ,123.4572 printf中参数右结合,如设int i=1 ; 那么 printf "%d,%d,%d",+i,+i,+i ;输出结果为 4, 3,2printf "%d,%d,%d",i+,i+,i+ ;输出结果为 3,2,1 3.2.2 格式输入函

15、数seanf1. seanf函数的原型int seanf char *format , argsseanf函数是具有int类型返回值返回读入参数的个数的函数。第一个参数 format是格式字 符串,它指出输入数据的数目、类型和格式,args为指向存放输入 数据的变量的指针,输入参数的数目可变。2. seanf函数的调用格式seanf 格式字符串,输入参数1,输入参数n;seanf函数是printf函数的逆过程,它从标准输入设备键盘读入字符流,并按照格式字符串中转换字符规定的格式转换成相应类型的值后赋予由输入参数所指的变量。format串可以包含如下字符:1空格或制表符,它们被忽略2非 %普通字

16、符,它需要输入流中有同样的非空白字符与之匹配3 以%为开头以转换字符为结尾的转换说明符,常见的转换字符与printf类 似4在%与转换字符之间可以有以下选项?赋值抑制符*?说明最大域宽的整数?指出参数所指变量类型的字母h, 1或L具体形式为:%*m I或h格式字符抑制符 域宽长度修正说明符格式字符与printf中使用方式相同,把输入数据分为整型int *用d、0、x指定、字符型ehar *,用e指定、实型float *,用f, e指定。在整型和实型中可再加长度修正说明符:加h 短整型、加I 长整型、加L高精度型、m 注意没有n用以指定输入数据的宽度。输入参数 1 至输入参数 n 可以为简单变量

17、的地址或字符串变量的地址,简单变 量的地址用变量前 面加取地址运算符 &表示,字符串变量的地址用字符数组名或指向字符串变量的指针表示。scanf 函数被正确执行时返回被转换并赋值的数据项的数目,遇到文件尾或出错时返回 EOF。例如:int i;float x;char n ame10;scan f"%d %f %s",&i,&x,n ame; 输入:25 61.37e-1program输入字符串时不加双引号,因双引号也会作为字符号的内容。不能用赋值语句给数组赋值如: name="program"因为 name 不是变量而是一个地址

18、常量。不能将 seanf %d",&i写成 seanf “ %d",i也不能将 seanf "%s",name写 成 scanf"%s",&name ;3. 输入形式1构成一个被转换数据的字符序列称为一个输入域,输入域为下面三种情况之O以输入流中当前字符开始直到第一个空白字符之前。 根据转换说明不能被转换的字符之前。指定域宽用完。输入域之间一般可用空白字符空白、换行、制表符隔开,整型、浮点型或字 符型后的字符型数 据不用空白字符分隔注意字符型数据同样不用单引号,在整型、浮点型或字符型后的字符串数据可以有或无空白符因为字

19、符串前无前导空白符,当遇到空白符时表示一个字符串结束见后面内容 。例 1 int i;ehar e;sea nf"%d%e" ,&i,&e;执行时输入: 1234a 那么 i 被赋值 1234 , e 为 'a'.但假设输入 1234 a ,那么 i 值同上, e 为' ' 假设要读入一个非空白字符了可用下面形式:seanf"%d%1s",&i,&e;输入:1234 a,贝 U i 为 1234 , e 为'a'。例 2 ehar e1,e2;seanf"%e%e&

20、quot;,&e1,&e2;输入:12那么cl为'1',c2为2例 3: int day,year ;char month10; scanf("%d,%s%d",&dat,month,&year);执行时输入: 25 dec 1996 输入流还可以是时以下形式 25Dec 1996 (回车) 但不能为25 Dec1996例 4 Char name20 ;scanf (“%s , name ); 执行时输入 programming language (回车) 那么字符串“ programming 将被赋予 name 。注:用 g

21、ets 函数时,串中可含有空格,此时以回车键表示输入的结束。( 2 )当键入回车时 scanf 开始执行,当固定格式字符串中的转换说明项或者某 个输入域与转换说 明项不能匹配时 scanf 停止执行,返回已成功匹配且被赋值的输入 数据个数;当遇到文件结尾时返回 EOF 。注意:当下一次调用 scanf 时从上一次 scanf 调用以被匹配转换的最后一个字 符的后面那一个 字符开始读取。例 1 int i , j; float x , y;scanf (“ %d%d , &i,&j,&x);scanf( “%f ,&y); 执行时输入12 34 56.7 89执行

22、第一个 scanf 调用时 i 被赋值为 12 , j 为 34, x 未被赋值。 Scanf 返回值为 2 ;输入 流中的 56.7 未被读取,该指针处于 34 后面的第一个空格字符。 执行第 2 个 scanf 时,将 56.7 赋 予 y , 89 多余, scanf 返回值为 1 。注意:转换说明应与输入参数所指变量的类型一致,否那么,输入数据不是所需要 的结果;转换说 明项个数也应与输入参数个数相同, 如果转换说明项个数少于输入参 数个数,右边多出的输入参数所 指变量将不被赋值,反之,数据不存放。 例 2 int i,j;scanf( “%d%d ,&i,&j); 执

23、行时输入 12a 那么 i 为 12 , j 未被赋值, scanf 返回值为 1 。(3 )当 scanf 的格式字符串包含有普通字符时,在输入流中相应位置必须有相 同的字符与之匹配; 对于空白字符, 格式字符串的一个空白字符可以与输入流中 0 个或多个连续的空白字符匹配;对于非 空白字符的普通字符那么要求一一对应。设 i,j,k 为 int 类型。例1 Scanf (“%d %d %d ,&i,&j,&k ) 执行是应输入10 20 30其中 10,20 ,30 之间可以是一个或多个空白字符、制表符或换行符。 例 2 Scanf (“ %d ,%d , %d , &

24、amp;i,&j,&k ) ;执行时应输入10 ,20 ,30 其中 10,20 ,30 之间必须有且仅有一个逗号。例 3 Scanf (“ i=%d;j=%d;k=%d ,&i,&j,&k ) 输入应输入i=10;j=20;k=304 转换说明中的可选项seanf转换说明中的可选项有指定域宽的整数:h、I、L、*。如果一个输入域前面有空行, scanf 全自动跳过空行直到发现输入域。 指定域宽的整数:如果说明了域宽,那么输入域直到域宽用完时为止。例 1 int i,j;seanf( “ 3d%d ,&i,&j);执行时输入 123456

25、78 。整数 123 被赋值 i,4 被赋值 j。例 2 ehar name20seanf( “ %8s ,name);假设输入 abedefghi 那么字符串“ abedefgh 被赋给数组 name 。 h,l, L :如果参数是short * (而不是int *),那么转换字符d、i、n、0、u和x的前面要加h ; 如果参数是long *那么加I ;如果参数是double * (而不是float * )那么转换字符e,f和g的前面要加I;如果 参数是 long double * ,那么加 L。例 1short i;long j;double x; seanf(%hd%ld ,&i

26、 ,&j); seanf( “ %lf ,&x);例 2 long double y; seanf( “%lf ,&y); *:如果指定了 * ,那么输入域被跳过,不赋值。*指出按转换说明匹配相应的输 入域。但转换结果不被赋值给任何变量,因此称为“虚读 。虚读用于从输入流中有 选择的读取局部内容。例如: double v1,v2,v3; seanf( “ %lf%*d%lf%*d %lf%*d ,&v1,&v2,&v3); 执行时输入: 22 33 44 55 6611.0 赋予 v1 ,33.0 赋予 v2 , 55.0 赋予 v3 ;输入域

27、22 ,44,66 被跳过。3.3 简单程序设计举例一个简单的 e 程序仅包含一个 main 函数且程序流程是顺序结构,程序的执行 局部通常含三种 根本操作的语句,即输入、输出、赋值语句或用于计算的其他表达式 语句。程序中出现的任何变量必须进行变量说明;如果有常量最好定义成符号常量;如果需要将处理结果暂时保存还要说明所须的辅助变量。例 1从终端输入一个字符,如果是小写字母,那么转换成大写后输出,否那么原样输出。#inelude <stdio.h> void main(void) int e;pintf( “ intput a eharetor: ); e=geteher();e>= a' &&e<= z' ?puteher(e+ A' -a ' ):putehar(e); puteher( n ' );注意:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论