《C 语言教程3.ppt》由会员分享,可在线阅读,更多相关《C 语言教程3.ppt(20页珍藏版)》请在三一办公上搜索。
1、C 语 言 教 程-3,回顾,上一次介绍了Scanf和printf这两个格式输入函数和格式输出函数。要满足人们对格式输入和输出的要求,就需要在程序中对这两个函数在括号中的(“格式控制串”,参数表)赋以不同的内容。通过显示名片这个练习程序,我们初步认识并熟悉这两个函数的使用方法。下面再以示范程序打印奖状来详细介绍输入与输出函数的使用方法及程序编制过程中的分析方法。,程序要求:系统提示输入学生的姓名和得奖等级,用户输入这些内容之后,系统打印出这张奖状。程序流程分析:在拿到这道题目之后,我们分析得出程序的流程应该是:系统提示要求用户姓名用户输入姓名系统提示要求得奖等级用户输入等级系统根据输入的变量值
2、,输出奖状,示范程序:打印奖状,数据分析:这个程序我们其实只用到两个变量:一个变量用于储存用户的姓名,它应该是字符串数据;另一个变量用于储存用户的得奖等级,它应该是整数。输出要求:因为我们总希望打印出来的奖状是整齐的,所以我们在输出语句的格式控制串中要用到特殊的控制格式来固定姓名的显示长度和得奖等级的显示程度。以上我们提供了一种对编程要求进行分析的方法,希望在碰到具体问题时,大家能够灵活运用这种分析方法,在今后的大型编程中,大家会发现编程前的分析和准备工作是必不可少的,这会大大加快之后的编程效率,和减少一些不必要的错误。,打印奖状源代码,main()char*name;int grade;pr
3、intf(Please input your name:);scanf(“%s”,name);printf(“n”);printf(Please input your grade(1-3):);scanf(%d,这是主函数,也就是一个C程序开始执行的地方,这里加上*号表示字符串变量,存放名字。,这是一个整形变量,存放得奖等级。,使用取字符串s格式取得从鍵盘输入的字符时,不要加上&只列出字符串变量名。,scanf 的参数列表,取得从鍵盘输入的数字,必须要加上&。,打印奖状源代码(接前),printf(Your diplomat is:nn);printf(+-+n);printf(|n);pri
4、ntf(|Name:%-18s|n,name);printf(|n);printf(|Grade:%3d|n,grade);printf(|n);printf(+-+n);,%格式控制符中的数字限定变量的显示长度。当它为负值时,表示显示时是左对齐,否则就是右对齐。,探索1 试着运行这段程序,认真看一下还有什么奇怪的现象,特别是在输出显示后!可以与同伴探讨一下,并作出改进。,前面打印奖状的程序,在输入名字中不能带空格,不然不仅只能显示空格前的字符,而且还会将錯误连带到下一输入中。这是什么原因呢?这是因为scanf()函数将空格和逗号用在接受多个输入时的分隔符,所以当遇到空格就会再去匹配下一个输入
5、变量。需要输入带空格的字符串时,我们可以用接受字符串输入的函数gets()。将原来scanf(“%s”,name);修改为:gets(name);表示从鍵盘输入一个字符串赋给name,这个字符串以”回车”结束。相对应的输出字符串的函数,那就是 puts()。如:puts(name);就可以替代printf(“%s”,name);将字符串显示在屏幕上。,讨论:,条件语句:根据条件成立与否,决定做不同的事。if(条件)条件成立时做什么;else 条件不成立时做什么;C语言中表示条件,一般用关系表达式或逻辑表达式。所谓“关系表达式”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给
6、定的关系。例如:if(ab)printf(“First:%d”,a);“ab”中的“”表示一个大于关系运算。如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成立即显示出First:5执行其后;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。C语言提供6种关系运算符:(大于),!=(不等于)=(大于或等于),=(等于),注意:“等于”关系运算符是双等号“=”,而不是等号“=”(赋值运符)。,教 学,例1 输入两个整数a与b,输出其中的大数。main()int a,b;printf(“Please input two numbers:”);scanf
7、(“%d%d“,探索3 再增加一个数,现在是输入a、b、c三个的整数用数据直接比较的方法,显示最大的一个数。补充完善下面的程序。main()int a,b,c;printf(“Please input three numbers:”);scanf(“%d%d%d“,在探索3中遇到了if语句中的执行语句又是if语句的情形,这就是if 语句的嵌套。在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例2:输入一个整数,将其按小于10,10-99,100-999,1000以上分类显示.例如输入456则显示:456 is 1
8、00 to 1000.main()int a;scanf(“%d”,请你仔细分辩,其中每一个else究竟是与哪一个if 配对呢?,if语句的嵌套,上一题的显示结果告诉我们:else总是与前面最近的一个if语句匹配。为了使程序便于阅读理解。在一般情况下较少使用if语句层层嵌套结构。在需要判别多条件的情形下,可以使用如下阶梯式 if-else if 的结构:if(条件1)语句1;else if(条件2)语句2;else if(条件3)语句3;:探索4 将前面整数分类显示的程序改用阶梯式 if-else if 的结构再重写 一下。,c301从键盘上输入三个整数a、b、c,比较后输出显示中位数,如输入
9、a=3,b=8,c=5 则显示中位数为:c=5。c302从键盘上输入三个整数a、b、c,比较后按照从大到小的顺序输出显示a,b,c三个数,如输入a=3,b=8,c=5 则显示为:a=8 b=5 c=3。c303 从键盘上输入某年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。*c304从键盘上输入三角形的三条边长,用海伦公式求三角形的面积。求面积公式 area=s*(s-a)*(s-b)*(s-c)其中:s=(a+b+c)/2下面示例使用求平方根的 sqrt()函数:#include#include main()float a,b,
10、c,s,area;scanf(“%f%f%f”,:请增加判断输入的三个数能组成一个三角形才计算,不然则显示“Data error!”,练习题-3,printf函数格式字符串,if语句的三种形式1.第一种形式为基本形式:if形式 if(表达式)语句其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。【例】main()int a,b,max;printf(n input two numbers:);scanf(%d%d,本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后
11、输出max的值。,自学指导_3 if语句的三种形式,2.第二种形式为:if-else形式if(表达式)语句1;else 语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2。其执行过程可表示为下图。【例】main()int a,b;printf(input two numbers:);scanf(%d%d,输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。,自学指导_3 if语句的三种形式,3.第三种形式为 if-else-if形式前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其
12、一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式m)语句m;else 语句n;其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,自学指导_3 if语句的三种形式,4.在使用if语句中还应注意以下问题:1)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允
13、许的。只要表达式的值为非0,即为“真”。如在:if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。又如,有程序段:if(a=b)printf(%d,a);else printf(a=0);本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加
14、分号。例如:if(ab)a+;b+;elsea=0;b=10;,自学指导_3 if语句的三种形式,4.在使用if语句中还应注意以下问题:1)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在:if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。又如,有程序段:if(a=b)printf(%d,a);else printf(a=0);本语
15、句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。例如:if(ab)a+;b+;elsea=0;b=10;,自学指导_3 if语句的三种形式,if语句的嵌套当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:if(表达式)if语句;或者为 if(表达式)if语句;else if语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如:if(a!=b)if(ab)printf(“ab“);else printf(“a=%d b=%dn”,a,b);其中的else究竟是与哪一个if配对呢?若a与b相同时程序显示什么?,自学指导_3 if语句的三种形式,为了避免这种二义性,语言规定,else 总是与它前面最近的if配对,因此对上述例子中当a与b相等时是不执行printf(“a=%d b=%dn”,a,b);这一输出显示语句。,自学指导_3 if语句的三种形式,