14C语言与程序设计第三讲
C语言程序设计基础,2014.9,第1讲 概述-c程序要素与结构 第2讲 c语言的输入输出 第3讲 数据类型与关系运算 第4讲 c程序设计初步(条件判别、循环、数组初步) 第5讲 c程序设计初步(并列语句、结构的概念) 第6讲 教学回顾(变量、语句、函数与程序结构) 第7讲 函数一(概念、形参与实参、函数间的参数传递) 第8讲 函数二(变量值与地址、函数与程序设计、调用形式) 第9讲 函数三(递归算法、指针、二维数组) 第10讲 指针与函数 第11讲 链表一(指针与链表) 第12讲 链表二(结构指针与链表设计) 第13讲 文件、算法初步,课程大纲,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,练习二第一题,#include #include using namespace std; /为头文件指定命名空间std int main() int u,r; float i; coutru; i=u/r; coutiendl; return(0); ,头部文件,主函数开始,定义电流变量,考虑整数除法可能有小数,115/10应该是11.5,为什么没有了小数,而与110/10的结果相同?,定义电阻和电压变量,假设输入仅限于是整数,因为程序把r、u定义成整数变量,那么它们就会采用整数运算,其结果只能是整数,然后,再把这个中间结果赋给电流变量i,所以虽然变量r、u能正确描述输入值,但不能保证获得正确的运算结果,它会而舍弃小数部份.,即使算法正确,如果变量类型使用不当,程序仍然无法正常运行,因此根据对象的特性定义合适的数据类型变量,非常重要。,内存,运算结果赋值给内存的i,r,u,int r,u;,float i;,i,i=u/r;,中央控制单元:CPU,A,/,CPU做定点运算,定点运算结果仍在CPU,把内存变量读进CPU,CPU有专用的浮点运算处理器,变量运算的概念,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,变量存储方式,内存空间,int i_p;,变量声明,编译的时候给i_p分配地址单元,2000,i_p=10;,运行时给i_p赋值,10,变量一定有一个内存地址,占用相应的单元。 不同类型的变量占用的内存字节数不同。 变量名和内存地址是等效的,给变量赋值,也就是往其对应的地址单元存入数据。,i_p=10;就是把10存储到地址是2000的内存中,在程序看来,操作地址2000单元和操作i_p变量是一回事,变量三代表: 1、变量的地址; 2、变量名; 3、变量的类型;,每一个变量在内存对应着一个唯一的地址,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,ch_s,同类型的一组数据在内存中的连续存储,一片豆腐皮 一片肥牛 一串豆腐皮、一串肥牛片,同类型的变量、聚集在一起,称为串,它是载体,2000,A,B,C,D,sp,E,0,2001,2002,2006,内存是数据的载体,多个字符,连续的存储在内存中,称之为字符串,用结尾符表示字符串结束,字符串的第一个字符所在的地址,叫字符串地址,这个字符串表述为: “ABCD E“;,该字符串变量声明为:char ch_s20; 其中: ch_s是字符串变量名; 起始地址在2000单元; 连续可用20个字节; 实际占用了 字节。,7,调Vc(用DEBUG演示字符串地址与各个字符的关系),字符与字符串,char类型变量用于表示字符和标点符号一类的符号. 在内存中字符以ASCII码存储. 如下是字符变量定义与赋值 char c1,c2; / 定义c1、c2为字符变量 c1 = 'a' c2 ='b' /c1赋值为字符a,c2赋值为b,一个字符序列我们称之为字符串. 它也是char类型,但定义时要说明该串的最多允许的字符个数.,char ch_a= 'A' char ch_s10=“ABCD EFGH“;,定义字符变量,初始化为字符A.,定义字符型数组,最多允许9个字符,初始化为ABCD EFGH.,空格也是一个字符,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,如何将字符串赋值给字符型数组?,数组(变量),是在内存中连续存放某类型数据的变量。如字符型数组,它在内存中一个区域内连续的存放字符型数据元素,也称之为字符串。 不能像赋值给单个变量那样,将一字符串赋值给数组,比如: char name20; name=“tsinghua.edu.cn”; 将字符串赋值给数组有如下几种方法 变量声明时的初值 char name20“tsinghua.edu.cn”; 使用strcpy()库函数 strcpy(name, “tsinghua.edu.cn”); /头部函数是string.h 直接从键盘输入 cinname; 或者: scanf(“%s”,name);,为什么没有地址运算符?,数组(字符串)的名字,就是它的地址,所以不用地址运算符,运行时从键盘输入字符串到s3,运行时用库函数strcpy(),将字符串, ,“lwz“赋给数组s2,字符串常量,如何将字符串赋值给字符型数组?,#include #include #include using namespace std; /为头文件指定命名空间 #include int main(void) char s120=“tsinghua.edu.cn“; char s220,s320; strcpy(s2,“lwz“); couts3; cout“s1=“s1endl; cout“s2=“s2endl; cout“s3=“s3endl; getch(); return(0); ,字符串在初始化时置入s1,分别输出各个字符串,输入字符串中,如果有空格怎么办?,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,下节课继续讨论,变量与关系运算式-if语句,设学生高考成绩是x,如果某学生是少数民族(变量grade为1),则最终录取分数mark可以加20分。,cinxgrade ;,grade =1?,y,x=x+20;,mark=x;,C语言中,用“=“表示 “等于“的意思,是少数民族,加20分,否则,x就是最终录取分数,“=“表示把x的值赋给mark,N,C语言中, “=“表示赋值, 将等式右边的值赋给等式左边,如x=10;,#include #include #include using namespace std; int main(void) int x,grade=0,mark; coutxgrade; if(grade=1)x=x+20; mark=x; cout“mark=“markendl; getch(); return(0); ,输入x和grade,初始化为0,C语言中用''=“表示“等于“的意思,x=x+20?,x等于自身加上20,x,y,+,内存,控制器,运算结果送回到内存,能否改成:若grade 0; 则是少数民族,x+=20;,变量与关系运算式-if语句,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,逻辑真与逻辑假,int main() int a=-1,b=0,c=10; if(a)cout“a的逻辑运算结果为真“endl; else cout“a的逻辑运算结果为假“endl; if(b)cout“b的逻辑运算结果为真“endl; else cout“b的逻辑运算结果为假“endl; if(c)cout“c的逻辑运算结果为真“endl; else cout“c的逻辑运算结果为假“endl; getch(); return(0); ,a,b,c分别取负数、零和正数,逻辑真?,逻辑真的输出,否则,逻辑假,b的逻辑运算为真,b的逻辑运算为假,c为逻辑真的输出,c的逻辑运算为假,if语句执行完后,是跳过else语句,执行后续程序语句,所有的关系运算结果,都是一个布尔逻辑值,或者是真(true),或者是逻辑假(false)。,对负数做逻辑运算也为真,只有零才是逻辑假,对正数做逻辑运算也为真,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值给字符型数组?,变量与关系运算式 if语句与变量的关系运算 关系运算式的取值逻辑真与假 多个逻辑运算式的并列 逻辑与、逻辑非 课堂练习,设学生高考成绩是x,如果某学生是少数民族(变量grade为1)、或者是体育特长生(变量gymPoint为1 ),则最终录取分数mark可以加20分。,cinxgradegymPoint ;,grade =1?,no,x=x+20;,grade=1的逻辑关系是真还是假?,true,是少数民族,加20分,false,去判别体育加分,gymPoint =1?,x=x+20;,no,true,是体育生,加20分,mark=x;,又是false,最终没有加分,需要2个关系运算,分别判断是否加分。,多个逻辑运算式的并列,设学生高考成绩是x,如果某学生是少数民族(变量grade为1)、或者是体育特长生(变量gymPoint为1 ),则最终录取分数mark可以加20分。,或者少数民族,或者体育特长,有一个条件成立就可以加20分.,mark=x;,(gymPoint =1) or (grade =1)?,x=x+20;,cinxgradegymPoint ;,逻辑关系的并列运算,简化了程序结构,逻辑“或”关系运算,结果也是false或者是true,true,false,多个逻辑运算式的并列,两个关系运算的结果, 进行逻辑“或”关系运算, 结果也是false或者是true,#include #include #include int main() int grade=0,gymPoint=0,x,mark; coutxgradegymPoint; if(grade=1)|(gymPoint=1)x+=20; mark=x; cout“mark=“markendl; getch(); return(0); ,“|“是逻辑或符号,有一个表达式为真,if的条件就为真,x=x+20的简写,(grade=1)、(gymPoint=1)只要有一个为逻辑真,则,它们的逻辑或为真,加分,多个逻辑运算式的并列,第三讲 字符数组初步,本节要点-字符串初步 练习二第一题 变量与地址 字符与字符串 如何将字符串赋值