第4章 选择结构程序设计
上机实验
实验题目:选择结构程序设计
实验目的:
1、熟练掌握关系运算符、逻辑运算符、条件运算符及其表达式的使用。
2、灵活使用转向语句(return语句、goto语句、break语句和continue语句)实现流程控制。
3、掌握使用if语句编写选择结构程序的方法。
4、掌握使用switch语句编写选择结构程序的方法。
实验内容及要求:
【上机实验ch4S-1】 计算4个数中的最大值。(要求综合应用实现判断功能的运算符及其表达式来完成编程)
思路提示:使用条件运算符、关系运算符及其表达式来实现比较判断,并将运算结果赋值。
参考程序代码:
#include<stdio.h>
main()
{
int a=56,b=37,c=98,d=79;
int max;
max=a>b?a:b;
max=max>c?max:c;
max=max>d?max:d;
printf(“Max is %d.\n”,max);
}
运行结果:
Max is 98.
程序分析:
(1)定义a、b、c、d、max为整型变量,并分别对a、b、c、d变量赋初值, max变量用于存放最大数。
(2)条件运算符、关系运算符可以实现简单的判断功能(选择作用)。
(3)一次条件运算可以实现两个数比较大小;4个数比较大小,需要经过3次条件运算。
(4)使用格式输出控制函数实现格式控制。
【上机实验ch4S-2】验证实验。
思路提示:熟练应用关系运算符、逻辑运算符、条件运算符并正确书写表示判断的表达式;正确使用if语句和switch语句实现选择结构程序设计,深入学习转向语句在程序中的特殊运用。
操作步骤:
1、输入并运行【例ch4-1】和【例ch4-2】的程序代码,分析结果。
2、分别输入并运行【例ch4-3】和【例ch4-4】中所涉及到的程序代码,分析结果。
【上机实验ch4S-3】使用if语句编程实现比较并输出三个数中的最大值。
思路提示:区别于【上机实验ch4S-1】 计算4个数中的最大值,可以采用if语句的嵌套使用实现多分支选择判断。
参考程序代码:
#include<stdio.h>
void main()
{
int x=76,y=37,z=98,max;
max=x;
if(z>y)
if(z>x)
max=z;
else
if(y>x)
max=y;
printf(“Max=%d.\n”,max);
}
运行结果:
Max=98.
程序分析:
(1)定义x、y、z、max为整型变量,并分别对x、y、z变量赋初值,max变量用于存放最大数。
(2)在配对的if语句和else子句中分别嵌套if语句可以实现多分支判断。
(3)使用格式输出控制函数实现格式控制。
【上机实验ch4S-4】使用if语句编程实现比较三个数的大小,并按从小到大输出。
思路提示:区别于【上机实验ch4S-1】 计算4个数中的最大值和【上机实验ch4S-3】比较并输出三个数中的最大值,在使用if语句实现单分支判断基础上,采用中间变量法实现数值交换。
参考程序代码:
#include “stdio.h”
#include “conio.h”
void main()
{
int x,y,z,t;
printf(“Enter x,y,z:\n”);
scanf(“%d%d%d”,&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;} /*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;} /*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;} /*交换z,y的值*/
printf(“Small to Big:%d,%d,%d\n”,x,y,z);
}
运行结果:
Enter x,y,z:
78
56
89
Small to Big:56,78,89
程序分析:
(1)定义x、y、z、t为整型变量,并通过输入控制函数实现键盘输入数值为x、y、z变量赋初值,t为中间变量,用于存放交换数值。
(2)使用3条if语句实现3个变量不同情况的比较(设置判断条件),结合由t构成的复合语句,实现数值交换。
(3)使用格式输出控制函数实现格式控制。
【上机实验ch4S-5】根据键盘输入的数值(值域:1-7之间),编程实现输出每周的后续几天?
思路提示:使用switch语句实现多分支条件判断。
参考程序代码:
#include <stdio.h>
int main()
{
int a;
printf(“Input integer number:”);
scanf(“%d”,&a);
switch(a)
{
case 1: printf(“Monday\n”);
case 2: printf(“Tuesday\n”);
case 3: printf(“Wednesday\n”);
case 4: printf(“Thursday\n”);
case 5: printf(“Friday\n”);
case 6: printf(“Saturday\n”);
case 7: printf(“Sunday\n”);
default:printf(“error\n”);
}
return 0;
}
运行结果:
Input integer number:3↙
Wednesday
Thursday
Friday
Saturday
Sunday
error
程序分析:
(1)定义整型变量a,通过键盘输入数值为其赋值。
(2)根据switch语句中表达式的值,查找各个case后面的常量表达式,直到找到一个等于表达式值的常量表达式,则转向到该case后面的语句去执行。
〖强化练习〗根据键盘输入的数值,编程实现判断是哪一天(星期几)?
参考程序代码:
#include <stdio.h>
int main()
{
int a;
printf(“Input integer number:”);
scanf(“%d”,&a);
switch(a)
{
case 1: printf(“Monday\n”); break;
case 2: printf(“Tuesday\n”); break;
case 3: printf(“Wednesday\n”); break;
case 4: printf(“Thursday\n”); break;
case 5: printf(“Friday\n”); break;
case 6: printf(“Saturday\n”); break;
case 7: printf(“Sunday\n”); break;
default:printf(“error\n”); break;
}
return 0;
}
运行结果:
Input integer number:3↙
Wednesday
【上机实验ch4S-6】判别某一年year是闰年。
思路提示:采用if语句的嵌套使用实现多分支选择判断。判断闰年的条件是:(1)能被4整除,但不能被100整除。或者(2)能被4整除,又能被400整除。
参考程序代码:
#include “stdio.h”
main( )
{
int year,leap;
printf(“Enter year:”);
scanf(“%d”,&year);
if (year%4==0&&year%100!=0) leap=1;
else if (year%400==0) leap=1;
else leap=0;
if (leap==1)
printf(“%d is a leap year.\n”,year);
else
printf(“%d is not a leap year.\n”,year);
}
运行结果:
Enter year:2007
2007 is not a leap year.
程序分析:
(1)定义year、leap为整型变量,通过键盘输入数值为变量year赋值,leap变量用于存放闰年的真值1或假值0。
(2)在配对的if语句和else子句中分别嵌套if语句可以实现多分支判断。判断闰年的逻辑表达式可写为:(year % 4==0 &&year %100 !=0)||year%400= =0
(3)以上表达式可以拆分,在不同if语句的条件判断中出现,只要同时满足表达式为真,则year是闰年;否则为非闰年。
(4)使用输入输出格式输出控制函数实现格式控制。
【上机实验ch4S-7】求一元二次方程的根。
编程思路提示:由键盘输入a、b、c,(1)当a≠0且()时,方程有两个不等的实根;(2)当a≠0且()时,有两个相等的实根;(3)当a≠0且()时,有两个共扼复根。针对(1)(2)(3)情况,要求正确书写求根表达式,使用多分支选择判断实现不同情况的求根。
参考程序代码:
#include “stdio.h”
#include “math.h”
main( )
{
float a,b,c,d,x1,x2,lp,ip;
printf(“Enter a,b,c:”);
scanf(“%f%f%f”,&a,&b,&c);
printf(“the equation”);
if (fabs(a)<1e-6) printf(“is not quadratic.\n”);
else
{
d=b*b-4*a*c;
if (fabs(d)<=1e-6) /*相等的实根*/
{
printf(“has two equal roots:\n”);
printf(“x1=x2=%8.4f\n”,-b/(2*a));
}
else if (d>1e-6) /*不相等的实根*/
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf(“has two real roots:\n”);
printf(“x1=%8.4f, x2=%8.4f\n”,x1,x2);
}
else /*虚根*/
{
lp=-b/(2*a);ip=sqrt(-d)/(2*a);
printf(“has two complex roots:\n”);
printf(“x1=%8.4f+%8.4fi\n”,lp,ip);
printf(“x2=%8.4f-%8.4fi\n”,lp,ip);
}
}
}
运行结果:
Enter a,b,c:0 5 7
the equationis not quadratic.
或者:
Enter a,b,c:3 5 7
the equationhas two complex roots:
x1= -0.8333+ 1.2802i
x2= -0.8333- 1.2802i
程序分析:
(1)定义a、b、c、d、x1、x2、lp、ip为浮点型变量,其中:a、b、c为方程的系数,d为中间变量,用于存储判根条件,a、b、c变量的值是通过键盘输入的,变量x1、x2是存储实根,变量lp、ip是用于存储虚根。
(2)表达式-b/(2*a)是求相同实根的;表达式x1=(-b+sqrt(d))/(2*a)和x2=(-b-sqrt(d))/(2*a)是求两个不同实根的;表达式lp=-b/(2*a)和ip=sqrt(-d)/(2*a)是求两个虚根的实部和虚部。
(3)综合使用scanf()函数、printf()函数实现复杂的格式化输入输出控制。
评论0