第3章C程序设计初步计算机基础教研室第3章C程序设计初步3.1算法:解决问题的步骤3.2结构化程序设计方法简介顺序结构选择结构循环结构3.1算法描述自然语言表示计算n!(1)定义变量i,n,fact,分别保存循环变量,n,阶乘结果(2)i=2;fact=1;赋初值(3)使factfact*i(4)i自增1:ii+1(5)判断i是否大于n,若是执行第6步,否则执行第3步(6)停止,输出fact。优点:使用日常用语,通俗易懂缺点:文字冗长,容易出现歧义3.1算法描述传统流程图表示起止框处理框输入输出框判断框连接点注释框常用流程图符号开始1=fact2=ifact*i=facti+1=iin结束N流程线Y3.1算法描述用N-S流程图表示ABAB成立不成立PA当P成立直到P成立A顺序结构选择结构循环结构3.3C语言语句分类表达式语句函数调用语句控制语句复合语句空语句3.4数据的输入输出C语言函数库提供的输入输出函数printf(格式输出)scanf(格式输入)putchar(输出字符)getchar(输入字符)3.4数据的输入输出需要的头文件:#includestdio.h或写成#include“stdio.h”include和库函数之间可以加空格,也可不加3.4.1printf函数(格式输出)printf调用一般形式:printf(“格式控制字符串”,输出列表)输出字符串:printf(“字符串”)以整型格式输出数据x:printf(“%d”,x)以实型格式输出数据x:printf(“%f”,x)以字符格式输出数据x:printf(“%c”,x)3.4.1printf函数(格式输出)输出多个数据格式:printf(“%d%d%d”,x,y,z)printf(“%f,%f,%d”,x,y,z)printf(“x=%f,y=%f,z=%d”,x,y,z)3.4.1printf函数(格式输出)printf(“格式控制字符串”,输出列表)输出表列输出的数据,多个数据输出时,数据之间用逗号隔开格式控制字符串:格式说明:%[修饰符]格式字符,用于指定输出格式(表3.1)普通字符或转义序列,原样输出3.4.1printf函数(格式输出)d格式:用来输出十进制整数。有以下几种用法:%d:按整型数据的实际长度输出。%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。%-md:同上,区别是:右端补以空格3.4.1printf函数(格式输出)例:输出数字矩阵3.4.1printf函数(格式输出)%ld:输出长整型long数据:注意事项:%ld在vc环境下和%d没有区别,在TurboC下用%d输出long类型数据会发生溢出错误。使用%d输出浮点型数据,会输出一个无效数字。使用%f输出整型数据,也是如此。3.4.1printf函数(格式输出)o格式:以无符号八进制形式输出整数。对长整型可以用“%lo”格式输出。同样也可以指定字段宽度用“%mo”和“%-mo”格式输出。例:main(){inta=-1;printf(%d,%o,a,a);}运行结果:-1,177777程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。3.4.1printf函数(格式输出)x格式:以无符号十六进制形式输出整数。对长整型可以用“%lx”格式输出。同样也可以指定字段宽度用“%mx”和“%-mx”格式输出。u格式:以无符号十进制形式输出整数。对长整型可以用“%lu”格式输出。同样也可以指定字段宽度用“%mu”和“%-mu”格式输出。3.4.1printf函数(格式输出)#:用于输出八进制和十六进制,在输出的数字之前加入字符0x或0例:分别使用不同的格式输出数字124:%o,%x,%6o,%6x,%#6o,%#x,%07x,%#08x3.4.1printf函数(格式输出)f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:%f:不指定宽度,整数部分全部输出并输出6位小数。%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。3.4.1printf函数(格式输出)e格式:以指数形式输出实数。可用以下形式:%e:数字部分(又称尾数)输出6位小数%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。3.4.1printf函数(格式输出)例:用下面的输出格式输出小数123.45678%f,%g,%e,%5.4f,%14.3e3.4.1printf函数(格式输出)c格式:输出一个字符。s格式:用来输出一个串。有几中用法:%s:例如:printf(“%s”,“CHINA”)输出“CHINA”字符串(不包括双引号)。%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。3.4.1printf函数(格式输出)关于printf函数的进一步说明:如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,如:printf(%f%%,1.0/3);输出0.333333%。3.4.1printf函数(格式输出)printf小结m:输出字符最小宽度,超出该宽度按原来宽度输出n:用于小数或字符串输出,小数输出时n为小数位数,字符输出时为截取的字符个数-:输出的字符靠左对齐l:用在d,o,x,u之前为输出长整型long,用在e,f,g之前为输出double型0:输出数值,左侧不足补以0#:输出八进制或十六进制,输出符号0或0x+:输出数值,正数带+号,负数带-号3.4.1printf函数(格式输出)printf小结除了X,E,G外,其他字符不能大写。例如%d不能写成%D,%f不能写成%F3.4.1printf函数(格式输出)格式符含义输出数据类型%d十进制整数int,short,char%f十进制小数float%o八进制整数int,short%x十六进制整数int,short%c单个字符char,int,short%e十进制科学小数float%ld十进制长整型long%lf十进制小数double%le十进制科学小数double%lo八进制整数long%lx十六进制整数long3.4.1printf函数(格式输出)练习:若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=56753,n=1232445,c1=‘a’,c2=‘b’.想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)要求输出结果如下:a=□3□□b=□4□□c=□5x=1.200000,y=2.400000,z=-3.600000x+y=□3.60□□y+z=-1.20□□z+x=-2.40u=□56753□□n=□□□1232445c1=‘a’□or□97(ASCII)c2=‘b’□or□98(ASCII)3.4.2scanf函数(格式输入)函数调用一般格式:scanf(“格式控制字符串”,地址列表)格式控制字符串:同printf()地址列表:例:将输入的值赋给int变量a,地址列表中需要写成:scanf(“%d”,&a);3.4.2scanf函数(格式输入)格式控制字符:%d:输入十进制整数%f:输入十进制小数:可以输入小数、指数%e,%g:同%f%x,%X:输入十六进制数,x和X没有区别%o,%O:输入八进制整数,o和O没区别%u:输入一个无符号十进制整数3.4.2scanf函数(格式输入)格式控制字符:l:加在d,o,x之前,输入精度为long加在e,f之前,输入精度为doublem:指定输入宽度h:用于d,o,x之前,指定输入short类型3.4.2scanf函数(格式输入)例1.#includestdio.hmain(){inta,b,c;scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%d\n,a,b,c);}3.4.2scanf函数(格式输入)例1.运行时按如下方式输入三个值:3□4□5↙(输入a,b,c的值)3,4,5(printf输出的a,b,c的值)(1)&a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。(2)%d%d%d是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。以下是合法输入方式:①3□□4□□□□5↙②3↙4□5↙③3(tab键)4↙5↙3.4.2scanf函数(格式输入)scanf(%d,%d,%d,&a,&b,&c);运行时按如下方式输入三个值:3,4,5↙(输入a,b,c的值)或者3,□4,□5↙(输入a,b,c的值)3,□□□4,□5↙(输入a,b,c的值)......都是合法的,但是“,”一定要跟在数字后面,如:3□,4,□5↙就非法了,程序出错。非法输入:3↙4↙的,程序输出无效字符。3.4.2scanf函数(格式输入)在用%c输入时,空格和“转义字符”均作为有效字符。例:scanf(%c%c%c,&c1,&c2,&c3);输入:a□b□c↙结果:a→c1,□→c2,b→c3(其余被丢弃)3.4.3字符输入输出函数putchar(字符数据):只能输出单个字符字符数据包括:字符常量字符变量整型变量例:putchar(‘A’);putchar(45);charc=‘b’;putchar(c);3.4.3字符输入输出函数getchar():输入单个字符例:charc;c=getchar();putchar(c);输入输出小结printf():int-%dchar-%cfloat-%flong-%lddouble-%lf指数-%escanf():格式同上地址符&putchar():输出单个字符getchar():输入单个字符3.5顺序程序设计执行程序时,按程序语句从上之下执行每一条语句。第一条语句第二条语句第n条语句……顺序结构程序实例例3.8:输入两个实数,分别保存在x,y中,输出,然后交换x,y的值,再输出。例3.7:输入两个整数,求它们的和并输出。3.5顺序程序设计例3.9:从键盘上输入一个3位整数,要求正确分离出它的个位、十位、百位,分别在屏幕上输出。例3.10:从键盘输入一元二次方程的三个系数a,b,c,求ax2+bx+c=0的解。