第四章 選擇結構程序設計
章節重點:這一章應着重掌握if...else語句、switch多分支語句、關係運算符和關係表達式、邏輯運算符和邏輯表達式、條件運算符和條件表達式、會使用選擇結構的嵌套
(1)概念題(這裏着重理解)
算數運算:+、-、*、/運算,對象爲實數或複數,結果也爲實數或者複數。
關係運算:>、>=、<、<=、==、!=,六種,關係運算的值爲邏輯值,true、false。
邏輯運算:&&、||、!,三種,邏輯運算的值爲邏輯值,true、false。
(2)概念題(這裏着重理解)
在C的邏輯運算中 1 代表爲 真,以 0 代表爲 假 。
在邏輯表達式中的運算對象 非零 代表 真,以 0 代表 假 。
(3)a=3,b=4,c=5。寫出邏輯表達式的值(詳細講解一道題)
a+b>3&&b==c
要掌握符號的優先級問題,因爲a+b=7所以a+b>3爲真,然後b是不等於c的所以爲假,1&&0,結果爲0。
這種題的解題技巧在先處理關係運算,處理完後在分析邏輯運算,分清運算符的結合方向爲自右向左還是自左向右。
(4)輸入三個數,輸出最大值
# include <stdio.h>
int main()
{
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);//注意輸入格式
if(a>b)
max=a;
else
max=b;
if(max<c)
max=c;
printf("%d",max);
return 0;
}
(5)輸入小於1000的正數,輸出它的平方根(注意題目中的要求)
算法分析:注意double數據類型的輸入格式以及求次方的pow()函數。想輸出整形,可以直接賦值給整形。
#include <stdio.h>
#include <math.h>
int main()
{ double n;
int m=2;
int s;
printf("請輸入一個小於1000的正數n\n");
scanf("%lf",&n);//double數據類型的輸入需使用%lf
//printf("%f\n",n);double數據類型的輸出使用%f即可
if(n>1000)
printf("請從新輸入正數n\n");
s=pow(n,2);
printf("n的平方根爲%d",s);
return 0;
}
(6)階躍函數求值
#include <stdio.h>
int main()
{
int x,y; //根據要求定義數據類型
printf("請輸入x的值\n");
scanf("%d",&x);
if(x<1)
y=x;
else if((1<=x)&&(x<10))
y=2*x-1;
else
y=3*x-11;
printf("%d",y);
return 0;
}
(7)階躍函數求值
這道題根據給出的程序,應該明白if與else的配對關係,else總是與他上面的最近的未配對的if配對。
程序1不能實現題目要求,當x輸入負數時 ,y輸出的是0,因爲執行了else。當x輸入爲零時,就沒有進入if的判斷體。
程序2也不能實現題目要求,當x輸入負數時,y輸出0,因爲不進入if判斷體。當x輸入0時,y=-1,執行else語句。
(8)成績等級
算法分析:對於輸出成績等級,選擇比較多,可選用switch多分支語句,也可使用if...else。
# include<stdio.h>
int main ()
{
int score;
printf("請輸入百分制成績\n");
scanf("%d",&score);
switch(score/10){ //取除數
case 9:printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("E");break;//若值爲5,4,3,2,1,0都執行E;
}
return 0;
}
(9)正整數
算法分析:藉助判斷位數,去輸出數據,我完全使用取除數和餘數進行運算輸出。
# include <stdio.h>
int main()
{
int num;
int one,two,three,four;//定義個位十位百位千位
scanf("%d",&num);
if(num/1000) //求出它是幾位數並且正序輸出、逆序輸出
{printf("是四位數\n");
printf("正序%d",num/1000);
printf("%d",num%1000/100);
printf("%d",num%1000%100/10);
printf("%d\n",num%1000%100%10);
printf("逆序%d",num%1000%100%10);
printf("%d",num%1000%100/10);
printf("%d",num%1000/100);
printf("%d",num/1000);}
else if(num/100)
{printf("是三位數\n");
printf("正序%d",num/100);
printf("%d",num%100/10);
printf("%d\n",num%100%10);
printf("逆序%d",num%100%10);
printf("%d",num%100/10);
printf("%d",num/100);}
else if(num/10)
{printf("是二位數\n");
printf("正序%d",num/10);//正序
printf("%d\n",num%10);
printf("逆序%d",num%10);//逆序
printf("%d\n",num/10);
}
else
{printf("是個位數\n");
printf("正序%d\n",num/1);
printf("逆序%d",num/1);}
return 0;
}
(10)企業發放獎金根據利潤提成
# include <stdio.h>
int main()
{
int i,m;
scanf("%d",&i);
if(i<100000)
printf("%d",i*0.1);
else if(100000<i<=20000)
printf("%d",m=100000*0.1+(i-100000)*0.075);
else if(200000<i<=400000)
printf("%d",m=200000*0.075+(i-200000)*0.05);
else if(400000<i<=600000)
printf("%d",m=400000*0.05+(i-400000)*0.03);
else if(600000<i<=1000000)
printf("%d",m=600000*0.03+(i-600000)*0.015);
else
printf("%d",m=1000000*0.015+(i-1000000)*0.01);
return 0;
}
# include <stdio.h>
int main()
{
int i,m,c;
scanf("%d",&i);
c=i/100000;
switch(c)
{
case 0:printf("%d",m=i*0.1);break;
case 1:
case 2:printf("%d",m=100000*0.1+(i-100000)*0.075);break;
case 3:
case 4:printf("%d",m=200000*0.075+(i-200000)*0.05);break;
case 5:
case 6:printf("%d",m=400000*0.05+(i-400000)*0.03);break;
case 7:
case 8:
case 9:printf("%d",m=600000*0.03+(i-600000)*0.015);break;
default: printf("%d",m=1000000*0.015+(i-1000000)*0.01);break;
}
return 0;
}
(11)輸入四個整數,按要求由小到大排序
算法分析:爲了方便,在這一章中我使用了後面的知識,運用數組將四個數據進行輸入,使用冒泡法進行排序。
#include <stdio.h>
int main()
{
int a[4]; //定義數組大小
int temp,i,j;
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(j=0;j<3;j++) //使用冒泡法排序
for(i=0;i<3-j;i++)
if(a[i]>a[i+1])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
for(i=0;i<4;i++)
printf("%d ",a[i]);
return 0;
}
(12)輸座標,求該點的建築高度
算法分析:通過x,y座標的限制,進行判斷座標是否在圓塔內
# include <stdio.h>
int main()
{
float x,y;
scanf("%f %f",&x,&y);
if(-3<x<-1||1<x<3)
{if(-3<y<-1||1<y<3)
printf("10");}
else printf("0");
return 0;
}