C程序設(shè)計(jì):第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁
C程序設(shè)計(jì):第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁
C程序設(shè)計(jì):第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁
C程序設(shè)計(jì):第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁
C程序設(shè)計(jì):第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

要設(shè)計(jì)選擇結(jié)構(gòu)程序,要考慮兩個(gè)方面的問題:一是在C語言中如何來表示條件,二是在C語言中實(shí)現(xiàn)選擇結(jié)構(gòu)用什么語句。在C語言中表示條件,一般用關(guān)系表達(dá)式或邏輯表達(dá)式,實(shí)現(xiàn)選擇結(jié)構(gòu)用if語句或switch語句。4.1選擇結(jié)構(gòu)和條件判斷4.2用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.4邏輯運(yùn)算符和邏輯表達(dá)式4.5條件運(yùn)算符和條件表達(dá)式4.6選擇結(jié)構(gòu)的嵌套4.7用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例第4章選擇結(jié)構(gòu)程序設(shè)計(jì)4.1選擇結(jié)構(gòu)和條件判斷在現(xiàn)實(shí)生活中,需要進(jìn)行判斷和選擇的情況是很多的處理這些問題,關(guān)鍵在于進(jìn)行條件判斷由于程序處理問題的需要,在大多數(shù)程序中都會(huì)包含選擇結(jié)構(gòu),需要在進(jìn)行下一個(gè)操作之前先進(jìn)行條件判斷所謂“關(guān)系運(yùn)算”實(shí)際上就是“比較運(yùn)算”,即將兩個(gè)數(shù)據(jù)進(jìn)行比較,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。例如,“a>b”中的“>”表示一個(gè)大于關(guān)系運(yùn)算。如果a的值是5,b的值是3,則大于關(guān)系運(yùn)算“>”的結(jié)果為“真”,即條件成立;如果a的值是2,b的值是3,則大于關(guān)系運(yùn)算“>”的結(jié)果為“假”,即條件不成立。4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序4.3.2關(guān)系表達(dá)式六種關(guān)系運(yùn)算符4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序優(yōu)先級(jí)相同

(高)①<

(小于)②<=(小于或等于)③>

(大于)④>=(大于或等于)⑤

==(等于)⑥!=(不等于)優(yōu)先級(jí)相同

(低)關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級(jí)算術(shù)運(yùn)算符(高)賦值運(yùn)算符(低)關(guān)系運(yùn)算符c>a+b

等效于

c>(a+b)a>b==c等效于

(a>b)==ca==b<c等效于

a==(b<c)a=b>c等效于

a=(b>c)1.關(guān)系表達(dá)式的概念

所謂關(guān)系表達(dá)式是指,用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來,進(jìn)行關(guān)系運(yùn)算的式子。

例如,下面的關(guān)系表達(dá)式都是合法的:

a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)

4.3.2關(guān)系表達(dá)式2.關(guān)系表達(dá)式的值——邏輯值(非“真”即“假”)。

由于C語言沒有邏輯型數(shù)據(jù),所以用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。4.3.2關(guān)系表達(dá)式例如,假設(shè)num1=3,num2=4,num3=5,則:(1)num1>num2的值=。(2)(num1>num2)!=num3的值=。(3)num1<num2<num3的值=。(4)(num1<num2)+num3的值=。

06114.4邏輯運(yùn)算符和邏輯表達(dá)式4.4.1邏輯運(yùn)算符及其優(yōu)先次序4.4.2邏輯表達(dá)式4.4.3邏輯型變量4.4.1邏輯運(yùn)算符及其優(yōu)先次序3種邏輯運(yùn)算符:&&(邏輯與)

||(邏輯或)

!(邏輯非)&&和||是雙目(元)運(yùn)算符!是一目(元)運(yùn)算符邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子判斷年齡在13至17歲之內(nèi)?age>=13&&age<=17判斷年齡小于12或大于65?age<12||age>65(2)運(yùn)算規(guī)則

1)&&:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“真”時(shí),運(yùn)算結(jié)果為“真”,否則為“假”。

2)||:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“假”時(shí),運(yùn)算結(jié)果為“假”,否則為“真”。

3)!:當(dāng)運(yùn)算量的值為“真”時(shí),運(yùn)算結(jié)果為“假”;當(dāng)運(yùn)算量的值為“假”時(shí),運(yùn)算結(jié)果為“真”。例如,假定x=5,則(x>=0)&&(x<10)的值為,(x<-1)||(x>5)的值為?!罢妗薄凹佟崩?,下面的表達(dá)式都是邏輯表達(dá)式:(x>=0)&&(x<10),(x<1)||(x>5),!(x==0),

2.邏輯運(yùn)算符的運(yùn)算優(yōu)先級(jí)(1)邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低,即:!(非)→&&(與)→||(或)

(2)與其它種類運(yùn)算符的優(yōu)先關(guān)系

!(高)算術(shù)運(yùn)算符關(guān)系運(yùn)算符

&&和||賦值運(yùn)算符(低)

1.邏輯表達(dá)式的概念所謂邏輯表達(dá)式是指,用邏輯運(yùn)算符將1個(gè)或多個(gè)表達(dá)式連接起來,進(jìn)行邏輯運(yùn)算的式子。在C語言中,用邏輯表達(dá)式表示多個(gè)條件的組合。

例如判斷一個(gè)年份是否是閏年的邏輯表達(dá)式。(year%4==0)&&(year%100!=0)||(year%400==0)4.4.2邏輯表達(dá)式邏輯表達(dá)式的值也是一個(gè)邏輯值(非“真”即“假”)。

2.邏輯量的真假判定──0和非0C語言用整數(shù)“1”表示“邏輯真”、用“0”表示“邏輯假”。但在判斷一個(gè)數(shù)據(jù)的“真”或“假”時(shí),卻以0和非0為根據(jù):如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。

例如,假設(shè)num=12,則:

!num的值,num>=1&&num<=31的值,num||num>31的值。011(1)邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是0和非0的整數(shù)外,也可以是其它任何類型的數(shù)據(jù),如實(shí)型、字符型等。

例如:‘a(chǎn)’&&‘b’(2)在計(jì)算邏輯表達(dá)式時(shí),只有在必須執(zhí)行下一個(gè)表達(dá)式才能求解時(shí),才求解該表達(dá)式(即并不是所有的表達(dá)式都被求解)。換句話說:

1)對(duì)于邏輯與運(yùn)算,如果第一個(gè)操作數(shù)被判定為“假”,系統(tǒng)不再判定或求解第二操作數(shù)。

2)對(duì)于邏輯或運(yùn)算,如果第一個(gè)操作數(shù)被判定為“真”,系統(tǒng)不再判定或求解第二操作數(shù)。

3.說明例如,假設(shè)n1、n2、n3、n4、x、y的值分別為1、2、3、4、1、1,則求解表達(dá)式“(x=n1>n2)&&(y=n3>n4)”后,x的值變?yōu)?,而y的值等于!014.4.3邏輯型變量這是C99所增加的一種數(shù)據(jù)類型可以將關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果存到一個(gè)邏輯型變量中,以便于分析和運(yùn)算類型標(biāo)識(shí)符:_Boolstdbool.h頭文件中,把bool定義為該類型的別名

#definebool_Bool同時(shí)定義:#definetrue

1

#definefalse

0

例:p96【注】在不支持c99標(biāo)準(zhǔn)的編譯器上(如VC++6.0)不能使用。#include<stdio.h>intmain(){

_Boolb; b=2000;

printf("%d\n",b); return0;}#include<stdio.h>#include<stdbool.h>intmain(){

boolb; b=2000;

if(b==true)printf("%d\n",b); return0;}4.2用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)4.2.1用if語句處理選擇結(jié)構(gòu)舉例4.2.2if語句的一般形式if(表達(dá)式)語句形式:

if(表達(dá)式)語句組表達(dá)式語句假真舉例:if(a>b)printf(“%d”,a);4.2.1用if語句處理選擇結(jié)構(gòu)舉例main(){int

a,b,c,temp;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}

if(a>b){temp=a;a=b;b=temp;}

printf("%d,%d,%d\n",a,b,c);} 輸入任意三個(gè)數(shù)a、b、c,按從小到大的順序排序輸出。abtemp87878if(表達(dá)式)語句1else語句2形式:

if(表達(dá)式)語句組1else語句組2表達(dá)式語句1語句2真假if(x>y)printf(“%d”,x);elseprintf(“%d”,y);main()

{intnum1,num2,num3,max;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&num1,&num2,&num3);

if(num1>num2)

max=num1;

else

max=num2;

if(num3>max)

max=num3;

printf("max=%d\n",max);

}輸入任意三個(gè)整數(shù)num1、num2、num3,求三個(gè)數(shù)中的最大值。本例中的第1個(gè)if語句,可優(yōu)化為如下不帶else子句的形式:max=num1;if(num2>max)max=num2;這種優(yōu)化形式的基本思想是:首先取一個(gè)數(shù)預(yù)置為max(最大值),然后再用max依次與其余的數(shù)逐個(gè)比較,如果發(fā)現(xiàn)有比max大的,就用它給max重新賦值,比較完所有的數(shù)后,max中的數(shù)就是最大值。這種方法,對(duì)從3個(gè)或3個(gè)以上的數(shù)中找最大值的處理,非常有效。(3)“語句組1”和“語句組2”,可以只包含一個(gè)簡(jiǎn)單語句,也可以是復(fù)合語句。務(wù)必牢記:不管是簡(jiǎn)單語句,還是復(fù)合語句中的各個(gè)語句,每個(gè)語句后面的分號(hào)必不可少!

例如,

if(num1>num2)max=num1;

elsemax=num2;if行后面的賦值語句“max=num1;”分號(hào)不能省略。但不要誤認(rèn)為if和else是2個(gè)獨(dú)立的語句,它們都屬于if語句中的一部分,else是if語句的子句。4.5條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;條件運(yùn)算符4.5條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;條件表達(dá)式4.5條件運(yùn)算符和條件表達(dá)式條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:

表達(dá)式34.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值4.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆币韵聻楹戏ǖ氖褂梅椒ǎ篴>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);main(){charch;

printf("Inputacharacter:");

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf("ch=%c\n",ch);} [程序演示]從鍵盤上輸入一個(gè)字符,如果它是大寫字母,則把它轉(zhuǎn)換成小寫字母輸出;否則,直接輸出。4.6選擇結(jié)構(gòu)的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對(duì)的if配對(duì)4.6選擇結(jié)構(gòu)的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套if(){

if()語句1}

else語句2內(nèi)嵌if{}限定了內(nèi)嵌if范圍4.6選擇結(jié)構(gòu)的嵌套

例4.5有一函數(shù):

編一程序,輸入一個(gè)x值,要求輸出相應(yīng)的y值。4.6選擇結(jié)構(gòu)的嵌套解題思路:用if語句檢查x的值,根據(jù)x的值決定賦予y的值由于y的可能值不是兩個(gè)而是三個(gè),因此不可能只用一個(gè)簡(jiǎn)單的(無內(nèi)嵌if)的if語句來實(shí)現(xiàn)4.6選擇結(jié)構(gòu)的嵌套解題思路:方法1(1)先后用3個(gè)獨(dú)立的if語句處理:輸入x若

x<0,則y=-1若

x=0,則y=0若

x>0,則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d\n",x,y);4.6選擇結(jié)構(gòu)的嵌套解題思路:方法2(2)用一個(gè)嵌套的if語句處理:輸入x若x<0,則y=-1否則

x=0,則y=0

否則

y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;else

if(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);4.6選擇結(jié)構(gòu)的嵌套解題思路:方法2(2)用一個(gè)嵌套的if語句處理:輸入x若x<0,則y=-1否則

x=0,則y=0

否則

y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;else

if(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d\n",x,y);提倡內(nèi)嵌if放在else中

4.說明(1)if后面的“表達(dá)式”,除常見的關(guān)系表達(dá)式或邏輯表達(dá)式外,也允許是其它類型的數(shù)據(jù),如整型、實(shí)型、字符型等。(2)if語句允許嵌套,但嵌套的層數(shù)不宜太多。在實(shí)際編程時(shí),應(yīng)適當(dāng)控制嵌套層數(shù)(2~3層)。

4.7用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)解題思路:判斷出這是一個(gè)多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績(jī)分為4個(gè)等級(jí)如果用if語句,至少要用3層嵌套的if,進(jìn)行3次檢查判斷用switch語句進(jìn)行一次檢查即可得到結(jié)果#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為A#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}不能少#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為C#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為F#include<stdio.h>intmain(){chargrade;

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}此行位置有問題,應(yīng)如何修改?switch語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達(dá)式){case常量1:語句1case常量2:語句2

┇case常量n:語句ndefault:語句n+1}整數(shù)類型(包括字符型)switch語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達(dá)式){case常量1:語句1case常量2:語句2

┇case常量n:語句ndefault:語句n+1}不能相同

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}

scanf("%c",&grade);

printf("Yourscore:");

switch(grade){case'A‘:case'B‘:case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}

例4.7編寫程序,用switch語句處理菜單命令。解題思路:在許多應(yīng)用程序中,用菜單對(duì)流程進(jìn)行控制,例如從鍵盤輸入一個(gè)’A’或’a’字符,就會(huì)執(zhí)行A操作,輸入一個(gè)’B’或’b’字符,就會(huì)執(zhí)行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();

switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入a或A調(diào)用action1函數(shù),執(zhí)行A操作voidaction1(intx,inty){

printf("x+y=%d\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();

switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入b或B調(diào)用action2函數(shù),執(zhí)行B操作voidaction2(intx,inty){

printf("x*y=%d\n",x*y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;

ch=getchar();

switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}輸入其他字符發(fā)出警告這是一個(gè)非常簡(jiǎn)單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:A:輸入全班學(xué)生各門課的成績(jī)B:計(jì)算并輸出每個(gè)學(xué)生各門課的平均成績(jī)C:計(jì)算并輸出各門課的全班平均成績(jī)D:對(duì)全班學(xué)生的平均成績(jī)由高到低排序并輸出可以按以上思路編寫程序,把各action函數(shù)設(shè)計(jì)成不同的功能以實(shí)現(xiàn)各要求4.8選擇結(jié)構(gòu)程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。解題思路:在前面已介紹過判別閏年的方法本例用不同的方法編寫程序4.8選擇結(jié)構(gòu)程序綜合舉例用變量leap代表是否閏年的信息。若閏年,令leap=1;非閏年,leap=0。最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息參見教材圖4.13#include<stdio.h>intmain() {int

year,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}標(biāo)志變量與if(leap!=0)含義相同#include<stdio.h>intmain() {int

year,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}采取鋸齒形式#include<stdio.h>intmain() {int

year,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else

leap=1;#include<stdio.h>intmain() {int

year,leap;

printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);

printf("aleapyear.\n");return0;}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;

例4.9求

方程的解。解題思路:處理以下各情況①

a=0,不是二次方程②

,有兩個(gè)相等實(shí)根

,有兩個(gè)不等實(shí)根。

,有兩個(gè)共軛復(fù)根。

應(yīng)當(dāng)以p+qi和p-qi的形式輸出復(fù)根

其中,p=-b/2a,q=()/2a參見教材圖4.14#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,realpart,

imagpart;

scanf("%lf,%lf,%lf",&a,&b,&c);

printf("Theequation");

if(fabs(a)<=1e-6)

printf("isnotaquadratic\n");實(shí)型不能用if(a==0)

else{disc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf("hastwoequalroots:%8.4f\n",-b/(2*a));else先算disc,以減少重復(fù)計(jì)算不能用if(disc==0)

if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else

{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",

realpart,imagpart); }}return0;}

{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",

realpart,imagpart); }}return0;}

{realpart=-b/(2*a);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論