C语言程序设计课件第02章简单程序设计.ppt
第二章第二章 C+C+简单程序设计简单程序设计C+语言程序设计1本章主要内容本章主要内容lC+语言概述语言概述l基本数据类型和表达式基本数据类型和表达式l数据的输入与输出数据的输入与输出l算法的基本控制结构算法的基本控制结构l自定义数据类型自定义数据类型2C+语言的产生语言的产生lC+C+是从是从C C语言发展演变而来的,首先是一个语言发展演变而来的,首先是一个更好的更好的C Cl引入了类的机制,最初的引入了类的机制,最初的C+C+被称为被称为“带类的带类的C”C”l19831983年正式取名为年正式取名为C+C+l从从19891989年开始年开始C+C+语言的标准化工作语言的标准化工作l于于19941994年制定了年制定了ANSI C+ANSI C+标准草案标准草案l于于19981998年年1111月被国际标准化组织(月被国际标准化组织(ISOISO)批准)批准为国际标准,成为目前的为国际标准,成为目前的C+C+C+语言概述3C+的特点的特点l全面兼容全面兼容C C它保持了它保持了C C的简洁、高效和接近汇编语的简洁、高效和接近汇编语言等特点言等特点对对C C的类型系统进行了改革和扩充的类型系统进行了改革和扩充C+C+也支持面向过程的程序设计,不是也支持面向过程的程序设计,不是一个纯正的面向对象的语言一个纯正的面向对象的语言l支持面向对象的方法支持面向对象的方法C+语言概述4C+程序实例程序实例例例2-1/2_1.cpp/2_1.cpp#include#include using namespace std;using namespace std;void main()void main()coutHello!n;coutHello!n;coutWelcome to c+!n;coutWelcome to c+!n;运行结果:运行结果:Hello!Hello!Welcome to c+Welcome to c+!C+语言概述5C+字符集字符集l大小写的英文字母:大小写的英文字母:A AZ Z,a az zl数字字符:数字字符:0 09 9l特殊字符:特殊字符:空格空格!#%&*_ _(下划线下划线)+=-/;.,()()C+语言概述6词法记号词法记号l关键字关键字 C+C+预定义的单词预定义的单词l标识符标识符 程序员声明的单词,用来命名程序正文程序员声明的单词,用来命名程序正文中的一些实体中的一些实体l文字文字 在程序中直接使用符号表示的数据在程序中直接使用符号表示的数据l操作符操作符 用于实现各种运算的符号用于实现各种运算的符号l分隔符分隔符 (),:;(),:;用于分隔各个词法记号或程序正文用于分隔各个词法记号或程序正文l空白符空白符 空格、制表符(空格、制表符(TABTAB键产生的字符)、换键产生的字符)、换行符(行符(EnterEnter键所产生的字符)和注释的总称键所产生的字符)和注释的总称C+语言概述7标识符的构成规则标识符的构成规则l以大写字母、小写字母或下划线以大写字母、小写字母或下划线(_)开始。开始。l可以由以大写字母、小写字母、下划线可以由以大写字母、小写字母、下划线(_)或或数字数字09组成。组成。l大写字母和小写字母代表不同的标识符。大写字母和小写字母代表不同的标识符。C+语言概述8基本数据类型和表达式整型:short/int/long(八、十、十六进制)实型:float/double(默认常数为doubleo类型 故float f=123.45有警告)字符型:char布尔型:bool(true、false)字符串常量:this符号常量:const 数据类型 常量名=常量值基本数据类型基本数据类型P24 表2-19例:例:int a=3;int a=3;double f=3.56;double f=3.56;char c=char c=a a;int c(5);int c(5);Page 10基本数据类型和表达式10Page 11基本数据类型和表达式算术运算符:+-*?%+-赋值运算符:=及复合的赋值运算符逗号运算符:,关系运算符:=!=逻辑运算符:!&|条件运算符:?:sizeof运算符:计算某种类型的对象在内存中所占的字节数。位运算符:&|(操作数必为整型)11运算符优先级运算符优先级括号括号+,-,sizeofsizeof*,/,%*,/,%+,-+,-=,!=,!=位运算位运算&|?:?:赋值运算赋值运算逗号运算逗号运算低高基本数据类型和表达式12混合运算时数据类型的转换混合运算时数据类型的转换l一些二元运算符(算术运算符、关系运算符、逻辑一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数运算符、位运算符和赋值运算符)要求两个操作数的类型一致。的类型一致。l在算术运算和关系运算中如果参与运算的操作数类在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型含转换),基本原则是将低类型数据转换为高类型数据。数据。char,short,int,unsigned,long,unsigned long,float,double低 高基本数据类型和表达式13l当参与运算的操作数必须是当参与运算的操作数必须是bool型时,如果操作数型时,如果操作数是其它类型,编译系统会自动将非是其它类型,编译系统会自动将非0数据转换为数据转换为true,0转换为转换为false。l位运算的操作数必须是整数,当二元位运算的操作位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换,数是不同类型的整数时,也会自动进行类型转换,l赋值运算要求左值与右值的类型相同,若类型不同,赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。编译系统会自动将右值转换为左值的类型。l可以采用强制类型转换。可以采用强制类型转换。基本数据类型和表达式混合运算时数据类型的转换混合运算时数据类型的转换14语句语句l声明语句声明语句l表达式语句表达式语句l选择语句选择语句l循环语句循环语句l跳转语句跳转语句l复合语句复合语句l标号语句标号语句 基本数据类型和表达式15简单的输入、输出简单的输入、输出数据的输入与输出 在在C+C+中,将数据从一个对象到另一个对象的流动中,将数据从一个对象到另一个对象的流动抽象为抽象为“流流”。流在使用前被建立,使用后被删除。流在使用前被建立,使用后被删除。从流中获取数据的操作符称为提取操作,向流中添加从流中获取数据的操作符称为提取操作,向流中添加数据的操作称为插入操作。数据的输入与输出是通过数据的操作称为插入操作。数据的输入与输出是通过I/OI/O流来实现的,流来实现的,cincin和和coutcout是预定义的流类对象。是预定义的流类对象。一、输出一、输出 cout cout表达式表达式表达式表达式其中,其中,变量变量变量变量其中,其中,是提取符是提取符输入的值用空格分隔,也可以分行输入,不能用逗号输入的值用空格分隔,也可以分行输入,不能用逗号分隔。分隔。17简单的输入、输出简单的输入、输出数据的输入与输出三、简单的三、简单的I/OI/O格式控制格式控制(iomanipiomanip)操纵符名操纵符名含义含义dec数值数据采用十进制表示数值数据采用十进制表示hex数值数据采用十六进制表示数值数据采用十六进制表示oct数值数据采用八进制表示数值数据采用八进制表示ws提取空白符提取空白符endl插入换行符插入换行符ends插入空字符插入空字符setw(int)设置域宽设置域宽18简单的输入、输出简单的输入、输出数据的输入与输出三、简单的三、简单的I/OI/O格式控制格式控制(iomanipiomanip)操纵符名操纵符名含义含义fixed定点数格式输出,小数定点数格式输出,小数6位位scientific科学记数法格式输出,小数科学记数法格式输出,小数6位位setprecision(int)设置有效位数(普通显示方式)或设置有效位数(普通显示方式)或精度(定点或科学记数法方式)精度(定点或科学记数法方式)boolalpha使使bool类型的数据输出结果为类型的数据输出结果为true或或false19简单的输入、输出简单的输入、输出数据的输入与输出三、简单的三、简单的I/OI/O格式控制格式控制(iomanipiomanip)#include#include using namespace std;void main()float f=12.456789f;coutsetprecision(3)fendl;运行结果:运行结果:12.512.5coutfixedsetprecision(3)fendl;运行结果:运行结果:12.45712.45720顺序结构顺序结构分支结构分支结构循环结构循环结构算法的基本控制结构算法的基本控制结构算法的基本控制结构22P39 例例2-2P40 例例2-3P42 例例2-4P43 例例2-5P44 例例2-6P46 例例2-7P47 例例2-8P49 例例2-9P50 例例2-10算法的基本控制结构23typedef语句语句l为一个已有的数据类型另外命名为一个已有的数据类型另外命名l语法形式语法形式typedef typedef 已有类型名已有类型名 新类型名表新类型名表;l例如例如typedef double typedef double area,volumearea,volume;typedef int typedef int naturalnatural;naturalnatural i1,i2;i1,i2;areaarea a;a;volumevolume v;v;自定义数据类型24枚举类型枚举类型enuml只要将需要的值一一列举出来,便构只要将需要的值一一列举出来,便构成了一个枚举类型。成了一个枚举类型。l枚举类型的声明形式如下:枚举类型的声明形式如下:enum enum 枚举类型名枚举类型名 值列表值列表;l例如:例如:enum weekdayenum weekdaysun,mon,tue,wed,thu,fri,sat;sun,mon,tue,wed,thu,fri,sat;自定义数据类型25枚举类型枚举类型enuml枚举类型应用说明:枚举类型应用说明:对枚举元素按常量处理,不能对它们赋值。例对枚举元素按常量处理,不能对它们赋值。例如,不能写:如,不能写:sun=0;sun=0;枚举元素具有默认值,它们依次为:枚举元素具有默认值,它们依次为:0,1,2,.0,1,2,.。也可以在声明时另行指定枚举元素的值,如:也可以在声明时另行指定枚举元素的值,如:enum enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat;weekdaysun=7,mon=1,tue,wed,thu,fri,sat;枚举值可以进行关系运算。枚举值可以进行关系运算。整数值不能直接赋给枚举变量,如需要将整数整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。赋值给枚举变量,应进行强制类型转换。自定义数据类型26例例2-11 l设某次体育比赛的结果有四种可能:设某次体育比赛的结果有四种可能:胜(胜(winwin)、负()、负(loselose)、平局)、平局(tietie)、比赛取消()、比赛取消(cancelcancel),编写),编写程序顺序输出这四种情况。程序顺序输出这四种情况。l分析:由于比赛结果只有四种可能,分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。个枚举类型的变量来存放比赛结果。自定义数据类型27#include#include using namespace std;using namespace std;enum game_result WIN,LOSE,TIE,CANCEL;enum game_result WIN,LOSE,TIE,CANCEL;void main()void main()game_result result;game_result result;enum game_result omit=CANCEL;enum game_result omit=CANCEL;int count;int count;for(count=WIN;count=CANCEL;count+)for(count=WIN;count=CANCEL;count+)result=(game_result)count;result=(game_result)count;if(result=omit)if(result=omit)cout The game was cancelledn;cout The game was cancelledn;else else cout The game was played;cout The game was played;if(result=WIN)cout and we won!;if(result=WIN)cout and we won!;if(result=LOSE)cout and we lost.;if(result=LOSE)cout and we lost.;cout n;cout n;return 0;return 0;2828运行结果运行结果 The game was played and we won!The game was played and we won!The game was played and we lost.The game was played and we lost.The game was played The game was played The game was cancelled The game was cancelled2929结构体结构体结构的声明结构的声明l结构的概念结构的概念结构体是由不同数据类型的数据组成的集合体。结构体是由不同数据类型的数据组成的集合体。l声明结构类型声明结构类型 struct struct 结构名结构名 数据类型数据类型 成员名成员名 1 1;数据类型数据类型 成员名成员名 2 2;:数据类型数据类型 成员名成员名 n n;;自定义数据类型30结构体结构体结构的声明结构的声明l举例:举例:struct student /struct student /学生信息结构体学生信息结构体 int num;/int num;/学号学号 char name20;/char name20;/姓名姓名 char gender;/char gender;/性别性别 int age;/int age;/年龄年龄 float score;/float score;/成绩成绩 char addr30;/char addr30;/住址住址 自定义数据类型31结构体结构体结构变量说明结构变量说明l变量说明形式变量说明形式 结构名结构名 结构变量名;结构变量名;l注意:注意:结构变量的存储类型概念、它的寿命、可见性结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量完全一致。及使用范围与普通变量完全一致。结构变量说明在结构类型声明之后,二者也可结构变量说明在结构类型声明之后,二者也可同时进行。同时进行。结构变量占内存大小可用结构变量占内存大小可用 sizeof sizeof 运算求出:运算求出:sizeof(sizeof(运算量运算量)自定义数据类型32结构体结构体结构变量的初始化和使用结构变量的初始化和使用l初始化初始化说明结构变量的同时可以直接设置初值。说明结构变量的同时可以直接设置初值。l使用使用结构体成员的引用形式:结构体成员的引用形式:结构变量名结构变量名.成员名成员名自定义数据类型33例例2-12结构体变量的初始化和使用结构体变量的初始化和使用#include#include#include#include using namespace std;using namespace std;struct student/struct student/学生信息结构体学生信息结构体 int num;/int num;/学号学号 char name20;/char name20;/姓名姓名 char gender;/char gender;/性别性别 int age;/int age;/年龄年龄stu=97001,Lin Lin,F,19;stu=97001,Lin Lin,F,19;int main()int main()coutsetw(7)stu.numsetw(20)stu.name coutsetw(7)stu.numsetw(20)stu.name setw(3)stu.sexsetw(3)stu.age;setw(3)stu.sexsetw(3)stu.age;自定义数据类型运行结果运行结果:97001 Lin Lin F 19 97001 Lin Lin F 1934联合体联合体l声明形式:声明形式:union union 联合名联合名 数据类型数据类型 成员名成员名 1 1;数据类型数据类型 成员名成员名 2 2;:数据类型数据类型 成员名成员名 n n;;l联合体类型变量说明的语法形式联合体类型变量说明的语法形式联合名联合名 联合变量名;联合变量名;l引用形式:引用形式:联合名联合名.成员名成员名自定义数据类型35例:例:union uareaunion uarea char c_data;char c_data;short s_data;short s_data;long l_data;long l_data;uareac_datal_datas_data联合体联合体自定义数据类型36无名联合无名联合l无名联合没有标记名,只是声明一个成员项无名联合没有标记名,只是声明一个成员项的集合,这些成员项具有相同的内存地址,的集合,这些成员项具有相同的内存地址,可以由成员项的名字直接访问。可以由成员项的名字直接访问。l例:例:unionunion int i;int i;float f;float f;在程序中可以这样使用:在程序中可以这样使用:i=10;i=10;f=2.2;f=2.2;自定义数据类型37小结与复习建议小结与复习建议l主要内容主要内容C+语言概述、基本数据类型和表达式、数据的输入与输出、算法的基本控制结构、自定义数据类型l达到的目标达到的目标掌握C+语言的基本概念和基本语句,能够编写简单的程序段。l实验任务实验任务实验二l作业作业2-13 2-14 2-17 2-28 2-36 2-37 38