实验3 分支结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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,两个程序运行的结果分别是、。

注意:case语句中如果包含break则执行后,将跳出switch,否则将顺次执行后续的case语句。

(3) 阅读下面的程序,理解switch语句中多个case共用一组执行语句的方法。

/* ex3-3 */
#include "stdio.h"
int main( )
{
int j, p = 10;
printf("Please input an integer:");
scanf("%d", &j);
switch(j)
{
case 1:
case 2:printf("%d ", p++); break;
case 3:printf("%d ", --p);
}
return 0;
}
分别输入3,2,1,输出结果是。

注意:这个程序要运行3次,第一次输入3,第二次输入2,第三次输入1。

输入1和2的结果是一样的,分析为什么?
(4) 阅读下面程序,理解多分支语句嵌套的使用方法。

/* ex3-4 */
#include "stdio.h"
int main( )
{
int x, y = 1, z;
if((z = y) < 0)
{
x = 4;
}
else if (y == 0)
{
x = 5;
}
else
{
x = 6;
}
printf("x=%d, y=%d\n", x, y);
return 0;
}
程序的运行结果是。

(5) 阅读下面程序,理解分支语句嵌套的使用方法。

/* ex3-5 */
#include "stdio.h"
int main( )
{
int x = 8, y = -7, z = 9;
if(x < y)
{
if(y < 0)
z = 0;
else
z = 1;
}
printf("%d\n", z);
return 0;
}
程序的运行结果是。

(6) 阅读下面两个程序,理解分支语句中条件表达式的使用。

/* ex3-6 */
#include "stdio.h"
int main( )
{
int x, y;
printf("Please input two integers:");
scanf("%d,%d", &x, &y);
if(x == y)
{
printf("x=y");
}
else if(x > y)
{
printf("x>y");
}
else
{
printf("x<y");
}
return 0;
}
从键盘上输入3,5,程序的运行结果是。

2. 阅读程序,分析程序中的错误,每处错误均在提示行/*************************/的下一行,请将错误改正,并上机验证。

(1) 根据switch语句的语法规定,改正下面的程序。

/* ex3-7 */
#include "stdio.h"
int main( )
{
int t, s;
printf("Please input an integer:");
scanf("%d", &t);
/*************************/
switch(t);
{
case 10:
case 9:s = 3 * t; break;
/*************************/
case 8.5:{s = t + 2; break;}
default:s = t - 2;
}
printf("%d\n", s);
return 0;
}
(2) 下面程序根据x的值计算y的值,如果x的值为0,则y的值为字符T,否则y的值为字符F,根据字符数据的书写格式改正程序。

/* ex3-8 */
#include "stdio.h"
int main( )
{
int x, y;
printf("Please input an integer:");
scanf("%d", &x);
if(x == 0)
{
/*************************/
y = "T";
}
else
{
/*************************/
y = F;
}
printf("%c\n", y);
return 0;
}
(3) 下面程序的功能是交换a、b两个变量的值,使a中存放两个数中的大数,b中存放两个数中的小数。

根据数据交换的实现方法改正程序。

/* ex3-9.c */
#include "stdio.h"
int main( )
{
int a, b, t;
t = 0;
printf("Please input two integers:");
scanf("%d,%d", &a, &b);
/*************************/
if(a > b)
{
/*************************/
a = t;
a = b;
b = t;
}
printf("a=%d,b=%d\n", a, b);
return 0;
}
(4) 下面程序当a等于100时输出字符串“a = 100”,否则输出字符串“a不等于100”。

根据if语句条件表达式的含义和输出字符串的格式规定改正程序。

/* ex3-10.c */
#include "stdio.h"
int main( )
{
int a = 100;
/*************************/
if(a = 100)
printf("%s\n", "a=100");
else
/*************************/
printf("%d\n", "a不等于100");
return 0;
}
注意:%s为字符串格式字符。

(5) 下面程序的功能是如果x能被3和7整除,输出“yes”,否则,输出“no”。

根据变量scanf函数的功能和格式、if语句的书写格式规定改正程序。

/* ex3-11 */
#include "stdio.h"
int main( )
{
int x;
printf("Please input an integer:");
/*************************/
x = scanf("%d");
/*************************/
if(x / 3 == 0 && x / 7 == 0)
printf("yes\n");
else
printf("no\n ");
return 0;
}
3. 阅读程序,在程序中提示行/*************************/的下一行填写正确内容,将程序补充完整,并上机验证。

(1) 根据a、b值的大小,输出不同的结果。

若a < b则输出b、a及a与b的积,否则输出a、b及a与b的商。

请完善程序。

/* ex3-12 */
#include "stdio.h"
int main( )
{
int a = 5, b = 60, c;
/*************************/
(1)
{
c = a * b;
printf("b=%d,a=%d,a*b=%d\n", b, a, c);
}
else
{
c = a / b;
printf("a=%d,b=%d,a/b==%d\n", a, b, c);
}
return 0;
}
(2) 从键盘上输入x的值,按下式计算y的值。

请完善程序。

┌ e x x<1
y =┤ 2x-1 1≤x<10
└ 3(x-6) x≥10
/* ex3-13 */
/* if 语句实现的多分支结构 */
#include "stdio.h"
#include "math.h"
int main( )
{
float x, y;
printf("Please input x:");
scanf("%f", &x);
/*************************/
if( (1) )
y = exp(x);
/*************************/
else if( (2) )
y = 2 * x - 1;
else
y = 3 * (x - 6);
printf("y=%f\n", y);
return 0;
}
(3)
计算三角形面积,其中,a、b、c表示三边,s表示三边和的一半,当任意两边之和小于第三边时给出出错信息“不能构成三角形”。

/* ex3-14 */
#include "math.h"
#include "stdio.h"
int main( )
{
float a, b, c; /* a,b,c分别表示边长 */
float s, k, area; /* k为中间变量存放被开方数,area表示面积 */ printf("Pplease input three real numbers:");
scanf("%f,%f,%f", &a, &b, &c);
/*************************/
(1) /* 判断a,b,c是否构成三角形 */
{
s = (a + b + c)/2;
k = s * (s - a) * (s - b) * (s - c);
area = sqrt(k);
printf("a=%7.2f,b=%7.2f,c=%7.2f\n", a, b, c);
printf("area = %7.2f\n", area);
}
else
{
/*************************/
(2) /* 输出a,b,c不能构成三角形的提示 */
}
return 0;
}
(4) 下面程序的功能是从键盘上输入一个1到3位的正整数,存入变量num中,判断它是几位数,存入变量p中,然后求出百位、十位、个位数字,分别存入i、j、k中,最后按3位、2位、1位三中情况输出。

/* ex3-15 */
#include "stdio.h"
int main( )
{
int num, i, j, k, p;
printf("Please input an integer:");
scanf("%d", &num);
if(num > 99)
{
p = 3;
i = num / 100;
j = (num - i * 100) / 10;
k = num % 10;
}
else if(num > 9)
{
p = 2;
j = num / 10;
k = num % 10;
}
/*************************/
(1)
{
p = 1;
k = num;
}
switch(p)
{
case 3:printf("%d%d%d\n", k, j, i);break;
/*************************/
(2)
case 1:printf("%d\n", k);
}
return 0;
}
(5) 下面是一个估值游戏程序,使用者从键盘输入一个数存入g中,若与设置值m相同,输出Right,若不相等先给出错信息Wrong,并进一步判断。

若大于m,则显示Too high,否则显示Too low。

/* ex3-16 */
#include "stdio.h"
int main( )
{
int m = 123;
int g;
printf("Please input an integer:");
scanf("%d", &g);
/*************************/
(1)
{
printf("**Right**");
}
else
{
printf("**Wrong**");
}
/*************************/
(2)
{
printf("Too high**");
}
if(g < m)
{
printf("Too low**");
}
return 0;
}
4. 按要求编写程序,并上机调试(请在提示行 /*************************/ 之间填写代码,完善程序)。

(1) 从键盘上输入任意三个数,首先输出这三个数,然后找出三个数中最大数并输出。

编程提示:
①输出这三个数
②将最大值存入max中
③将max与a比较,若max<a,把a赋给max。

④将max与b比较,若max<b,把b赋给max。

⑤将max与c比较,若max<c,把c赋给max。

⑥输出max。

三次比较可使用三个平行的if语句、if-else if、if嵌套等多种方法实现。

/* ex3-17 */
#include "stdio.h"
int main( )
{
float a, b, c, max;
printf("Please input three real numbers:");
scanf("%f%f%f", &a, &b, &c);
printf("a=%f,b=%f,c=%f", a, b, c);
/*************************/
/*************************/
printf("max=%f", max);
return 0;
}
(2) 根据输入的x值,求函数y的值。

/* ex3-18 */
#include "stdio.h"
int main( )
{
float x;
printf("Please input a real number:");
scanf("%f", &x);
/*************************/
/*************************/
printf("max=%f", max);
return 0;
}
(3) 给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。

90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。

编程提示:
①先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩。

②输入百分制成绩。

③将百分制成绩按10分分档:n/10,作为switch语句中括号内的表达式。

④按照
case 10:
case 9:
case 8:
case 7:
case 6:
default:
这六种匹配情况分别选择不同的入口
/* ex3-19 */
#include "stdio.h"
int main( )
{
int score;
char class;
printf("Please input a score:");
scanf("%d", &score);
printf("score=%d",score);
/*************************/
/*************************/
printf("class=%c",class);
return 0;
}
(4) 从键盘上输入x、y的值,使用条件表达式z = x >= y ? x : y )计算并输出z 的值。

/* ex3-20 */
#include "stdio.h"
int main( )
{
float x, y
printf("Please input two real numbers:");
scanf("%f%f", &x, &y);
/*************************/
/*************************/
return 0;
}
(5) 从键盘上输入一个字符,若为元音字母,则显示“YES”,否则显示“NO”。

编程提示:
使用switch语句,检查变量c是否等于'A'、'E'、'I'、'O'、'U'、'a'、'e'、'i'、'o'、'u'。

/* ex3-21 */
#include "stdio.h"
int main( )
{
char c;
printf("Please input a character:");
c = getchar( );
/*************************/
/*************************/
return 0;
}
2.3.5实验注意事项
1. C程序中表示比较运算的等号用“==”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。

2. 控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“零”则为“假”。

3. 在if语句的嵌套结构中,else与if的配对原则是:每个else总是与在其前面出现的、最近的、一个尚未配对的if构成配对。

4. case及后面的常量表达式,实际仅是起标号作用。

控制表达式的值与某个情况常量一旦匹配,就执行其后续语句。

在执行过程中,只要不遇到break语句,就一直执行下去,而不再判别是否匹配。

允许出现多个“case”与一组语句相对应的情况。

相关文档
最新文档