高級(jí)語言程序設(shè)計(jì)(C語言版 第2版)-基于計(jì)算思維能 課件 第3-5章-算法與簡單C程序設(shè)計(jì)、程序控制的基本結(jié)構(gòu)、函數(shù)及其應(yīng)用_第1頁
高級(jí)語言程序設(shè)計(jì)(C語言版 第2版)-基于計(jì)算思維能 課件 第3-5章-算法與簡單C程序設(shè)計(jì)、程序控制的基本結(jié)構(gòu)、函數(shù)及其應(yīng)用_第2頁
高級(jí)語言程序設(shè)計(jì)(C語言版 第2版)-基于計(jì)算思維能 課件 第3-5章-算法與簡單C程序設(shè)計(jì)、程序控制的基本結(jié)構(gòu)、函數(shù)及其應(yīng)用_第3頁
高級(jí)語言程序設(shè)計(jì)(C語言版 第2版)-基于計(jì)算思維能 課件 第3-5章-算法與簡單C程序設(shè)計(jì)、程序控制的基本結(jié)構(gòu)、函數(shù)及其應(yīng)用_第4頁
高級(jí)語言程序設(shè)計(jì)(C語言版 第2版)-基于計(jì)算思維能 課件 第3-5章-算法與簡單C程序設(shè)計(jì)、程序控制的基本結(jié)構(gòu)、函數(shù)及其應(yīng)用_第5頁
已閱讀5頁,還剩470頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

高級(jí)語言程序設(shè)計(jì)高級(jí)語言程序設(shè)計(jì)——基于計(jì)算思維能力培養(yǎng)高級(jí)語言程序設(shè)計(jì)——基于計(jì)算思維能力培養(yǎng)第3章算法與簡單C程序設(shè)計(jì)主要內(nèi)容C語句C程序輸入、輸出操作的實(shí)現(xiàn)算法簡單程序設(shè)計(jì)舉例實(shí)驗(yàn)三本章思維導(dǎo)圖C語句3.1表達(dá)式語句z=x*y+6;i++;空語句;復(fù)合語句

{ …}3.1C語句C程序輸入/輸出操作的實(shí)現(xiàn)3.23.2.1字符輸入/輸出通過調(diào)用標(biāo)準(zhǔn)庫函數(shù)來實(shí)現(xiàn)#include<stdio.h>字符輸出函數(shù)putchar(c)

輸出一個(gè)字符c字符輸入函數(shù)getchar()

無參數(shù)函數(shù)值為從輸入設(shè)備接收的字符#include<stdio.h>intmain(){chara='n',b='i';intc=99;putchar(a-32);

//輸出大寫字母Nputchar(b);putchar(c);putchar(c+2);putchar('\n'); //輸出換行符return0;}Nice

【例3.1】putchar函數(shù)應(yīng)用舉例。#include<stdio.h>intmain(){chara,b;a=getchar();b=getchar();putchar(a);putchar(b);return0;}AB↙ABAB↙A【例3.2】getchar函數(shù)應(yīng)用舉例。#include<stdio.h>intmain(){inta=65;longb=1234567;floatc=12.34567;printf("%c,%d,%6d,%-6d,%1d\n",a,a,a,a,a);printf("%ld,%8ld,%4ld\n",b,b,b,a);

//此處輸出項(xiàng)列表比格式轉(zhuǎn)換符多出一項(xiàng)printf("%f,%10f,%10.2f,%-10.2f\n",c,c,c,c,c);printf("%s,%8.6s,%-8.3s\n","Hello","Hello","Hello");return0;}【例3.3】格式輸出程序示例?!纠?.3】格式輸出程序示例。printf()函數(shù)printf(“格式串”,表達(dá)式1,表達(dá)式2,…);3.2.2格式輸入/輸出格式轉(zhuǎn)換控制字符表類型說明類型說明d以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))c以字符形式輸出,只輸出一個(gè)字符o以八進(jìn)制無符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符0)s輸出字符串x十六進(jìn)制無符號(hào)整數(shù)(小寫字母a~f)f以小數(shù)形式輸出單、雙精度數(shù)、默認(rèn)輸出6位小數(shù)X十六進(jìn)制無符號(hào)整數(shù)(大寫字母A~F)e十進(jìn)制指數(shù)(小寫e)u以無符號(hào)十進(jìn)制形式輸出整數(shù)E十進(jìn)制指數(shù)(大寫E)g,G選用%f或%e格式中輸出寬度較短的一個(gè)格式在格式說明中,%和上述格式轉(zhuǎn)換字符之間可以按以下順序插入如下附加字符:%+、-、#m.nh、l格式字符↓↓↓↓↓↓開始符標(biāo)志字符寬度

指示符精度

指示符長度

修正符格式轉(zhuǎn)換字符printf函數(shù)附加字符表字符說

明標(biāo)志字符-輸出的數(shù)字或字符在域內(nèi)向左對(duì)齊,右端補(bǔ)空格,缺省是左對(duì)齊+輸出數(shù)據(jù)為正是冠以+號(hào),為負(fù)時(shí)冠以-號(hào),缺省時(shí)正數(shù)不輸出+號(hào)#八進(jìn)制輸出時(shí)加前綴0,十六進(jìn)制輸出時(shí)加前綴0x寬度指示m指示輸出項(xiàng)所占的最小寬度。當(dāng)m小于數(shù)據(jù)實(shí)際寬度時(shí),按實(shí)際寬度輸出。例如,printf(“%3d”,1234);實(shí)際輸出為:1234字符說

明精度指示.n對(duì)實(shí)數(shù),表示輸出n位小數(shù);對(duì)字符串,表示截取的字符個(gè)數(shù)。例如,printf(“%6.2f”,12.3467);長度修正字母l用于長整數(shù),可加在格式字符d,o,x,u之間字母h用于短整數(shù),可加在格式字符d,o,x,u之間printf函數(shù)附加字符表(續(xù))輸出結(jié)果為:_12.35(_代表空格)例:printf("%6d\n",123);printf("%-6d\n",123);輸出結(jié)果為:123123又如,printf(“%+d,%+d\n”,123,-123);輸出結(jié)果為:+123,-123例:

若要輸出八進(jìn)制或十六進(jìn)制,可以使用以下形式:printf(“%o,%x\n”,10,16);輸出結(jié)果為:12,10例:#include<stdio.h>#include<stdio.h>intmain(){inta=97;longb=1234567;floatc=12.34567;printf("%c,%d,%6d,%-6d,%1d\n",a,a,a,a,a);printf("%ld,%8ld,%4ld\n",b,b,b,a);//此處輸出項(xiàng)列表比格式轉(zhuǎn)換符出多一項(xiàng)

printf("%f,%10f,%10.2f,%-10.2f\n",c,c,c,c,c);printf("%s,%8.6s,%-8.3s\n","Hello","Hello","Hello");return0;}【例3.3】格式輸出程序示例。a,97,97,97,971234567,1234567,123456712.345670,12.345670,12.35,12.35Hello,Hello,Hel【例3.3】格式輸出程序示例。編譯程序不對(duì)輸出項(xiàng)列表的項(xiàng)數(shù)與格式轉(zhuǎn)換符個(gè)數(shù)進(jìn)行檢查,當(dāng)輸出項(xiàng)列表多于格式轉(zhuǎn)換符時(shí),多余的項(xiàng)將不被輸出。反之,則可能出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。此外,當(dāng)格式轉(zhuǎn)換符與輸出項(xiàng)的類型不匹配時(shí),編譯程序也不做檢查,但在運(yùn)行時(shí)將得到不正確的運(yùn)行結(jié)果。初寫程序時(shí)要特別注意,不要誤用%d輸出float和double的表達(dá)式,同理,也不能用%f輸出int型的表達(dá)式。提示

但%d可輸出字符的ASCII碼,反之,%c可以輸出ASCII碼值對(duì)應(yīng)的字符。 scanf(“格式控制串”,地址列表);%*mh、l格式字符↓↓↓↓↓開始符賦值抑制符寬度指示符長度修正符格式轉(zhuǎn)換字符scanf格式字符類型說明d輸入有符號(hào)的十進(jìn)制整數(shù)u輸入無符號(hào)的十進(jìn)制整數(shù)o輸入無符號(hào)的八進(jìn)制整數(shù)x,X輸入無符號(hào)的十六進(jìn)制整數(shù)(大小寫作用相同)c輸入單個(gè)字符s輸入字符串。將字符串送到一個(gè)字符數(shù)組中,在輸入時(shí)以非空格白字符開始,以第一個(gè)空白字符結(jié)束。字符串以串結(jié)束標(biāo)志’\0’作為其最后一個(gè)字符scanf格式字符類型說明f輸入float型實(shí)數(shù),可以用小數(shù)形式或指數(shù)形式輸入;輸入double型實(shí)數(shù),需用%lfe,E,g,G與f作用相同,e與f,g可以互相轉(zhuǎn)換。注意,輸入double數(shù)據(jù)需加前綴lscanf格式字符例如:inta;doubleb;scanf(“%d%lf”,&a,&b); 輸入1212.34↙后變量a獲得12,變量b獲得12.34。scanf格式字符若將輸入語句改成:scanf(“%d,%lf”,&a,&b);則輸入格式應(yīng)為:12,12.34↙scanf格式字符同理,scanf(“a=%d,b=%lf”,&a,&b);輸入時(shí)應(yīng)采用以下格式:a=12,b=12.34↙scanf格式字符#include<stdio.h>intmain(){inta;charb;

printf("PleaseinputanintegerandthenpressEnter:");scanf("%d",&a);printf("a=%d\n",a);

printf("PleaseinputancharacterandthenpressEnter:");scanf("%c",&b);printf("b=%c\n",b);return0;}PleaseinputanintegerandthenpressEnter:12↙a=12PleaseinputancharacterandthenpressEnter:b=方法1:增加getchar();方法2:改為scanf(“%c”,&b)【例3.4】scanf函數(shù)輸入示例。寬度指示符用十進(jìn)制整數(shù)指定輸入數(shù)據(jù)的最大寬度,例如:scanf(“%3d”,&a);若輸入12345,則僅把前3位數(shù)123賦值給整型變量a,其余部分駐留在鍵盤緩沖區(qū)。寬度指示符又如:scanf(“%3d%3d”,&a,&b);若輸入數(shù)據(jù)12345,則把前3位123賦值給整型變量a,而把后兩位45賦值給變量b。寬度指示符賦值抑制符“*”

賦值抵制符“*”表示輸入項(xiàng)讀入后不賦值給相應(yīng)的變量,即跳過該輸入值。

例如:scanf(“%d%*d%d”,&a,&b);

若輸入101112↙

則把10賦值給變量a,11被讀入但未被賦值給變量b,12被賦值給變量b。長度修正符

長度修正符h和l分別用于輸入短整數(shù)和長整數(shù),另外l還可加在格式轉(zhuǎn)換符f前,用于輸入double型變量的值。

例如:doublex;scanf(“%lf”,&x);常見錯(cuò)誤舉例inta,b;floatx;scanf(“%d”,a);scanf(“a=%d\n”,&a);scanf(“%7.2f”,&x)scanf(“%d%d”,&a,&b);12,34↙#include<stdio.h>intmain(){constfloatpi=3.1415926; //定義const常量floatr;doublelength,area;

printf("Pleaseinputradiusofacicle:");

scanf("%f",&r); //輸入圓的半徑【例3.5】修改例2.6,從鍵盤接收用戶輸入的圓的半徑,計(jì)算并輸出圓的周長和面積。

length=2.0*pi*r; //計(jì)算圓的周長

area=pi*r*r; //計(jì)算圓的面積printf("length=%f\n",length);//輸出圓的周長printf("area=%f\n",area); //輸出圓的面積return0;}【例3.5】修改例2.6,從鍵盤接收用戶輸入的圓的半徑,計(jì)算并輸出圓的周長和面積。1.設(shè)intx;,則下列選項(xiàng)中錯(cuò)誤的輸入語句是()。scanf("%d",x);scanf("%d",&x);scanf("%o",&x);scanf("%x",&x);ABCD提交單選題5分2.執(zhí)行語句printf("|%9.4f|\n",12345.67);后的輸出結(jié)果是()。|2345.6700||12345.6700||12345.670||12345.67|ABCD提交單選題5分3.若在下面程序運(yùn)行時(shí)輸入123456,程序的輸出結(jié)果是什么?

[填空1]

[填空2]

作答#include<stdio.h>intmain(){inta,b;scanf("%2d%*2s%2d",&a,&b);printf("%d,%d\n",a,b);return0;}填空題10分算法3.3AlgorithmsDataStructuresPrograms+=N.Wirth著名論斷:高德納(DonaldE.Knuth):“計(jì)算機(jī)科學(xué)就是算法的研究”3.3算法3.3.1問題求解過程中算法的作用

利用計(jì)算機(jī)進(jìn)行問題求解,根本上就是弄清楚兩個(gè)基本問題,一是“做什么”,二是“怎么做”。

即What和How的問題。

算法設(shè)計(jì)回答的就是“怎么做”的問題。

對(duì)同一個(gè)問題,往往有不同的解題方法,各種方法有優(yōu)劣之分。檢索(查找)檢索(查找)數(shù)據(jù)檢索算法胡強(qiáng)查詢結(jié)果:5條記錄計(jì)算機(jī)是如何幫用戶查找數(shù)據(jù)的?順序檢索序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)22080660514

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054012查詢姓名為譚青的同學(xué)22級(jí)網(wǎng)絡(luò)工程譚青2208066053

34422級(jí)網(wǎng)絡(luò)工程譚青2208066053

序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)2208066051

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054012422級(jí)網(wǎng)絡(luò)工程譚青2208066053

3456順序檢索查詢姓名為鄒婕的同學(xué)“瞎子”找真幣假幣假幣假幣假幣假幣假幣順序檢索

超市若有10000種不同貨品,每掃描一個(gè)條碼時(shí)需要在10000種不商品中尋找這件商品的名稱和價(jià)格。若1秒內(nèi)查詢1000次,查完全部貨物耗時(shí)10秒。順序檢索順序檢索效率太低!無法滿足應(yīng)用要求!怎樣提高檢索效率?順序檢索猜價(jià)格二分檢索123456….4096查詢關(guān)鍵字15002048二分檢索查詢關(guān)鍵字15001024二分檢索查詢關(guān)鍵字15001536二分檢索序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)22080660514

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054l=0查詢學(xué)號(hào)為2208066053的同學(xué)22級(jí)網(wǎng)絡(luò)工程譚青2208066053

422級(jí)網(wǎng)絡(luò)工程譚青2208066053

r=5midl=3mid序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)22080660514

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054l=0查詢學(xué)號(hào)為2208066052的同學(xué)422級(jí)網(wǎng)絡(luò)工程譚青2208066053

r=5midl=3mid二分檢索序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)22080660514

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054查詢學(xué)號(hào)為2208066052的同學(xué)422級(jí)網(wǎng)絡(luò)工程譚青2208066053

r=3l=3mid二分檢索序號(hào)班級(jí)名稱姓名學(xué)號(hào)022級(jí)網(wǎng)絡(luò)工程聶加望2208066047122級(jí)網(wǎng)絡(luò)工程潘杰2208066048222級(jí)網(wǎng)絡(luò)工程秦彪2208066049322級(jí)網(wǎng)絡(luò)工程邱強(qiáng)22080660514

522級(jí)網(wǎng)絡(luò)工程唐重喜2208066054查詢學(xué)號(hào)為2208066052的同學(xué)422級(jí)網(wǎng)絡(luò)工程譚青2208066053

r=3l=4mid查找失敗二分檢索【例3.6】序列A包含14個(gè)數(shù)據(jù),如圖3-2所示,分析順序查找方法查找22的過程。0123456789101112136549328101235232227115【例3.7】假設(shè)序列A已排序存放,如圖3-3所示,分析采用二分搜索法在其中查找15的過程。012345678910111213145689101215222327323501234567891011121314568910121522232732357891011121312152223273235789121522【例3.7】假設(shè)序列A已排序存放,如圖3-3所示,分析采用二分搜索法在其中查找15的過程。3.3.2算法的特點(diǎn)1、有窮性2、確定性3、可行性4、零個(gè)或多個(gè)輸入5、一個(gè)或多個(gè)輸出3.3.3算法的描述1、自然語言表示法2、偽代碼表示3、流程圖表示4、NS結(jié)構(gòu)流程圖表示5、用計(jì)算語言表示1、自然語言表示法另準(zhǔn)備一盤無用磁帶C;將磁帶A中的大學(xué)英語聽力轉(zhuǎn)錄到C中;將磁帶B中的新概念聽力轉(zhuǎn)錄到磁帶A中;將磁帶C中的大學(xué)英語聽力轉(zhuǎn)錄到磁帶B中?!纠?.10】磁帶A錄有大學(xué)英語聽力,磁帶B錄有新概念英語聽力,采用自然語言描述交換這兩盤磁帶內(nèi)容。2、偽代碼表示C←AA←BB←C【例3.10】磁帶A錄有大學(xué)英語聽力,磁帶B錄有新概念英語聽力,采用自然語言描述交換這兩盤磁帶內(nèi)容。3、流程圖順序結(jié)構(gòu)——按照所述順序處理;選擇結(jié)構(gòu)——又稱分支結(jié)構(gòu),根據(jù)判斷條件改變執(zhí)行流程;循環(huán)結(jié)構(gòu)——當(dāng)條件成立時(shí),反復(fù)執(zhí)執(zhí)行給定的處理操作。(1)順序結(jié)構(gòu)(2)選擇結(jié)構(gòu)【例3.9】輸入x,計(jì)算x的絕對(duì)值存入y中,最后輸出y的值。請(qǐng)畫出其算法流程。(3)循環(huán)結(jié)構(gòu)【例3.10】用傳統(tǒng)流程圖描述計(jì)算的算法。【例3.11】用傳統(tǒng)流程圖描述例3.7所述二分查找算法。4、N-S結(jié)構(gòu)流程圖用N-S流程圖描述例3.10的算法如圖3-16所示。5、用計(jì)算機(jī)語言表示算法#include<stdio.h>intmain(){intsum,i;sum=0;i=1;while(i<=100) //當(dāng)i<=100時(shí),重復(fù)執(zhí)行復(fù)合語句{sum=sum+i; //將sum與i相加,結(jié)果再存入sumi++; //將i的值加1,結(jié)果再存入i}【例3.12】將例3.10求sum=的算法用C語言表示。printf("1+2+...+100=%d\n",sum); //輸出結(jié)果return0;}1+2+3...+100=5050【例3.12】將例3.10求sum=的算法用C語言表示。5、用計(jì)算機(jī)語言表示算法3.4簡單程序設(shè)計(jì)舉例【例3.13】從鍵盤輸入兩個(gè)整數(shù)后輸出,交換兩個(gè)變量的值后再輸出它們的值。例:交換變量的值

x

y步驟:1x->temptemp=x;temp2y->xx=y;3temp->yy=temp;#include<stdio.h>intmain(){inta,b,temp;

printf("Pleaseinputtwointeger(suchas10,20):");scanf("%d,%d",&a,&b);//輸入兩個(gè)整數(shù)printf("a=%d,b=%d\n",a,b);

temp=a; //利用中間變量交換兩個(gè)整數(shù)a=b;b=temp;

printf("a=%d,b=%d\n",a,b);//輸出交換后的變量值return0;}【分析】采用順序結(jié)構(gòu)程序設(shè)計(jì),聲明5個(gè)變量存放禮物的價(jià)格,并定義存放花費(fèi)總和的變量sum和存放平均價(jià)格的變量average。依次輸入每件禮物的價(jià)格存入相應(yīng)的變量,計(jì)算所有價(jià)格之和存入sum,計(jì)算平均價(jià)格存入average后,輸出總花費(fèi)和平均價(jià)格?!纠?.14】丁丁參加了訪問北京的夏令營活動(dòng),回去前他為爸爸、媽媽、弟弟、好朋友小明和小西分別購買了一個(gè)小禮物。編寫一個(gè)程序,幫助丁丁計(jì)算一共花費(fèi)了多少錢,并計(jì)算禮物的平均價(jià)格。#include<stdio.h>intmain(){floatgift1,gift2,gift3,gift4,gift5; //變量聲明floatsum,average;

printf("請(qǐng)輸入買給爸爸的禮物價(jià)格:");//輸入scanf("%f",&gift1);printf("請(qǐng)輸入買給媽媽的禮物價(jià)格:");scanf("%f",&gift2);printf("請(qǐng)輸入買給弟弟的禮物價(jià)格:");scanf("%f",&gift3);printf("請(qǐng)輸入買給小明的禮物價(jià)格:");scanf("%f",&gift4);printf("請(qǐng)輸入買給小西的禮物價(jià)格:");scanf("%f",&gift5);

sum=gift1+gift2+gift3+gift4+gift5; //計(jì)算總價(jià)average=sum/5; //求平均值

printf("總價(jià):%.2f\n",sum);printf("平均價(jià)格:%.2f\n",average);

return0;}EAN13條形碼是一種被廣泛使用的商品條形碼,EAN13標(biāo)準(zhǔn)碼共13位數(shù),由「國家代碼」3位數(shù),「廠商代碼」4位數(shù),「產(chǎn)品代碼」5位數(shù),以及「校正碼」1位數(shù)組成?!纠?.15】計(jì)算商品條形碼的驗(yàn)證碼。(1)國家號(hào)碼由國際商品條碼總會(huì)授權(quán),我國的「國家號(hào)碼」為「690-699」。(2)廠商代碼由國家商品條碼總會(huì)核發(fā)給申請(qǐng)廠商,占四個(gè)碼,代表申請(qǐng)廠商的號(hào)碼。(3)產(chǎn)品代碼占五個(gè)碼,是代表單項(xiàng)產(chǎn)品的號(hào)碼,由廠商自由編定。(4)校正碼占一個(gè)碼,是為防止條碼掃描器誤讀的自我檢查?!纠?.15】計(jì)算商品條形碼的驗(yàn)證碼。假設(shè)某EAN-13碼各碼代號(hào)如下:N1N2N3N4N5N6N7N8N9N10N11N12C已知,校證碼C計(jì)算方法如下:C1=N1+N3+N5+N7+N9+N11C2=(N2+N4+N6+N8+N10+N12)×3CC=(C1+C2)取個(gè)位數(shù)C(檢查碼)=10-CC(若值為10,則取0)【例3.15】計(jì)算商品條形碼的驗(yàn)證碼。編寫一個(gè)程序來計(jì)算任意通用產(chǎn)品代碼的校驗(yàn)碼。要求用戶輸入產(chǎn)品代碼的前12位數(shù)字,然后程序顯示出相應(yīng)的校驗(yàn)位。為了避免混淆,要求用戶分3部分錄入數(shù)字:3位國家或地區(qū)代碼、4位廠商代碼以及5位商品編碼。請(qǐng)輸入國家/地區(qū)代碼(3位數(shù)字):690↙請(qǐng)輸入廠商代碼(4位數(shù)字):8245↙請(qǐng)輸入商品編碼(5位數(shù)字):41251↙校驗(yàn)碼是:7【例3.15】計(jì)算商品條形碼的驗(yàn)證碼。#include<stdio.h>intmain(){intn1,n2,n3;intn4,n5,n6,n7;intn8,n9,n10,n11,n12;intc1,c2,cc,c;

printf("請(qǐng)輸入國家/地區(qū)代碼(3位數(shù)字):");scanf("%1d%1d%1d",&n1,&n2,&n3);printf("請(qǐng)輸入廠商代碼(4位數(shù)字):");scanf("%1d%1d%1d%1d",&n4,&n5,&n6,&n7);

printf("請(qǐng)輸入商品編碼(5位數(shù)字):");scanf("%1d%1d%1d%1d%1d",&n8,&n9,&n10,&n11,&n12);

c1=n1+n3+n5+n7+n9+n11; //計(jì)算校驗(yàn)碼c2=(n2+n4+n6+n8+n10+n12)*3;cc=(c1+c2)%10;c=(10-cc)%10;printf("校驗(yàn)碼是:%d\n",c); //輸出校驗(yàn)碼

return0;}實(shí)驗(yàn)三1.編程從鍵盤輸入一個(gè)小寫英文字母,將其轉(zhuǎn)換為大寫英文字母,將轉(zhuǎn)換后的大寫英文字母及其十進(jìn)制的ASCII碼值顯示到屏幕上。2.完善實(shí)驗(yàn)二(3)程序,要求a為從鍵盤上輸入的4位整數(shù)。3.完善實(shí)驗(yàn)二(4)程序,要求能夠從鍵盤輸入立方體的長、寬、高,并計(jì)算立方體的體積和各側(cè)面面積并輸出。實(shí)驗(yàn)三4.已知華氏溫度f與攝氏溫度c的轉(zhuǎn)換公式為:

,請(qǐng)編寫程序從鍵盤上輸入華氏溫度,將其轉(zhuǎn)換為對(duì)應(yīng)的攝氏溫度并輸出。高級(jí)語言程序設(shè)計(jì)高級(jí)語言程序設(shè)計(jì)——基于計(jì)算思維能力培養(yǎng)高級(jí)語言程序設(shè)計(jì)——基于計(jì)算思維能力培養(yǎng)第4章程序基本控制結(jié)構(gòu)主要內(nèi)容邏輯運(yùn)算符與邏輯表達(dá)式選擇控制結(jié)構(gòu)條件表達(dá)式switch多分支語句分支程序設(shè)計(jì)小結(jié)主要內(nèi)容循環(huán)控制語句程序跳轉(zhuǎn)語句多重循環(huán)及其應(yīng)用循環(huán)程序設(shè)計(jì)方法循環(huán)程序設(shè)計(jì)小結(jié)本章思維導(dǎo)圖邏輯運(yùn)算符

與邏輯表達(dá)式4.1&&——邏輯與,在兩條件同時(shí)成立時(shí)才為真||——邏輯或,兩個(gè)條件只要有一個(gè)成立時(shí)即為真!——邏輯非,即條件為真時(shí)結(jié)果為假,條件為假時(shí)結(jié)果為真4.1.1邏輯運(yùn)算符aba&&ba||b!a!b真真真真假假真假假真假真假真假真真假假假假假真真例如,可以用邏輯表達(dá)式(x>10)&&(x<20)來表示x∈(10,20)。4.1.1邏輯運(yùn)算符常用運(yùn)算符的優(yōu)先級(jí)!→算術(shù)運(yùn)算→關(guān)系運(yùn)算→&&→||→賦值運(yùn)算4.1.1邏輯運(yùn)算符例如:4.1.1邏輯運(yùn)算符(x>10)&&(x<20)可簡寫為:x>10&&x<20a=x>y||!z等價(jià)為a=((x>y)||(!z))再如:C語言以非零表示邏輯“真”,以零表示邏輯“假”。在計(jì)算邏輯表達(dá)式時(shí),若結(jié)果為“真”,則表達(dá)式的值為1,否則為0。4.1.2邏輯表達(dá)式例如:若intx=10;則

x>8&&x<15的值為1;若intx=-9,y=3;

則表達(dá)式x&&y的值為

x||y的值為?!x&&y的值為?判斷變量a是否為大寫字母:a>='A'&&a<='Z'4.1.2邏輯表達(dá)式對(duì)形如a&&b的表達(dá)式,只有當(dāng)a為真時(shí)才將a與b的值相與,否則,若a為假,則可直接得出a&&b的計(jì)算結(jié)果為邏輯假,表達(dá)式b未被執(zhí)行。邏輯運(yùn)算的短路條件例如:inta=10,b=11,c=12;則執(zhí)行表達(dá)式(a>10&&b++&&--c)后,各變量的值是?4.1.2邏輯表達(dá)式對(duì)形如a||b的表達(dá)式,只有當(dāng)a為假時(shí)才將a與b的值相或,否則,若a為真,則可直接得出a||b的結(jié)果為邏輯真,表達(dá)式b未被執(zhí)行。邏輯運(yùn)算的短路條件例如,inta=0,b=0,m=0,n=0;則執(zhí)行表達(dá)式(m=a==b)||(n=b==a)時(shí),各變量的值分別是多少?4.1.2邏輯表達(dá)式#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í)行結(jié)果。閏年判斷問題:某一年year是否是閏年的條件是滿足下列二者之一:①能被4整除,但不能被100整除;②能被400整除。(year%4==0&&year%100!=0)||(year%400==0)可以用邏輯表達(dá)式表示如下:

從C99開始,C語言增加了專門的布爾類型bool,在stdbool.h文件中定義了常量true與false,分別代表邏輯真和邏輯假,這使得操作布爾值更加容易。

例如:boolflag;flag=10<20;執(zhí)行后flag的值為true,

相應(yīng)的!(flag)的值為false1.設(shè)a為整型變量,不能正確表達(dá)數(shù)學(xué)關(guān)系:10<a<15的C語言表達(dá)式是()。10<a<15a==11||a==12||a==13||a==14a>10&&a<15!(a<=10)&&!(a>=15)ABCD提交單選題5分2.能表達(dá)“30<x<50或x<-100”的C語言表達(dá)式是

[填空1]

。作答填空題5分3.設(shè)inta=5,b=4,c=2;,則a>b>c的值為

[填空1]

。作答填空題5分4.設(shè)inta=0,b=0,c=2,d=4;,則執(zhí)行(c=a==b)||(d=b==a);后變量d的值是

[填空1]

。作答填空題5分5.以下程序的輸出結(jié)果是()。104103003004ABCD提交intmain(){inta=-1,b=4,k;k=(++a<=0)&&!(b--<=0);printf("%d%d%d\n",k,a,b);}單選題5分主要內(nèi)容邏輯運(yùn)算符與邏輯表達(dá)式選擇控制結(jié)構(gòu)條件表達(dá)式switch多分支語句分支程序設(shè)計(jì)小結(jié)選擇控制結(jié)構(gòu)4.2從鍵盤輸入兩個(gè)整數(shù)分別存入a與b,判斷a是否小于b,若小于則將a與b的內(nèi)容交換后輸出,否則直接輸出a與b的值。4.2選擇控制結(jié)構(gòu)if-elseSingleSelectionDoubleSelectionMultipleSelectionifif-else-if4.2.1if語句if單分支語句的一般格式為: if(條件)

語句;注意:后面不需要;號(hào)當(dāng)多條語句受if條件控制時(shí),應(yīng)使用復(fù)合語句: if(條件)

{

語句1;

語句2;

語句3;

}4.2.1if語句例如,if(x>0)printf("y=1");printf("Over!");當(dāng)x>0時(shí),程序的輸出結(jié)果為:y=1Over當(dāng)x<=0時(shí),程序的輸出結(jié)果為: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;}是否有錯(cuò)?【例4.2】從鍵盤輸入兩個(gè)整數(shù)分別存入a與b,判斷a是否小于b,若小于則將a與b的內(nèi)容交換后輸出,否則直接輸出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】從鍵盤輸入三個(gè)整數(shù),將它們從小到大進(jìn)行排序后再輸出。491622abc【例4.3】從鍵盤輸入三個(gè)整數(shù),將它們從小到大進(jìn)行排序后再輸出。#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í)行下列語句后輸出的結(jié)果是()。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分你心里默想一個(gè)小于50的兩位數(shù)接著,我問你在以下的6張卡片中哪幾張卡片里有你想的那個(gè)數(shù)?之后,我不費(fèi)吹灰之力就能猜出這個(gè)數(shù)現(xiàn)在試一試【例4.4】模擬魔術(shù)師的猜數(shù)字游戲。0#卡片

1357911131517192123252729313335373941434547491??ㄆ?/p>

2367101114151819222326273031343538394243464750

2#卡片

456712131415202122232829303136373839444546473??ㄆ?/p>

89101112131415242526272829303140414243444546474#卡片

161718192021222324252627282930314849505??ㄆ?/p>

32333435363738394041424344454647484950如果你說

0??ㄆ?/p>

2??ㄆ?/p>

5#卡片

有你默想的數(shù)

我就猜出這個(gè)數(shù)是37

為什么呢?

2726252423222120

d7d6d5d4d3d2d1d0

di=0或1,i=0,1,…,7

7

s=∑di2i

i=0二進(jìn)制數(shù)在存貯單元中的表示

2726252423222120

00100101

12821644

32816

s=32+4+1=37

原來如此

2726252423222120

d7d6d5d4d3d2d1d0

十進(jìn)制數(shù)S化作二進(jìn)制表示,如di

為1,則

i#卡片上就有S

2726252423222120卡片

d7d6d5d4d3d2d1d00#1#2#

1000000011200000010230000001

133400000

1004500000

10

1556000001

1

0667000001

1

1

777你的生日在0#卡片嗎?135791113151719212325272931請(qǐng)輸入NforNoandYforYes:n↙模仿【例4.4】編寫一個(gè)猜生日程序你的生日在1#卡片嗎?2367101114151819222326273031請(qǐng)輸入NforNoandYforYes:n↙模仿【例4.4】編寫一個(gè)猜生日程序你的生日在2#卡片嗎?4567121314152021222328293031請(qǐng)輸入NforNoandYforYes:y↙模仿【例4.4】編寫一個(gè)猜生日程序你的生日在3#卡片嗎?891011121314152425262728293031請(qǐng)輸入NforNoandYforYes:y↙模仿【例4.4】編寫一個(gè)猜生日程序你的生日在4#卡片嗎?16171819202122232425262728293031請(qǐng)輸入NforNoandYforYes:n↙你的生日是:12日模仿【例4.4】編寫一個(gè)猜生日程序#include<stdio.h>intmain(){intdate=0;charanswer;printf(“你的生日在0#卡片嗎?\n");printf("1357\n");printf("9111315\n");printf("17192123\n");printf("25272931\n");

printf("請(qǐng)輸入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("請(qǐng)輸入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("請(qǐng)輸入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("請(qǐng)輸入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("請(qǐng)輸入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;實(shí)現(xiàn)的是將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】編寫一個(gè)程序,輸入一個(gè)年份,判斷該年是否為閏年,若是則輸出該年是閏年,否則輸出該年不是閏年的提示信息?!纠?.6】水仙花數(shù)是指一個(gè)三位整數(shù)且它的各位數(shù)立方之和等于該數(shù)本身,例如153是水仙花數(shù)(13+53+33=153)。編程從鍵盤輸入一個(gè)三位的整數(shù),判斷該數(shù)是否為水仙花數(shù)。若是,則輸出該數(shù)為水仙花數(shù),否則輸出該數(shù)不是水仙花數(shù)。#include<stdio.h>intmain(){intx,b0,b1,b2;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&x);b0=

; //求個(gè)位數(shù)b1=

; //求十位數(shù)b2=

; //求百位數(shù)

if(

)printf("%d是一個(gè)水仙花數(shù)\n",x);elseprintf("%d不是一個(gè)水仙花數(shù)\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語句配對(duì)。if(x<0) y=-1;else

if(x==0) y=0;

else y=1;4.2.3if多分支語句【例4.7】某超市新店開張,舉行促銷活動(dòng),活動(dòng)規(guī)則如下:(1)購物金額在100元以下,總價(jià)9.5折;(2)購物金額大于或等于100且小于200元的,總價(jià)9折;(3)購物金額大于或等于200且小于500元的,總價(jià)8.5折;(4)購物金額大于或等于500元的,總價(jià)8折。方法1:平行if語句實(shí)現(xiàn)方法2:嵌套if語句實(shí)現(xiàn)#include<stdio.h>intmain(){floattotal,payment,saving;printf("請(qǐng)輸入購物總價(jià):");scanf("%f",&total);

if(total<100)payment=total*0.95;if(total>=100&&total<200)payment=total*0.9;方法1:平行if語句實(shí)現(xiàn)

if(total>=200&&total<500)payment=total*0.85;if(total>=500)payment=total*0.8;saving=total-payment; //計(jì)算節(jié)省金額

printf("實(shí)付:%.2f元.\n",payment);printf("節(jié)約:%.2f元.\n",saving);return0;}#include<stdio.h>intmain(){floattotal,payment,saving;printf("請(qǐng)輸入購物總價(jià):");scanf("%f",&total);if(total<100)payment=total*0.95;

elseif(total<200) //此時(shí),total必大于等于100payment=total*0.9;方法2:嵌套if語句實(shí)現(xiàn)

elseif(total<500)

//此時(shí),total必大于或等于200payment=total*0.85;

else

//此時(shí),total必大于或等于500payment=total*0.8;saving=total-payment;

printf("實(shí)付:%.2f元.\n",payment);printf("節(jié)約:%.2f元.\n",saving);return0;}對(duì)于互斥的分支判斷條件,建議采用嵌套ifelse語句實(shí)現(xiàn)。【例4.8】【課后閱讀】

編寫程序輸入一元二次方程ax2+bx+c=0的三個(gè)系數(shù)a、b、c,分情況計(jì)算并輸出一元二次方程的根。函數(shù)名函數(shù)原型說明功能備注sindoublesin(doublex)計(jì)算sin(x)的值x為弧度cosdoublecos(doublex)計(jì)算cos(x)的值x為弧度sqrtdoublesqrt(doublex)計(jì)算x的平方根x>=0.0powdoublepow(doublex,doubley)計(jì)算冪指數(shù)xy

logdoublelog(doublex)計(jì)算loge(x)對(duì)數(shù)

log10doublelog10(doublex)計(jì)算log10(x)對(duì)數(shù)

fabsfabsdouble(doublex)計(jì)算x的絕對(duì)值

常用數(shù)學(xué)函數(shù)7.寫出下面程序的運(yùn)行結(jié)果

[填空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.寫出下面程序的運(yùn)行結(jié)果

[填空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.下面的程序功能是判斷輸入的年份是否為閏年,請(qǐng)?jiān)跈M線上填上適當(dāng)?shù)恼Z句。

[填空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分主要內(nèi)容邏輯運(yùn)算符與邏輯表達(dá)式選擇控制結(jié)構(gòu)條件表達(dá)式switch多分支語句分支程序設(shè)計(jì)小結(jié)條件表達(dá)式4.34.3條件表達(dá)式表達(dá)式1表達(dá)式2表達(dá)式3?:真假表達(dá)式1例如:maxData=a>b?a:b;等價(jià)于if(a>b)maxData=a;elsemaxData=b;表達(dá)式2表達(dá)式3?:4.3條件表達(dá)式charc;c=getchar();printf("%c",c>='A'&&c<='Z'?c+32:c); 下面程序段的功能是什么?4.3條件表達(dá)式10.設(shè)intm1=5,m2=3;,表達(dá)式m1>m2?(m1=1):(m2=-1)運(yùn)算后,m1和m2的值分別是()。1和?11和35和?15和3ABCD提交單選題5分主要內(nèi)容邏輯運(yùn)算符與邏輯表達(dá)式選擇控制結(jié)構(gòu)條件表達(dá)式switch多分支語句分支程序設(shè)計(jì)小結(jié)switch多分支語句4.44.4switch多分支語句Inputtwodata(suchas5,2.3):20.0,30.0↙[1]計(jì)算兩個(gè)數(shù)的和并輸出[2]計(jì)算兩個(gè)數(shù)的差并輸出[3]計(jì)算兩個(gè)數(shù)的積并輸出[4]計(jì)算兩個(gè)數(shù)的商并輸出請(qǐng)輸入選項(xiàng)[]【例4.9】輸入兩個(gè)數(shù),根據(jù)菜單選項(xiàng)進(jìn)行計(jì)算。20.000000+30.000000=50.0000四種分支,易用ifelse多分支語句

實(shí)現(xiàn)1switch語句語法格式如下:switch(表達(dá)式){ case常量表達(dá)式1:

語句序列1 case常量表達(dá)式2:

語句序列2

case常量表達(dá)式n:

語句序列n

default:語句}必須為int或char型只能是常量表達(dá)式4.4switch多分支語句分析左右兩個(gè)程序的輸出結(jié)果: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]計(jì)算兩個(gè)數(shù)的和并輸出\n");printf("[2]計(jì)算兩個(gè)數(shù)的差并輸出\n");printf("[3]計(jì)算兩個(gè)數(shù)的積并輸出\n");print

溫馨提示

  • 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)論