




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.1if-else語句第4章選擇結(jié)構(gòu)設(shè)計思政目標(biāo)
在學(xué)習(xí)if-else語句的多種形式和應(yīng)用場景中,培養(yǎng)學(xué)生分析問題、解決問題的能力,引導(dǎo)學(xué)生在面對不同情況時能夠做出合理判斷和正確選擇,如同在程序中根據(jù)條件執(zhí)行不同的代碼塊一樣,在生活中也要學(xué)會權(quán)衡利弊、理性決策,培養(yǎng)學(xué)生的決策能力和應(yīng)變思維。
通過編寫各種條件判斷程序(如判斷數(shù)的大小、奇偶性、字母大小寫等),培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)倪壿嬎季S和細(xì)致的觀察力,讓學(xué)生明白準(zhǔn)確的條件設(shè)定和邏輯判斷是得出正確結(jié)果的關(guān)鍵,從而激勵學(xué)生在學(xué)習(xí)和生活中注重細(xì)節(jié)、追求精確,培養(yǎng)學(xué)生精益求精的學(xué)習(xí)態(tài)度和工作作風(fēng)。4.1if-else語句
C語句概述C語句:以“;”作分隔符,編譯后產(chǎn)生機器指令.C語句分類表達(dá)式語句:表達(dá)式加分號構(gòu)成??照Z句:;程序控制語句(9種):if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循環(huán)輔助控制如total=total+limit;a=3;func();printf(“Hello,world!\n”);復(fù)合語句:用{…}括起來的一組語句一般形式:
{[數(shù)據(jù)說明部分;]執(zhí)行語句部分;
}說明:“}”后不加分號語法上和單一語句相同復(fù)合語句可嵌套程序的三種基本結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無條件轉(zhuǎn)移語句(goto)結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序叫~優(yōu)點:結(jié)構(gòu)清晰,易讀,提高程序設(shè)計質(zhì)量和效率三種基本結(jié)構(gòu)順序結(jié)構(gòu)ABAB流程圖N-S圖PAB真假PBA真假選擇結(jié)構(gòu)kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)PA假真當(dāng)P為真AAP真假A直到P為真注:A,B,A1….An可以是一個簡單語句,也可以是一個基本結(jié)構(gòu)4.1if語句一條分岔路
兩條線路到雅安,但是你只能選擇走其中一條線路。把這種結(jié)構(gòu)引入到C語言中就叫選擇結(jié)構(gòu)。選擇結(jié)構(gòu)的應(yīng)用:有a,b兩個數(shù),輸出最大的數(shù)。我們思考的方式:如果
a>b那么輸出a否則輸出b選擇型程序設(shè)計if語句(條件選擇語句)if語句的三種形式形式一:格式:if(expression)statement執(zhí)行過程:exprstatement非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:格式:if(expression)statement1elsestatement2執(zhí)行過程:例:if(x>y)max=x;elsemax=y;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);說明:if后面的表達(dá)式類型任意語句可以是復(fù)合語句
if(x)if(x!=0)if(!x)
if(x==0)例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!if語句實現(xiàn)#include<stdio.h>main(){intx,y;printf("Enteraninteger:");scanf("%d",&x);y=x;if(y<0)y=-y;printf("\ninteger:%d--->absolutevalue:%d\n",x,y);}例1求一個數(shù)的絕對值運行:Enteraninteger:-12
integer:-12--->absolutevalue:12if-else語句實現(xiàn)#include<stdio.h>main(){intm,n;printf("Enteraninteger:");scanf("%d",&m);if(m>=0)n=m;elsen=-m;printf("\ninteger:%d--->absolutevalue:%d\n",m,n);#include<stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);
if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例2輸入兩個數(shù)并判斷兩數(shù)相等否運行:Enterintegera:12
Enterintegerb:12
a==b運行:Enterintegera:12
Enterintegerb:9
a!=bif語句:#include<stdio.h>main(){inta,b,max;scanf("%d%d",&a,&b);max=a;if(max<b)max=b;printf("max=%d\n",max);}例3:編程實現(xiàn)求兩個數(shù)中的較大數(shù)if語句:#include<stdio.h>(){inta,b,max;scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("max=%d\n",max);}#include"math.h"intmain(){floata,b,c,s,area; printf("請輸入三角形三條邊:\n"); scanf("a=%f,b=%f,c=%f",&a,&b,&c); if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b){s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%.4f\n",area); }elseprintf("不構(gòu)成三角形。"); return0; }例4:編寫程序,要求輸入三角形的三條邊(任意兩邊之和大于第三邊),計算三角形的面積并輸出。#include"stdio.h"main(){charch1,ch2;ch1=getchar();if(ch1>='a'&&ch1<='z'){ ch2=ch1-32;printf("%c的大寫字母是%c\n",ch1,ch2);}elseprintf("您輸入的字母不是小寫字母。");}例5:編寫程序,實現(xiàn)從鍵盤輸入一個小寫字母,在顯示屏上顯示對應(yīng)的大寫字母。#include"stdio.h"main(){intage;scanf("%d",&age);if(age>=18)printf("已成年")else{printf("未成年");printf("還差%d年成年",18-age);}}例6:輸入年齡,判斷是否成年。#include"stdio.h"main(){intm;printf("請輸入一個整數(shù):");scanf("%d",&m);if(m%2!=0)printf("奇數(shù)");elseprintf("偶數(shù)");}例7:判斷一個整數(shù)n是否為奇數(shù)#include"stdio.h"main(){charch;ch=getchar();if(ch>='a'andch<='z')printf("%c是小寫字母",ch);elseprintf("%c不是小寫字母",ch);}例8:判斷一個字母是否小寫字母#include"stdio.h"main(){inta,b,t;scanf("%d%d",&a,&b);printf("排序前的數(shù):");printf("%6d%6d\n",a,b);if(a>b){t=a;a=b;b=t;}printf("排序后的數(shù):");printf("%6d%6d\n",a,b);}例9:輸入兩個數(shù),從小到大輸出。#include"stdio.h"main(){inta,b,c,t;scanf("%d%d%d",&a,&b,&c);printf("排序前的數(shù):");printf("%6d%6d%6d\n",a,b,c);if(a>b){t=a;a=b;b=t;}if(b>c){t=b;b=c;c=t;}if(a>b){t=a;a=b;b=t;}printf("排序后的數(shù):");printf("%6d%6d%6d\n",a,b,c);}例10:三個數(shù)從小到大進(jìn)行排序4.2else—if語句第4章選擇結(jié)構(gòu)設(shè)計思政目標(biāo)
通過學(xué)習(xí)else-if語句的多種形式和嵌套結(jié)構(gòu),培養(yǎng)學(xué)生全面分析問題、系統(tǒng)解決問題的能力,引導(dǎo)學(xué)生在面對復(fù)雜情況時能夠有條不紊地進(jìn)行邏輯推理和判斷,如同在程序中處理多層條件分支一樣,在生活和學(xué)習(xí)中遇到復(fù)雜問題時也能冷靜思考、逐步解決,培養(yǎng)學(xué)生的邏輯思維能力和解決復(fù)雜問題的能力。
在編寫基于else-if語句的程序(如成績轉(zhuǎn)換、數(shù)值分段計算、多值比較等)過程中,培養(yǎng)學(xué)生嚴(yán)謹(jǐn)細(xì)致、精益求精的態(tài)度,讓學(xué)生明白準(zhǔn)確的條件設(shè)定和正確的代碼結(jié)構(gòu)是程序成功運行的關(guān)鍵,從而激勵學(xué)生在學(xué)習(xí)和未來工作中注重細(xì)節(jié)、追求完美,培養(yǎng)學(xué)生的工匠精神和職業(yè)素養(yǎng)。4.2else—if語句形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過程:
例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;4.2elseif語句如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);說明:if后面的表達(dá)式類型任意語句可以是復(fù)合語句
if(x)if(x!=0)if(!x)
if(x==0)例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!/*ch4_3.c*/#include<stdio.h>main(){charc;printf("Enteracharacter:");c=getchar();if(c<0x20)printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例判斷輸入字符種類運行:Enteracharacter:
Thecharacterisacontrolcharacter運行:Enteracharacter:8
Thecharacterisadigit運行:Enteracharacter:D
Thecharacterisacapitalletter運行:Enteracharacter:h
Thecharacterisalowerletter運行:Enteracharacter:F1
Thecharacterisothercharacter形式四:if語句嵌套:一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement3
內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌if例輸入兩數(shù)并判斷其大小關(guān)系/*ch4_4.c*/#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);
if(x!=y)
if(x>y)printf("X>Y\n");elseprintf("X<Y\n");
elseprintf("X==Y\n");}運行:Enterintegerx,y:12,23
X<Y
Enterintegerx,y:12,6
X>YEnterintegerx,y:12,12
X==Yif—else配對原則:缺省{}時,else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實現(xiàn)if~else正確配對方法:加{}例考慮下面程序輸出結(jié)果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}結(jié)果:-1if-else-if語句形式#include"stdio.h"main(){intx,y;scanf("%d",&x);if(x>0)y=1;elseif(x==0)y=0;elsey=-1;printf("x=%d,y=%d\n",x,y);}例1:分段函數(shù)y=1(x>0)y=0(x=0)y=-1(x<0)if-else嵌套語句形式#include"stdio.h"main(){intx,y;scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d\n",x,y);}例2:求下面函數(shù)的值y=x(x<1)2x-1(1<=x<10)3x-1(x>=10)
用scanf函數(shù)輸入x的值(分別為x<1,1<=x<10,x>=10三種情況),求y值。分析:y是一個分段表達(dá)式。要根據(jù)x的不同區(qū)間來計算y的值編程思路:1、搭建框架#include<stdio.h>main(){}2、定義變量3、調(diào)用scanf函數(shù)輸入值(對x賦值)4、根據(jù)輸入的值計算,
如果
x<1那么y=x
否則
如果x<10那么
y=2*x-1
否則
y=3*x-1
5、調(diào)用printf函數(shù)輸出y的值#include<stdio.h>main(){intx,y;printf("pleaseinputx:");scanf("%d",&x);if(x<1)//如果x<1成立則y=x;elseif(x<10)//否則如果x<10成立則
y=2*x-1;elsey=3*x-1;printf("y=%d\n",y);}程序如下:學(xué)生成績可分為百分制和五級制,根據(jù)輸入的百分制成績score,轉(zhuǎn)換成相應(yīng)的五級制成績后輸出,百分制與五級制的對應(yīng)關(guān)系如表所示。if-else-if語句形式百分制五級制百分制五級制90≤score≤100優(yōu)60≤score<70及格80≤score<90良0≤score<60不及格70≤score<80中score>100或score<0無意義這是一道典型的能夠使用if-else-if語句形式的題目,根據(jù)對一系列互斥條件的判斷來選擇執(zhí)行哪條語句。#include<stdio.h>intmain(){ intscore; printf("請輸入成績:"); /*屏幕提示語*/ scanf("%d",&score); /*輸入百分制的分?jǐn)?shù)*/ if(score>100||score<0) /*分值不合理時顯示出錯信息*/ printf("輸入數(shù)據(jù)無意義\n"); elseif(score>=90) /*這里的else表示0=<score&&score<=100*/ printf("優(yōu)\n"); elseif(score>=80) /*這里的else表示0=<score&&score<90*/printf("良\n"); elseif(score>=70) /*這里的else表示0=<score&&score<80*/ printf("中\(zhòng)n"); elseif(score>=60) /*這里的else表示0=<score&&score<70*/ printf("及格\n"); else /*這里的else表示0=<score&&score<60*/ printf("不及格\n"); return0;}if-else-if語句形式#include<stdio.h>main(){intscore;printf("請輸入學(xué)生的成績:");scanf("%d",&score);if(score<0||score>100)print("您輸入的成績不合法。");elseif(score>=60)if(score>=90)print("A等");elseif(score>=80)print("B等");elseif(score>=70)print("C等");elseprint("D等");elseprint("E等");}if-else嵌套語句形式#include"stdio.h"main(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("max=%d\n",max);}
例4:輸入三個整數(shù),編程實現(xiàn)找出最大值。
嵌套的if語句編寫程序,實現(xiàn)輸入三個整數(shù),輸出最大值。本題可以采用if嵌套進(jìn)行實現(xiàn),先比較a和b的大小,如果a大于b,就將a與c進(jìn)行比較,如果a也大于c,那么最大值就為a;否則,最大值為c。如果a小于b,就將b與c進(jìn)行比較,如果b大于c,那么最大值就為b;否則,最大值為c。程序流程圖如圖所示。嵌套的if語句#include<stdio.h>intmain(){inta,b,c,max; /*定義變量*/
printf("請輸入三個整數(shù),用逗號隔開\n"); /*輸出提示信息*/
scanf("%d,%d,%d",&a,&b,&c); /*輸入a,b,c變量的值*/
if(a>b) /*a>b*/ if(a>c) max=a; /*a>b并且a>c,最大值為a*/ elsemax=c; /*a>b并且c>a,最大值為c*/
else /*a<b*/ if(b>c) max=b; /*b>a并且b>c,最大值為b*/ else max=c; /*b>a并且c>b,最大值為c*/
printf("max=%d\n",max); /*輸出最大值max*/
return0; /*函數(shù)返回值0*/}嵌套的if語句程序運行結(jié)果如圖所示。4.3switch語句第4章選擇結(jié)構(gòu)設(shè)計思政目標(biāo)
培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)倪壿嬎季S和科學(xué)精神,通過分析switch語句的執(zhí)行過程、各種應(yīng)用舉例中的條件判斷和計算,讓學(xué)生明白準(zhǔn)確無誤的邏輯推理在編程和解決實際問題中的重要性,引導(dǎo)學(xué)生在學(xué)習(xí)和生活中養(yǎng)成嚴(yán)謹(jǐn)認(rèn)真、追求真理的態(tài)度。
增強學(xué)生的社會責(zé)任感,如在加油站加油問題的案例中,讓學(xué)生理解經(jīng)濟活動中的計算和選擇,引導(dǎo)學(xué)生思考如何在實際生活中合理消費、節(jié)約資源等,培養(yǎng)學(xué)生關(guān)注社會經(jīng)濟現(xiàn)象、樹立正確消費觀和資源意識,為社會的可持續(xù)發(fā)展貢獻(xiàn)力量。4.3switch語句switch語句(開關(guān)分支語句)一般形式:switch(表達(dá)式){caseE1:
語句組1;
break;caseE2:
語句組2;
break;…….caseEn:
語句組n;
break;[default:
語句組;break;]}執(zhí)行過程:switch表達(dá)式語句組1語句組2語句組n語句組…...E1E2Endefaultcase說明:E1,E2,…En是常量表達(dá)式,且值必須互不相同語句標(biāo)號作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}運行結(jié)果:score為5時,輸出:
Verygood!Good!Pass!Fail!dataerror!例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運行結(jié)果:a=2,b=1#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例1:根據(jù)輸入字母輸出字符串應(yīng)用舉例編程實現(xiàn),根據(jù)任一年的公元年號,判斷該年是否是閏年。在左圖中分析過問題的解決方案,同時也給出了算法的流程圖,如圖所示。例2:判斷是否閏年#include<stdio.h>intmain(){ intyear,leap; /*定義變量*/ printf("請輸入年號:"); /*輸出提示語*/ scanf("%d",&year); /*輸入年號*/ if(year%4==0) /*判斷年號是否能被4整除*/ { if(year%100==0) /*判斷年號是否被100整除*/ { if(year%400==0) /*判斷年號是否被400整除*/ leap=1/*能被400整除的令leap=1*/ else leap=0;/*能被100整除但不能被400整除的令leap=0*/應(yīng)用舉例例2:判斷是否閏年
} else leap=1; /*能被4整除但不能被100整除的令leap=1*/ } else leap=0; /*不能被4整除的令leap=0*/ if(leap) /*判斷l(xiāng)eap的值,當(dāng)leap為1時輸出為閏年*/ printf("%d是閏年\n",year); else /*當(dāng)leap為0時輸出不是閏年*/ printf("%d不是閏年\n",year); return0;}應(yīng)用舉例例2:判斷是否閏年程序運行結(jié)果如圖所示,輸入年號,判斷是否為閏年后輸出。應(yīng)用舉例例2:判斷是否閏年可將程序中的第7~20行用一個邏輯表達(dá)式包含所有閏年條件,即上述if語句用下面的if語句代替。if((year%4==0&&year%100!=0)||(year%400==0)) /*year能被4整除但不能被100 整除,或者year能被400整除*/ leap=1;else leap=0;應(yīng)用舉例例2:判斷是否閏年某加油站有89號、92號和95號三種汽油,售價分別為5.88、6.28、6.68(元/升),提供了“加油員加油”或“自助加油”兩個服務(wù)等級,這樣用戶可以得到2%或5%的優(yōu)惠。試編程實現(xiàn)針對用戶輸入加油量x,汽油的品種y和服務(wù)的類型z,輸出用戶應(yīng)付的金額。應(yīng)用舉例例3:加油站加油問題本例題最終要根據(jù)所輸入的汽油類型和服務(wù)等級來計算應(yīng)付的金額,應(yīng)付金額=單價*數(shù)量*(1-折扣數(shù)),因此,問題的關(guān)鍵在于要根據(jù)汽油類型確定單價和根據(jù)服務(wù)類型確定折扣。本例可用switch語句進(jìn)行多分支選擇,程序流程圖如圖所示,首先輸入x、y和z的值,根據(jù)輸入的y值判斷選擇的是哪種類型的汽油,如輸入的是a即為89號汽油,將單價值5.88賦給變量m1,以此類推;隨后用同樣的方法根據(jù)輸入的z值判斷是哪種服務(wù)等級;最后計算出總金額后輸出。應(yīng)用舉例例3:加油站加油問題#include<stdio.h>intmain(){ floatx,m1,m2,m; /*定義變量x為汽油的數(shù)量,m1為油價,m2 為折扣數(shù),m為花費的金額*/ chary,z; /*定義變量y為汽油類型,z為服務(wù)類型*/ printf("輸入要加哪種類型的汽油,a代表89號,b代表92號,c代表95號\n"); scanf("%c",&y); /*輸入汽油的種類*/ getchar(); /*接收回車符*/ printf("輸入進(jìn)行哪種加油服務(wù),m代表加油員加油,e代表自助加油\n"); scanf("%c",&z); /*輸入加油服務(wù)的類別*/ getchar(); /*接收回車符*/ printf("輸入要加油的數(shù)量\n");應(yīng)用舉例例3:加油站加油問題scanf("%f",&x); /*輸入所加汽油的升數(shù)*/ switch(y) /*判斷輸入的是哪種汽油*/ { case'a':m1=5.88;break; /*如是89號汽油,令m1=5.88*/ case'b':m1=6.28;break; /*如是92號汽油,令m1=6.28*/ case'c':m1=6.68;break; /*如是93號汽油,令m1=6.68*/ } switch(z) /*判斷輸入的是哪種服務(wù)*/ { case'm':m2=0.02;break; /*如是加油員加油,令m2=0.02*/ case'e':m2=0.05;break; /*如是自助加油,令m2=0.05*/ } m=x*m1*(1-m2); /*計算應(yīng)付的錢數(shù)*/ printf("花費的金額:%.2f\n",m); /*輸出應(yīng)付的錢數(shù)*/ return0;}應(yīng)用舉例例3:加油站加油問題程序運行結(jié)果如圖所示,例如,自助加95號汽油32升,總共需花費金額203.07元。應(yīng)用舉例例3:加油站加油問題應(yīng)用舉例求ax2+bx+c=0方程的解。例4:求解一元二次方程一元二次方程求解主要有以下幾種情況。(1)當(dāng)a=0時,不是一元二次方程,為一元一次方程,x的值為-c/b。(2)當(dāng)b2-4ac=0時,有兩個相等的實數(shù)根,x的值為x=-b/(2*a)。(3)當(dāng)b2-4ac>0時,有兩個不等的實數(shù)根,分別是
。(4)當(dāng)b2-4ac<0時,有兩個共軛復(fù)數(shù)根??梢杂胮+qi和p-qi的形式輸出復(fù)數(shù)根,其中,p=-b/(2*a),q==b/(2*a)。程序流程如右圖所示。應(yīng)用舉例例4:求解一元二次方程#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x,x1,x2,p,q;printf("請輸入一元二次方程中a,b,c的值用逗號隔開\n");scanf("%lf,%lf,%lf",&a,&b,&c); /*輸入a,b,c的值*/if(a==0) /*判斷如果a等于0,x=-c/b并輸出x的值*/ { x=-c/b; printf("該方程為一元一次方程,x=%8.4f\n",x); } else /*a不為0時*/
應(yīng)用舉例例4:求解一元二次方程
{ disc=b*b-4*a*c; /*計算disc的值*/ if(disc==0) /*當(dāng)disc等于0時,有兩個相同的實數(shù)根*/ { x=-b/(2*a); printf("該方程有兩個相同的根,即x=%8.4f\n",x); } else /*disc不為0時*/ if(disc>0) /*當(dāng)disc大于0時,計算兩個不同的實數(shù)根*/ { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("該方程有兩個實數(shù)根:%8.4f和%8.4f\n",x1,x2); } else /*當(dāng)disc小于0時,計算兩個共軛復(fù)數(shù)根*/
應(yīng)用舉例例4:求解一元二次方程 { p=-b/(2*a); q=sqrt(-disc)/(2*a); printf("該方程有兩個共軛復(fù)數(shù)根,分別為:\n"); printf("%8.4f+%8.4fi\n",p,q); printf("%8.4f-%8.4fi\n",p,q); } } return0;}應(yīng)用舉例例4:求解一元二次方程程序運行結(jié)果如圖所示。應(yīng)用舉例例4:求解一元二次方程4.4常見錯誤分析第4章選擇結(jié)構(gòu)設(shè)計PART4常見錯誤分析思政目標(biāo)
借助C語言編程中各類因細(xì)微疏忽就引發(fā)錯誤(如運算符混淆、表達(dá)式錯誤、語句格式問題等)的案例,引導(dǎo)學(xué)生深刻認(rèn)識到在學(xué)習(xí)與實踐中,嚴(yán)謹(jǐn)細(xì)致是獲取正確結(jié)果的關(guān)鍵。每一個細(xì)節(jié)都可能影響整體,從而培養(yǎng)學(xué)生對待知識和技能精益求精、一絲不茍的治學(xué)精神。
通過詳細(xì)分析編程中常見錯誤及解決方法,讓學(xué)生明白錯誤是成長和進(jìn)步的契機。鼓勵學(xué)生積極面對錯誤,勇于剖析錯誤根源,培養(yǎng)學(xué)生在遇到問題時不逃避、不推諉,主動承擔(dān)解決問題責(zé)任的意識。4.4常見錯誤分析很多人習(xí)慣性地用數(shù)學(xué)上的等于號“=”用作C語言關(guān)系運算符“等于”,例如:#include<stdio.h>intmain(){ inta; scanf("%d",&a); if(a=1) /*誤把“=”作為“等于”運算符*/ printf("yes\n"); else printf("no\n"); return0;}1常見錯誤分析這種寫法在程序編譯過程中沒有任何報錯信息,但是實際上無法實現(xiàn)對變量a數(shù)值的判斷功能。此程序無論輸入的a的值是否為1,都輸出“yes”,程序運行結(jié)果如圖所示。C語言中“==”是關(guān)系運算符,用來判斷兩個數(shù)是否相等,a==1是判斷a的值是否為1;“=”是賦值運算符,a=1是使a的值為1,這時不管a原來是什么值,表達(dá)式的值永遠(yuǎn)為真(非0)。因此,該程序需要將if(a=1)改成if(a==1)。常見錯誤分析在數(shù)學(xué)領(lǐng)域中,判斷一個數(shù)是否在2與5之間,我們可以直接用2<x<5進(jìn)行表示。對于初學(xué)者來說,很容易將其應(yīng)用到C語言的編程中,例如:2#include<stdio.h>intmain(){ intx; scanf("%d",&x); if(2<x<5) /*忘記必要的邏輯運算符*/ printf("yes\n"); else printf("no\n"); return0;}常見錯誤分析該程序沒有語法錯誤,也就是在編譯時可以順利通過,但是無法實現(xiàn)對x數(shù)值的判斷功能。例如,輸入x的值為7,不滿足大于2小于5的條件,但是輸出還是“yes”,如圖所示。在C語言中,關(guān)系運算符的結(jié)合性為從左至右,2<x<5的求值是先求2<x,得到一個邏輯值0或1,再拿這個數(shù)與5作比較,結(jié)果恒為真,失去了比較的意義。對于這種情況,應(yīng)使用邏輯表達(dá)式,寫成:if((2<x)&&(x<5))常見錯誤分析if后面的語句可以是一條簡單的語句或多條語句,當(dāng)為多條語句時,需要用“{}”將這些語句括起來,構(gòu)成復(fù)合語句。例如,編程實現(xiàn)當(dāng)a大于b時,兩數(shù)交換,否則什么都不做,最后輸出a和b的值。3#include<stdio.h>intmain(){ inta,b,t; scanf("%d,%d",&a,&b); if(a>b) /*用復(fù)合語句時漏掉花括號*/ t=a; a=b; b=t; printf("a=%d,b=%d\n",a,b); return0;}常見錯誤分析這種寫法在程序編程過程中,沒有任何報錯信息,但是運行結(jié)果是錯誤的,如圖所示。由于if后面沒有花括號,因此,if只作用于“t=a;”這一條語句,而不管a>b是否為真,都將執(zhí)行后兩條語句,正確的寫法應(yīng)為:if(a>b) { t=a; a=b; b=t; }常見錯誤分析if(表達(dá)式)后是沒有分號的,如果誤加了分號,在程序編譯過程中,并不會報錯,但是無法實現(xiàn)預(yù)定的目標(biāo)。例如:4#include<stdio.h>intmain(){ inta,b,t=0; scanf("%d,%d",&a,&b); if(a==b); /*在不該加分號的地方加分號*/ t=a+b; printf("%d\n",t); return0;}常見錯誤分析程序的本意是如果a等于b,則執(zhí)行t=a+b,但由于if(a+b)后跟有分號,t=a+b在任何情況下都執(zhí)行,程序運行結(jié)果如圖所示,當(dāng)a不等于b時也會運行t=a+b語句。這是因為if后加分號相當(dāng)于if后跟了一個空語句,正確的寫法應(yīng)是:if(a==b) t=a+b;常見錯誤分析再例如,switch(表達(dá)式)后加了分號:#include<stdio.h>intmain(){ inta=1; switch(a); /*多了分號*/ { case1:printf("yes\n");break; case2:printf("no\n");break; } return0;}常見錯誤分析編譯錯誤信息如圖所示,提示非法的case和break語句。我們將switch(a)后面的分號去掉編譯就通過了。常見錯誤分析本章小結(jié)本章主要介紹了C語言三種基本結(jié)構(gòu)中的選擇結(jié)構(gòu)。通過本章的學(xué)習(xí),讀者應(yīng)重點掌握以下內(nèi)容。掌握關(guān)系運算符、邏輯運算符及其對應(yīng)的表達(dá)式的使用方式。掌握簡單的if語句、if-else語句和if-else-if語句的應(yīng)用。掌握嵌套的if語句的應(yīng)用。掌握條件運算符和條件表達(dá)式的應(yīng)用。掌握switch語句的應(yīng)用??梢赃M(jìn)行選擇結(jié)構(gòu)程序設(shè)計。4.5經(jīng)典題型第4章選擇結(jié)構(gòu)設(shè)計思政目標(biāo)
強調(diào)C語言編程中語法規(guī)則的嚴(yán)格性,如if-else配對、switch語句要求等。讓學(xué)生明白在學(xué)習(xí)和生活中遵守規(guī)則的重要性,無論是在學(xué)術(shù)研究還是社會行為中,只有遵循既定規(guī)則,才能確保事情有序進(jìn)行,避免因違反規(guī)則而產(chǎn)生混亂和錯誤。
通過分析C語言程序中的邏輯判斷和表達(dá)式,如關(guān)系運算符、邏輯運算符的運用等,鍛煉學(xué)生的邏輯思維能力。教導(dǎo)學(xué)生在面對問題時要像分析程序邏輯一樣,有條理地思考,準(zhǔn)確判斷條件關(guān)系,從而做出合理決策,增強在復(fù)雜情況下解決問題的能力。3.讀下列程序:#include<stdio.h>main(){intx,y;
scanf(″%d″,&x);
y=0;
if(x>=0)
{if(x>0)y=1;}
elsey=-1;printf(″%d″,);}當(dāng)從鍵盤輸入32時,程序輸出結(jié)果為(C)。A)0B)-1C)1D)不確定值if和else的配對原則:缺省“{}”時,else總是和它上面離它最近的未配對的if配對。如果有“{}”就明確if和else的從屬關(guān)系。4.對下述程序,()是正確的判斷。#include<stdio.h>main(){intx,y;
scanf(″%d,%d″,&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf(″%d,%d″,x,y);}A)有語法錯誤,不能通過編譯B)若輸入數(shù)據(jù)3和4,則輸出4和5C)若輸入數(shù)據(jù)4和3,則輸出3和4D)若輸入數(shù)據(jù)4和3,則輸出4和4答案:A)if后面只能有一條語句,如果有多條語句必須用“{}”括起來。else后面只能有一條語句。“y++;”這條語句不屬于else的子句。5.以下程序的輸出結(jié)果是(B)。#include<stdio.h>main(){intx=1,y=0,a=0,b=0;
switch(x){case1:switch(y){
case0:a+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)安全在我心中演講稿(29篇)
- 幼兒園大班教師下學(xué)期工作計劃
- 中國軸電纜組件行業(yè)市場全景監(jiān)測及投資策略研究報告
- 買賣合同補充合同范本
- 2024年高考政治一輪復(fù)習(xí)同步訓(xùn)練選擇24文化對人的影響
- 2024-2025學(xué)年高中生物課時分層作業(yè)11DNA的復(fù)制基因是有遺傳效應(yīng)的DNA片段含解析新人教版必修2
- 2023-2028年中國女裝水貂皮成衣行業(yè)市場全景評估及投資規(guī)劃建議報告
- 電大安徽地域文化課程報告徽州文化淺談
- 2025年中國低壓接觸器市場運行動態(tài)及行業(yè)投資潛力預(yù)測報告
- 桃皮線行業(yè)深度研究報告
- 《康復(fù)評定技術(shù)》課件-第五章 運動控制
- 議論文8(試題+審題+范文+點評+素材)-2025年高考語文寫作復(fù)習(xí)
- 【理特咨詢】2024生成式人工智能GenAI在生物醫(yī)藥大健康行業(yè)應(yīng)用進(jìn)展報告
- 2025新人教版英語七年級下單詞默寫表(小學(xué)部分)
- 2025年春新外研版(三起)英語三年級下冊課件 Unit6第1課時Startup
- 2025江蘇蘇州高新區(qū)獅山商務(wù)創(chuàng)新區(qū)下屬國企業(yè)招聘9人高頻重點提升(共500題)附帶答案詳解
- 平拋運動的經(jīng)典例題
- 錄井作業(yè)現(xiàn)場風(fēng)險評估及控制措施
- 2025年度商會工作計劃
- 社區(qū)管理與服務(wù)專業(yè)實習(xí)總結(jié)范文
- 施工現(xiàn)場5S管理規(guī)范
評論
0/150
提交評論