C语言程序设计-2设计.ppt_第1页
C语言程序设计-2设计.ppt_第2页
C语言程序设计-2设计.ppt_第3页
C语言程序设计-2设计.ppt_第4页
C语言程序设计-2设计.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,C语言程序设计-2设计,4.分支程序设计计算行李托运费 5.复杂分支程序设计字符菜单 6.循环程序设计小学加减法练习,C语言程序设计,项目四 分支程序设计计算行李托运费,学习目标,了解程序结构。 了解关系运算及关系表达式。 了解逻辑运算及逻辑表达式。 掌握使用if语句实现单分支和双分支的方法,乘坐飞机旅行,行李托运费用的计算比较复杂。如果完全依靠人工计算,会花费许多时间,而且很容易出现计算错误。如果能够使用计算机来自动计算行李费用,就可以大大提高工作效率,进而给人们带来很多方便。 本项目将编写一个能够根据旅客所持机票的种类和行李重量进行判断和计算的程序,只要输入机票种类、机票等级和行李的重量,就可以知道是否需要支付费用,费用是多少 。,项目四 分支程序设计计算行李托运费,项目四 分支程序设计计算行李托运费,任务一 了解程序的基本结构 任务二 了解if语句 任务三 了解C语言的关系运算和逻辑运算 任务四 进行程序总体设计 任务五 选择机票类型和机票等级,输入行李重量 任务六 计算行李托运费用,输出计算结果 任务七 设置系统密码,任务一 了解程序的基本结构,程序按照语句出现的先后顺序来执行。出现在前面的语句先执行,出现在后面的语句后执行。称为“顺序结构”的程序。 根据条件进行选择,决定下一步到底要执行什么操作的程序结构就称为“选择结构”,也叫做“分支结构”。 程序的某些部分需要反复执行,称为“循环结构”,被反复执行的部分就叫做“循环体”。,程序的基本结构,任务一 了解程序的基本结构,分支结构根据分支的多少,可以分为“单分支结构”、“双分支结构”和“多分支结构” 单分支结构是指条件成立时执行某操作,条件不成立则什么也不执行,直接执行后面的操作。 双分支结构是指条件成立时执行一种操作,条件不成立则执行另外一种操作,执行完毕后再执行后面的操作。 多分支结构是指根据条件的不同,选择多种不同的操作。,任务二 了解if语句,在C语言中可以使用if语句来实现分支。 if语句又叫做条件语句,可以通过判断条件是否成立来决定程序的流程(在可能执行的流程中选择执行其中的一个)。,任务二 了解if语句,一、if语句的格式 if语句的一般格式 if(表达式)语句组 else 语句组 或: if(表达式) 语句组 else 语句组,任务二 了解if语句,二、使用if语句实现分支 (1)实现单分支 省略else子句 格式如下: if(表达式) 语句 执行过程: 当条件表达式的值成立,即判定为逻辑“真”时,则执行语句;否则直接转向执行下一条语句。,任务二 了解if语句,二、使用if语句实现分支 (2)实现双分支 指定else子句 格式如下。 if(表达式)语句 else 语句 执行过程: 当条件表达式的值不等于(即判定为逻辑“真”)时,则执行语句,然后转向下一条语句;否则,执行语句。,任务二 了解if语句,二、使用if语句实现分支 (3)实现多分支 if语句嵌套 格式如下: if(表达式) 语句 else if(表达式) 语句 else if(表达式) 语句 else if(表达式) 语句 else 语句,如果一条语句中又完整地包含着另一条语句,则称为语句的“嵌套”。,任务三 了解C语言的关系运算和逻辑运算,一、了解关系运算 关系运算实际上就是比较运算,即将两个数据进行比较,判定两个数据是否符合给定的关系。 关系运算符,任务三 了解C语言的关系运算和逻辑运算,关系运算符的优先级 在关系运算符中,“”、“=”“”“=”优先级相同,“=”与“!=”也相同,且前4个高于后两个。 关系运算符与算术运算符、赋值运算符的优先级关系(由高到低)如下: 算术运算符 关系运算符 赋值运算符,(3)关系表达式 关系表达式是指用关系运算符将两个表达式连接起来,进行比较运算的式子。 例如: ab,a+bc-d,(a=3)=b,(ab)=(bc)等均为合法的关系表达式。 关系表达式可以求值,它的值是逻辑值,即为“真”(true)或“假”(false)。若表达式为真(即true)则返回1;否则,表达式为假(即false),返回0。,任务三 了解C语言的关系运算和逻辑运算,任务三 了解C语言的关系运算和逻辑运算,二、了解逻辑运算 逻辑运算符 C语言的逻辑运算符有3种 &:当且仅当两个运算量的值都为“真”时,运算结果为“真”;否则为“假”。 |:当且仅当两个运算量的值都为“假”时,运算结果为“假”;否则为“真”。 !:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。,逻辑表达式的真值表,任务三 了解C语言的关系运算和逻辑运算,二、了解逻辑运算 逻辑运算符的优先级 逻辑“非”的优先级最高,逻辑“与”次之,逻辑“或”最低,优先关系(由高到低)为:!(非)&(与)|(或)。 与其他种类运算符的优先关系(由高到低)为:! 算术运算 关系运算 & | 赋值运算。 逻辑表达式 逻辑表达式是指用逻辑运算符将一个或多个表达式连接起来进行逻辑运算的式子。逻辑表达式常用于表示多个条件的组合。 逻辑表达式的值为逻辑值,即“真(非0)”或“假(0)”。 在判断一个表达式是“真”或“假”时;是以0和非0为依据:如果为0,则判定为“逻辑假”;如果为非0,则判定为逻辑“真”。,任务四 进行程序总体设计,设计复杂的程序,通常都不直接编写代码,而是先对系统进行分析和设计。,任务五 选择机票类型和机票等级,输入行李重量,一、设计程序界面 程序界面是程序与用户进行交互的接口。作为真正实用的程序,它的界面首先必须美观。另外设计界面还有一个重要的原则,就是界面要方便用户的操作,要减少用户操作步骤和记忆负担,而且最好能够提供给用户足够的操作提示,使得用户不需花费大量的时间即可学会操作程序。满足以上条件的程序就认为是界面友好的程序。,本项目的程序界面 显示欢迎信息“Welcome to the baggage check-cost computing system!”(欢迎使用行李托运费计算系统) 提示用户选择机票类型和机票等级,#include main() int t_type; /*ticket type*/ int t_class; /*ticket class*/ float weight; /*baggage weight*/ float cost; clrscr(); printf(“nn* Welcome to the baggage check-cost computing system! *n“); printf(“n Please choose your ticket type:n“); printf(“t 1. Adultn“); printf(“t 2. Childn“); printf(“t 3. Babyn“); printf(“Your choice is (input 1,2 or 3, then press Enter):“); scanf(“%d“, ,任务六 计算行李托运费用,输出计算结果,计算行李托运费 第1种情况:旅客如果持成人票坐头等舱,而且他携带的行李没有超过40公斤,则他应支付的费用为0,也就是说“成人票”(t_type=1)、“坐头等舱”(t_class=1)、“行李不超过40公斤”(weight=40)这3个条件必须同时都满足,才符合这种情况,只要有一个条件不满足则不符合。 t_type=1 ”加以声明。 其他情况依次类推 还可将程序简化,if(t_type=1| t_type=2) ,简化后的程序:,printf(“n*n“); printf(“n Your check-cost is %8.2f YUANn“,cost); printf(“n*n“);,任务六 计算行李托运费用,输出计算结果,输出计算结果 程序如下:,任务七 设置系统密码,假设计算系统不希望被未授权使用,而是希望只有拥有系统密码的人员才能使用该系统。那么,就需要在程序运行时,首先提示用户输入密码,只有密码输入正确,才能正常进入系统,如果密码输入错误则显示提示信息:“你的密码有误!”,而不运行系统。,int password; printf(“Please input your password:n“); scanf(“%d“,C语言程序设计,项目五 复杂分支程序设计字符菜单,学习目标,了解使用if语句实现多分支的方法。 掌握使用switch语句完成多分支的方法。 了解break语句的使用方法。,项目五 复杂分支程序设计字符菜单,项目一到项目三主要使用顺序结构形式进行设计,即所有语句按照在源程序中的先后顺序逐条语句执行。项目四介绍了选择结构中的单分支和双分支的设计方法。而本项目将介绍如何利用更复杂的多分支和分支嵌套更灵活的控制程序流程。 本项目将介绍C语言中多分支选择结构的设计方法,并以一个带有字符菜单的简单程序编写过程为例进行说明。,项目五 复杂分支程序设计字符菜单,任务一 复习选择结构 任务二 了解switch-case语句 任务三 菜单的显示 任务四 接受用户的选择 任务五 根据用户选择执行不同操作 任务六 菜单的再次显示,任务一 复习选择结构,多分支的if-else语句格式: if (条件1) 语句1; else if (条件2) 语句2; else if (条件3) 语句3; else 语句n; 执行该语句时,顺次判断各条件,一旦满足某一个条件n,就接着执行对应的语句n。并且不再执行其他判断,直接退出整个if-else语句。,if(score=0 /*无效成绩*/,任务二 了解switch-case语句,switch语句的语法格式: switch (整型表达式) case 常量表达式1: 语句序列1 ; case 常量表达式2: 语句序列2 ; case 常量表达式n: 语句序列n ; default: 语句序列n+1 ; ,例子 switch(s) case 1: a+; b-; break; case 2: a+=3;break; case 3:a+=5;break; default: a*=2; ,注意,(1) switch后面括号“()”中的表达式必须是整型表达式,即它的值必须是int,char这样的整数类型。并且switch后面的括号“()”不能省略,也不能使用空表达式。 (2) case语句后面的常量表达式也必须是整数类型,而且不能是变量 (3) case语句起着分支判断作用,所以case后面的值必须互不相同。 (4) “case表达式:”后面可以是多条语句,不用加大括号“”。但是switch语句的整体要用大括号“”括起来。,注意,(5) 当switch括号中表达式的值与任意一个case表达式的值都不匹配时,就执行default语句。switch语句中也可以没有default语句。 (6) 当根据switch表达式的值选择匹配的分支后,将顺序执行分支的语句序列,直到执行到break语句时结束,并退出switch语句。所以如果没有break语句,就会继续执行下一个分支的操作。 (7) 各个case语句和default语句的出现顺序可以任意。写在最后面的分支语句(包括default语句)可以不加break语句。 (8) 选择一条分支语句(包括default语句)并执行结束后(遇到break语句或者遇到switch的右大括号“”),switch语句也就结束了。,例子: 将分数score转换为等级 将score/10作为switch分支表达式,switch(int)(score/10) case 10: if(score!=100) printf(“Invalid!n“); /*无效成绩*/ break; break; case 9: printf(“Excellentn“); /*优秀*/ break; case 8: printf(“Goodn“); /*良好*/ break; case 7: printf(“Satisfactoryn“); /*中等*/ break; case 6: printf(“Passn“); /*及格*/ break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“Failn”); break; /*不及格*/ default: printf(“Invalid!n“); /*无效成绩*/ ,任务三 菜单的显示,菜单的显示非常简单,直接输出提示字符串即可。 printf(“= Menu =n“); printf(“=n“); printf(“1 : Calculate the Absolute Value.n“); /*计算绝对值*/ printf(“2 : Odd-Even Judgement.n“); /*判断奇偶*/ printf(“3 : Upper Case to Lower Case.n”); /*大写字母转小写*/ printf(“4 : Quit !n“); /*退出*/ printf(“=n“); printf(“Choose the menu item and input its number!n“);,任务四 接受用户的选择,这种字符菜单当然不能象Windows应用程序那样用鼠标操作,只能通过键盘输入选择。而最简单的输入方式,是用户通过输入对应菜单项的编号选择某一项。代码如下所示。 int choice; scanf(“%d“,任务五 根据用户选择执行不同操作,使用switch语句来实现会使结构更明确。 switch(choice) case 1: 计算绝对值; break; case 2: 判断奇偶; break; case 3: case 4: ,计算绝对值 根据绝对值的特点,正数和0的绝对值是其本身,负数绝对值是它的相反数。所以,对待两种情况应该分别处理。 printf(“Input a integer:n“); scanf(“%d”, /*非负数的绝对值是其本身*/,整判断奇偶 数n的奇偶性通过表达式“n%2”的值来判断。如果模运算结果为0,说明n为偶数,否则就是奇数。 printf(“Input a integer:n“); scanf(“%d“, /*奇数*/,大写字母转小写字母 小写字母和对应大写字母的ASCII码的差值是固定的。固定差值可以用表达式“a-A”表示。所以大写字母ch对应的小写字母为“ch+固定差值”,也就是“ch+a-A”。 fflush(stdin); printf(“Input a char in Upper case:n“); scanf(“%c“, ,任务六 菜单的再次显示,使用第3种结构:循环结构 while语句的一般形式: while(条件表达式) 语句序列; while语句的执行过程如下:首先计算条件表达式的值,如果条件成立(为“真”),则执行大括号里面的语句,然后再一次判断条件是否成立。一旦条件不成立,就退出循环,while语句执行结束。,只要用户没有选择第4个菜单项“Quit”,那么就一直循环显示菜单。这里设置结束标志“int stop”,用它的值标识用户是否选择了退出。stop为0表示用户没有选择退出,为1表示选择退出。 将while循环的条件设为“stop=0”,并且case 4 的操作设为“stop=1”。这样,一旦用户选择退出,那么当再次进行条件判断时,由于不再符合循环要求,程序就会退出while循环,程序结束。,while(不退出) 显示菜单; /*根据用户的选择执行相应操作*/ switch( 选择 ) case 1: case 2: ,#include main() int choice,stop=0; /*choice存储选择的菜单编号,stop表示是否终止*/ int n; char ch; while(stop=0) /*主要用户不选择菜单4,就一直循环*/ choice=0; /*初始化为0*/ /*显示菜单*/ printf(“= Menu =n“); printf(“=n“); printf(“1 : Calculate the Absolute Value .n“); printf(“2 : Odd-Even Judgement.n“); printf(“3 : Upper Case to Lower Case.n“); printf(“4 : Quit !n“); printf(“=n“); printf(“Choose the menu item and input its number!n”);,scanf(“%d“,case 3: /*大写字母转化成小写字母*/ fflush(stdin); printf(“Input a char in Upper case:n“); scanf(“%c“, /*将结束标识置为1*/ ,C语言程序设计,项目六 循环程序设计小学加减法练习,学习目标,了解程序的循环结构。 熟悉随机数的意义及随机函数。 熟悉for循环。 熟悉while循环。 了解continue语句。 了解好程序的标准。,本项目编写一个供小学生进行十以内的加减法练习的程序。 可以让用户来选择进行加法练习或减法练习 根据用户的选择随机产生10道加法或减法算术练习题 由用户计算并输入答案,根据用户的计算结果,统计并显示用户答对的题目个数。 可以提示用户是否继续练习。 如果用户选择退出,则结束程序运行。,项目六 循环程序设计小学加减法练习,任务一 显示提示信息,由用户选择执行不同操作 任务二 出加法题 任务三 出减法题 任务四 出10道题 任务五 对用户计算结果进行判断,给出成绩 任务六 实现“再来一次”,项目六 循环程序设计小学加减法练习,任务一 显示提示信息,由用户选择执行不同操作,、程序的总体设计 首先分析本程序的功能和基本结构。, 程序运行后,进入开始界面,显示欢迎信息,提示用户进行选择。 如果用户选择“1”,则依次出现10道加法练习题,请用户输入计算结果。 如果用户选择“2”,则依次出现10道减法练习题,请用户输入计算结果。 如果用户选择“3”,则退出程序。 10道题都回答完毕后,统计正确题目个数,并输出结果。 提示用户是否需要继续练习,用户回答“是”(Y),则返回到第一步,用户回答“否”(N),则结束程序运行。,任务一 显示提示信息,由用户选择执行不同操作,显示提示信息,printf(“*nn“); printf(“ Welcome to the arithmetic exercise system!nn“); printf(“tt1. Addition exercisen“); printf(“tt2. Subtraction exercisen“); printf(“tt3. Exitnn“); printf(“*nn“); printf(“Please input your choice(1,2 or 3):“);、,任务一 显示提示信息,由用户选择执行不同操作,根据用户选择,执行不同操作,获得用户输入 用变量option来保存用户输入的数值。 int option; scanf(“%d“, 执行不同的操作 根据变量option的值来确定执行什么操作。,使用if语句完成设计 if(option=1) /*生成10道加法算术题,并统计答案正确的题的个数,输出结果*/ else if (option=2) /*生成10道减法算术题,并统计答案正确的题的个数,输出结果*/ else if(option=3) printf(“nGoodbey!“); /*打印“再见!”*/ exit(0);/*正常结束程序*/ else printf(“Your input is error!n“);,任务一 显示提示信息,由用户选择执行不同操作,根据用户选择,执行不同操作,使用switch语句完成设计 switch(option) case 1: /*生成10道加法算术题*/ break; case 2: /*生成10道减法算术题*/ break; case 3: printf(“nGoodbey!“); exit(0); break; case else printf(“Your input is error!n“);,任务二 出加法题,程序每次运行时都能出现不同的题目,需要用到随机函数“rand()”。 随机函数“rand()”功能是产生一个 “0RAND_MAX”随机整数。 一般地,如果想产生X和Y之间的数,可以使用下面的公式。 k=rand()%(Y-X+1)+X;,任务二 出加法题,程序每次运行时都能出现不同的题目,需要用到随机函数“rand()”。 随机函数“rand()”功能是产生一个 “0RAND_MAX”随机整数。 一般地,如果想产生X和Y之间的数,可以使用下面的公式。 k=rand()%(Y-X+1)+X; 一般要使用函数“srand”设定一个种子,通常利用系统的时间作为随机数种子。,#include #include #include main() int a,b; srand(time(0); a=rand()%10; b=rand()%10; printf(“t %d + %d =n“, a,b); ,任务二 出加法题,设定系统当前时间为随机数生成器种子并生成两个随机数,产生减法题和产生加法题的方法相似,分别产生被减数和减数。 如果被减数小于减数,需重新产生被减数和减数 再次判断被减数是否大于减数,如果是,就不断反复执行上述过程,直到被减数大于或等于减数,才输出减法算术题。 产生被减数a和产生减数b这两步操作可能会被执行多次。 当程序中出现了需要反复执行的部分,这样的程序就是“循环结构”程序。,任务三 出减法题,了解循环结构 循环结构是组成程序的三种基本结构之一。 在C语言中,循环结构可以分为下面两种情况。 第1种情况:先进行条件判断,如果条件成立就反复执行循环体语句,条件不成立,则退出循环。 第2种情况:先执行一遍循环体语句,然后进行条件判断,如果条件成立就反复执行语句,条件不成立,则退出循环,,任务三 出减法题,a)先判断,后执行,(b)先执行,后判断,循环结构,任务三 出减法题,C语言中,使用while语句完成第1种“先判断,后执行”的循环,使用do-while语句完成第2种“先执行,后判断”的循环。,While语句 while语句的一般格式: while(表达式) 循环体语句,“while(表达式)”中的表达式就是循环条件,它与“if(表达式)”中的表达式一样,一般为逻辑表达式或关系表达式,也允许是其他类型的数据,如整型实型字符型等。 循环体语句可以是一条语句,也可以是多条语句。当循环体语句仅由一条语句构成时,可以不使用复合语句形式(省略大括号)。 while语句的执行过程 首先求解表达式的值,当表达式的值为“真”(非0)时,执行while语句中的循环体语句,执行完循环体语句后,继续下一次条件判断;否则,跳过while语句中的循环体语句,执行while语句的下一条语句。,任务三 出减法题,任务三 出减法题,Do-While语句 Do-While语句的一般格式: Do 循环体语句 While(表达式);,Do-While语句的执行过程 首先执行一遍循环体语句,然后求解表达式的值,当表达式的值为真(非0)时,再执行一遍循环体语句,否则,结束循环,执行Do-While语句的下一条语句。,#include #include #include main() int a,b; srand(time(0); do a=rand()%10; b=rand()%10; printf(“t %d + %d =n“, a,b); while(ab); ,用Do-While语句解决问题。,任务三 出减法题,任务四 出10道题,使用While语句和Do-While语句出10道加法题 需要一个变量控制循环的次数,这样的变量称之为“循环变量”。,任务四 出10道题,#include #include #include main() int a,b,i i=0; while(i10) srand(time(0); a=rand()%10; b=rand()%10; printf(“t %d + %d =n“, a,b); i+; ,用while语句出10道加法题,任务四 出10道题,用While语句和Do-While语句出10道减法题 continue语句 其语义是:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。 continue语句只结束本层本次的循环,并不跳出循环。 break语句 其语义是:中断当前的循环语句,不管循环条件成立不成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论