C语言作业3-多分支结构程序
- 格式:doc
- 大小:1.09 MB
- 文档页数:3
实验4 多分支程序
一、实验目的
1.了解程序的多分支结构。
2.了解多分支结构程序的编程方法。
二、实验内容
在多分支结构的程序中,能够按调用号执行相应的功能。
三、实验说明
多分支结构是程序中常见的结构,若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序,完成指定操作。
基本实验要求:根据A里面的值给相应的片内RAM单元赋值,A的值范围为0~3,要给对应的30H~33H赋相应A的值。
四、硬件设计
利用以下元件:A T89C51、CAP、CAP-ELEC、CRYSTAL、RES。
设计出如下的硬件电路。
晶振频率为12MHz。
五、参考程序框图
多分支参考程序框图
六、思考
1)请分别采用不同的跳转指令(AJMP 、LJMP )并调试参考。
2)设变量x 的值存放在内部RAM 的50H 单元中,求y 并存于40H
10
1010100
10100x x y x x x x +<⎧⎪=≤≤⎨⎪+>⎩。
5分钟学会c语言多分支结构C语言中的多分支结构通常是通过使用if-else if-else语句来实现的。
这种结构允许根据不同的条件执行不同的代码块。
下面我将从多个角度来解释如何在C语言中使用多分支结构。
首先,让我们来看一个简单的例子,假设我们想根据用户输入的成绩等级来输出不同的评语。
我们可以使用if-else if-else结构来实现这一点,代码如下:c.#include <stdio.h>。
int main() {。
int score;printf("请输入成绩,");scanf("%d", &score);if (score >= 90) {。
printf("优秀\n");} else if (score >= 80) {。
printf("良好\n");} else if (score >= 70) {。
printf("中等\n");} else if (score >= 60) {。
printf("及格\n");} else {。
printf("不及格\n");}。
return 0;}。
在这个例子中,我们使用了if-else if-else结构来根据不同的条件输出不同的评语。
当用户输入一个成绩后,程序会依次检查该成绩属于哪个范围,并输出相应的评语。
除了嵌套使用if-else if-else结构外,我们还可以使用switch语句来实现多分支结构。
下面是一个使用switch语句的例子:c.#include <stdio.h>。
int main() {。
char grade;printf("请输入成绩等级,");scanf(" %c", &grade);switch (grade) {。
XXX大学软件类实验报告
课程名称:C语言程序设计学号:
姓名:
班级:
指导教师:
开课学期:
学院:
XXX大学教务处
4.switch语句。
四、实验过程及内容:(运行结果请抓图到对应题目的下方)
1. 先分析以下程序,写出运行结果,再上机检验。
实验结果:
2.先分析以下程序,写出运行结果,再上机检验。
实验结果:
3.先分析以下程序,写出运行结果,再上机检验。
实验结果:
4. 程序改错题。
以下程序的功能是将a、b、c三个数从小到大进行排序,即使得a≤b≤c.。
程序中有一些错误,试将其改正并上机验证。
实验结果:
5. 程序填空题。
以下程序的功能是:从键盘接收一个字符,如果是小写英文字母,则将其转换为相应的大写字母;如果是大写英文字母,则将其转换为相应的小写字母;如果是其他字符,则不做转换。
填空将程序补充完整并上机验证。
实验结果:
6. 编程题。
根据以下分段函数计算y的值,x的值由键盘输入。
保留两位小数
输入格式:-2
输出格式:y=-2.00
实验代码:
实验结果:
7.输入一个正整数作为年份,编程判断该年是否为闰年。
若是输出“Yes”,否则输出“No”。
提
示:能被4整除,但不能被100整除的年份;或者能被400整除的年份。
实验代码:
实验结果:。
实验三 选择结构程序设计一、实验目的与要求1. 理解C 语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。
2. 掌握利用if 结构实现选择结构的方法。
3. 掌握利用switch 结构实现多分支选择结构。
4. 结合程序掌握一些简单的算法,学习调试程序5. 实验4学时二、实验内容1.程序改错题改正下面程序中的错误。
输入实数x ,计算并输出下列分段函数f(x)的值(保留1位小数)。
)100(1=x x==)(x f y)100(≠x x输入输出示例1(改正后程序的运行结果)Enter x :100f )=输入输出示例2(改正后程序的运行结果)Enter x :23f )=源程序(有错误的程序)#include<>#include<>void main(void){double x;printf("Enter x: \n");scanf("=%f", x);if (x = 100) {y = 1/sqrt(x)}else (x != 100) {y = x;}printf("f(%.2f) = %.1f\n",x,y);}答:#include<>#include<>void main(void){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x=100)y = 1/sqrt(x);elsey= x;printf("f(%.2lf)=%.1lf\n",x,y);}2.一般编程题编程题1输入任意三个整数a,b,c ,求3个数中的最大值和最小值。
答:#include <>void main(){int a,b,c;printf("请输入三个整数:");scanf("%d %d %d",&a,&b,&c);if (a>=b)t=a,a=b,b=t;if (a>=c)t=a,a=c,c=t;if (b>=c)t=b,b=c,c=t;printf("最小值为:%d\n",a);printf("最大值为:%d\n",c);}编程题2输入x ,计算并输出下面分段函数f(x)的值(保留2位小数)。
2.3 实验3 选择结构程序设计2.3.1 实验学时:2学时2.3.2实验目的1. 掌握C语言关系表达式和逻辑表达式的运算和使用。
2. 正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。
2.3.3 预习要求1.关系运算符和关系表达式、逻辑运算符和逻辑表达式。
2.if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套。
3.switch语句的形式。
2.3.4实验内容1. 阅读程序,分析结果,并上机验证。
(1) 阅读下面的程序,理解逻辑运算的短路特性。
/* ex3-1 */#include "stdio.h"int main( ){int a = 3, b = 5, c = 8;if(a++ < 3 && c-- != 0) b = b + 1;printf("a=%d\tb=%d\tc=%d\n", a, b, c);return 0;}程序运行后a、b、c的值分别是。
(2) 根据下面两个程序的运行结果,理解case语句中break语句的作用。
/* ex3-2-1方法1 *//* 不含break的switch */#include "stdio.h"int main( ){int a, m = 0, n = 0, k = 0;printf("Please input an integer:");scanf("%d", &a);switch(a){case 1:m++;case 2:case 3:n++;case 4:case 5:k++;}printf("m=%d,n=%d,k=%d\n", m, n, k);return 0;}/* ex3-2-2 方法2 *//* 含break的switch */#include "stdio.h"int main( ){int a, m = 0, n = 0, k = 0;printf("Please input an integer:");scanf("%d", &a);switch(a){case 1:m++; break;case 2:case 3:n++; break;case 4:case 5:k++;}printf("m=%d,n=%d,k=%d\n", m, n, k);return 0;}分别从键盘上输入1、3、5,两个程序运行的结果分别是、。
21.htm01. 从键盘输入一个字符,如果是大写字母,就转换成小写;如果是小写字母,就转换成大写,如果是其他字符原样保持并将结果输出。
#include <stdio.h>void main(){ char c;scanf("%c",&c);if(c>='A'&&c<='Z') c=c+32;else if(c>='a'&&c<='z') c=c-32;printf("%c",c);}02. 从键盘输入一个数,判断其是否是5的倍数而不是7的倍数。
如果是,输出Yes,否则输出No。
#include <stdio.h>void main(){ int a;scanf("%d",&a);if(a%5==0&&a%7!=0) printf("yes");else printf("no");}03. 从键盘输入一个4位正整数,求其逆序数,并输出。
例如:若输入1234,则输出应该是4321。
#include <stdio.h>void main(){ int n,g,s,b,q,m;scanf("%d",&n);q=n/1000; b=n/100%10; s=n/10%10; g=n%10;m=g*1000+s*100+b*10+q;printf("%d\n",m);}22.htm01. 从键盘输入一个字符,如果是字母,就输出其对应的ASCII码;如果是数字字符,就转换成对应整数并输出。
#include <stdio.h>void main(){ char c;scanf("%c",&c);if(c>='a'&&c<='z'||c>='A'&&c<='Z')printf("ASCII:%d",c);else if(c>='0'&&c<='9') printf("数字:%d",c-'0');}02. 从键盘输入一个数,判断其是否能同时被3和5整除。
实训三分支结构程序设计班级:学号:姓名:一、实训目标熟练掌握分支结构程序的编程思路、设计、调试和测试方法。
1、掌握C的逻辑运算符和关系运算符的使用方法,能够正确描述各种关系。
2、真正理解else-if和switch语句的语法和执行流程。
3、能够分析一般性多选择结构的需求,熟练绘制多分支程序的流程图。
4、掌握多分支程序的设计方法。
5、进一步熟悉VC集成环境,快速排除语法错误。
6、初步掌握分支程序的调试和测试方法,能够快速定位和排除逻辑错误。
7、能够根据已有程序,构建固定循环次数的循环程序(for循环)。
二、语法练习1.写出判断1个字符是大写字符的逻辑表达式:2.按优先级顺序列出你所学过的C语言运算符:3.对于else-if语句,其一般形式如左下所示,请画出对应的流程图。
if(表达式1){ 语句块1; }else if(表达式2){ 语句块2; }::else if(表达式n-1){ 语句块n-1; }else{ 语句块n; }4.在C语言中,{}应用于、和switch语句中。
5.switch语句中,case 后面只能是,不能是一个范围。
6.switch语句中,break语句的作用是,如果没有default,则当所有case都不相等时,程序。
7.switch语句的一般形式如下,请画出它的执行流程图。
switch(){case 常量表达式1: 语句段1;break;case 常量表达式2: 语句段2;break;::case 常量表达式n: 语句段n;break;default: 语句段n+1;}8.体会switch语句中break的作用,请画出如下switch语句的执行流程,此题若不会,可在实训时,试一下再完成。
switch(){case 常量表达式1: 语句段1;case 常量表达式2: 语句段2;break;case 常量表达式3:case 常量表达式4:case 常量表达式5: 语句段5;}三、实训内容和步骤1、输入1个英文字符,均以小写字符的形式输出。
3 分支结构程序3.1 顺序结构程序按照语句的书写顺序依次执行的程序段称为顺序结构程序。
数据的输入、输出、简单计算等都可由顺序结构程序完成。
图3.1是顺序结构程序运行流程图。
顺序结构程序设计常用的语句有:输入、输出语句、赋值语句、函数调用等。
【例3.1】顺序结构程序:计算半径为r 的圆面积、球体积。
#include <stdio.h>#define PI 3.1415926void main(){ float r,s,v;scanf("%f",&r);s=PI*r*r;v=4.0/3.0*r*r*r; //计算球的体积printf("圆面积:%f",s);printf("球体积:%f",v);}3.2 分支结构程序设计分支结构程序体现了程序的判断能力。
分支结构有:单分支结构、双分支结构、多分支结构。
C 提供了实现分支结构功能的语句if 和switch 。
3.2.1 if 语句1.单分支if 语句格式:if (条件表达式) 语句;功能:计算并判断条件表达式的值,若为真(非0)执行if 后面的语句,然后运行if 语句下面的程序;若为假不执行该语句,直接运行if 语句下面的程序。
执行流程如图3.2所示。
例如:x=0;y=0;输出字符串:x 等于y if (x= =y) printf("x 等于y");因为x 与y 相等,条件表达式x= =y 成立,即为真值(值为1),所以printf("x 等于y");执行。
若误写成:if (x=y ) printf("x 等于y");输出语句就不会执行,因为x=y 是赋值表达式,将0赋给x ,条件表达式(x=y)的值为0,0是假值,条件不成立,不执行输出语句。
图3-2 分支结构【例3.2】输入一个整数,若大于60则输出“大于60,及格”字样,否则不做处理。
3.3练习与习题参考答案3.3.1练习参考答案3-1 例3-4中使用else-if 语句求解多分段函数,为了检查else-if 语句的三个分支是否正确,已经设计了三组测试用例,请问还需要增加测试用例吗?为什么?如果要增加,请给出具体的测试用例并运行程序。
解答:最好再增加两组测试用例,因为尚未对分段函数参数的边界值进行测试。
可再给出x=0和x=15时的两种情况。
3-2 计算符号函数的值:输入一个整数x ,计算并输出符号函数 sign(x) 的值。
试编写相应程序⎪ ⎩⎪ ⎨ ⎧ >=<−==010001)(x x x x sign y ,,,解答:#include<stdio.h>int main (void){int x, y;scanf ("%d", &x);if (x > 0) y = 1;else if (x == 0) y = 0;else y = -1;printf ("sign(%d) = %d\n", x, y);return 0;}3-3统计学生平均成绩与及格人数:输入一个正整数n,再输入n 个学生的成绩,计算平均成绩,并统计所有及格学生的人数。
试编写相应程序。
解答:#include <stdio.h>int main (void){int count, grade, i, n;double average, sum;scanf ("%d", &n);count = 0;sum = 0;for (i = 1; i <= n; i++){scanf ("%d", &grade);sum = sum + grade;if (grade >= 60) {count++;}}if (n > 0) {average = sum / n;}else{average = 0;}printf ("average = %.1f\n", average);printf ("count = %d\n", count);return 0;}3-4统计字符:输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
C语言程序设计(switch多分支选择结构)3.1.4switch多分支选择结构使用多分支结构的应用中有一类问题是通过同一个表达式的不同取值来决定执行不同语句,该类问题如果采用if…elseif…else结构时不够简洁,C中提供了另外一种多分支结构来实现类似的问题,该多分支结构为switch多分枝选择结构。
其形式如下:switch(表达式) {case常量表达式1:语句1;[break]case常量表达式2:语句2;[break]…case常量表达式n:语句n;[break]default:语句n+1;}其语义是:计算switch后面表达式的值,逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,如果遇到break语句,则跳出switch结构,即跳过所有的case语句(包括default)继续执行该结构后面的语句,如果没有break语句,则不再判断后面case后的条件,直接执行下面所有case 后的语句,直到碰到break语句为止,跳出switch结构执行后面的语句。
如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句,然后执行该结构后的语句。
【例3-8】编写程序,将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。
该问题的解决步骤如下:(1)输入1至7的任意一数存入变量;(2)根据变量的值执行相应的输出语句,该变量需要被判断7次。
参考程序如下:/*程序名:3_8_1.c*//*功能:将1至7中的任意一个数字转化成对应的英文星期几的前三个字母*/#includeint main(){int a;printf("input integer number:");scanf("%d",&a);switch(a){/*对表达式a做多次判断,根据不同的条件做不同的语句*/case1:printf("Mon\n");break;/*break的作用是跳出该结构*/case2:printf("Tue\n");break;case3:printf("Wed\n");break;case4:printf("Thu\n");break;case5:printf("Fri\n");break;case6:printf("Sat\n");break;case7:printf("Sun\n");break;default:printf("error\n");/*输入的不是0至7的整数时执行*/}return0;}与该程序等价的if…else if…形式的参考程序如下:/*程序名:3_8_2.c*//*功能:将1至7中的任意一个数字转化成对应的英文星期几的前三个字母*/#includeint main(){int a;printf("input integer number:");scanf("%d",&a);if(a==1)printf("Mon\n");else if(a==2)printf("Tue\n");else if(a==3)printf("Wed\n");else if(a==4)printf("Thu\n");else if(a==5)printf("Fri\n");else if(a==6)printf("Sat\n");else if(a==7)printf("Sun\n");else printf("error\n");return0;}注意:(1)在case后的各常量表达式的值不能相同,switch后表达式的数据类型只能是整型或字符型,否则会出现错误;(2)在case后,允许有多个语句,可以不用花括号括起来;(3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果;(4)default子句可以省略不用;(5)多个case可共用一组语句。