天天看點

C語言第四章自述2第四章 選擇結構程式設計

第四章 選擇結構程式設計

4.2 if語句

4.2.1 if語句格式

選擇結構算法的流程圖

C語言第四章自述2第四章 選擇結構程式設計
C語言第四章自述2第四章 選擇結構程式設計

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、求三角形面積:
C語言第四章自述2第四章 選擇結構程式設計
#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:
C語言第四章自述2第四章 選擇結構程式設計
#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;
           
C語言第四章自述2第四章 選擇結構程式設計

例:如下解決問題相同,思路不同代碼

C語言第四章自述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);
}


           
c++

繼續閱讀