版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章顺序结构程序设计算法C语言概述标准的输入与输出函数标准输出/输入函数字符输入/输出函数
3.1算法算法的特性:有穷性确定性有0个或多个输入有1个或多个输出有效性程序包含两个方面的内容:一个是对数据的描述,一个是对操作的描述。
程序=算法+数据结构程序=算法+数据结构+程序设计方法+语言工具和环境
3.1算法算法的组成要素操作每个操作的确定不仅取决于问题的需求,还取决于它们来自哪个操作集,它还与使用的工具系统有关。购买电视机报考大学结构控制⑴顺序结构⑵选择结构(分支结构)⑶循环结构(重复结构)3.1算法判断框连接点流程线起止框处理框输出输入框算法的表示方法用自然语言表示算法自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示通俗易懂,但文字冗长,容易出现歧义的算法。自然语言表示的含义往往不太严格,要根据上下文才能准确判断。此外,用自然语言描述分支和循环的算法,不是很直观。用流程图表示算法3.1算法用流程图表示算法只有一个入口:不得从结构外随意转入结构中某点。
只有一个出口:不得从结构内某个位置随意转出(跳出)。结构中的每一部分都有机会被执行到(没有“死语句”)。结构内不存在“死循环”(无终止的循环)。共同特点:
例如:计算半径为r的圆的面积s
例如:判断两个输入数据的大小,并输出其中的大数。
用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑关系,因此得到广泛使用。算法的表示方法用N-S流程图表示算法美国学者I.Nassi,B.Shneiderman提出了一种新的流程图——N-S流程图。在这种流程图中,完全去掉了带箭头的流程线,每种结构用一个矩形框表示,流程图如下图所示。例如:计算半径为r的圆的面积s
例如:判断两个输入数据的大小,并输出其中的大数。
N-S流程图表示算法有以下优点:比文字描述更加直观、形象,易于理解。比传统的流程图紧凑易画。废除流程线,整个算法结构是由各个基本结构按顺序组成。N-S流程图的上下顺序就是执行时的顺序,表示的算法都是结构化的算法。算法的表示方法
用伪代码表示算法:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡。
下面就是从a、b、c中找出最大数的伪代码描述。
输入a、b、c;if(a>=b)max=a;elsemax=b;if(max>=c)
输出max;else
输出c;算法的表示方法用计算机语言表示算法用计算机语言表示算法实际上就是实际的程序。用计算机语言表示算法必须严格遵守所使用的语言的语法规则。自顶向下、逐步细化的设计过程包括以下几个方面:⑴将一个复杂问题的解法分解和细化成由若干模块组成的层次结构。⑵将一个模块的功能逐步分解细化为一系列的处理步骤,直到某种程序设计语言的语句和某种机器指令。具有以下两个优点:⑴自顶向下、逐步细化的方法符合人们解决复杂问题的普遍规律,可以显著提高程序设计的效率。⑵用先全局后局部,先整体后细节、先抽象后具体的逐步细化过程设计出的程序具有清晰的层次结构,容易阅读和理解。用自顶向下、逐步细化的方法设计3个数中取最大数算法。例3.1
(1)首先,分析问题需求S1:输入三个数a、b、c;S2:从a、b、c中找出最大数赋给max;S3:输出max。(2)在前一阶段的基础上考虑各个“做什么”的实现途径,把算法细化如下。S1:调用scanf()函数输入三个数a、b、c;S2:调用一个求三个数中最大数函数max3(a、b、c);S3:调用printf()函数,将最大数输出。(3)编写主程序main(){floata,b,c,max;floatmax3(floatx,floaty,floatz);printf("Input3numberabc:");scanf("%f%f%f",&a,&b,&c);max=max3(a,b,c);}(4)设计max3()。仍然采用逐步细化的方法,概要算法如下:S2.1:从x与y中取较大数送入m中;S2.2:从m与z中取较大数送入m中;S2.3:返回m给主调函数。s2.1:if(x>y)m=x;elsem=y;s2.2:if(m<z)m=z;s2.3:return(m);floatmax3(floatx,floaty,floatz){floatm;if(x>y)m=x;elsem=y;if(m<z)m=zreturn(m);}(百钱百鸡)公元前五世纪,我国古代数学家张丘建在《算经》一书中提出:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?例3.2
⑴解题思路的分析这是一个有名的不定方程问题:cocks+hens+chicks=100⑴5*cocks+3*hens+chicks/3=100⑵式中:
cocks:鸡翁数 0~19中的整数
hens:鸡母数 0~33中的整数
chicks:鸡雏数 0~100中的整数
S1:cocks=0;/*赋初值*/S2:while(cocks<=19)S2.1:找出满足题意的hens、chicks;S2.2:cocks加1;/*cocks=cocks+1*/S2.1.1:hens=0;/*赋初值*/S2.1.2:while(hens<=33)S:找出满足题意的chicks;S:hens加1;/*hens=hens+1*/⑵下面对S2.1细化思路1:把已经确定的cocks带入(1)与(2)中,求解方程,看能否找到满意的解。这种思路不太适合计算机求解。思路2:在每个给定的cocks下,对hens的取值范围内的各个值依次测试,看能找到哪些hens及chicks满足题意。S:chicks=100–cocks-hens;if(5*cocks+3*hens+chicks/3.0==100)printf("%d%d%d\n",cocks,hens,chicks);⑶对S细化对S来说,cocks和hens都已确定,这时的chicks满足:chicks=100–cocks-hens#include"stdio.h"voidmain(){intcocks,hens,chicks;cocks=0;while(cocks<=19){hens=0;while(hens<=33){chicks=100–cocks-hens;if(5*cocks+3*hens+chicks/3.0==100)printf("%d%d%d\n",cocks,hens,chicks);hens++;}cocks++;}}3.2C语句概述C语句可以分为3大类:控制语句表达式语句复合语句3.2.1控制语句C有9种控制语句,它们是:①if()~else~ (条件语句)②for()~(循环语句)③while()~(循环语句)④do~while()(循环语句)⑤continue(结束本次循环语句)⑥break(终止执行switch或循环语句)⑦switch(多分支选择语句)⑧goto(转向语句)⑨return(从函数返回语句)3.2.2表达式语句表达式语句是在表达式最后加上一个“;”组成。表达式表达式语句说明a=3(赋值表达式)a=3;(赋值语句)getch()(函数调用表达式)getch();(函数调用语句)getch();合法且有意义,只关心是否有击键,不关心具体的值。i++(自增表达式)i++;(一般表达式语句)ch=getch()(函数调用表达式,赋值表达式)gh=getch();(一般表达式语句)x+y(算术表达式)x+y;(一般表达式语句)x+y;是一个语句,其作用是完成x+y操作,是合法的,但它将结果不赋给另外的变量,所以并无实际意义。3.2.2表达式语句表达式语句常见的形式有:赋值语句由赋值表达式加上一个分号构成赋值语句。函数调用语句由函数调用表达式加一个分号构成函数调用语句。printf("ThisisaCstatement.");空语句只有一个分号的语句,它什么也不做(表示这里可以有一个语句,但是目前不需要做任何工作)。3.2.3复合语句
用{}把一些语句(语句序列,表示一系列工作)括起来成为复合语句,又称语句块、分程序。如:{inta,b,sum;a=0;b=2sum=a+b;printf("%d",sum);}注意:C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求。一般将彼此关联的、或表示一个整体的一组较短的语句写在一行上。3.3数据的输入和输出C语言本身不提供输入输出语句。输入输出操作是由标准输入输出函数来完成的。3.3.1数据的输出函数格式:printf(“格式控制参数”,输出项1,输出项2,…);说明格式控制参数以字符串的形式描述,也称“格式控制字符串”。3.3.1数据的输出函数格式输出函数基本上由两种使用形式:原样输出格式printf(“要输出的字符串”);如:printf(“ThisisaCprogram.\n”);(原样输出“ThisisaCprogram.”)输出变量的值printf(“格式控制字符串”,输出表列);输出的表列是要输出的变量、常量和表达式等,输出表列中参数的个数是一个到若干个,当超过一个时,用逗号分隔。格式控制字符串中有两类字符:非格式字符非格式字符(或称普通字符)一律按原样输出。格式说明符格式说明符由“%”和转换字符组成,作用是将输出的数据转换为指定的格式输出。格式:
printf(“格式控制参数”,输出项1,输出项2,…);格式字符输出形式举例输出结果d(或i)十进制整数inta=123;printf("%d",a);123X(或x)
十六进制整数inta=123;printf("%x",a);7Bo八进制整数inta=123;printf("%o",a);173u不带符号的十进制整数inta=80;printf("%u",a);80c单一字符chara=69;printf("%c",a);Es字符串staticchara[]="CHINA";
printf("%s",a);CHINAe(或E)
指数形式的浮点数floata=123.456;
printf("%e",a);1.234560e+002f小数形式的浮点数floata=123.456;
printf("%f",a);123.456000g(或G)
e和f中较短的一种,不输出无效0floata=123.456;
printf("%g",a);123.456%百分号本身printf("%%");%数据的输出(1)%d格式字符。%d:整数的实际位数输出一个整数。%md:在m列的位置上以数据右对齐的方式输出一个整数,m大于整数的宽度时多余的位数空格留在数据前面,m小于整数的宽度时m不起作用,系统正确输出该整数。%-md:在m列的位置上以数据左对齐的方式输出一个整数,m大于整数的宽度时多余的位数空格留在数据后面,m小于整数的宽度时m不起作用,系统正确输出该整数。%0md:在m列的位置上以数据左对齐的方式输出一个整数,m大于整数的宽度时多余的位数在数据前面补0,m小于整数的宽度时m不起作用,系统正确输出该整数。#include"stdio.h"main(){inta;a=123;printf("%d\n",a);printf("%6d\n",a);printf("%2d\n",a);printf("%-6d\n",a);printf("%06d\n",a);}运行结果:123123123123000123数据的输出(2)%o格式字符:八进制整型数据格式。…printf("%o\n",a);printf("%6o\n",a);printf("%2o\n",a);printf("%-6o\n",a);printf("%06o\n",a);…运行结果为:173173173173000173数据的输出(3)%x格式字符:十六进制整型数据格式。…printf("%x\n",a);printf("%6x\n",a);printf("%2x\n",a);printf("%-6x\n",a);printf("%06x\n",a);…运行结果为:7b7b7b7b00007b数据的输出(4)%u格式字符:十进制无符号整型数据格式。#include"stdio.h"main(){inta=-1,b=1;printf("十进制八进制十六进制无符号整型\n");printf("a:%d,%o,%x,%u\n",a,a,a,a);printf("b:%d,%o,%x,%u",b,b,b,b);}运行结果:十进制八进制十六进制无符号整型a:-1,37777777777,ffffffff,4294967295b:1,1 ,1,1数据的输出(5)%c格式字符:字符型数据格式。#include"stdio.h"main(){ charc='W'; inti=87; printf("%c,%d\n",c,c);printf("%d,%c\n",i,i); printf("%-5c,%5c\n",c,c);}输出结果为:W,8787,WW,W(6)%s格式字符:字符串数据格式。%s:原样输出(一般用法)。%ms:按给定的宽度m输出。若字符串长度小于m,则在左侧用空格补足(右对齐输出);若大于m则输出全部。%-ms:按给定的宽度m输出。若字符串长度小于m,则在右侧用空格补足(左对齐输出);若大于m则输出全部。%m.ns:在m列的位置上输出一个字符串的前n个字符。若m>n,则在左侧用空格补足(右对齐输出);若m<n,则输出n个字符;若n大于字符串长度,则输出整个字符串。%-m.ns:在m列的位置上输出一个字符串的前n个字符。若m>n,则在右侧用空格补足(左对齐输出);若m<n,则输出n个字符;若n大于字符串长度,则输出整个字符串。main(){printf("%s\n","happyman");printf("%10s\n","happyman");printf("%-10s\n","happyman");printf("%8.5s\n","happyman");printf("%-8.5s\n","happyman");}运行结果:happyman (一般格式输出)happyman (输出宽度10,在左端补2个空格)happyman (输出宽度10,在右端补2个空格)happy (取左端5个字符,输出宽度8,在左端补3个空格)happy(取左端5个字符,输出宽度8,在右端补3个空格)(7)%f格式字符:实型数据(包括单精度、双精度)格式。%f:按系统默认的宽度输出,整数部分全部输出,并输出6位小数,单精度数7位有效数字,双精度数16位有效数字。%m.nf:在m列的位置上输出一个实数,保留n位小数,系统自动对数据进行四舍五入的处理。m大于实数总宽度时,多于的位数空格留在数据前面,m小于实数总宽度时,m不起作用,系统正确输出该数。%-m.nf:在m列的位置上输出一个实数,保留n位小数,系统自动对数据进行四舍五入的处理。m大于实数总宽度时,多于的位数空格留在数据后面,m小于实数总宽度时,m不起作用,系统正确输出该数。main(){floatx=123456.123;doubley=1234567890.1234;printf("%f\n",x);printf("%25f\n",x);printf("%25.2f\n",x);printf("%.2f\n",x);printf("\n");printf("%f\n",y);printf("%25f\n",y);printf("%.2f\n",y);printf("%-25.2f\n",y);}运行结果:123456.125000 (一般输出格式,左对齐)
123456.125000 (宽度25位,右对齐)
123456.12 (宽度25位,两位小数,右对齐)123456.12 (宽度不限.两位小数,左对齐)1234567890.123400 (一般输出格式,左对齐)
1234567890123.123400 (宽度25位,右对齐)1234567890123.12 (宽度不限,两位小数,左对齐)1234657980123.12 (宽度25位,两位小数,左对齐)
数据的输出数据的输出(8)%e格式字符:实型数据指数形式格式。%e:按规范的指数形式输出,即小数点前1位非零数字,小数点后6位小数,指数部分占5位,再加上小数点共13位,如1.123456e+007。%m.ne:按给定的宽度m输出,包括n位小数和5位指数。若数据长度小于指定宽度m,在左侧用空格补足,若数据长度大于指定宽度m,则按实际长度输出。%-m.ne:按给定宽度m输出,包括n位小数和5位指数,若数据长度小于指定宽度m,在右侧用空格补足;若数据长度大于指定宽度m,则按实际长度输出。main(){floatx;doubley;x=123456.123;y=1234567890123.123;printf("%e\n",x);printf("%20e\n",x);printf("%20.2e\n",x);printf("%.2e\n",x);printf("%-20.2e\n",x);printf("\n");printf("%e\n",y);printf("%20e\n",y);printf("%20.2e\n",y);printf("%.2e\n",y);printf("%-20.2e\n",y);}运行结果:1.23456e+05 (一般输出格式,左对齐)
1.23456e+05 (输出宽度20位,右对齐)
1.2e+05 (输出宽度20位,右对齐)1.2e+05 (输出宽度不限,含两位小数,左对齐)1.2e+05 (输出宽度20位,两位小数,左对齐)1.234567e+12 (一般输出格式,左对齐)
1.234567e+12 (输出宽度20位,右对齐)
1.2e+12 (输出宽度20位,右对齐)1.2e+12 (输出宽度不限,含两位小数,左对齐)1.2e+12 (输出宽度20位,两位小数,右对齐)
(9)%g格式字符:以实形数形式输出,能根据数值的大小自动选用%f格式或%e格式,以使输出宽度较小,且不输出无意义的零。main(){ floatx;doubley; x=123456.123; y=1234567890123.132; printf("%f%e%g\n",x,x,x,); printf("%f%e%g\n",y,y,y);}运行结果:123456.1250001.23456e+051324561234567890123.1230501.23457e+121.23457e+12数据的输出3.3.2scanf函数scanf函数用于输入数据。它是按格式参数的要求,从终端上把数据传送到地址参数所指定的内存空间中。其一般形式为:scanf(“格式控制参数”,地址1,地址2,…);scanf函数1.地址参数求地址的运算符为&,得到的地址是一种符号地址。例如:inta;floatb;说明:则&a、&b为两个符号地址,&a给出的是变量a所占空间大小的首地址。&b给出的是变量b所占空间大小的首地址。这种符号地址在编译时才被算成实际地址。格式控制参数scanf函数的格式参数有两种成分:格式说明项scanf的格式说明项基本组成如下:%*mh/l格式字符[开始符][赋值抑制符][宽度指示符][长度修正符][指出输出类型]把输入数据分为整型(int型,用d、o、x指定)、字符型(char型,用c指定)、实型(float型,用f指定)。在整型与实型中可再加长度修正说明符。m(注意没有n)用以指定输入数据的宽度。输入分隔符scanf函数输入流数据分隔scanf函数是从输入数据流中接收到非空的字符,再转换成格式项描述的格式,传送到与格式项对应的地址中去。系统怎么知道哪几个字符算作一下数据项呢?有以下几种方法:根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符时,就认为这一数据项结束。根据格式项中指定的域宽分隔出数据项。用分隔符。空格、跳格符('\t')、换行符('\n')都是C语言认定的数据分隔符。main(){inta;charb;floatc;printf("inputabc:")scanf("%d%c%f",&a,&b,&c);printf("a=%d,b=%c,c=%f",a,b,c);}一次执行结果为:inputabc:1234r1234.567↙a=1234,b=r,c=1234.567017main(){inta;flaotb,c;scanf("%2d%3f%4f",&a,&b,&c);printf("a=%d,b=%f,c=%f",a,b,c);}一次运行情况如下:12345678987654321↙a=12,b=345.000000,c=6789.000000main(){inta;floatb,c;scanf("%d%f%f",&a,&b,&c);printf("a=%d,b=%f,c=%f",a,b,c);}一次运行情况如下:12345678987654321↙a=12,b=345.000000,c=6789.000000scanf函数抑制字符*其作用是在按格式说明读入数据后不送给任何变量,即“虚读”。例如:scanf("%3d%*4d%f",&i,&f);如果输入为:12345678765.43↙则123送给i,4567不送给任何变量,8765.43送给f。scanf的停止与返回scanf函数在执行中遇到下面两种情况后结束:格式参数中的格式项用完——正常结束。发生格式项与输入域不匹配时——非正常结束。例如从键盘输入的数据数目不足。scanf是一个函数,它也有一个返回值,这个返回值就是成功匹配的项数。main(){inta,b,c;printf("%d\n",scanf("%3d-%2d-%4d",&a,&b,&c));printf("a=%d,b=%d,c=%d\n",a,b,c);}一次运行情况如下:123-45-6789↙3a=123,b=45,c=6789另一次运行情况为:12-345-6789↙
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理部工作计划汇编
- 小学一年级下学期工作计划
- 区2025年度计划生育工作计划2
- 分厂第十六个百日安全无事故活动计划
- 《外科常见急腹症》课件
- 《水暖理论知识培训》课件
- 《氨基酸之亮氨酸》课件
- 合同 第三方费用 报销条款
- 铁路培训合同
- 2025年阿克苏货运从业资格证模拟考试题目
- 江苏开放大学本科行政管理专业060191西方行政学说期末试卷
- 服装厂生产制度
- 2022年六年级语文上册期末考试及答案【A4打印版】
- 2024年中国东方资产管理公司招聘笔试冲刺题(带答案解析)
- MOOC 统计学-南京审计大学 中国大学慕课答案
- 高考作文标准方格纸-A4-可直接打印
- 身份认同研究综述
- 浙江2024年01月高考:《化学》科目考试真题与参考答案
- 海洋体育安全与救护智慧树知到期末考试答案2024年
- 2023年国家粮食和物资储备局直属联系单位招聘考试真题及答案
- 机械制图-第二章投影基础
评论
0/150
提交评论