實(shí)驗(yàn)四 選擇結(jié)構(gòu)程序設(shè)計(jì)
【目的與要求】
1.了解C語(yǔ)句表示邏輯量的方法(以0代表“假”以1代表“真”);
2.學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)式;
3. 熟練掌握if語(yǔ)句和switch語(yǔ)句。
【上機(jī)內(nèi)容】
【一般示例】
【例1】 已知三個(gè)數(shù)a,b,c,找出最大值放于max中。
分析:由已知可得在變量定義時(shí)定義四個(gè)變量a,b,c和max,a,b,c是任意輸入的三個(gè)數(shù),max是用來(lái)存放結(jié)果最大值的。第一次比較a和b,把大數(shù)存入max中,因a,b都可能是大值,所以用if語(yǔ)句中if——else 形式。第二次比較max和c,把最大數(shù)存入max中,用if語(yǔ)句的第一種形式if形式。Max即為a,b,c中的最大值。
#include “stdio.h”
main()
{
int a,b,c,max; /*定義四個(gè)整型變量*/
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
if (a>=b)
max=a; /*a>=b*/
else
max=b; /*a<b*/
if (c>max)
max=c; /*c是最大值*/
printf(“max=%d”,max);
}
若輸入下列數(shù)據(jù),分析程序的執(zhí)行順序并寫(xiě)出運(yùn)行結(jié)果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3
(3)a=3,b=2,c=1
(4)a=3,b=1,c=2
(5)a=3,b=3,c=2
(6)a=2,b=1,c=2
【例2】輸入某學(xué)生的成績(jī),經(jīng)處理后給出學(xué)生的等級(jí),等級(jí)分類如下:
90分以上(包括90): A
80至90分(包括80):B
70至80分(包括70):C
60至70分(包括60):D
60分以下: E
方法一:(用if嵌套`)
分析:
由題意知如果某學(xué)生成績(jī)?cè)?/span>90分以上,等級(jí)為A;否則,如果成績(jī)大于80分,等級(jí)為B;否則,如果成績(jī)大于70分,等級(jí)為C;否則,如果成績(jī)大于60分為D;否則,如果成績(jī)小于60分,等級(jí)為E;但當(dāng)我們輸入成績(jī)時(shí)也可能輸錯(cuò),出現(xiàn)小于0或大于100,這時(shí)也要做處理,輸出出錯(cuò)信息。因此,再用if嵌套前,應(yīng)先判斷輸入的成績(jī)是否在0~100之間。
#include”stdio.h”
main()
{
int score;
char grade;
printf(“nplease input a student score:”);
scanf(“%f”,&score);
if(score>100||score<0)
printf(“ninput error!”);
else
{ if(score>=90)
grade=’A’;
else
{ if(score>=80)
grade=’B’;
else
{if(score>=70)
grade=’C’;
else
{ if(score>=60)
grade=’D’;
else grade=’E’;
}
}
}
printf(“nthe student grade:%c”,grade);
}
}
輸入測(cè)試數(shù)據(jù),調(diào)試程序。測(cè)試數(shù)據(jù)要覆蓋所有路徑,注意臨界值,例如此題中得100分,60分,0分以及小于0和大于100的數(shù)據(jù)。
方法二:用switch語(yǔ)句
分析:
switch 語(yǔ)句是用于處理多分支的語(yǔ)句。注意,case后的表達(dá)式必須是一個(gè)常量表達(dá)式,所以在以用switch語(yǔ)句之前,必須把0~100之間的成績(jī)分別化成相關(guān)的常量。所有A(除100以外),B,C,D類的成績(jī)的共同特點(diǎn)是十位數(shù)相同,此外都是E類。則由此可得把score除十取整,化為相應(yīng)的常數(shù)。
#include”stdio.h”
main()
{
int g,s;
char ch;
printf(“ninput a student grade:”);
scanf(“%d”,&g);
s=g/10;
if(s<0||s>10)
printf(“ninput error!”);
else
{ switch (s)
{ case 10:
case 9: ch=’A’; break;
case 8: ch=’B’; break;
case 7: ch=’C’; break;
case 6: ch=’D’; break;
default: ch=’E’;
}
printf(“nthe student scort:%c”,ch);
}
}
輸入測(cè)試數(shù)據(jù),同方法一一樣調(diào)試程序并寫(xiě)出結(jié)果。
【例3】有一函數(shù):
y= | ![]() |
|
用scanf函數(shù)輸入x的值(分別為x<1,1~10,>=10三種情況),求y值。
分析:y是一個(gè)分段表達(dá)式。要根據(jù)x的不同區(qū)間來(lái)計(jì)算y的值。所以應(yīng)使用If語(yǔ)句。
main()
{
int x,y;
printf(“please input x :”);
scanf(“%d”,&x);
if (x<1)
{
y=x;
printf(“y=%dn”,y);
}
else if (x<10)
{
y=2*x-1;
printf(“y=%dn”,y);
}
else
{
y=3*x-11;
printf(“y=%dn”,y);
}
【作業(yè)】
1. c語(yǔ)言如何表示“真”與“假”?系統(tǒng)如何判斷一個(gè)量的“真”與“假”?
2. 寫(xiě)出下面各邏輯表達(dá)式的值。設(shè)a=3,b=4,c=5
(1) a+b>c&&b= =c
(2) a||b+c&&b-c
(3) !(a>b)&&!c||1
(4) !(x=a)&&(y=b)&&0
(5) !(a+b)+c-1&&b+c/2
3. 有3個(gè)整數(shù)a、b、c,由鍵盤(pán)輸入,輸出其中最大的數(shù)。
4.有一函數(shù):
y= | ![]() |
|
寫(xiě)一程序,輸入x, 輸出y。
5.給出一百分制成績(jī),要求輸出成績(jī)等級(jí)A、B、C、D、E。90分以上為A,80~89為B, 70~79分為C,60~69分為D,60分以下為E。
6. 給一個(gè)不多于5位的正整數(shù),要求:
a. 求出它是幾位數(shù);
b. 分別打出每一位數(shù)字;
c. 按逆序打出各位數(shù)字,例如原數(shù)為321,應(yīng)輸出123。
7.輸入4個(gè)整數(shù),要求按由小到大的順序輸出。