第四章 選擇結構程式設計
4.2 if語句
4.2.1 if語句格式
選擇結構算法的流程圖
if語句選擇結構一般形式為:
if(邏輯量) 語句1 [else 語句2]
if和else是構成if語句的關鍵字,語句中的邏輯量是選擇結構的條件,“[ ]”表示else分支可以省略。語句中的邏輯量應對于選擇結構的條件P,語句1對應分支A,語句2對應于分支B。語句2對應于分支B。if 語句執行時,首先判斷括号裡的邏輯量,如果邏輯量為1,則執行語句1;如果邏輯量為0,則執行else分支後的語句2。
其中,語句1和語句2都隻能是單條語句,如果在邏輯量。為真或為假的分支中需執行多個操作,應該使用複合語句将多個操作構成-條語句。語句1是選擇結構必須的語句,else 分支可有可無。i試( )~else語句中雖然有兩個分支,但在具體執行時,每次隻執行其中的一個分支,在文法上是一條語句。在使用if語句時,應注意構成if語句的各個部分和N-S流程圖的關系,同時注意構成if語句的各個部分的限定。
例1、求三角形面積:
#include<math.h>
#include <stdio.h>
void main()
{
float a, b, c, s, area;
scanf_s("%f%f%f", &a, &b, &c);
if (a + b > c&& b + c > a&& a + c > b)
{
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=% 7.2f\n", a, b, c, s);
printf("area=%7.2f\n", area);
}
else
{
printf("Data Error!");
}
}
例1、根據a,b關系輸出c:
#include <stdio.h>
void main()
{
int a, b, c;
scanf_s("%d%d%d", &a, &b, &c);
if (a != b)
{
a = a + b;
c = a + b;
}
printf("a=%d,b=%d,c=%d",a,b,c);
}
4.2.2條件表達式:條件表達式是實作雙分支選擇結構的表達式
1.條件運算符
條件運算符由兩個符号“?" 和“:”複合而成,是C語言中的唯一-的一 一個三目運算符,條件運算符的第1目書寫在“?” 之前,是邏輯量,條件運算符的第2目書寫在“?” 和“:”中間,是資料,條件運算符的第3目書寫在“:”之後,是資料。條件運算符的優先級隻比指派運算符和逗号運算符高,結合性為右結合。
2.條件表達式
用條件運算符将運算對象連接配接起來的符合C語言規則的表達式稱為條件表達式。條件表達式的運算過程為:先判斷第1目邏輯量,如果邏輯量為真,選取第2目的結果作為整個表達式的值,否則選取第3目結果作為整個表達式的值。
假定有變量定義:int a=3,b=2, max;
表達式“max= =(a>b)?a:b”運算時,運算順序為:判斷邏輯量a>b,得到結果為邏輯量1; 運算條件表達式(a>b)?a:b,得到結果3;運算max=3,得到變量max的值為3,整個表達式的值也為3。條件表達式中存在類型的自動轉換,條件表達式的值的類型是第2目和第3目中類型較高的運算對象的類型。例如:表達式1?3:4.5的值為3.0而不是3。
//ASCII碼值的轉換
//第一種
#include <stdio.h>
void main()
{
char c;
printf("Input c:");
c = getchar();
if (c >= 'a' && c <= 'z') c = c - 32;
putchar(c);
}
//第二種
#include <stdio.h>
void main()
{
char c;
printf("Input c:");
c = getchar();
c=(c >= 'a' && c <= 'z')? c-32:c;
putchar(c);
}
/*用條件表達式代替if( )~ else語句實作簡單的雙分支選擇結構時,可簡化程式的書寫。
實際應用中,并不是所有的if( )-~else語句都适合用條件表達式來替換。如果if( )- else語句中的if分支和else分支都是由多個操作組成,
或者if語句内部嵌套了其他一些語句時,如果用條件表達式替換,會使得程式的結構不清晰,選擇結構的分支混亂,降低程式的可讀性。*/
3.條件表達式運算短路
條件表達式中的第2目和第3目并不是每次運算時都會被執行,如果第1目表示的邏輯量為真,則計算第2目的值,第3目被短路;邏輯量為假時,計算第3目的值,第2目被短路。運算時将第2目、第3目當做獨立的表達式對待。
4.2.3 if語句的嵌套(多分支解決問題)
一般形式:
if (邏輯量1)
if (邏輯量2)語句1;
else 語句2;
else if (邏輯量3) 語句1;
else 語句2;
例:如下解決問題相同,思路不同代碼
#include <stdio.h>
#include <math.h>
void main()
{
float x, a;
printf("輸入x的值:");
scanf_s("%f", &x);
if (x > 6)
a = 2 * x * x + 3*sin(x);
else
{
if (x > 0)
a = sqrt(x + 2);
else
{
if (x >= -3)
a = 3 * x * x * x;
else
{
a = cos(x) + 5;
}
}
}
printf("x=%f", a);
}
#include <stdio.h>
#include <math.h>
void main()
{
float x, a;
printf("輸入x的值:");
scanf_s("%f", &x);
if (x>6)
a = 2 * x * x + 3 * sin(x);
if (x < 0&&x<=6)
a = sqrt(x + 2);
if (x>=-3&&x<=0)
a = 3 * x * x * x;
if (x<-3)
a = cos(x) + 5;
printf("x=%f", a);
}
#include <stdio.h>
#include <math.h>
void main()
{
float x, a;
printf("輸入x的值:");
scanf_s("%f", &x);
if(x>0)
if (x>6)
a = 2 * x * x + 3 * sin(x);
else
{
a = sqrt(x + 2);
}
else
{
if (x<-3)
a = cos(x) + 5;
else
{
a = 3 * x * x * x;
}
}
printf("x=%f", a);
}