版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上第三章 简单程序设计3.1 流程结构和语句1 . 三种流程结构顺序结构,选择结构,循环结构程序在逻辑上执行的流程。l 顺序结构:按语句在源程序中出现的次序依次执行;l 选择结构:根据一定的条件有选择地执行或不执行某些语句。l 循环结构:在一定条件下重复执行相同的语句。所有的流程控制都是由语句实现的,且任何一个表达式都可作为一个语句使用,成之为表达式语句2. 表达式语句任何表达式通过在其末尾加一个“;”,可使表达式成为一个语句,形式为:表达式;其中“;”是C语句的组成部分,表示一个语句结束。表达式语句能够独立出现在程序中,而表达式则不能独立出现。例如:x=y+1 是表达
2、式x=y+1; 是语句习惯上把赋值表达式语句如:x=y+1;新为赋值语句。函数调用也是表达式,因此:printf(“hellow”)是表达式;printf(“hellow”);是语句,习惯上称为输出语句。scanf(“%d%d”,&x,&y);函数调用表达式语句(输入语句)3. C的语句概述C的一个“说明”也必须以分号结束,也称为语句,因此C的语句分说明语句和执行语句两类。说明语句可以出现在程序中任何块(函数或复合语句)的外面称为外部说明或块内称为局部说明(在执行语句的前面)。外部说明必须放在一个源程序文件中所有函数定义的外面;局部说明包括类型定义、变量和函数说明,其作用是描述程序中被处理数据
3、(变量或函数)的名称和类型供解释程序使用。执行语句只能出现在函数体内且处于局部说明的后面,执行语句完成对数据的处理和对程序流程的控制。常用的程序结构为:常量说明类型说明变量说明 /*外部说明*/返回类型 函数名(参数表) 变量说明 /*局部说明*/ 执行语句C的执行语句共有六种:l 表达式语句l 复合语句l 标号语句l 选择语句(if和switch)l 循环语句(while,for,do-while)l 转移语句(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说明函数没有参数,该函数的调用格式为:getchar()系统将输出设备和输
5、入设备都看成文件,标准输入设备(键盘)和标准输出设备(显示器)是由字符的序列(字符流)组成的文本文件,称为输入流和输出流。getchar每调用一次则从终端(键盘)读取一个字符。这个字符的字符码就是getchar的返回值(即函数值),其类型为由unsigned char 转换的int。例如:c=getchar();执行时键入字符a赋值后变量c的值为97即字符a的值。输入文件的结束标志称为文件尾。DOS系统中键入ctrl+z时产生文件结束标志。getchar遇到文件结束标志时返回值EOF,EOF是在头文件stdio.h中定义的符号常量,其值通常为-1。程序中如果要测试getchar()的值是否文件
6、尾应使用EOF而不用-1,这样做可使程序不依赖于某个特定环境。2. 字符输出函数putchar函数原型为:int putchar(char ch ) putchar函数将所要输出的字符码转换为unsigned char送到标准输出设备中去,返回值是被输出的字符,如果出错则返回EOF,调用形式为:putchar(ch)其中ch为实际参数,可以是char、short或int类型的表达式,其值是要被输出字符的字符码。每调用一次则将字符c输出到标准输出设备上。例如:int i=7;char ch;说明:(1) 下面四个语句是等价的,同为输出一个响铃字符:putchar(i);putchar(7);pu
7、tchar(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是小写字母则将其转换成大写字母后输出,否则直接输出原字符。注意:凡是程序中调用了输入、输出库函数,必须在函数第一次调用之前写上 include或include“stdio.h”,预处理控制(对于DOS上的scanf和printf可省略)。3.2.2格式输出函数(printf)get
8、char和putchar函数用于输入和输出单个字符,输入和输出过程中不进行格式上的任何转换。printf和scanf函数在数据的输入和输出过程中能够将计算机内部形式的数据和输入输出任务上的数据相互转换,称为格式输出和格式输入。1. printf函数的原型int printf(char format,args)参数的数目可变,中间用“,”分隔,是要被转换并写到输出设备的数据。函数的返回值是实际输出字符的数目。2. 调用形式printf(格式字符串,输出参数1,输出参数2,);调用printf函数时至少要给出第一个参数,即格式字符串。格式字符串式是用“”括起来的字符串;输出参数1,输出参数n是n个
9、表达式,可以为任何基本类型,也可以是指针或枚举类型(较少使用)。输出数据项的数目任意,末尾 加“;” 表示printf函数通常作为语句使用。printf函数将参数的值按格式字符串规定的格式从内部形式转换成外部字符形式并输出设备,返回值是实际输出字符的数目。例如: printf(%d%8.3f,i,x);参数中的格式为%d %8.3f。i和x是要输出的数据%d表示i要用十进制整数形式输出,宽度为数据实际宽度。%8.3f表示x要用小数形式浮点数格式输出,输出总宽度为8个字符,其中小数部分保留3位,若i=15,X=-8.2 该语句输出为 15 -8.2003. 格式字符串格式字符串包含两种字符:普通
10、字符和用于转换说明的字符,普通字符照原样输出,转换说明用于说明数据输出格式。其形式为:%域宽转换字符一个转换说明以%开头。域宽部分是可选的,用于指定输出数据的宽度。每个转换说明对应于一个输出参数,该参数被转换成由转换说明规定的数据格式后输出。普通字符通常用作输出提示信息,它可以与转换说明交替出现,例如printf(i=%d,x=%8.3fn,i,x);输出为:i=15,x= -8.200ANSI C的转换字符及其规定的输出格式见教材p44。注:如果%后面是一个%字符,则标准C无此定义,将它作为普通字符输出。在%和转换字符之间可以加域宽说明,用于指定输出时的对齐方向、输出数据的域宽度、小数部分的
11、位数等要求。用于域宽说明的字符列于下表中,域宽说明可以是其中之一或多个字符的组合。 表3.1 printf域宽说明字符域宽说明符号意 义-(减号)+空格0(零)#m(正整数).(小数点)n(正整数)hlL在指定的区域内以左对齐方式输出(默认右对齐) 输出正值时前面冠以符号 + 输出的第一个字符不是符号时,要输出一个空格作参照 在域宽范围内用前导0填补空位 对于o格式输出前导0,对于x或X格式要输出0x或0X前缀,对于g或G格式不删除尾部零。 指出输出数据的最小宽度。如果实际宽度m,则按实际宽度;如果实际宽度m,则左边(左对齐时为右边)补上空格或零(当有0域宽说明字符时)。分隔域宽与精度。小数点
12、前面可以没有域宽说明。指出输出数据的精度。对于e、E、f格式为小数部分的位数,对于g或G格式为有效字的个数,对于整数为至少应输出的数字的个数(添加前导0来满足所需宽度)。指出输出参数是短整型指出输出参数是长整型指出输出参数是高精度浮点型在域宽说明中还可以使用字符*,*代表一个整型值,这个整型值是由包含*的转换说明对应的参数决定的。例如: printf(%.*s,max,s);该语句执行时从串s中打印至多max个字符。域宽说明示例见教材p45注意(1):printf函数根据格式串中的转换说明来决定输出数据的数目和类型,如果转换说明项数多于参数个数,或参数类型不正确,则会输出错误的数据(不报语法错
13、);如果输出参数的数目多于转换说明项数则多余的参数不被输出。例. 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.457(2)printf中参数右结合,如设int i=1;则 printf(%d,%d,%d,+i,+i,+i);输出结果为4,3,2 printf(%d,%d,%d,i+,i+,i+);输出结果为3,2,13.2.2 格式输入函数(scanf)1.scanf函数的原型 int scanf(char *format,args)
14、scanf函数是具有int类型返回值(返回读入参数的个数)的函数。第一个参数format是格式字符串,它指出输入数据的数目、类型和格式,args为指向存放输入数据的变量的指针,输入参数的数目可变。2. scanf函数的调用格式 scanf(格式字符串,输入参数1, 输入参数n); scanf函数是printf函数的逆过程,它从标准输入设备(键盘)读入字符流,并按照格式字符串中转换字符规定的格式转换成相应类型的值后赋予由输入参数所指的变量。format串可以包含如下字符: (1)空格或制表符,它们被忽略 (2)非%普通字符,它需要输入流中有同样的非空白字符与之匹配 (3)以%为开头以转换字符为结
15、尾的转换说明符,常见的转换字符与printf类似 (4)在%与转换字符之间可以有下列选项 赋值抑制符 说明最大域宽的整数 指出参数所指变量类型的字母 h,l或L 具体形式为:% * m l 或 h 格式字符 长度修正说明符域宽抑制符格式字符与printf中使用方式相同,把输入数据分为整型(int *用d、o、x指定)、 字符型(char *,用c指定)、 实型(float *,用f,e指定)。在整型和实型中可再加长度修正说明符:加h(短整型)、 加l(长整型)、 加L(高精度型)、m(注意没有n)用以指定输入数据的宽度。输入参数1至输入参数n可以为简单变量的地址或字符串变量的地址,简单变量的地
16、址用变量前面加取地址运算符&表示,字符串变量的地址用字符数组名(或指向字符串变量的指针)表示。scanf函数被正确执行时返回被转换并赋值的数据项的数目,遇到文件尾或出错时返回EOF。例如: int i;float x; char name10; scanf(%d %f %s,&i,&x,name);输入:25 61.37e-1program注意:n 输入字符串时不加双引号,因双引号也会作为字符号的内容。n 不能用赋值语句给数组赋值如:name=program 因为name不是变量而是一个地址常量。n 不能将scanf(%d,&i)写成scanf(“%d,i)也不能将scanf(%s,name)
17、写成scanf(%s,&name);3 .输入形式 (1)构成一个被转换数据的字符序列称为一个输入域,输入域为下面三种情况之一。l 以输入流中当前字符开始直到第一个空白字符之前。l 根据转换说明不能被转换的字符之前。l 指定域宽用完。输入域之间一般可用空白字符(空白、换行、制表符)隔开,整型、浮点型或字符型后的字符型数据不用空白字符分隔(注意字符型数据同样不用单引号),在整型、浮点型或字符型后的字符串数据可以有或无空白符(因为字符串前无前导空白符),当遇到空白符时表示一个字符串结束(见后面内容)。例1 int i;char c; scanf(%d%c,&i,&c); 执行时输入:1234a则i
18、被赋值1234,c为a.但若输入1234 a,则i 值同上,c为 若要读入一个非空白字符了可用下面形式:scanf(%d%1s,&i,&c);输入:1234 a,则i为1234,c为a。例2 char c1,c2; scanf(%c%c,&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);执行时输入
19、programming language(回车)则字符串“programming”将被赋予name。注:用gets函数时,串中可含有空格,此时以回车键表示输入的结束。(2)当键入回车时scanf开始执行,当固定格式字符串中的转换说明项或者某个输入域与转换说明项不能匹配时scanf停止执行,返回已成功匹配且被赋值的输入数据个数;当遇到文件结尾时返回EOF。注意:当下一次调用scanf时从上一次scanf调用以被匹配转换的最后一个字符的后面那一个字符开始读取。例1int i,j;float x,y;scanf(“%d%d”,&i,&j,&x);scanf(“%f”,&y);执行时输入12 34 5
20、6.7 89执行第一个scanf调用时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的格式字符串包
21、含有普通字符时,在输入流中相应位置必须有相同的字符与之匹配;对于空白字符,格式字符串的一个空白字符可以与输入流中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之间必须有且仅有一个逗号。例3 Scanf(“i=%d;j=%d;k=%d”,&i,&j,&k)输入应输入i=10;j=20;
22、k=304转换说明中的可选项scanf转换说明中的可选项有指定域宽的整数:h、l、L、*。如果一个输入域前面有空行,scanf全自动跳过空行直到发现输入域。 指定域宽的整数:如果说明了域宽,则输入域直到域宽用完时为止。例1 int i,j;scanf(“%3d%d”,&i,&j);执行时输入1234 5678。整数123被赋值i,4被赋值j。例2 char name20scanf(“%8s”,name);若输入abcdefghi则字符串“abcdefgh”被赋给数组name。 h,l,L:如果参数是short *(而不是int *),则转换字符d、i、n、o、u和x的前面要加h ;如果参数是l
23、ong * 则加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 double y; scanf(“%lf”,&y); *:如果指定了*,则输入域被跳过,不赋值。*指出按转换说明匹配相应的输入域。但转换结果不被赋值给任何变量,因此称为“虚读”。虚读用于从输入流中有选择的读取部分内容。例如:double v1,v2,v3;scanf(“%lf%*d%lf%*d%lf%
24、*d”,&v1,&v2,&v3);执行时输入:22 33 44 55 66 11.0赋予v1,33.0赋予v2,55.0赋予v3;输入域22,44,66被跳过。3.3 简单程序设计举例一个简单的c程序仅包含一个main函数且程序流程是顺序结构,程序的执行部分通常含三种基本操作的语句,即输入、输出、赋值语句或用于计算的其他表达式语句。程序中出现的任何变量必须进行变量说明;如果有常量最好定义成符号常量;如果需要将处理结果暂时保存还要说明所须的辅助变量。例1 从终端输入一个字符,如果是小写字母,则转换成大写后输出,否则原样输出。#include void main(void)int c;pintf(“intput a charctor:”);c=getcher();c=a&c=z?putch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中秋节联欢会致辞范文(10篇)
- 九月大班上学期月计划范文(5篇)
- 中秋晚会董事长致辞范文(13篇)
- 曹植课件教学课件
- 讲师比赛课件教学课件
- 影响高中数学成绩的原因及解决方法
- 消费品和有关服务的比较试验 实施要求 编制说明
- 爱婴医院课件教学课件
- 南宫市八年级上学期语文10月月考试卷
- 八年级上学期语文期中考试卷
- JT-T 617.2-2018 危险货物道路运输规则 第2部分:分类 含2024年第1号修改单
- 2024年合肥兴泰金融控股(集团)有限公司招聘笔试冲刺题(带答案解析)
- 大学生职业生涯展示
- 《金属非金属地下矿山监测监控系统建设规范》
- 《中国慢性阻塞性肺疾病基层诊疗与管理指南(2024年)》解读
- 安全操作规程、作业指导书
- MOOC 软件安全之恶意代码机理与防护-武汉大学 中国大学慕课答案
- 档案工作协调机制
- 肝硬化门静脉高压食管胃静脉曲张出血的防治指南( 2022)
- 2023年1月自考00804金融法二试题及答案
- 赢利-未来10年的经营能力-读后感
评论
0/150
提交评论