资源描述
,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,机电工程系,*,C,语言程序设计,程序与时代,机电工程系,2015,年,9,月,20,日,7,时,01,分,我国新型运载火箭长征六号在太原卫星发射中心点火发射,成功将,20,颗微小卫星送入太空。,程序与时代,机电工程系,自动化生产线设备是典型的机电一体化产品,自动线设备的安装调试、检测维护及运行管理是机电类相关技术的典型职业范畴。,程序与时代,机电工程系,程序与时代,机电工程系,程序与时代,机电工程系,机电工程系,程序与时代,程序与时代,机电工程系,项目一 学生成绩的初步统计技术,机电工程系,项目要求,输入三个学生的成绩,求他们的总分及平均分。,项目分析,第一必须要学会输入成绩及输出结果;,第二必须对输入的成绩进行总分及平均分的计算。,所以,将这一项目分成二个任务介绍。,要注重解决问题的思路,任务,1,学生成绩的输入、输出,一、任务提出,一个班进行了一次考试,现要将几个学生的成绩输入电脑,并按要求输出。,二、具体实现,#include stdio.h /,文件预处理,main() /,函数名, /,函数体开始,int x,y,z; /,定义三个变量,x,y,z,printf(,请输入三个学生的成绩,);,scanf(%d%d%d, /*,输入三个学生的成绩*,/,printf(,输出三个学生的成绩,);,printf(x=%d,y=%d,z=%dn,x,y,z); /,输出三个变量,x,y,z,的值, /,函数体结束,程序运行结果:,机电工程系,从上面这段程序可分析出:,首先,要了解,C,语言的结构;,第二,要了解,C,语言的运行环境;,第三,要懂得如何定义变量,输入输出语句。,相关知识,1,、,C,语言源程序的结构,机电工程系,#include “stdio.h”,int x,y;,main( ),x=1;,y=x+2;,printf(“x=%dny=%dn”,x,y);,文件预处理,主函数,数据声明部分,语句部分,2,、,C,程序运行环境及运行方法,点击,【,文件,】【,新建,】,,出现的对话框中用鼠标点击,【,文件,】【C+Source File】,,然后更改文件所保存的目录(若需要更改),需入文件名,然后点击,【,确定,】,。输入程序。当程序输入完毕后,点击 或按,F7,,进行编译和连接。如果没有错误,点击 或按,Ctrl+F5,,进行运行,就能得出程序运行的结果。,机电工程系,相关知识,2,、,C,程序运行环境及运行方法,点击,【,文件,】【,新建,】,,自动进入新建状态。输入,C,语言源程序,当程序输入完毕后,点击,【,文件,】【,保存,】,,然后更改文件所保存的目录(若需要更改),需入文件名“,.c”,,然后点击,【,保存,】,。 或按,F11,,进行编译。如果没有错误,点击 或按,F5,,进行连接和运行,就能得出程序运行的结果。,机电工程系,相关知识,3,、 数据类型,机电工程系,相关知识,数据类型,基本类型,构造类型,指针类型,空类型,void,引用类型,整型,浮点型,字符型(,char,),枚举型(,enum,),数组类型,结构类型(,struct,),共用类型(,union,),短整型(,short int,),整型(,int,),长整型(,long int,),单精度(,float,),双精度(,double,),长双精度(,long double,),不同类型数据所占空间大小,名称,字节数*,描述,范围*,char,1,字符(,character,)或整数(,integer,),,8,位(,bits,)长,有符号(,signed,),:,-128,到,127,无符号(,unsigned,),:,0,到,255,short int (short),2,短整数(,integer,),16,位(,bits,)长,有符号(,signed,),:,-32768,到,32767,无符号(,unsigned,),:,0,到,65535,long int (long),4,长整数(,integer,),32,位(,bits,)长,有符号(,signed,),:,-2147483648,到,2147483647,无符号(,unsigned,),:,0,到,4294967295,int,4,整数(,integer,),有符号,(signed):,-2147483648,到,2147483647,无符号(,unsigned):,0,到,4294967295,float,4,浮点数(,floating point number,),3.4e + / - 38,(,7,个数字(,7digits,),double,8,双精度浮点数(,double precision floating point number,),1.7e + / - 308 (15 digits),long double,8,长双精度浮点数(,long double precision floating point number,),1.7e + / - 308 (15 digits),bool,1,布尔,Boolean,值。它只能是真,(true),或假,(false),两值之一。,true,或,false,wchar_t,2,宽字符,(Wide character),。这是为存储两字节,(2 bytes),长的国际字符而设计的类型。,一个宽字符(,1 wide characters,),机电工程系,相关知识,3,、 数据类型,C,语言的数据形式:(常量和变量),机电工程系,【,常量,】,在程序运行中,其值不能被改变的量称为常量。,常量可分为:,整型常量。例,1,,,23,,,-8,。,实型常量。例,1.23,,,-9.8,,,.123,,,23.,,,0.0,,,2.23e-4,(表示,2.2310-4,),,0.23e3(,表示,0.23103),,,0.23E-3(,表示,0.2310-3),,,1.23E3(,表示,1.23103),。,字符常量。例 ,A,,,+,,,8,。,符号常量。例,#define PI 3.14,。则,PI,是一个符号常量,其值为,3.14,,,它不能在程序中被改变。(请见任务三中的例,1-15,改),【,变量,】,所谓变量就是在程序运行过程中,其值可以被改变的量。,一个变量由两个要素组成。即变量名和变量值。,变量名:每一个变量都必须有一个名字,即变量名。变量名的命名规则:,由字母或下划线开头,后面跟字母、数字和下划线。其有效长度,随系,统而异,但至少前,8,个字符有效。如果超长,则超长部分被舍弃。,C,语言的变量名区分大小写。,即同一字母的大小写,被认为给是两个不同的变量。,例,Total,、,total,、,toTal,是不同的变量名。,给变量名命名时,最好遵循“见名知意”这一基本原则。,例如,,name/xm(,姓名,),、,sex/xb(,性别,),、,age/nl(,年龄,),、,salary/gz(,工资,),。,【,变量定义与初始化,】,数据类型 变量名,=,初值,变量名,2=,初值,2;,例如:,int x=1,y=2,z=3;,float a=1.1,b=1.2,c=-0.1;,char ch1=A,ch2=*;,相关知识,(1),标识符只能由下划线、数字,09,与大小写字母,az,,,AZ,构成。,Turbo C,最多识别由,32,个字符组成的标识符,,Microsoft C,最多识别由,8,个字符组成的标识符。,(2),标识符的首个字符必须是字母或下划线,而不能是数字或其它符号。,(3) C,语言中大小写字母是敏感的,即在标识符中,大写字母和小写字母代表不同的意义。例如:,Name,和,name,是两个不同的标识符。,(4),不允许重名;,(5),系统预定义标识符,如预编译命令名,(define,、,include),、系统函数名,(scanf,、,printf,、,getchar,、,putchar),等可作为用户标识符,但建议不作它用。,(6),尽量作到“见名知义”,例如,max,、,score,等,而不用象,abc,、,x1,、,y2,等标识符。,(7),避免使用易混字符,如,1,、,l,、,i,;,0,、,o,;,2,、,z,等。,(8),先定义,后使用;,机电工程系,相关知识,关于变量的命名规则:,(,9,)一般要初始化,格式为:,int i=1,,,j=2,;,(,10,),C,语言中没有设置专门的变量来存放字符串,字符串如果要存放在变量中,要用字符数组来存放,(,11,)标识符不能使用系统的关键字,因为关键字是系统保留的,它们已有特定的含义。,ANSI C,定义的关键字共,32,个:,auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static,机电工程系,相关知识,关于变量的命名规则:,4,、 格式化输出,printf(),函数,printf(),函数的一般格式,printf(“,格式字符串”,输出项表,);,1.,常用的格式字符串有:,(1),格式指示符:,%d,带符号十进制整数。,%f,带符号十进制小数形式(默认,6,位小数)。,%c,输出一个字符。,(2),转义字符,例,1-1,中的,printf(),函数中的”,n”,就是转义字符,输出时产生一个“换行”。,(3),普通字符除格式指示符和转义字符之外的其它字符。例,1-1,中的,printf(“x=%d,y=%d,z=%dn”,x,y,z);,的“,x=”,、“,y=”,、“,z=”,格式字符串中的普通字符,原样输出。在汉字系统环境下,允许使用汉字。,2.,输出项表,输出项表是可选的。在输出项中,列出要输出的任意类型的数据。如果要输出的数据不止一个,相邻,2,个之间用逗号分开。,机电工程系,(,1,),printf(“,我是一个学生,n”);,/,没有输出项,(,2,),printf(“%d”,1+2);,/,输出,1+2,的值,(,3,),printf(“a=%d b=%dn”,1,1+3);,/,输出,1,的值和,1+3,的值,注意:,printf(“%d %fn”,1.212,5) ;,是错误的。,#include “stdio.h”,main(),printf(“%d %fn”,1.234,6);,相关知识,【,例,1-3】,格式化输出。,#include stdio.h,main(),int x=1,y=2,z=3; /*,定义,x,y,z,三个整型变量,并将它们的初值赋为,1,2,3*/,float a=1.1,b=2.3;,char c1=A,c2=B; /*,定义,c1,c2,二个字符型变量,并将它们的初值赋为,A,和,B*/,printf(,输出,x,y,z,的值,n); /,原样,输出,x,y,z,的值,后换行,printf(x=%d,y=%d,z=%dn,x,y,z); /,输出,x=1,y=2,z=3,后换行,printf(,输出,a,b,的值,n);,printf(a=%f,b=%fn,a,b);,printf(,输出,c1,c2,的值,n);,printf(c1=%c,c2=%cn,c1,c2); /,输出,c1=A,,,c2=B,后换行,程序的运行结果为:,机电工程系,相关知识,1,、什么情况下加分号,什么情况下不加;,2,、分号是在英文半角状态下输入;,3,、分号错误会有什么样的提示;,4,、函数库也就是函数的集合,是别人把一些常用到的函数编完放到一个文件里,供程序员使用。同时把函数的接口放到头文件中。程序员用的时候把相应的头文件用,#include,加到程序里面就可以了(尖括号内填写文件名),例如,#include,。这样在链接的过程中,链接器就能顺藤摸瓜找到头文件再找到,printf,所在的库函数,将其源代码写到程序中,以备将来调用。所以说头文件是用户应用程序和函数库之间的桥梁和纽带。,5,、,include,语句后面如果是尖括号,表示在默认的安装目录中查找头文件;如果是双引号,认为是用户定义的,寻找速度较慢。,机电工程系,相关知识,注意:,机电工程系,常用的头文件如下图所示,一般放在安装文件夹中,常用的头文件如下图所示,一般放在安装文件夹中,5,、格式化输入,scanf(),函数,1. scanf(),函数的功能:从键盘上接收格式化输入。,2. scanf(),函数的一般格式:,scanf(“,格式字符串”,输入项首地址表,);,格式字符串。格式字符串可以包含,3,种类型的字符:格式字符,空白字符(空格、,Tab,键和回车键)和非空白字符(又称普通字符)。,格式指示符与,printf(),函数的相似:,%d,,十进制带符号的整型数;,%f,,十进制带符号的实型数;,%c,,输入一个字符。,空白字符作为相邻,2,个输入数据的缺省分隔符。,非空白字符在输入数据时,必须原样一起输入。,输入项首地址表由若干个输入项首地址组成,相邻,2,个输入项地址之间用逗号分开。变量首地址的表示方法如下:,&,变量名,其中“,&”,是地址运算符。例如,在例,1-1,中,scanf(“%d%d%d”,&x,&y,&z),中的“,&x”,是指变量,x,在内存中的首地址。其功能是从键盘上输入,3,个整型数,分别存入,&x,,,&y,,,&z,起始的存储单元中,即输入三个整数分别赋给,x,,,y,,,z,。,机电工程系,scanf(“%d,%d”,scanf(“%d%d”,例,1-4,有两个人,A,,,B,,在数学考试中获得,87,和,76,的成绩,请输入,A,,,B,两人的代号及成绩,输出成绩。,分析:此题就是考查输入输出语句,注意整数输入,/,输入的格式用,%d,,字符变量的输入,/,输出格式用,%c,,同时注意输入语句中的两个数据之间用什么符号隔开,则在程序运行输入数据时也要用同样的符号隔开两个数据。,机电工程系,#include stdio.h,main(),char c1,c2;,int x,y;,printf(,请输入,A,的成绩及代号:,);,scanf(%d:%c,printf(,请输入,B,的成绩及代号:,);,scanf(%d:%c,printf(,输出,A,的代号及成绩:,);,printf(%c:%dn,c1,x);,printf(,输出,B,的代号及成绩:,);,printf(%c:%dn,c2,y);,程序运行结果为:,相关知识,知识扩展,1.,转义字符,已经提到“,n”,的转义字符,是换行。,常用的转义字符还有“,t”,,即横向跳出下一个输出区。,【,例,1-5】,用转义字符控制输出效果。,#include stdio.h,main(),printf(%dt%dt%dn”,1,2,3);,程序运行结果如图所示,机电工程系,知识扩展,n,换行符,newline,r,回车,carriage return,t,跳跃符,tabulation,v,垂直跳跃,vertical tabulation,b,backspace,f,page feed,a,警告,alert (beep),单引号,single quotes (),双引号,double quotes (),?,问号,question (?),反斜杠,inverted slash (),机电工程系,另外可以数字,ASCII,码表示一个字符,这种表示方式是在反斜杠,(),之后加以,8,进制数或十六进制数表示的,ASCII,码。,在第一种(八进制,octal,)表示中,数字必需紧跟反斜杠,(,例如,23,或,40,),。,第二种,(,十六进制,hexacedimal),,必须在数字之前写一个,x,字符,(,例如,x20,或,x4A,),。,知识扩展,2,格式化输出,前面,已经学过输出语句的一般格式为:,printf(“,格式字符串”,输出项表,);,常用的格式字符串表示法如下:,“,%5d”,表示输出十进制带符号的整数,其输出域的宽度为,5,位,若数超长,则按实际宽度输出;若不足,则输出数的左端补空格。“,%ld”,只是表示输出的是长整型。,“,%-5d”,表示输出十进制带符号的整数,其输出域的宽度为,5,位,若数超长,则按实际宽度输出;若不足,则输出数的右端补空格。,“,%6.1f”,表示输出十进制带符号的单、双精度实数,其输出域的宽度为,6,位,其中小数一位,若数超长,则按实际宽度输出;若不足,则输出数的左端补空格。,“,%-7.2f”,表示输出十进制带符号的单、双精度实数,其输出域的宽度为,7,位,其中小数,2,位,若数超长,则按实际宽度输出;若不足,则输出数的右端补空格。,机电工程系,【,例,1-6】,类型转换字符,d,的使用。,机电工程系,#include ,main(),int a=123;,long b=123456;,/*,用四种不同格式,输出,int,型数据,a,的值*,/,printf(a=%d,a=%5d,a=%-5d,a=%2dn,a,a,a,a);,/*,用四种不同格式,输出,long,型数据,b,的值*,/,printf(b=%ld,b=%8ld,b=%-8ld,b=%2ldn,b,b,b,b);,printf(a=%ldn,a); /,用,%ld,输出,int,型数据,a,printf(b=%dn,b); /,用,%d,输出,long,型数据,b,程序的运行结果如图所示。,知识扩展,知识扩展,机电工程系,分析:,a=%d,,按实际长度输出,123,。,a=%5d,,由于,123,只占,3,列,所以前面空二个空格,输出,a=123,。,a=%-5d,,由于,123,只占,3,列,同时有一个“,-”,号,所以右面空二个空格,输 出,a=123,。,a=%2d,,由于,123,占,3,列,所以按实际宽度输出。即输出,a=123,。,b=%ld,,按实际长度输出,123456,。即输出,b=123456,。,b=%8ld,,由于,123456,只占,6,列,所以前面空二个空格,输出,b=123456,。,b=%-8ld,,由于,123456,只占,6,列,同时有一个“,-”,号,所以右面空二个空格,输出,b=123456,。,b=%2ld,,由于,123456,占,6,列,所以按实际宽度输出。即输出,b=123456,。,a=%ld,,输出,a=123,。,b=%d,,输出,b=123456,。,【,例,1-7】,类型转换字符,f,的使用。,机电工程系,#include ,main(),float f=123.456;,double d1,d2;,d1=111111.11111111;,d2=222222.22222222;,printf(f=%f,f=%12f,f=%12.2f,f=%-12.2f,f=%.0f,f=%.2fn,f,f,f,f,f,f);,printf(d1+d2=%fn,d1+d2);,分析,:,f=%f,是将小数保留,6,位,所以输出,f=123.456001(,因为,f,是,float,型,由于精度的关系,最后的小数位出现了,1,,后面同理,),。,f=%12f,是共输出,12,列,小数位还是是默认为,6,位,也就是,6,位小数,加上一个小数点,再加上整数位是,3,位,一共是,10,位,所以在左边加上二个空格,也就是输出,f=123.456001,。,f=%12.2f,表示一共输出,12,位,其中小数位是二位(,4,舍,5,入),加上一个小数点,再加上整数位是,3,位,一共是,6,位,所以在左边加上六个空格,也就是输出,f=123.46,。,f=%-12.2f,与前面一样,只是将空格放置在右边,也就是输出,f=123.46,。,f=%.0f,表示整数位原样输出,小数位是,0,位,也就是输出,f=123,。,f=%.2f,表示整数位原样输出,小数位是,2,位(,4,舍,5,入),也就是输出,f=123.46,。,程序结果如图所示。,3,单个字符的输入输出,机电工程系,(,1,)单个字符的输出,putchar(),函数,【,例,1-8】,putchar(),函数的格式和使用方法。,#include “stdio.h”,main(),char ch1,ch2,ch3;,ch1=S;,ch2=u;ch3=n;,putchar(ch1); putchar(ch2); /,输出,ch1,ch2,的值,putchar(ch3); putchar(n); /,输出,ch3,的值并换行,putchar(ch1); putchar(n); /,输出,ch1,的值并换行,putchar(u); putchar(n); /,输出字符,u,并换行,putchar(ch3); putchar(n); /,输出,ch3,的值并换行,程序运行如图所示。,putchar(),函数的格式为:,putchar(ch),;,ch,可以是一个字符变量或常量,也可以是一个转义字符。,putchar(),函数的作用是向终端输出一个字符。,注意,putchar(),函数只能用于单个字符的输出,且一次只能输出一个字符。从功能角度来说,,printf(),函数完全可以替代,putchar(),函数;同样使用,putchar(),函数也需要在程序的开头加上编译预处理命令,即:,#include “stdio.h”,(,2,)单个字符的输入,getchar( ),函数,机电工程系,【,例,1-9】,getchar(),函数的格式和使用方法。,#include “stdio.h”,main(),char ch;,printf(“,请输入一个字符”,);,ch=getchar(); /,从键盘输入一个字符并赋给变量,ch,putchar(ch);putchar(n); /,输出,ch,的值并换行,putchar(getchar(); /,从键盘输入一个字符并输出,putchar(n);,getchar(),函数的格式:,getchar();,getchar(),函数的作用:从键盘输入一个字符。从功能的功度看,,scanf(),函数完全可以替代,getchar(),函数。,注意,getchar(),函数只能用于单个字符的输入,且一次只能输入一个字符。同样使用,getchar(),函数要在程序的开头加上编译预处理命令,即:,#include “stdio.h”,4,字符串常量,机电工程系,字符串常量是由双引号括起来的一串字符。如“,How do you do.”,就是字符串常量,在,C,语言中,系统在每个字符串的最后自动加入一个字符,0,作为字符串结束的标志。请注意字符常量和字符串的区别,例如。,a,是一个字符常量,在内存中占一个字节;而”,a”,是字符串常量,占二个字节的存储空间,其中的一个字节用来存放,0,。两个连续的双引号“”也是一个字符常量,称作“空串”。但要占一个字节的存储空间来存放,0,。,注意,(,1,)字符串的结束符,0,占内存空间,但在测试字符串长度时不计在内,也不输出。,(,2,),0,为字符串的结束符,但遇到,0,不一定是字符串的结束,可能是八进制数组成的转义字符常量,如字符串“,abc067de”,表示,6,个字符,并非为,3,个。,【,例,1-10】,下列数据中,为字符串常量的是()。,(,A,),A,(,B,)“,house”,(,C,),How do you do,(,D,),$asd,分析,:字符串常量是用一对双引号括起来的字符序列。答案为,B,。,举一反三,机电工程系,【,例,1-10】,若变量为,float,类型,要通过语句,scanf(“%f%f%f”, ,给,a,赋予,10.0,,,b,赋予,22.0,,,c,赋予,33.0,,则下列,A,、,B,、,C,、,D,四个答案中不正确的为哪个。请大家将它写成一个完整的,C,语言,使得程序的运行结果是:,a=10.0,b=10.0,c=10.0,A,10 B,10.0,22.0,33.0,22,33,C,10.0 D,10 22,22.0 33.0 33,分析:,(,1,)因为语句,scanf(”%f%f%f”, &a, &b, &c),是要求我们在输入时,数与数之间要么是空格分隔开,要么是回车隔开,所以答案,A,、,C,、,D,均可,只有,B,错。若是以,10.0,22.0,33.0,的形式输入数据,则输入语句应写成:,scanf(”%f ,%f,%f”, ,(,2,)因为,a,b,c,的值为实型,所以定义的变量要求是实型,float,,输出的语句要注意保留小数一位。,答案:,B,。,完整的程序如下:,#include “stdio.h”,main(),float a,b,c;,scanf(“%f%f%f”, ,printf(“a=%.1f,b= %.1fc=%.1f”, a, b, c);,举一反三,机电工程系,【,例,1-11】,有一输入函数,scanf(“%d”,k),,则不能使,float,类型变量,k,得到正确数值的原因是什么?,分析,:,因为,k,是实型变量,所以格式字符串应是“,%f”,,同时变量前边未加取地址符,&,。,答案:,scanf(“%f”,&k),。,【,例,1-12】,阅读以下程序,当输入数据的形式为:,12,34,,正确的输出结果为( )。,#include ”stdio.h”,main(), int a,b;,scanf(“%d%d”, ,printf(“a+b=%dn”,a+b);,A,a+b=46 B,有语法错误,C,a+b=12 D,不确定值,分析:因为输入语句,scanf(“%d%d”, &a,&b),要求输入的二个数之间以空格或回车分隔,而题意中给出的二个数是以逗号分隔,所以导致,b,的值为一个不确定数,所以其值为不确定。 答案:,D,举一反三,机电工程系,【,例,1-13】,有如下程序,若要求,x1,、,x2,、,y1,、,y2,的值分别为,10,、,20,、,A,、,B,,正确的数据输入应该如何?请将这段程序后面补充,printf(),使之完整。,int x1,,,x2,;,char y1,,,y2,;,scanf,(“,%d%d”,,,&x1,&x2,),;,scanf,(,“,%c%c”, &y1,&y2,),;,A,1020AB B,1020AB,C,1020 D,1020AB,AB,分析:,因为,x1,x2,是整型变量,所以二个数之间可以空格分隔,也可以回车分隔;而,y1,y2,是字符型,则在输入完,x2,值后的任何字符,(,包括空格及回车,程序都认为是在为,y1,y2,输入值,所以答案,A,的错误是没将,10,、,20,分隔,答案,B,的错是输入完,20,后的空格,程序认为是给,y1,赋值,后面的,A,是给,y2,的值,即,y1,的值为空格,,y2,的值为字符,A,;答案,C,的输入方法程序认为,x1=10,x2=20,y1,的值为回车,,y2,的值为字符,A,;只有答案,D,是正确的。 答案为,D,。,参考程序,:,#include stdio.h,main(),int x1,x2;,char y1,y2;,scanf(%d%d,scanf(%c%c,printf(x1=%d,x2=%dn,x1,x2);,printf(y1=%c,y2=%cn,y1,y2);,任务,2,总分及平均分的计算,一、任务提出:,一个班进行了一次考试,现要将几个学生的成绩输入电脑,并计算他们的平均分及总分,然后按要求输出。,二、具体实现,#include stdio.h,main(),int x,y,z;,float sum,avg; /,定义二个实型变量,sum,avg,printf(,请输入三个学生的成绩,);,scanf(%d%d%d, /*,输入三个学生的成绩*,/,sum=x+y+z; /,将,x+y+z,的值赋给,sum,avg=sum/3; /,将,sum/3,的值赋给,avg,printf(,请输出三个学生的总成绩及平均分为,); /,输出提示,printf(sum=%.2f,avg=%.2fn,sum,avg); /,输出二个变量,sum,及,avg,的值,程序的执行情况如下 :,机电工程系,首先,算术运算和算术表达式;,第二,赋值运算和赋值表达式;,另外,还需掌握在本任务中没有体现,但在,C,程序中却经常要用到的,C,语言特有的运算和运算符。,三、相关知识,(,一,),算术运算与算术表达式,1.,五种基本的算术运算符,+,(加法)、,-,(减法)、*(乘法)、,/,(除法)、,%,(求余数),这里,需要特别提出的是:,(,1,)关于除法运算,/,C,语言规定,两个整数相除,其商为整数,小数部分被舍弃。例如:,5/2=2,。 如果商为负数,则取整的方向随系统而异。但大多数的系统采取“向零取整”原则,换句话说,取其整数部分。例如:,-5/3=-1,。,(,2,)关于求余数运算,%,要求两侧的操作数均为整型数据,否则出错。例如:,5%3=2,,,3%5=3,,,-5%3=-2,,,-5%,(,-3,),=-2,。但是,,5.2%3,是语法错。,机电工程系,2.,表达式和算术表达式,(,1,)表达式的概念,用运算符和括号将运算对象(常量、变量和函数)连接起来的、符合,C,语言语法规则的式子,称为表达式。,单个常量、变量,可以看作是表达式的一种特例。将单个常量、变量构成的表达式称为简单表达式,其他表达式称之为复杂表达式。,(,2,)算术表达式的概念,表达式中的运算符都是算术运算符。例如:,3+2*5,、(,x+y,),/2+3,、,5%2+3,都是算术表达式。,3.,运算符的优先级与结合性,(,1,)算术运算符的优先级是:先*,,/,,,%,,再,+,,,-,。,(,2,)有括号的先做括号。,机电工程系,三、相关知识,(,一,),算术运算与算术表达式,4.,数据类型转换,机电工程系,高,double float,long,unsigned,低,int,char,short,例如:,(double)x,等价于,(double)(x) /,将变量,x,的值转换成,double,型,(int)(x+y) /,将,x+y,的结果转换成,int,型,(float)7/2,等价于,(float)(7)/2 /,将,7,转换成实型,再除以,2(=3.5),(float)(7/2) /,将,7,整除,2,的结果,(3),转换成实型,(3.0),相关知识,(,二,),赋值运算和赋值表达式,1.,赋值运算,赋值符号“,=”,就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。,赋值运算符的一般形式为:变量,=,赋值表达式,2.,复合赋值运算,复合赋值运算是,C,语言特有的一种运算。,复合赋值运算的一般格式为:变量 复合运算符 表达式,复合算术运算符有五种,分别是:,+=,,,-=,,*,=,,,/=,,,%=,机电工程系,例如:,x=5 /,将,5,赋给变量,x,x=6+7 /,将,6+7,的值赋给变量,x,5=x,是错误的,x+y=z,也是错误的。,x+=3,等价于,x=x+3,x+=5+8,等价于,x=x+(5+8),x*=y+2,等价于,x=x*(y+2),x/=x+y,等价于,x=x/(x+y),x/=8,等价于,x=x/8,x%=7,等价于,x=x%7,x%=(4-2),等价于,x=x%(4-2),相关知识,【,例,1-16】,阅读下列程序,#include stdio.h,main(),int x,y,z;,float a,b,c; /,定义三个单精度型变时,a,b,c,x=1; /,将,1,赋给变量,x,,即,x,的值为,1,y=2;,z=3;,a=1.1; /,将,1.1,赋给变量,a,,即,a,的值为,1.1,b=2.1;,c=3.5;,x=x+y+z; /,将,x+y+z,的值赋给变量,x,,,x,的值为,(1+2+3),即,x=6,printf(x=%dn,x);,y*=y+1; /,将,y*(y+1),赋给,y,,,y=2*(2+1),即,y=6,printf(y=%dn,y);,z=(int)a%(int)b; /z=1%2,,即,z=1,printf(z=%dn,z);,a+=a+b+c; /a=a+(a+b+c), a=1.1+(1.1+2.1+3.5),即,a=9.9,printf(a=%fn,a); ,程序执行情况如下:,机电工程系,相关知识,(,三,) C,语言特有的运算和运算符,1.,自增,(+),、自减,(-),运算,作用:,自增运算使单个变量的值增,1,,自减运算使单个变量的值减,1.,用法与运算规则,自增、自减运算符都有两种用法:,1),前置运算,运算符放在变量之前:,+,变量、,-,变量,先使变量的值增(减),1,,然后再以变化后的值参与其他支算,即先增减,后运算。,机电工程系,y=+x+2; /x,先增,1,(,=5,),然后与,2,的和再赋给,y(=7),printf(x=%d y=%dn,x,y);,z=-x; /x,先减,1,(,=4,),然后再赋给,z(=4),printf(x=%d z=%dn,x,z);,-x; /x=x-1,,即,x=3,printf(x=%dn,x); /,输出,x=3,后换行,#include stdio.h,main(),int x=2,y,z;,printf(x=%dn,x);,y=+x; /x,先增,1,(,=3,),然后再赋给,y(=3),printf(x=%d y=%dn,x,y);,+x; /x=x+1,,即,x=4,printf(x=%dn,x);,相关知识,后置运算,变量+、变量,#include stdio.h,main(),int x=2,y,z;,printf(x=%dn,x);,y=x+; /,先将,x,的值,(2),赋给,y(=2),,然后,x,再自增,(3),printf(x=%d y=%dn,x,y);,x+; /x=x+1,,即,x=4,printf(x=%dn,x);,y=(x+)+2; /,先将,x+2,赋给,y(=6),,然后,x,再自增,(5),printf(x=%d y=%dn,x,y);,z=x-; /,先将,x,的值,(5),赋给,z(=5),,然后,x,再自减,(4),printf(x=%d z=%dn,x,z);,x-; /x=x-1,,即,x=3,printf(x=%dn,x);,机电工程系,自增、自减运算符不能用于常量和表达式。,例如:,5+,、,-8,、,+,(,a+b,)都是错误的。,相关知识,2.,逗号运算(,)及其表达式,C,语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。,(1),一般形式:表达式,1,,表达式,2,,,,表达式,n.,(2),求解过程:自左至右,依次计算各表达式的值,“表达式,n”,的值即为整个逗号表达式的值。,例如:逗号表达式“,a=3*5,a*4”,的值,=60,:先求解,a=3*5,,得,,a=15,;再求,a*4=60,,所以逗号表达式的值为,60,。,又例如:逗号表达式“,(a=2+1,a*5),a+8”,的值,=11,,先求解,a=2+1,得,a=3,,再求,a*5=15,;最后求解,a+8=11,所以逗号表达式的值,=11,机电工程系,相关知识,举一反三,【,例,1-19】,输入圆半径,求圆的面积和周长。,的值取,3.14.,分析:因为根据圆半径,求圆的面积和周长,所以要定义三个变量,半径,r,,面积,s,和周长,c,;考虑到输入的圆半径可能会有小数,所以这三个变量不妨都定义为单精度型,float,。,定义变量,r,s,c,输入变量,r,s=3.14*r*r,c=2*3.14*r,输出,s,c,机电工程系,#include stdio.h,main(),float r,s,c;,printf(,请输入圆的半径,r:);,scanf(%f,s=3.14*r*r;,c=2*3.14*r;,printf(,圆的面积,s,为:,%fn,圆的周长,c,为,%fn,s,c);,流程图,符号常量,#define PI 3.14,意思是定义一个符号常量,PI,,其值为,3.14,。符号常量的命名规则与变量名一样,但习惯上,符号常量常用大写字母表示。,#include stdio.h,#define PI 3.14 /,定义一个符号常量,PI,,其值为,3.14,main(),float r,s,c;,printf(,请输入圆的半径,r:);,scanf(%f,s=PI*r*r;,c=2*PI*r;,printf(,圆的面积,s,为:,%fn,圆的周长,c,为,%fn,s,c);,机电工程系,相关知识,【,例,1-20】,输入三角形三边的长,求三角形的周长及面积。,分析:输入三角形三边的长,所以显然要定义三个变量,a,b,c,,同时还要定义三角形的周长,c,及面积,s,,由于在求三角形的面积时要用的海伦公式,s=,其中是三角形的二分之一周长,所以还需要定义,需要提示的是,s=,在程序中的表达式为,s=sqrt(l*(l-a)*(l-b)*(l-c),;即根号用,sqrt(),函数表示。只要在程序的前面加上库函数,math.h,就行。,定义变量,a,b,c,l,c,s,输入变量,a,b,c,c=(a+b+c)/3.0;,x1=(-b+sqrt(disc)/(2*a);,l=c/2,s=sqrt(l*(l-a)*(l-b)*(l-c);,输出三角形的面积和周长,机电工程系,#include stdio.h,#include math.h /,为求平方根函数,sqrt(),main(),int a,b,c;,float cc,l,s;,printf(,请输入三角形三边,a,b,c,的长,:);,scanf(%d%d%d,cc=(a+b+c);,l=cc/2;,s=sqrt(l*(l-a)*(l-b)*(l-c);,printf(,三角形的周长,cc,为,%fn,三角形的面积,S,为,%fn,cc,s);,相关知识,定义变量,a,b,c,x1,x2,disc,输入变量,a,b,c,disc= b*b-4*a*c,x1=(-b+sqrt(disc)/(2*a);,x2=(-b-sqrt(disc)/(2*a);,输出,x1,x2,机电工程系,【,例,1-21,】,求方程,ax2+bx+c=0,的实数根。,a,b,c,由键盘输入,,a0,且,b2-4ac0,。,分析:首先要考虑到定义的变量有,a,,,b,,,c,,,x1,,,x2,,判别式,disc=b2-4ac,,然后就可以根据公式,(-b)/(2a),计算,最后输出结果。,程序流程图如图,所示:,#include “stdio.h”,#include “math.h”,main(),float a,b,c,disc,x1,x2;,printf(“,请输入方程,a,b,c,的值:”,);,scanf(“%f%f%f”, /,输入,a,b,c,的值,disc=b*b-4*a*c; /,将判别式的值赋给变量,disc,x1=(-b+sqrt(disc)/(2*a); /,求方程的根,x1,x2=(-b-sqrt(disc)/(2*a);,p
展开阅读全文