




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C第四章
语句和控制流目录4.1C语句概述4.2结构化程序设计4.3程序的三种基本结构4.4简单的输入输出语句4.5顺序结构程序设计举例4.1C语句概述一个C程序可以由多个源程序文件构成。所有这些源程序文件经过分别编译后形成各自的目标文件,经连接程序LINK后形成一个EXE文件一个源程序文件由若干函数和“预编译命令”构成函数包括数据定义部分(变量定义)和执行部分,执行部分是C语言语句,完成对数据的操作说明C语句的分类C语句有以下五类:1、控制语句,完成程序流程控制if()~else~条件语句for()~循环语句while()~循环语句do~while()循环语句continue结束本次循环语句break中止switch或循环语句switch多分支选择语句goto转向语句return从函数返回语句()表示条件,~表示内嵌的语句。2、函数调用语句 例:printf("ThisisaCprogram.");
/*该语句调用函数printf()*/C语句的分类3、表达式语句:在表达式后面加分号构成 例:
a=3 /*后面无分号,是表达式*/ a=3; /*后面有分号,是语句*/ i++; /*语句*/ x+y; /*语句*/C语句的分类4、空语句:仅包含一个分号的语句 例:;5、复合语句:由大括号{}括起来的语句序列 例:
{
z=x+y;
t=z/100;
printf("%f",t); }
结构化程序设计一词,首先由荷兰人EdsgerwDijkstra提出有关数学理论,则通过美国人CorradoBohrm及意大利人Jaconipi证明了任何程序均可以用简单的逻辑结构来表示任何逻辑线路,不管它如何复杂,均可由AND、OR、NOT三种逻辑所构成4.2结构化程序设计设计思路:1、自顶向下、逐步求精;2、程序结构是按功能划分若干个基本模块;3、各模块之间的关系尽可能的简单,在功能上相对独立;4、每一模块内部均是由顺序、选择和循环三种基本结构组成;5、模块化的实现方法是使用子程序。面向过程(结构化)的程序设计方法程序子程序1子程序2子程序3子程序4结构化程序设计示意图程序按功能模块划分为若干基本模块(子过程),每个子过程具有一定的功能,这些过程通过参数传递数据。数据和过程是分离为相对独立的实体。如下图:过程1过程2过程3数据1数据2数据3数据4面向过程的程序设计认为,每一个程序都完成一些特定的功能。每一功能的实现是通过对数据进行一系列的加工而实现的。因而程序设计包括组织数据---设计数据结构,以及设计对数据结构进行加工的过程---设计算法两个部分。即:
程序=数据结构+算法统一使用三种基本逻辑结构(顺序、IF_THEN、WHILE_DO等)故只有一个出口,逻辑极为清楚易于除错及后续修改维护理论上可以不用GOTO使用缩进方式编写程序,故易于了解与阅读,可减少错误可配合自顶向下(TOP—DOWN)程序开发方法提高程序设计者的生产力结构化程序的优点结构化程序设计方法:在程序设计中,使用结构清晰、便于阅读的程序结构。有三种程序的基本结构:1、顺序结构。4.3程序的三种基本结构2、选择结构:根据条件p选择执行程序的某部分,但无论选择哪部分,程序均将汇集到同一个出口。程序的三种基本结构3、循环结构:两种。(1)当型循环结构。当条件p成立(“真”)时,反复执行A操作,直到p为“假”时才停止循环。先判断条件,若条件满足,则执行A。在第一次判别条件时,若条件不满足,则A一次也不执行。程序的三种基本结构当型循环结构程序的三种基本结构(2)直到型循环结构。先执行A操作,再判别条件p是否为“假”,若为“假”,再执行A,如此反复,直到p为“真”为止。先执行A再判条件,若条件满足再执行AA至少被执行一次。选择结构可以派生出“多分支选择结构”:根据k的值(k1、k2、...、kn)不同而执行A1、A2、...、An之一。程序的三种基本结构三种基本结构可以处理任何复杂的问题。例如,下图的程序结构可以分解为顺序结构(A和B)及当型循环结构(B)。程序的三种基本结构输入输出的基本概念输入:从外部向输入设备输入数据输出:从计算机向外部输出设备输出数据4.4简单的输入输出语句
计算机
显示屏打印机磁盘光盘绘图仪键盘鼠标磁盘光盘扫描仪数码相机C语言本身并不提供输入和输出语句,而是由开发系统提供的函数来完成输入和输出操作。在C的标准函数库中(stdio.h)提供了一些输入输出函数,例如,printf函数和scanf函数。C提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分。因此各函数的功能和名字,在各种不同的计算机系统中有所不同。不过,有些通用的函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统的标准函数(标准输入输出库stdio.h的一部分)。在程序编译连接时,用户程序与标准文件相连,所以在程序中可以直接使用printf和scanf函数。输入输出函数的原型(函数名、返回值类型、形式参数)在文件stdio.h中定义,因此,使用输入输出函数时,应在源程序的开头使用如下语句:
#include<stdio.h>
或 #include"stdio.h“#include是一个预编译命令。stdio.h放在程序的开头,因此称为“头文件”。最常用的头文件:
stdio.h 定义输入输出函数
string.h 定义字符串操作函数
math.h 定义sin、cos等数学函数作用:向终端输出一个字符用法:putchar(c);
/*c是字符变量或整型变量*/[例4.1] #include"stdio.h" main() { chara,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c); }
4.4.1putchar()函数程序输出:BOY注意:若没有#include“stdio.h”,出现错误信息LinkerError:Undefinedsymbol'_putchar'inmoduleE4_1.C
(E4_1.C是程序文件名)表示putchar符号(函数名前加下划线)未定义,因为开发系统不知道putchar()的原型。程序中有了#include"stdio.h"后,开发系统把程序中出现的putchar()与stdio.h中的定义进行比较,它们是相同的,从而开发系统知道了putchar()的定义(原型)。
也可以输出控制字符如putchar(’\n’)输出一个换行符如果将例4.1程序最后一行改为putchar(a);putchar(‘\n’);putchar(b);putchar(’\n‘);putchar(c);则输出结果为:
BOY
putchar()函数应用也可以输出其它转义字符,如:putchar('\101');
输出字符'A'(八进制101=65=0x41)putchar('\'');
输出单引号'putchar('\015');
输出回车(八进制015=13=0x0D)putchar()函数应用作用
从外部设备输入一个字符一般形式
intgetchar()无参数,函数的值就是从输入设备得到的字符[例4.2]#include"stdio.h"main(){charc;c=getchar();putchar(c);}4.4.2getchar()函数运行时,若从键盘输入字符'a',屏幕显示为:a↙a作用:格式化输出任意数据列表
printf()的一般格式
printf(格式控制,输出列表);例:
printf("i=%d,f=%f\n",i,f);
4.4.3printf()函数格式说明输出表列原样输出的普通字符printf()是函数,“格式控制”和“输出列表”是其参数。可以表示为:printf(参数1,参数2,参数3,....,参数n);其中“参数1”表示“格式控制”;其余参数表示“输出列表”。1、d格式符:按十进制格式输出 用来输出十进制整数(1)%d按整型数据的实际长度输出(2)%mdm为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出,如
printf(“%4d,%4d”,a,b) 若a=123,b=12345, 则输出结果为:□123,12345(□表示空格)
d格式字符
(3)%ld,输出长整型数据。如
longa=135790;printf(”%ld”,a);如果用%d输出,就会发生错误,对long型数据应当用%ld格式输出。对长整型数据也可以指定字段宽度,如将上面printf函数中的“%ld”改为“%8ld”则输出为
□□1357908列一个int型数据可以用%d或%ld格式输出。d格式字符注:%后面的m(位数控制)、0(位数不足补0)对于其他格式符也适用。d格式字符%d输出数字长度为变量数值的实际长度%md输出m位(不足补空格,大于m位时按实际长度输出)%ld%mldl(小写字母L)表示输出“长整型”数据%0md%0mld0(数字0)表示位数不足m时补0例:inti=123;longj=123456;printf("%d□%5d□%05d,□%ld□%8ld□ %08ld",i,i,i,j,j,j);输出结果123□□□123□00123,□123456□□□123456□00123456d格式字符2、o(字母)格式符:按八进制格式输出。(不会出现负数格式)
%o
%mo%lo%mlo3、x格式符:按十六进制格式输出。(不会出现负数格式)
%x
%mx%lx%mlx4、u格式符:用于输出unsigned类型数据。
%u
%mu%lu%mluo、x、u格式字符[例4.3]main(){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf(“b=%d,%o,%x,%u\n",b,b,b,b);}
输出结果
a=-1,177777,ffff,65535 b=-2,177776,fffe,65534格式字符应用5、c格式符:以字符形式输出。例:
charc; printf("%c",c);一个整数,若其值在0~255范围内,也可以用字符形式输出,在输出前,将该整数转换为对应的ASCII字符。反之,一个字符数据也可以用整数形式输出。
c格式字符[例4.4] main() { charc='a';inti=97; printf("%c,%d\n",c,c);
printf("%c,%d\n",i,i); }
运行结果为:
a,97
a,97c格式字符6、s格式符:以字符串格式输出s格式字符%s例、printf("%s","CHINA");%msm指定宽度(不足时左补空格,大于时按实际宽度输出)%-ms左对齐,不足m时右补空格%m.ns输出占m个字符位置,其中字符数最多n个,左补空格%-m.ns同上,右补空格7、f格式符:按实数格式输出f格式字符%f按实数格式输出,整数部分按实际位数输出,6位小数%m.nf总位数m(含小数点),其中n位小数%-m.nf同上,左对齐[例4.5] main() { floatx,y; x=111111.111;y=222222.222; printf("%f",x+y); }程序输出:
333333.328152
(实数运算中误差不可避免)f格式字符[例4.6]main(){doublex,y;doublex2,y2;x=1111111111111.111111111;y=2222222222222.222222222;x2=1111111111111.111;y2=2222222222222.222;printf("%f%f",x+y,x2+y2);/*13位整数,9位小数*/}程序输出:3333333333333.3330103333333333333.333010f格式字符从[例4.5]和[例4.6]可以看出:(1)实数运算中误差不可避免。(2)double比float精度高。(3)float实数(单精度)的有效位数是7位,double实数(双精度)的有效位数是16位,超过有效位数的输出和输入均无意义。f格式字符[例4.7]main(){floatf=123.456;printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f);}输出结果:123.455994□□123.455994□□□□□□123.46□□123.46□□123.46□□□□8、e格式符:以指数形式输出实数。e格式字符%e输出13位,其中:1位整数,1位小数点,6位小数,5位指数(含字符e和指数的符号)%m.ne%-m.ne9、g格式符:根据数值大小,自动选择f或e格式输出。输出占宽度较小的一种不输出无意义的零g格式字符以上介绍了9种格式符,归纳如表格式字符说明
d以带符号的十进制形式输出整数(正数不输出符号)。
o以8进制无符号形式输出整数(不输出前导符0)。
x以16进制无符号形式输出整数(不输出前导符0x)。
u以无符号10进制形式输出整数
c以字符形式输出,只输出一个字符。
s输出字符串。
f以小数形式输出单、双精度数,隐含输出6位小数。
e以标准指数形式输出单、双精度数,数字部分小数位数为6位。
g选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。4.4.4scanf()函数作用:按规定格式输入数据
scanf()的一般格式
intscanf(格式控制,地址列表);"地址列表"是输入信息存放地址的列表,一般是变量地址。返回值等于成功输入的项数
scanf()函数[例4.8] #include"stdio.h" main() { inta,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c); }
运行时按如下方式输入三个值:3□4□5↙(输入a,b,c的值)3,4,5(printf输出的a,b,c的值)
&a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。
"%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。格式字符说明d用于输入十进制数o(字母)用于输入八进制数(无前导0)x用于输入十六进制数(无前导0x)c用于输入单个字符s输入字符串,以非空字符开始,遇第一个空白字符结束f用于输入实数(小数或指数均可)e,E,g,G与f相同(e可与f,g互换)格式的附加说明符字符说明l(字母)用于长整型数(%ld、%lo、%lx)或double型实数(%lf、%le)h用于短整型数(%hd、%ho、%hx)域宽指定输入所占列宽(一个正整数)*表示对应输入量不赋给一个变量说明:1、scanf()中不使用%u说明符。对unsigned型数据,以%d、%o、%x格式输入。2、可以指定输入数据的列数,系统自动按它截取所需数据。例、
scanf("%3d%3d",&a,&b);
输入123456↙
系统自动将123赋给a,456赋给b。说明:3、*格式用于跳过一个数据域,例、
scanf("%2d□%*3d□%2d",&a,&b);
输入:12□345□67↙ 12→a,345被跳过,67→b。 *主要用于利用现有数据时,跳过某些数据项4、输入实数不能规定精度,如、
scanf(“%7.2f”,&a);错误使用scanf()函数的注意事项1.sacnf()中的变量必须使用地址。
inta,b; scanf("%d,%d",a,b);错误
scanf("%d,%d",&a,&b);2.scanf()的“格式控制中”,可以使用其它字符,但在输入时必须输入这些相同的字符。例、scanf("%d,%d",&a,&b);
输入:3,4↙
例、
scanf("%d□□%d",&a,&b);
输入:3□□4↙(两个或以上空格)使用scanf()函数的注意事项3.在用"%c"输入时,空格和“转义字符”作为有效字符。例、 scanf("%c%c%c",&c1,&c2,&c3); 输入:a□b□c↙ 结果:a→c1,□→c2,b→c3(其余被丢弃)4.输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。 ①遇空格、“回车”、“跳格”键。 ②遇宽度结束。 ③遇非法输入。#include<stdio.h>main(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=56,a+b=68123456↙[例4.9]#include<stdio.h>main(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=5,a+b=1712345a↙[例4.9]#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题1:当要求程序输出结果为
a=12,b=34时,用户应该如何输入数据?1234↙[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为:12,34↙时,应修改程序中的哪条语句?怎样修改?scanf("%d,%d",&a,&b);
[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题3:语句scanf("%d%d",&a,&b);修改为scanf("a=%d,b=%d",&a,&b);时,用户应该如何输入数据?a=12,b=34↙[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题4:限定用户输入数据为以下格式为
1234↙
同时要求程序输出结果为a=12,b=34scanf("%2d%2d",&a,&b);[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}
问题5:限定用户输入数据为以下格式为12↙34↙
同时要求程序输出结果为a="12",b="34"scanf("%d%d",&a,&b);printf("a=\"%d\",b=\"%d\"\n",a,b);[例4.10]—格式控制#include<stdio.h>main(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题6:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入scanf("%d%*c%d",&a,&b);
[例4.10]—格式控制#include<stdio.h>main(){ intdata1,data2,sum; charop;
printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2第1次测试12+3↙123129=3141[例4.11]—C格式应用#include<stdio.h>main(){ intdata1,data2,sum; charop;
printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2
第2次测试123↙123=5[例4.11]—C格式应用#include<stdio.h>main(){ intdata1,data2,sum; charop;
printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2
第3次测试12+3↙12+3=15[例4.11]—C格式应用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Pleaseinputaninteger:希望得到的运行结果12↙Pleaseinputancharacter
:a↙Pleaseinputafloatnumber:3.5↙integer:12character
:afloat:3.500000[例4.11]—C格式应用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Pleaseinputaninteger:结果不对!12↙Pleaseinputancharacter
:character:Pleaseinputafloatnumber:3.5↙integer:12float:3.500000[例4.11]—C格式应用#include<stdio.h>main(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%1s",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c); }Ple
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年单组元肼、双组元液体推力器合作协议书
- 文档汽车车载网络技术应用
- 家政清洁服务技能培训体系
- 流程管理成功案例解析
- 中文生物医学文献检索系统
- 家庭子女环保意识教育及实践服务协议
- 抖音火花小程序合规性审查及整改协议
- 高端技术兼职岗位竞业限制合同
- 汽车行业广告视频定制拍摄与多平台推广合同
- 网络直播网红培养计划合伙人协议
- 幼儿园大班游戏中“一对一倾听”的策略
- 医院信息安全管理课件
- 2024年初级会计实务考试真题
- 变电站设备危险源辨识清单及预控措施
- GB/T 45083-2024再生资源分拣中心建设和管理规范
- 艾灸疗法课件
- 银行职业介绍课件
- T-CASME 1514-2024 市域智慧共享中药房建设指南
- 《全球各大邮轮公司》课件
- 【MOOC】创新与创业管理-南京邮电大学 中国大学慕课MOOC答案
- 2024年3月天津高考英语第一次高考真题(原卷版)
评论
0/150
提交评论