版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
高級語言程序設計揭安全jieanquan@163.com江西師范大學計算機信息工程學院高級語言程序設計——基于計算思維能力培養(yǎng)高級語言程序設計——基于計算思維能力培養(yǎng)第4章程序基本控制結構揭安全jieanquan@163.com江西師范大學計算機信息工程學院主要內容邏輯運算符與邏輯表達式選擇控制結構條件表達式switch多分支語句分支程序設計小結主要內容循環(huán)控制語句程序跳轉語句多重循環(huán)及其應用循環(huán)程序設計方法循環(huán)程序設計小結本章思維導圖邏輯運算符
與邏輯表達式4.1&&——邏輯與,在兩條件同時成立時才為真||——邏輯或,兩個條件只要有一個成立時即為真!——邏輯非,即條件為真時結果為假,條件為假時結果為真4.1.1邏輯運算符aba&&ba||b!a!b真真真真假假真假假真假真假真假真真假假假假假真真例如,可以用邏輯表達式(x>10)&&(x<20)來表示x∈(10,20)。4.1.1邏輯運算符常用運算符的優(yōu)先級!→算術運算→關系運算→&&→||→賦值運算4.1.1邏輯運算符例如:4.1.1邏輯運算符(x>10)&&(x<20)可簡寫為:x>10&&x<20a=x>y||!z等價為a=((x>y)||(!z))再如:C語言以非零表示邏輯“真”,以零表示邏輯“假”。在計算邏輯表達式時,若結果為“真”,則表達式的值為1,否則為0。4.1.2邏輯表達式例如:若intx=10;則
x>8&&x<15的值為1;若intx=-9,y=3;
則表達式x&&y的值為
?
x||y的值為?!x&&y的值為?判斷變量a是否為大寫字母:a>='A'&&a<='Z'4.1.2邏輯表達式對形如a&&b的表達式,只有當a為真時才將a與b的值相與,否則,若a為假,則可直接得出a&&b的計算結果為邏輯假,表達式b未被執(zhí)行。邏輯運算的短路條件例如:inta=10,b=11,c=12;則執(zhí)行表達式(a>10&&b++&&--c)后,各變量的值是?4.1.2邏輯表達式對形如a||b的表達式,只有當a為假時才將a與b的值相或,否則,若a為真,則可直接得出a||b的結果為邏輯真,表達式b未被執(zhí)行。邏輯運算的短路條件例如,inta=0,b=0,m=0,n=0;則執(zhí)行表達式(m=a==b)||(n=b==a)時,各變量的值分別是多少?4.1.2邏輯表達式#include<stdio.h>intmain(){ inta=1,b=10,c=1,x,y; x=a&&b||++c; printf("x=%d,c=%d\n",x,c); y=!a&&--b||++c; printf("y=%d,b=%d,c=%d\n",y,b,c); return0;}x=1,c=1y=1,b=10,c=2【例4.1】寫出下面程序的執(zhí)行結果。閏年判斷問題:某一年year是否是閏年的條件是滿足下列二者之一:①能被4整除,但不能被100整除;②能被400整除。(year%4==0&&year%100!=0)||(year%400==0)可以用邏輯表達式表示如下:
從C99開始,C語言增加了專門的布爾類型bool,在stdbool.h文件中定義了常量true與false,分別代表邏輯真和邏輯假,這使得操作布爾值更加容易。
例如:boolflag;flag=10<20;執(zhí)行后flag的值為true,
相應的!(flag)的值為false1.設a為整型變量,不能正確表達數學關系:10<a<15的C語言表達式是()。10<a<15a==11||a==12||a==13||a==14a>10&&a<15!(a<=10)&&!(a>=15)ABCD提交單選題5分2.能表達“30<x<50或x<-100”的C語言表達式是
[填空1]
。作答填空題5分3.設inta=5,b=4,c=2;,則a>b>c的值為
[填空1]
。作答填空題5分4.設inta=0,b=0,c=2,d=4;,則執(zhí)行(c=a==b)||(d=b==a);后變量d的值是
[填空1]
。作答填空題5分5.以下程序的輸出結果是()。104103003004ABCD提交intmain(){inta=-1,b=4,k;k=(++a<=0)&&!(b--<=0);printf("%d%d%d\n",k,a,b);}單選題5分主要內容邏輯運算符與邏輯表達式選擇控制結構條件表達式switch多分支語句分支程序設計小結選擇控制結構4.2從鍵盤輸入兩個整數分別存入a與b,判斷a是否小于b,若小于則將a與b的內容交換后輸出,否則直接輸出a與b的值。4.2選擇控制結構if-elseSingleSelectionDoubleSelectionMultipleSelectionifif-else-if4.2.1if語句if單分支語句的一般格式為: if(條件)
語句;注意:后面不需要;號當多條語句受if條件控制時,應使用復合語句: if(條件)
{
語句1;
語句2;
語句3;
}4.2.1if語句例如,if(x>0)printf("y=1");printf("Over!");當x>0時,程序的輸出結果為:y=1Over當x<=0時,程序的輸出結果為:Over4.2.1if語句intmain(){inta,b,c;printf("Pleaseinput2integers,suchas2,5:");scanf("%d,%d",&a,&b);if(a<b)c=a;a=b;b=c;
printf("a=%d,b=%d",a,b);
return0;}是否有錯?【例4.2】從鍵盤輸入兩個整數分別存入a與b,判斷a是否小于b,若小于則將a與b的內容交換后輸出,否則直接輸出a與b的值。4_2_1.c流程intmain(){inta,b,c;printf("Pleaseinput2integers,suchas2,5:");scanf("%d,%d",&a,&b);if(a<b)
{c=a;a=b;b=c;
}printf("a=%d,b=%d",a,b);return0;}正確程序491622abc【例4.3】從鍵盤輸入三個整數,將它們從小到大進行排序后再輸出。491622abc【例4.3】從鍵盤輸入三個整數,將它們從小到大進行排序后再輸出。#include<stdio.h>intmain(){inta,b,c;intt;printf("Pleaseinput3integers(suchas501030):\n");scanf("%d%d%d",&a,&b,&c);printf("Beforesorting:\n");printf("a=%d,b=%d,c=%d\n",a,b,c);
if(a>b){t=a;a=b;b=t;//交換a與b的值}if(a>c){t=a;a=c;c=t;//交換a與c的值}
if(b>c){t=b;b=c;c=t;//交換b與c的值}printf("Aftersorting:\n");printf("a=%d,b=%d,c=%d\n",a,b,c);}6.執(zhí)行下列語句后輸出的結果是()。6,7,76,7,88,7,68,7,8ABCD提交
inta=8,b=7,c=6;if(a<b)if(b>c){a=c;c=b;}printf("%d,%d,%d\n",a,b,c);單選題5分你心里默想一個小于50的兩位數接著,我問你在以下的6張卡片中哪幾張卡片里有你想的那個數?之后,我不費吹灰之力就能猜出這個數現在試一試【例4.4】模擬魔術師的猜數字游戲。0??ㄆ?/p>
1357911131517192123252729313335373941434547491#卡片
2367101114151819222326273031343538394243464750
2??ㄆ?/p>
456712131415202122232829303136373839444546473??ㄆ?/p>
89101112131415242526272829303140414243444546474??ㄆ?/p>
161718192021222324252627282930314849505#卡片
32333435363738394041424344454647484950如果你說
0??ㄆ?/p>
2??ㄆ?/p>
5??ㄆ?/p>
有你默想的數
我就猜出這個數是37
為什么呢?
2726252423222120
d7d6d5d4d3d2d1d0
di=0或1,i=0,1,…,7
7
s=∑di2i
i=0二進制數在存貯單元中的表示
2726252423222120
00100101
12821644
32816
s=32+4+1=37
原來如此
2726252423222120
d7d6d5d4d3d2d1d0
十進制數S化作二進制表示,如di
為1,則
i#卡片上就有S
2726252423222120卡片
d7d6d5d4d3d2d1d00#1#2#
1000000011200000010230000001
133400000
1004500000
10
1556000001
1
0667000001
1
1
777你的生日在0#卡片嗎?135791113151719212325272931請輸入NforNoandYforYes:n↙模仿【例4.4】編寫一個猜生日程序你的生日在1#卡片嗎?2367101114151819222326273031請輸入NforNoandYforYes:n↙模仿【例4.4】編寫一個猜生日程序你的生日在2#卡片嗎?4567121314152021222328293031請輸入NforNoandYforYes:y↙模仿【例4.4】編寫一個猜生日程序你的生日在3#卡片嗎?891011121314152425262728293031請輸入NforNoandYforYes:y↙模仿【例4.4】編寫一個猜生日程序你的生日在4#卡片嗎?16171819202122232425262728293031請輸入NforNoandYforYes:n↙你的生日是:12日模仿【例4.4】編寫一個猜生日程序#include<stdio.h>intmain(){intdate=0;charanswer;printf(“你的生日在0#卡片嗎?\n");printf("1357\n");printf("9111315\n");printf("17192123\n");printf("25272931\n");
printf("請輸入NforNoandYforYes:");scanf("%c",&answer);if(answer=='Y'||answer=='y')
date=date+1;
printf("你的生日在1#卡片嗎?\n");printf("2367\n");printf("10111415\n");printf("18192223\n");printf("26273031\n");
printf("請輸入NforNoandYforYes:");scanf("%c",&answer);if(answer=='Y'||answer=='y')
date=date+2;printf("你的生日在2#卡片嗎?\n");printf("4567\n");printf("12131415\n");printf("20212223\n");printf("28293031\n");
printf("請輸入NforNoandYforYes:");scanf("%c",&answer);if(answer=='Y'||answer=='y')
date=date+4;printf("你的生日在3#卡片嗎?\n");printf("891011\n");printf("12131415\n");printf("24252627\n");printf("28293031\n");
printf("請輸入NforNoandYforYes:");scanf("%c",&answer);if(answer=='Y'||answer=='y')
date=date+8;
printf("你的生日在4#卡片嗎?\n");printf("16171819\n");printf("20212223\n");printf("24252627\n");printf("28293031\n");
printf("請輸入NforNoandYforYes:");scanf("%c",&answer);if(answer=='Y'||answer=='y')
date=date+16;printf("你的生日是:%d日\n",date);}4.2.2if雙分支語句if雙分支語句的一般格式為: if(條件)
語句1;else
語句2;例如,if(x>y)maxData=x; else maxData=y;實現的是將x與y中的更大者存入maxData。4.2.2if雙分支語句#include<stdio.h>intmain(){unsignedintyear;printf("Pleaseinputayear:");scanf("%u",&year);if((year%4==0&&year%100!=0)||(year%400==0)) printf("%uisaleapyear.\n",year);
else printf("%uisnotaleapyear.\n",year);return0;}【例4.5】編寫一個程序,輸入一個年份,判斷該年是否為閏年,若是則輸出該年是閏年,否則輸出該年不是閏年的提示信息。【例4.6】水仙花數是指一個三位整數且它的各位數立方之和等于該數本身,例如153是水仙花數(13+53+33=153)。編程從鍵盤輸入一個三位的整數,判斷該數是否為水仙花數。若是,則輸出該數為水仙花數,否則輸出該數不是水仙花數。#include<stdio.h>intmain(){intx,b0,b1,b2;printf("請輸入一個整數:");scanf("%d",&x);b0=
; //求個位數b1=
; //求十位數b2=
; //求百位數
if(
)printf("%d是一個水仙花數\n",x);elseprintf("%d不是一個水仙花數\n",x);return0;}x%10x/10%10x/100b0*b0*b0+b1*b1*b1+b2*b2*b2==x4.2.3if多分支語句if多分支語句的一般格式為: if(條件1)
語句1;elseif(條件2)
語句2;elseif(條件3)
語句3;else…else與其上方的離其最近且尚未與其它else
匹配的if語句配對。if(x<0) y=-1;else
if(x==0) y=0;
else y=1;4.2.3if多分支語句【例4.7】某超市新店開張,舉行促銷活動,活動規(guī)則如下:(1)購物金額在100元以下,總價9.5折;(2)購物金額大于或等于100且小于200元的,總價9折;(3)購物金額大于或等于200且小于500元的,總價8.5折;(4)購物金額大于或等于500元的,總價8折。方法1:平行if語句實現方法2:嵌套if語句實現#include<stdio.h>intmain(){floattotal,payment,saving;printf("請輸入購物總價:");scanf("%f",&total);
if(total<100)payment=total*0.95;if(total>=100&&total<200)payment=total*0.9;方法1:平行if語句實現
if(total>=200&&total<500)payment=total*0.85;if(total>=500)payment=total*0.8;saving=total-payment; //計算節(jié)省金額
printf("實付:%.2f元.\n",payment);printf("節(jié)約:%.2f元.\n",saving);return0;}#include<stdio.h>intmain(){floattotal,payment,saving;printf("請輸入購物總價:");scanf("%f",&total);if(total<100)payment=total*0.95;
elseif(total<200) //此時,total必大于等于100payment=total*0.9;方法2:嵌套if語句實現
elseif(total<500)
//此時,total必大于或等于200payment=total*0.85;
else
//此時,total必大于或等于500payment=total*0.8;saving=total-payment;
printf("實付:%.2f元.\n",payment);printf("節(jié)約:%.2f元.\n",saving);return0;}對于互斥的分支判斷條件,建議采用嵌套ifelse語句實現?!纠?.8】【課后閱讀】
編寫程序輸入一元二次方程ax2+bx+c=0的三個系數a、b、c,分情況計算并輸出一元二次方程的根。函數名函數原型說明功能備注sindoublesin(doublex)計算sin(x)的值x為弧度cosdoublecos(doublex)計算cos(x)的值x為弧度sqrtdoublesqrt(doublex)計算x的平方根x>=0.0powdoublepow(doublex,doubley)計算冪指數xy
logdoublelog(doublex)計算loge(x)對數
log10doublelog10(doublex)計算log10(x)對數
fabsfabsdouble(doublex)計算x的絕對值
常用數學函數7.寫出下面程序的運行結果
[填空1]
。作答#include<stdio.h>intmain(){inta,b,c,d;a=c=0;b=1;d=20;if(a)d=d-10;elseif(!b)if(!c)d=25;elsed=15; printf("d=%d\n",d);}填空題10分8.寫出下面程序的運行結果
[填空1]
。作答#include<stdio.h>intmain(){inta=2,b=3,c=1;if(a>b)if(a>c) printf("%d\n",a);else printf("%d\n",b);printf("over!\n");}填空題10分9.下面的程序功能是判斷輸入的年份是否為閏年,請在橫線上填上適當的語句。
[填空1]
[填空2]
作答intmain(){unsignedintyear;intleap;scanf("%u",&year);if((1))leap=1;elseleap=0;if((2))printf("%uisaleapyear.\n",year);elseprintf("%uisnotaleapyear.\n",year);}填空題20分主要內容邏輯運算符與邏輯表達式選擇控制結構條件表達式switch多分支語句分支程序設計小結條件表達式4.34.3條件表達式表達式1表達式2表達式3?:真假表達式1例如:maxData=a>b?a:b;等價于if(a>b)maxData=a;elsemaxData=b;表達式2表達式3?:4.3條件表達式charc;c=getchar();printf("%c",c>='A'&&c<='Z'?c+32:c); 下面程序段的功能是什么?4.3條件表達式10.設intm1=5,m2=3;,表達式m1>m2?(m1=1):(m2=-1)運算后,m1和m2的值分別是()。1和?11和35和?15和3ABCD提交單選題5分主要內容邏輯運算符與邏輯表達式選擇控制結構條件表達式switch多分支語句分支程序設計小結switch多分支語句4.44.4switch多分支語句Inputtwodata(suchas5,2.3):20.0,30.0↙[1]計算兩個數的和并輸出[2]計算兩個數的差并輸出[3]計算兩個數的積并輸出[4]計算兩個數的商并輸出請輸入選項[]【例4.9】輸入兩個數,根據菜單選項進行計算。20.000000+30.000000=50.0000四種分支,易用ifelse多分支語句
實現1switch語句語法格式如下:switch(表達式){ case常量表達式1:
語句序列1 case常量表達式2:
語句序列2
…
case常量表達式n:
語句序列n
default:語句}必須為int或char型只能是常量表達式4.4switch多分支語句分析左右兩個程序的輸出結果:23end2#include<stdio.h>intmain(){intc=2;switch(c){case1:printf("1");case2:printf("2");case3:printf("3");default:printf("end");}}#include<stdio.h>intmain(){intc=2;switch(c){case1:printf("1");break;case2:printf("2");break;case3:printf("3");break;default:printf("end");}}#include<stdio.h>#include<math.h>intmain(){constdoublezero=1.0e-7;doublex,y,result;intselect;printf("Inputtwodata(suchas5,2.3):\n");
scanf("%lf,%lf",&x,&y);
printf("[1]計算兩個數的和并輸出\n");printf("[2]計算兩個數的差并輸出\n");printf("[3]計算兩個數的積并輸出\n");printf("[4]計算兩個數的商并輸出\n");printf("請輸入選項[]\b\b");scanf("%d",&select);
switch(select){case1:result=x+y;printf("%f+%f=%.4f\n",x,y,result);
break;case2:result=x-y;printf("%f-%f=%.4f\n",x,y,result);
break;case3:result=x*y;printf("%f*%f=%.4f\n",x,y,result);
break;case4:if(fabs(y)<zero)//判斷除數是否為0printf("除數不能為0!\n");else{result=x/y;printf("%f/%f=%.4f\n",x,y,result);}
break;default:printf("選項輸入錯誤!\n");}return0;}【例4.10】switch程序示例。(1)
分析該程序的運行情況(2)如果刪除case‘N’:前面的break語句,在輸入Y或y時,程序的輸出結果是什么?若分支條件為非整型,可否使用switch語句?【例4.11】輸入學生的考試分數score(0~100分),按以下分數段輸出其對應的等級:score<60 不及格60≤score<70 及格70≤score<80 中80≤score<90 良90≤score≤100 優(yōu)秀#include<stdio.h>intmain(){floatscore;intgrade;
printf("Inputscore:");scanf("%f",&score);
grade=(int)score/10; //將浮點型數據轉換成整型表達式switch(grade){default:printf("分數輸入有誤\n");break;case0:case1:case2:case3:case4:case5:printf("不及格\n");break;case6:printf("及格\n");break;case7:printf("中等\n");break;
case8:printf("良好\n");break;
case9:case10:printf("優(yōu)秀\n");break;}return0;}11.若有定義:floatx;inta,b;,則正確的switch語句是()。ABCD提交單選題5分12.寫出下面程序的輸出結果。
[填空1]
作答填空題10分主要內容邏輯運算符與邏輯表達式選擇控制結構條件表達式switch多分支語句分支程序設計小結小結單分支:if雙分支:ifelse多分支:ifelseifelseifelse…條件表達式:表達式1?表達式2:表達式3switch多分支語句循環(huán)控制結構4.5如何連續(xù)處理10位學生成績的等級轉換?4.5.1while循環(huán)語句執(zhí)行過程執(zhí)行過程在while(條件)后面不要跟‘;’條件循環(huán)體修改循環(huán)條件truefalse4.5.1while循環(huán)語句計數循環(huán)法修改例4.11,使其能處理10位學生成績0countercounter<10輸入第
個學生分數,并轉換成相應等級并輸出counter++;counter=0;12341234#include<stdio.h>intmain(){floatscore;intgrade;intcounter=0; //循環(huán)計數變量初始化
while(counter<10)
{printf("Inputscore:");scanf("%f",&score);grade=(int)score/10;//將分數轉換成整型表達式switch(grade){default:printf("分數輸入有誤\n");break;case0:case1:case2:case3:case4:case5:printf("不及格\n");break;case6:printf("及格\n");break;case7:printf("中等\n");break;case8:printf("良好\n");break;case9:case10:printf("優(yōu)秀\n");break;}
counter++;//循環(huán)計數器加1
}return0;}如果要處理60位學生成績,如何修改?【例4.13】編寫程序計算的值并出。i←1,sum←0i<=100sum←sum+ifalsetrueoutputsum1isum01<100 true122<100 true33<100 true36計數器每次增1使用了2個變量startendi++1015050#include<stdio.h>intmain(){intsum=0,i=1; //變量初始化while(i<=100){ sum=sum+i;
i++;} printf("sum=%d\n",sum); printf("i=%d\n",i);return0;}如果sum未被初始化為0,結果為怎樣?#include<stdio.h>intmain(){intsum=0,i=1;while(i>0)sum=sum+i--; //循環(huán)體
printf("sum=%d\n",sum);printf("i=%d\n",i);return0;}倒計數實現循環(huán)控制方法小測試模仿上例從鍵盤輸入5個數,求它們的和循環(huán)前未知循環(huán)次數,如何實現循環(huán)控制?標記法
事先設置一個標記變量用于控制循環(huán)條件,初始值為邏輯真,在循環(huán)過程中當滿足一定條件時,將該標記變量設置為邏輯假,從而結束循環(huán)。【例4.14】模擬商場收銀程序。請輸入商品價格:12.7↙請輸入商品價格:30.8↙請輸入商品價格:89.99↙請輸入商品價格:0↙應付:133.49付款:140↙找零:6.51#include<stdio.h>intmain(){doubleprice; //商品價格doubletotal=0; //應付款doublepayment; //付款doublechange; //找零intflag=1; //循環(huán)控制變量初始化為邏輯真while(1==flag) //循環(huán)輸入商品價格
{printf("請輸入商品價格:");scanf("%lf",&price); if(price<0.01)
flag=0;//修改循環(huán)控制變量elsetotal=total+price;
}
printf("應付:%.2f\n",total);printf("付款:"); //輸入付款額
scanf("%lf",&payment);if(payment>=total) //計算找零{change=payment-total;printf("找零:%.2f\n",change);}elseprintf("付款不足!");return0;}如果要求在程序結束輸出顧客一共購買了幾件商品,如何實現?for(;;){}4.5.2for循環(huán)語句循環(huán)體表達式1表達式2表達式3僅執(zhí)行1次循環(huán)條件修改循環(huán)計數變量表達式2循環(huán)體表達式3表達式1truefalse4.5.2for循環(huán)語句【例4.15】采用for循環(huán)編寫程序計算的值并出。#include<stdio.h>intmain(){intsum=0,i;for(i=1;i<=100;i++){sum=sum+i;
}printf("sum=%d\n",sum);printf("i=%d\n",i);return0;}#include<stdio.h>intmain(){intsum=0,i;for(i=1;i<=100;i++){sum=sum+i;
}printf("sum=%d\n",sum);printf("i=%d\n",i);return0;};若在此增加了;號,程序運行的結果是什么?【例4.15】采用for循環(huán)編寫程序計算的值并出。13.設inta;,則語句for(a=0;a==0;a++);和語句for(a=0;a=0;a++);執(zhí)行循環(huán)體的次數分別是()。0,00,11,01,1ABCD提交單選題5分14.執(zhí)行語句for(i=1;i++<4;);后i的值是()。345不確定ABCD提交單選題5分【例4.16】編寫程序求的值并出。#include<stdio.h>intmain(){doublesum=0,term;inti;for(i=0;i<=100;i++){term=1/(1+5*i); //求數列的當前項sum+=term; //累加求和}printf("sum=%f\n",sum);return0;}修改下面程序中的錯誤!1.0/(1+5*i);分析term,sum變量的作用迭代法求數列的和數列ai數列ai+1term=1.0/(1+5*i);情況1:數列項可由循環(huán)變量直接計算得出數列ai數列ai+11,2,4,8,16,32,64…ai+1=2aiterm=term*2;情況2:數列項由前后項迭代產生迭代法求數列的和【例4.17】有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…,編寫程序,輸出這個數列前20項之和。a1=2/1 (i=1)ai+1=1+1/ai
(i≥2)term=1.0+1.0/term;已知值,當前項新項的值#include<stdio.h>intmain(){doublesum=0,term=2;inti;for(i=1;i<=20;i++){sum=sum+term;//將當前項加入求和變量term=1.0+1.0/term;//計算產生下一數列項}printf("sum=%f\n",sum);return0;}2/1,3/2,5/3,8/5,13/8,21/13…sum=0;term=2; for(i=1;i<=20;i++){sum=sum+term;term=1.0+1.0/term;}isumterm02123/227/25/33執(zhí)行過程分析2/1,3/2,5/3,8/5,13/8,21/13…7/2+5/38/5intmain(){ doublesum,term; inti;
term=2; //數列第1項 sum=2; //初始值為數列第1項 for(i=1;
(1)
;i++) {
(2)
;
(3)
;}printf("sum=%f\n",sum);return0;}i<20term=1.0+1.0/termsum=sum+termterm和sum被初始化為數列第1項【例4.18】某大獎賽評分共有7位評委,記分規(guī)則為:按百分制記分,去掉一個最高分和一個最低分,再求平均分。試設計一個計分程序,輸入7位評委的評分,計算輸出選手的平均得分(精確到3位小數)?!痉治觥浚?)循環(huán)7次一一輸入每個評委的評分,同時累加求其和存入變量sum,并記下最高分maxScore和最低分minScore。(2)計算(sum-maxScore-minScore)/5,并輸出結果。#include<stdio.h>#defineN7intmain(){doublescore,maxScore,minScore;inti;doublesum=0;
maxScore=0; //初始時最高分設為0
minScore=100; //初始時最低分設為100for(i=1;i<=N;i++){printf("請輸入第%d個評委評分:",i);scanf("%lf",&score);if(score>maxScore) maxScore=score;if(score<minScore)minScore=score;sum+=score;}printf("去掉一個最高分:%.3f\n",maxScore);printf("去掉一個最低分:%.3f\n",minScore);printf("選手得分:%.3f\n",(sum-maxScore-minScore)
/(N-2));return0;}表達式1,表達式2,…,表達式n;例如,若有變量定義inta,b,c,d;則d=(a=10,b=a+2,c=b*3);的執(zhí)行過程是:a=10;b=a+2;c=b*3;d=c;逗號表達式
借助逗號表達式,可以擴展for語句的第1個或第3個表達式的功能。例如,我們可以將上例中的以下三行maxScore=0; minScore=100; for(i=1;i<=N;i++)改為:for(maxScore=0,minScore=100,i=1;i<=N;i++)4.5.3dowhile循環(huán)語句循環(huán)體表達式do{}while(表達式);循環(huán)體truefalse一般用于至少需要執(zhí)行一次的循環(huán)【例4.19】用公式
求的近似值,直到最后一項的絕對值小于10-6為止,并統(tǒng)計一共迭代了多少項。本題至少要迭代一次,循環(huán)次數未知,可用dowhile循環(huán)來實現?!痉治觥慷xpi存儲數列的和定義term存儲當前項定義flag存儲當前項符號定義n表示當前項的分母pi=pi+flag*termterm=1.0/nflag=-flagn=n+2#include<stdio.h>intmain(){doublepi,term;longn=1,counter=0;intflag=1; //符號開關pi=0;do{ term=1.0/n; //求當前通項 pi+=flag*term; n+=2; //為下一次循環(huán)做準備 flag=-flag; //符號位取反 counter++; //迭代次數加1}while(term>1e-6);pi=pi*4;
printf("pi=%-10.6f\n",pi);printf("counter=%ld\n",counter);return0;}今后凡遇數列呈現一正一負變化規(guī)律的情況,可以借鑒本例的方法。15.寫出下面程序的輸出結果
[填空1]
。作答intmain(){ inta=0,b=5,c=3; while(c>0&&a<5) { b=b-1; ++a; c--; } printf("%d,%d,%d\n",a,b,c);}b=4a=1c=2b=3a=2c=1b=2a=3c=0填空題10分【例4.20】編寫一個程序,輸入一個小于或等于10的正整數n,計算n!并輸出?!痉治觥扛鶕祵W定義n!=1*2*3…*n;編程時可以定義一個整型變量p,初始值為1,循環(huán)n-1次,分別將2~n依次與p相乘并將結果存入p中。#include<stdio.h>intmain(){longp;inti,n;
p=1;do{ printf("Inputaninteger(<=10):");scanf("%d",&n);}while(n<=0||n>10);//輸入無效整數時重新輸入for(i=2;i<=n;i++) //求n! p=p*i;printf("%d!=%ld\n",n,p);
return0;}如需求更大數的階乘值,可將p的類型定義為longlongint型。小結while語句for語句dowhile語句計數法標記法16.華氏和攝氏溫度的轉換公式為:C=5/9*(F-32),其中
C表示攝氏的溫度,F表示華氏的溫度。下面的程序要求從華氏0度到華氏300度,每隔20度輸出一個華氏溫度對應的攝氏溫度值,請在橫線上填上適當的語句。#include<stdio.h>intmain(){ floatfahr=0,celsius; while(
(1)
<=300) {
(2)
; printf("%4.0f\t%6.1f\n",fahr,celsius);
(3)
; }}fahrcelsius=5.0/9*(fahr-32);fahr+=20;程序跳轉語句4.64.6程序跳轉語句break語句continue語句goto語句4.6.1break語句循環(huán)條件break;truefalse循環(huán)體語句循環(huán)體語句break語句的語法格式為:
break;通常break語句與條件語句一起使用:
if(條件)break;【例4.21】分析下面程序的輸出結果。#include<stdio.h>intmain(){inti;for(i=1;i<=10;i++){printf("*");if(i>=5)break;printf("|");}printf("\ni=%d",i);return0;}*|*|*|*|*i=5【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。素數,又稱質數,指在大于1的自然數中,除了1和此整數自身外,無法被其他自然數整除的數。把[2..n-1]的所有整數作除數,一旦發(fā)現某個因數,則可提前終止循環(huán)判斷,可以確定n不是素數。若[2..n-1]之間的所有數均不能整除n,則n是素數。【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。#include<stdio.h>intmain(){intn;inti;printf("Inputaninteger(>=2):");scanf("%d",&n);
for(i=2;i<n;i++)if(n%i==0)break; //提前結束循環(huán)【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。if(i<n) printf("%disnotaprimenumber.\n",n);elseprintf("%disaprimenumber.\n",n);return0;}根據數學性質,只需用2~作除數即可判斷n是否為素數。【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。#include<stdio.h>#include<math.h>intmain(){intn,i,k;printf("Inputaninteger(>=2):");scanf("%d",&n);
k=(int)sqrt(n);
for(i=2;i<=k;i++)【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。if(n%i==0)break; //提前結束循環(huán)if(i<=k) printf("%disnotaprimenumber.\n",n);elseprintf("%disaprimenumber.\n",n);return0;}【例4.22】從鍵盤輸入一個數,判斷該數是否為素數。#include<stdio.h>#include<math.h>#include<stdbool.h>intmain(){intn,i,k;boolprime=true;//素數標記,初始值為trueprintf("Inputaninteger(>=2):");scanf("%d",&n);
采用標記變量替換break功能:
k=(int)sqrt(n);
for(i=2;i<=k&′i++)if(n%i==0)prime=false; //修改素數標記,提前結束循環(huán)if(!prime)printf("%disnotapri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度上市公司股權轉讓及業(yè)績承諾協議書3篇
- 2025年度消防工程人工費承包合同(含消防噴頭)3篇
- 二零二五年度房產出售配套綠化改造合同3篇
- 2024年西安鳳城醫(yī)院招聘考試真題
- 衍生產品拍攝課程設計
- 2024年廣西南寧武鳴區(qū)消防救援大隊招聘筆試真題
- 2024年亳州興華醫(yī)院口腔科健康宣傳部招聘筆試真題
- 自動化考試課程設計
- 裝卸機械化課程設計
- 如何利用碎片時間進行高效學習
- 四人合伙投資協議書范本
- 反射療法師3級考試題庫(含答案)
- 成都市農貿市場建設技術要求(2019年版)(完整版)
- 2024-2030年版中國IPVPN服務行業(yè)發(fā)展現狀及投資商業(yè)模式分析報告
- 【7歷期末】安徽省蕪湖市弋江區(qū)2023~2024學年七年級上學期期末考試歷史試卷(含解析)
- 北京市海淀區(qū)2021-2022學年第一學期四年級期末考試語文試卷(含答案)
- 2024-2030年中國企業(yè)大學行業(yè)運作模式發(fā)展規(guī)劃分析報告
- 安徽省蕪湖市2023-2024學年高一上學期期末考試 生物 含解析
- 通用電子嘉賓禮薄
- GB/T 3280-2015不銹鋼冷軋鋼板和鋼帶
- 模塊一:外貿業(yè)務操作技能試題
評論
0/150
提交評論