浙江长征职业技术学院—计算机与信息技术系—相方莉制作 项目三 通讯录管理系统界面菜单制作 学习目标: 通过该项目你可以知道: C语言的程序控制结构的分类 C语言中的关系运算符和逻辑运算符以及表达式 C语言中的分支结构语句 C语言中的循环结构语句 C语言中的条件运算符与条件表达式 C语言中的逗号运算符与逗号表达式 C语言中的位运算符与位运算 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 项目三 通讯录管理系统界面菜单制作 通过该项目你能够: 能使用关系和逻辑运算符构造表达式 能使用if和switch语句实现分支结构 能使用for,while,do while语句实现循环结构 能灵活使用条件表达式、逗号表达式和位运算解决实际问题 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.1 项目情景 小王听说用C语言可以编写各种管理系统,于是他想自己动手编写一个功能简易的通讯录管理系统,由于他C语言才刚开始学,因此他打算先实现如下图所示的通讯录管理系统的界面,该系统能实现通讯录各项功能的重复选择。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 复习 案例1: 假定个人所得税的征收依据如下:按工资收入的15%征收个人所得税。编写一个程序,当从键盘输入职工工资时,计算出实发工资并输出。该如何编写这个程序呢? #include <stdio.h> main() {float salary, re_salary;// re_salary代表实发工资 printf(“请输入你的工资:”); scanf(“%f”,&salary); re_salary =salary*0.85; printf(“你的实发工资为%f:”, re_salary); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 案例导入 案例2: 假定某地个人所得税的起征额为1500元,1500元以下的不征税,1500元以上的部分按15%征税。编写一个程序,当从键盘输入职工工资时,计算出实发工资并输出。 要设计选择结构程序,要考虑两个方面的问题: 一是在C语言中如何来表示条件 二是在C语言中实现选择结构用什么语句 在C语言中表示条件,一般用关系表达式或逻辑表达式 实现选择结构用if语句或switch语句 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3.2.1 程序控制结构概述 任何一个结构化程序,按其执行时的流程控制,在逻辑结构上可分为3种基本结构:顺序结构、选择结构、循环结构,可以通过这3种基本结构的嵌套实现复杂的程序流程控制。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3.2.2 关系运算符和关系表达式 注意:在C语言中,“等于”关系运算符是双等号“= =”, 而不是单等号“= ”(赋值运算符) 1)关系运算符 C语言提供6种关系运算符: <(小于), <=(小于或等于), >(大于), >=(大于或等于), ==(等于), !=(不等于) 优先级 (1)在关系运算符中,前4个优先级相同,后2个也相同, 且前4个高于后2个。 (2)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 2) 关系表达式 (1)关系表达式的概念 ---用关系运算符将两个表达式连接起来,进行关系运算的式子 例如,下面的关系表达式都是合法的: a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)= =(b>c) (2)关系表达式的值——逻辑值(非“真”即“假”) 由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”, 用整数“0”表示“逻辑假” 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 例如,假设num1=3,num2=4,num3=5,则: (1)num1>num2的值= (2)(num1>num2)!=num3的值= (3)num1<num2<num3的值= (4)(num1<num2)+num3的值= 1 1 思考题:任意改变num1或num2的值, 会影响整个表达式的值吗?为什么? 6 因为num1<num2的值=1,1+5=6 再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。 所以,关系表达式的值,还可以参与其它种类的运算, 例如算术运算、逻辑运算等。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3.2.3 逻辑运算符和逻辑表达式 关系表达式只能描述单一条件,例如“x>=0”。如果需要描述“x>=0”、同时“x<10”,就要借助于逻辑表达式了 1)逻辑运算及其优先次序 (1)C语言提供三种逻辑运算符: && 逻辑与(相当于“同时”) || 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 逻辑“与”运算符 && 所有学科及格 考勤率达到 75% 留级 No 表达式 1 表达式 2 结果 1 留级 No Yes 留级 No Yes 升级 Yes 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 逻辑“或”运算符 || 信用卡 No 无法支付 No No 可支付 Yes 购物帐单 Yes 可支付 No Yes 可支付 Yes 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 逻辑“或”运算符 || 现金 信用卡 无法支付 No 表达式 1 表达式 2 结果 1 可支付 No Yes 可支付 No Yes 可支付 Yes 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 逻辑“非”运算符 ! 天气 下雨? Yes 带伞 No 不带伞 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 逻辑“非”运算符 ! 天气 下雨? 真 假 表达式 结果 1 带伞 操作 不带伞 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 2) 逻辑运算规则总结 所有学科 及格 考勤率达到 75% 天气 NOT 阴天 && || ! 只有当两个条件都为真时才执行操作 只要任何一个条件为真时就执行操作 对原条件取反, 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3)逻辑运算符的运算优先级 [1]逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) → &&(与) → ||(或) [2]与其它种类运算符的优先关系 !→ 算术运算 → 关系运算 → &&→ || → 赋值运算 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 4) 逻辑表达式 [1]概念 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。 例如,下面的表达式都是逻辑表达式: (x>=0) && (x<10) ,(x<1) || (x>5) ,! (x= =0), 逻辑表达式的值也是一个逻辑值(非“真”即“假”) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 例如,假定x=5,则(x>=0) && (x<10)的值为 (x<-1) || (x>5)的值为 “真” “假” 想一想 如何表达闰年?(能被4整除,但是不能被100整除,或则可以被400整除的年份) ((year%4==0)&&(year%100!=0))||(year%400==0) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 [2]说明 (1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。 (2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说: 对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数 对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数 例如,假设n1、n2、n3、n4、x、y的值分别为 1、 2、 3、 4、 1、1, 则求解表达式“(x=n1>n2)&&(y=n3>n4)”后, x的值变为_____,而y的_____ _____ 0 值不变,仍等于1! 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3.2.4 条件语句(分支结构) if语句的第一种形式 if(表达式) {语句或者语句组}; 例如: if(x>y) {printf(“%d”,x)}; 例如: if(x<y) { x++; printf(“%d”,x); } 例如: if(x<y) x++; printf(“%d”,x); 当只有一条语句时,花括号可省略 当有多条语句时,花括号不可省略 请思考两者等价么? 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4 条件语句(分支结构) if语句的第二种形式 if(表达式) {语句1或者语句组1}; else {语句2或者语句组2}; 表达式 语句1 语句2 真(非0) 假(0) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4 条件语句(分支结构) #include <stdio.h> void main() { int year; printf("\n 请输入年份:"); scanf("%d",&year); if((year % 4 ==0 && year % 100 != 0) || (year % 400 == 0)) printf("\n %d 年是闰年 \n ", year); else printf("\n %d 年不是闰年 \n ", year); } 问题描述: 判定给定的年份是否为闰年。 提示:闰年的判定规则为:能被 4 整除但不能被 100 整除的年份,或能被 400 整除的年份。 请输入年份:2005 2005 年不是闰年 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 补充案例 问题描述: 编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于90分输出“优”;成绩大于等于80分小于90分输出“良”;成绩大于等于60分小于80分输出“中”;成绩小于60分输出“差”。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 补充案例 #include <stdio.h> void main() { float score; printf(“\n 请输入一个百分制的期末考试成绩: "); scanf("%f", &score); if(score>=90) printf("\n 优"); if (score>=80&&score<90) printf("\n 良"); if (score>=60&&score<80) printf("\n 中"); if(score<60) printf("\n 差"); printf("\n"); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4 条件语句(分支结构) if语句的第三种形式 if(表达式1) {语句1或者语句组1}; else if (表达式2) {语句2或者语句组2}; else if (表达式3) {语句3或者语句组3}; … else {语句n或者语句组n}; 表达式1 表达式2 表达式3 表达式n 语句1 语句2 语句3 语句n 语句n+1 真 假 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 补充案例 #include <stdio.h> void main() { float score; printf(“\n 请输入一个百分制的期末考试成绩: "); scanf("%f", &score); if(score>=90) printf("\n 优"); else if (score>=80) printf("\n 良"); else if (score>=60) printf("\n 中"); else printf("\n 差"); printf("\n"); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 总结—— if语句的三种基本形式 1、最基本的形式 if(表达式) 语句1 else 语句2 2、最简单的形式 if(表达式) 语句 3、层次形式 if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3)语句3 else if(表达式4)语句4 else 表达式5 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
【例2-6】输入一个数,如果是7的倍数,则输出这个数的立方,否则输出这个数的平方。 分析:判断是否是7的倍数,就只要看能否被7整除就可以了;a的立方不能写成a3,可以简单地用a*a*a来表示,也可以调用C语言中提供的库函数pow(a,3)来表示,此时要用#include “math.h”语句把包含pow函数的库文件math.h包含进来。 #include "stdio.h" main( ) { int a,t; printf("请输入一个整数"); scanf("%d",&a); if(a%7==0) t=a*a*a; else t=a*a; printf("%d",t); } #include "stdio.h“ #include “math.h” main( ) { int a,t; printf("请输入一个整数"); scanf("%d",&a); if(a%7==0) t=pow(a,3); else t=a*a; printf("%d",t); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例2-7】输入一个数,判断它是否是水仙花数(一个三位数,它的各位数字立方之和等于它本身,这个数就是水仙花数)。 分析:要求这个数的三位数字之和,首先要分解出这个数的每一位数字,这个一般通过对数求余或取整等运算来完成。 参考程序: #include "stdio.h" main( ) { int a,b,c,x ; printf("请输入一个三位整数"); scanf("%d",&x); a=x/100; /*分离出百位数*/ b=x/10%10; /*分离出十位数*/ c=x%10; /*分离出个位数*/ if(a*a*a+b*b*b+c*c*c==x) /*判断三位数字之和是否与原数相等*/ printf("%d是水仙花数\n",x); else printf("%d不是水仙花数\n",x); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 实训3 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
【复习题】 输入一个字符,判断它是小写、大写、 数字还是其它字符。 【复习题】 输入一个字符,判断它是小写、大写、 数字还是其它字符。 参考程序: #include “stdio.h” main() { char a; printf(“请输入一个字符\n”); scanf(“%c”,&a); if(a>=‘a’&&a<=‘z’) printf(“输入的字符是小写”); else if(a>=‘A’&&a<=‘Z’) printf(“输入的字符是大写”); else if(a>=‘0’&&a<=‘9’) printf(“输入的字符是数字”); else printf(“输入的字符是其它字符”); } 分析下面程序错误的原因: #include “stdio.h” main() { char a; printf(“请输入一个字符\n”); scanf(“%c”,&a); if(a>=‘a’&&a<=‘z’) printf(“输入的字符是小写”); if(a>=‘A’&&a<=‘Z’) printf(“输入的字符是大写”); if(a>=‘0’&&a<=‘9’) printf(“输入的字符是数字”); else printf(“输入的字符是其它字符”); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2 相关知识 3.2.4.2 if语句的嵌套 if语句中又包含一个或多个if语句,称为 if语句的嵌套。 一般形式如下: 1.if( ) if( ) 〈语句1〉 else 〈语句2〉 else if( ) 〈语句3〉 else 〈语句4〉 2.if( ) if( ) 〈语句2〉 else 〈语句3〉 内嵌if 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 说明: (1)if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。 (2)如果if与else的个数不相同,可以用花括号来确定配对关系。例如: if( ) {if( )〈语句1〉} else 〈语句2〉 这时{ }限定了内嵌if语句的范围,因此else与第一个if配对。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 例 有一函数: -1 (x<0) 0 (x=0) 1 (x>0) y= 编一程序,输入一个x值,对应输出y值。 #include “stdio.h” main() { int x,y; scanf(″%d″,&x); if(x<0) y=-1; if(x= =0) y=0; if(x>0) y=1; printf(″x=%d,y=%d\n″,x,y); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例】有一如下函数:编一程序,输入一个x值,对应输出y值。 -1 (x<0) 0 (x=0) 1 (x>0) y= main() { int x,y; scanf(″%d″,&x); if(x<0) y=-1; else if(x= =0) y=0; y=1; printf(″x=%d,y=%d\n″,x,y); } main() { int x,y; scanf(″%d″,&x); if(x<0)y=-1; else if(x= =0) y=0; else y=1; printf(″x=%d,y=%d\n″,x,y); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 ② main() { int x,y; scanf(″%d″,&x); if(x==0) y=0; else { if(x>0) y=1; y=-1; } printf(″x=%d,y=%d\n″,x,y); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 实训 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 三、相关知识 3.2.4.3 switch语句 C语言提供了switch语句直接处理多分支选择。 1.switch语句的一般形式 switch(表达式) { case 常量表达式1:语句组;break; case 常量表达式2:语句组;break; ...... case 常量表达式n:语句组;break; [default:语句组;[break; ]] } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 2.执行过程 (1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。 (2)如果没有任何一个case后面的“常量表达式”的值, 与“表达式”的值匹配,则执行default 后面的语句(组)。 然后,再执行switch语句的下一条 表达式 语句1 语句2 语句n 语句n+1 常量表达式1 常量表达式2 常量表达式n default switch语句的流程图表示 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4.3 switch语句 警察记录 printf(“这是迈克尔,身高 180cm,加利福尼亚第 12 大街”); 嫌疑犯照片 不是 停止搜索 printf(“这是丹尼尔,身高 193cm,现居住地不明,1998 年 12 月 12 日在佛罗里达被捕”); 不是 停止搜索 printf(“这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”); printf(“这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”); 是 停止搜索 default: printf(“未发现匹配项。对不起!”); 停止搜索 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 #include<stdio.h> main() { float x,y; char op; double z; printf("请输入两个操作数和操作符,中间用逗号隔开输入:\n"); scanf("%f,%f,%c",&x,&y,&op); switch(op) case '+':z=x+y;break; case '-':z=x-y;break; case '*':z=x*y;break; case '/':z=x/y;break; default:printf("operator Error"); } printf("%.2f%c%.2f=%.2f\n",x,op,y,z); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4.3 switch语句 3.说明 (1)switch后面的“表达式”,必须是整型和字符型中的一种。 (2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。 (3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句 (4)各case及default子句的先后次序,不影响程序执行结果。 (5)多个case子句,可共用同一语句(组)。 (6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作 3.2.4.3 switch语句 char in_char; printf("\n 请输入一个小写字母: "); scanf("%c", &in_char); switch(in_char) { case 'a': printf("\n 您输入的是元音字母 a\n"); break; case 'e': printf("\n 您输入的是元音字母 e\n"); case 'i': printf("\n 您输入的是元音字母 i\n"); case 'o': printf("\n 您输入的是元音字母 o\n"); case 'u': printf("\n 您输入的是元音字母 u\n"); default: printf("\n 您输入的不是元音字母 \n"); } switch 结构示例 内存 问题描述: 要求用户输入一个字符值并检查它是否为元音字母。 in_char e 请输入一个小写字母:e 您输入的是元音字母 e 浙江长征职业技术学院—计算机与信息技术系—相方莉制作