2020/1/21第3章程序程序设计基础C语言程序设计2020/1/213.1算法与流程3.1.1算法的概念计算机解决问题所依据的步骤称为计算机算法,简称算法。解决同一个问题有时可以采取不同的步骤,即存在不同的算法。算法是程序设计的灵魂。计算机语言只是一种用来描述算法的工具。算法有优劣之分,一般应选择简单、运算步骤少、运算速度快、内存消耗小的算法。2020/1/213.1.2算法的属性1有穷性2确定性3有零个或多个输入4有一个或多个输出5有效性2020/1/213.1.3算法的表示形式表示算法有多种方法,常用的表示方法有:自然语言、传统流程图、N-S流程图(盒图)伪代码、计算机语言等。1.传统流程图起止框处理框输入输出框流程线判断框连接点2020/1/212.N-S流程图AB顺序结构条件成立不成立AB选择结构当条件成立时A当型循环结构直到条件不成立A直到型循环结构2020/1/213.2程序结构和语句C程序源文件源文件源文件源文件函数预处理命令全局变量声明数据定义执行部分函数的执行部分由语句按照一定的控制流程构成。2020/1/213.2.1程序的三种基本结构顺序结构N-S结构图流程图ABAB选择结构YNABP成立?PTFAB2020/1/21程序的三种基本结构(续)循环结构NYP成立?A当P成立时A直到型循环A当P成立时YNAP成立?当型循环N-S结构图流程图2020/1/213.2.2C语言的语句类型主要内容:–说明性语句–简单语句(表达式语句)–特殊语句–流程控制语句2020/1/211说明性语句对程序中使用的变量、数组、函数等操作对象进行定义、声明的描述语句只起说明作用,不产生可执行的机器指令代码。例如:inta,b;floatfunction(int,int);C程序由函数组成。函数的格式:函数名(参数表){说明部分;执行部分;}数据类型说明语句可执行语句2020/1/21表达式后面加一个分号,构成表达式语句x=3;y=y+5;x=a-b&&c||d;printf(x=%d,y=%d\n,x,y);sort(a,10);2简单语句(表达式语句)赋值语句函数调用语句注意:①分号是语句必不可少的一部分②单独的一个分号“;”构成一个空语句例如:;(空语句,是最简单的C语句)2020/1/213特殊语句(复合语句、空语句、注释)用一对花括号“{}”括起来的若干条语句花括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句例如:⑴if(ab){max=a;min=b;}⑵for(n=1;n10;n++){p=n+p;if(p=100){printf(“%d\n”,p);break;}}2020/1/213特殊语句(复合语句)复合语句中如果有说明性语句,应该写在可执行语句的前面例如:main(){inta,b;a=b=100;{floatc=10.23;printf(%f\n,c);}printf(%d%d\n,a,b);}要特别注意:花括号的配对花括号的位置C语言学习的难点之一2020/1/214流程控制语句包括9种控制语句1.选择分支控制语句if()…else…switch(){…}2.循环控制语句for()…while()…do…while()3.其他控制语句break、continue、gotoreturn2020/1/213.3数据的输入与输出主要内容:–格式输出函数–格式输入函数2020/1/213.3.1格式输出函数函数调用的一般形式printf(格式控制字符串,参数2,…,参数n)功能:按格式控制所指定的格式,在标准输出设备上输出参数2、…、参数n的值。例如有程序段:inta=123,b=100;printf(%d%d%d\n,a,b,a+b);printf(c=%d+%d=%d\n,a,b,a+b);2020/1/21格式控制用双引号括起的字符串,用于指定输出数据的类型、格式、个数包括:普通字符和格式说明符照原样输出printf(c=%d+%d=%d\n,a,b,a+b);格式说明符:指定输出3个十进制整型数,分别为变量a、b、a+b的值2020/1/21输出格式说明符整型数据%d以有符号十进制形式输出整型数%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数%u以无符号十进制形式输出整型数实型数据%f以小数形式输出实型数%e以指数形式输出实型数%g按数值宽度最小的形式输出实型数字符型数据%c输出一个字符%s输出字符串其他%%输出字符%本身在%和格式符之间可以使用附加说明符2020/1/21附加格式说明符l输出长整型数(只可与d、o、x、u结合用)m指定数据输出的宽度(即域宽).n对实型数据,指定输出n位小数;对字符串,指定左端截取n个字符输出+使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出整数位数+小数位数+小数点自动对n位后小数四舍五入例如:%ld——输出十进制长整型数%m.nf——右对齐,m位域宽,n位小数或n个字符%-m.nf——左对齐2020/1/21例1整型数据的输出main(){inta=11,b=22;intm=-1;longn=123456789;printf(%d%d\n,a,b);printf(a=%d,b=%d\n,a,b);printf(m:%d,%o,%x,%u\n,m,m,m,m);printf(n=%d\n,n);printf(n=%ld\n,n);}程序输出:1122a=11,b=22m:-1,177777,ffff,65535n=-13035n=1234567892020/1/21例2实型数据的输出main(){floatx=1234.56,y=1.23456789;doublez=1234567.123456789;printf(x=%f,y=%f\n,x,y);printf(z=%f\n,z);printf(z=%e\n,z);printf(z=%g\n,z);printf(z=%18.8f\n,z);printf(x=%10.3f\n,x);printf(x=%-10.3f\n,x);printf(x=%4.3f\n\n,x);}程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234570z=1234567.12345679x=1234.560x=1234.560x=1234.5602020/1/21例3字符型数据的输出main(){intm=97;charch='B';printf(m:%d%c\n,m,m);printf(ch:%d%c\n,ch,ch);printf(%s\n,student);printf(%10s\n,student);printf(%-10s\n,student);printf(%10.3s\n,student);printf(%.3s\n\n,student);}程序输出:m:97ach:66Bstudentstudentstudentstustu2020/1/21注意:printf函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应。格式说明符的%和后面的描述符之间不能有空格。除%X、%E、%G外类型描述符必须是小写字母。长整型数应该用%ld(或%lo、%lx、%lu)格式输出,否则会出现输出错误。printf函数的参数可以是常量、变量或表达式。在计算各参数值时,TurboC采用从右至左的顺序求值。2020/1/213.3.2格式输入函数函数调用的一般形式scanf(格式控制,地址参数2…,地址参数n);功能:按格式控制指定的格式,从标准输入设备(即键盘)交互输入数据,并依次存放到对应地址参数指定的变量中(即将输入值赋给变量)。例如:scanf(%d%f,&a,&f);scanf(%o,%f,&b,&x);scanf(a=%d,b=%d,&a,&b);2020/1/21格式控制用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式包括:普通字符和格式说明符照原样输入scanf(a=%d,b=%d,&a,&b);格式说明符:指定输入2个十进制整型数赋给变量a和b2020/1/21输入格式说明符整型数据%d输入十进制整型数%u输入无符号的十进制整型数%o输入八进制整型数%x输入十六进制整型数实型数据%f输入小数形式的单精度实型数%e输入指数形式的单精度实型数字符型数据%c输入单个字符%s输入一个字符串在%和格式符之间可以使用附加说明符2020/1/21附加格式说明符l与d、o、x、u结合输入长整型数与f结合输入double型数m指定数据输入的宽度(即域宽)*忽略读入的数据(即不将读入数据赋给相应变量)例如:%ld、%lo——输入十进制、八进制长整型数%lf、%le——输入双精度实型数%mf——输入m位数(域宽)%*d——忽略输入的一个整型数对float和double型指整数位数+小数点+小数位数2020/1/21例如:scanf(%d%d%d,&a,&b,&c);输入3个整型十进制数,以空白符(空格、tab键或回车键)分隔scanf(%d,%o,%f,&a,&b,&x);输入3个数,以“,”分隔scanf(a=%d,b=%d,&a,&b);输入的形式是:a=32,b=28(普通字符要照原样输入)2020/1/21程序:main(){inta,b,c;longm;floatx;doubley;charch,string[20];printf(inputa,b,c,m:);scanf(%d%o%x%ld,&a,&b,&c,&m);printf(a=%d,b=%d,c=%d,m=%ld\n,a,b,c,m);printf(inputx,y:);scanf(“%f%lf”,&x,&y);getchar();/*去掉回车*/printf(x=%f,y=%f\n,x,y);printf(inputch,string:);scanf(%c%s,&ch,string);printf(ch=%c,string=%s\n\n,ch,string);}2020/1/21使用scanf函数应注意:要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。地址参数形式:&变量名(除数组或指针变量)格式控制中有普通字符时,必须照原样输入。格式控制中无普通字符时,输入的数值型数据和字符串用空白符分隔,字符型数据不必分隔。double型数据输入时,必须用%lf或%le格式实型数输入时域宽不能用m.n形式的附加说明为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现普通字符,也不要使用'\n'、'\t'等转义字符2020/1/21scanf(%c%c%c,&ch1,&ch2,&ch3);要输入:abc不能输入:abc注意数值型数据与char型数据的混合输入注意(续):格式符之间若无普通字符,则:–输入的数值型数据用空白符分隔–输入的char型数据不必分隔例如:scanf(%d%d,&m,&n);scanf(%c,&ch);错误输入:3228a正确输入:3228a2020/1/213.3.3字符输入输出函数主要内容:–字符输出函数–字符输入函数2020/1/211字符输出函数函数调用的一般形式putchar(ch)功能:–在标准输出设备(即显示器屏幕)上输出一个字符。例如:putchar('b');putchar('\n');putchar('\101');putchar(st);2020/1/21说明putchar是C语言的标准库函数,使用时必须加编译预处理命令:#includestdio.h或#includestdio.h【例3.1】利用putchar函数输出字符。#includestdio.hmain(){charc1,c2;c1='a';c2='b';putch