目录
3.1 算法的组成要素
1. 算法的特征
有穷性,确定性,有0个或多个输入,有1个或多个输出,有效性;
算法的组成要素=操作+结构控制。
三种基本结构=顺序结构+选择结构+循环结构
3.1.2 算法的表示方法
自然语言表示算法;流程图表示算法,N-S流程图表示算法,伪代码表示算法
1. 流程图:起止框(开始/结束)+处理框(处理步骤)+判断框(判断条件,一入两出)+输出输入框+流程线
整个算法的结构是由上而下地将各个基本结构顺序排列起来
特点:只有一个入口,不能从结构外随意转入结构中某点;
只有一个出口,不能从结构内某位置随意转出(跳出);
结构中每一部分都有机会被执行到(无死语句);
结构内部不存在死循环
2. N-S流程图:
当型循环:当条件P成立是,反复执行A操作,直到P条件不成立才结束。先做判断,再决定是否执行循环体,在条件P一次都不满足时,循环体A一次都不执行。
直到型循环:当条件P不成立时,反复执行A操作,直到P条件成立才结束。先执行循环体,再判断条件P,循环体至少被执行一次。
3.1.3 自顶向下、逐步细化的设计过程
自顶向下、逐步细化的设计过程,包括如下方面:
将一个复杂的问题的解法分解和细化由若干个模块组成的层次结构;将一个模块的功能逐步分解细化为一系列的处理步骤,直到某种程序设计语言的语句和某种机器指令。
优点:提高设计效率;层次结构清晰。
例:在3个数中取最大数算法。
例:百钱百鸡的问题
3.2 C语句概述
C语句分为控制语句、表达式语句、复合语句
3.2.1 控制语句
9种控制语句,用于控制程序流程。
条件语句:if-else
循环语句:for、while、do-while、
结束本次循环语句:continue
终止执行switch或循环语句:break
多分支选择语句:switch
转向语句:goto
函数返回语句:return
3.2.2 表达式语句
最后加上一个;所组成的语句。
表达式与表达式语句的区别:
常见的语句形式:
赋值语句、函数调用语句、空语句、复合语句
3.3 数据的输入和输出
3.3.1 数据的输出函数
数据的输出函数:
格式输出函数基本形式:
① 原样输出格式
printf("要输出的字符串");
② 输出变量的值
按格式控制字符串输出表列的值,调用的一般形式,
printf("格式控制字符串",输出表列);
输出表列:输出的变量、常量、表达式等,个数是1个到若干个;前后须匹配。
格式控制字符串:
非格式字符:原样输出
格式说明符:由%和转换字符组成,如%d、%f等,将输出的数据转换为指定的格式输出。
1)%d格式字符:
① %d:整数的实际位数输出一个整数
② %md:在m列的位置上以数据右对齐的方式输出一个整数,m大于整数的宽度时,多余的位数空格留在数据前面,小于整数的宽度时m不起作用
③ %-md:左对齐输出一个整数,m大于整数的宽度时多余位数的空格留在数据后面,m小于整数的宽度时m不起作用
④ %0md:左对齐输出一个整数,m大于整数的宽度时多余的位数在数据前面补0,m小于整数的宽度时m不起作用
2)%o格式字符:八进制整型数据格式
3)%x格式字符:十六进制整数型数据格式
4)%u格式字符:十进制无符号整数数据格式
5)%c格式字符:字符型数据格式
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大于字符串长度,则输出整个字符串
7)%f格式字符:实型数据(单精度和双精度)格式
① %f:系统默认输出,整数全部输出,小数输出6位;单精度7位有效数字,双精度16位有效数字
② %m.nf:在m列的位置上输出一个实数,保留n位小数,系统自动对数据进行四舍五入处理。
m>实数总宽度时,多余的位数空格留在数据前面
m<实数总宽度时,m不起作用,系统正确输出
③ %-m.nf:在m列的位置上输出一个实数,保留n位小数,系统自动对数据进行四舍五入。
m>实数总宽度时,多余的位数空格保留在数据后面;
m<实数总宽度时,m不起作用,系统正确输出该数
例:
printf("%25f\n",x); 右对齐;
printf("%.2f\n",x); 两位小数,左对齐
8)%e格式字符:实型数据指数形式格式
① %e:按规范的指数形式输出,即小数点前1位非0数字,小数点后6位小数,指数部分占5位,再加上小数点共13位,如1.123456e+007
② %m.ne:给定宽度m输出,包括n位小数和5位指数;
数据长度小于指定宽度m,左侧用空格补足
数据长度大于指定宽度m,实际长度输出
③ %-m.ne:给定宽度m输出,包括n位小数和5位指数
数据长度小于指定宽度,右侧用空格补足;
数据长度大于指定宽度m,实际输出
9)%g格式字符:以实型数形式输出,根据数值大小自动选用%f或%e格式以来输出宽段较小,且不输出无意义的零
3.3.2 刷新输出
printf()语句将输出传递给一个被称为缓冲区的中介储存区域,缓冲区中的内容再不断地被传递给屏幕。
① 缓冲区满
② 遇到换行符\n
③ 需要输入的时候
3.3.3 scanf函数
用于输入函数。按照格式参数的要求,从终端上把数据传送到地址参数所指定的内存空间中。
scanf("格式控制参数",地址1,地址2);
1.地址参数
通过对变量名“求地址”运算得到,地址的运算符为&,得到的是符号地址
&a、&b为两个符号地址
&a给出的是变量a四字节空间的首地址;&b给出的是变量b四字节空间的首地址
2.格式控制参数
scanf函数的个数参数有两种成分:格式说明项、输入分隔符
格式说明项:
① 格式字符与printf函数中的使用方式相同,输入数据分为整型、字符型、实型
② 整型与实型可再加长度修正说明符,短整型h,长整型l
③ m用以指定输入数据的宽度
输入分隔符:
① 根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符时,认定这一数据项结束。
② 根据格式项中指定的域宽分隔出数据项
③ 用分隔符。空格、跳空格('\t')、换行符('\n')
3. 抑制字符*:作用是在按格式说明读入数据后不送给任何变量,即虚读
1.scanf的停止与返回
停止情况:
格式参数中的格式项用完-正常结束;
发生格式项与输入域不匹配时-非正常结束
2.scanf函数与输入缓冲区
输入数据时,实际上并不是输入完一个数据项就被读取给一个变量,而是在键入一行字符并按回车键之后才被输入。先放在缓冲区中,再按scanf函数格式的要求从缓冲区中读数据。
3.4 getchar函数与putchar函数
只对字符数据进行输入输出操作的函数putchar和getchar函数,该函数包含在stdio.h中。
1.字符输出函数putchar()
一般调用格式putchar(ch);
ch为字符型变量或整型变量
功能:将变量ch的值输出到终端(显示器)设备上。
2.字符输入函数getchar()
调用格式:getchar();
该函数为无参函数,功能:从终端(或指定输入设备)获取一个输入字符。
执行getchar()函数,虽然是读入一个字符,但并不是从键盘读,而是输入完后按回车键,将该行的字符输入缓冲区中。
例:putchar(getchar()):读入一个字符,将它输出到终端
处理文字数据:输入若干字符,只要输入的字符不是#就执行指定的操作。
if((ch=getchar())!'#')
或
while((ch=getchar())!='#')
{…}