第3章-算法與簡單C程序設(shè)計-2學(xué)時_第1頁
第3章-算法與簡單C程序設(shè)計-2學(xué)時_第2頁
第3章-算法與簡單C程序設(shè)計-2學(xué)時_第3頁
第3章-算法與簡單C程序設(shè)計-2學(xué)時_第4頁
第3章-算法與簡單C程序設(shè)計-2學(xué)時_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

高級語言程序設(shè)計揭安全jieanquan@163.com江西師范大學(xué)計算機信息工程學(xué)院高級語言程序設(shè)計——基于計算思維能力培養(yǎng)高級語言程序設(shè)計——基于計算思維能力培養(yǎng)第3章算法與簡單C程序設(shè)計揭安全jieanquan@163.com江西師范大學(xué)計算機信息工程學(xué)院主要內(nèi)容C語句C程序輸入、輸出操作的實現(xiàn)算法簡單程序設(shè)計舉例實驗三本章思維導(dǎo)圖C語句3.1表達(dá)式語句z=x*y+6;i++;空語句;復(fù)合語句

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

輸出一個字符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);

//此處輸出項列表比格式轉(zhuǎn)換符多出一項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以帶符號的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號)c以字符形式輸出,只輸出一個字符o以八進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0)s輸出字符串x十六進(jìn)制無符號整數(shù)(小寫字母a~f)f以小數(shù)形式輸出單、雙精度數(shù)、默認(rèn)輸出6位小數(shù)X十六進(jìn)制無符號整數(shù)(大寫字母A~F)e十進(jìn)制指數(shù)(小寫e)u以無符號十進(jìn)制形式輸出整數(shù)E十進(jìn)制指數(shù)(大寫E)g,G選用%f或%e格式中輸出寬度較短的一個格式在格式說明中,%和上述格式轉(zhuǎn)換字符之間可以按以下順序插入如下附加字符:%+、-、#m.nh、l格式字符↓↓↓↓↓↓開始符標(biāo)志字符寬度

指示符精度

指示符長度

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

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

明精度指示.n對實數(shù),表示輸出n位小數(shù);對字符串,表示截取的字符個數(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);//此處輸出項列表比格式轉(zhuǎn)換符出多一項

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】格式輸出程序示例。編譯程序不對輸出項列表的項數(shù)與格式轉(zhuǎn)換符個數(shù)進(jìn)行檢查,當(dāng)輸出項列表多于格式轉(zhuǎn)換符時,多余的項將不被輸出。反之,則可能出現(xiàn)運行時錯誤。此外,當(dāng)格式轉(zhuǎn)換符與輸出項的類型不匹配時,編譯程序也不做檢查,但在運行時將得到不正確的運行結(jié)果。初寫程序時要特別注意,不要誤用%d輸出float和double的表達(dá)式,同理,也不能用%f輸出int型的表達(dá)式。提示

但%d可輸出字符的ASCII碼,反之,%c可以輸出ASCII碼值對應(yīng)的字符。 scanf(“格式控制串”,地址列表);%*mh、l格式字符↓↓↓↓↓開始符賦值抑制符寬度指示符長度修正符格式轉(zhuǎn)換字符scanf格式字符類型說明d輸入有符號的十進(jìn)制整數(shù)u輸入無符號的十進(jìn)制整數(shù)o輸入無符號的八進(jìn)制整數(shù)x,X輸入無符號的十六進(jìn)制整數(shù)(大小寫作用相同)c輸入單個字符s輸入字符串。將字符串送到一個字符數(shù)組中,在輸入時以非空格白字符開始,以第一個空白字符結(jié)束。字符串以串結(jié)束標(biāo)志’\0’作為其最后一個字符scanf格式字符類型說明f輸入float型實數(shù),可以用小數(shù)形式或指數(shù)形式輸入;輸入double型實數(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);輸入時應(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。寬度指示符賦值抑制符“*”

賦值抵制符“*”表示輸入項讀入后不賦值給相應(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);常見錯誤舉例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,從鍵盤接收用戶輸入的圓的半徑,計算并輸出圓的周長和面積。

length=2.0*pi*r; //計算圓的周長

area=pi*r*r; //計算圓的面積printf("length=%f\n",length);//輸出圓的周長printf("area=%f\n",area); //輸出圓的面積return0;}【例3.5】修改例2.6,從鍵盤接收用戶輸入的圓的半徑,計算并輸出圓的周長和面積。1.設(shè)intx;,則下列選項中錯誤的輸入語句是()。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.若在下面程序運行時輸入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):“計算機科學(xué)就是算法的研究”3.3算法3.3.1問題求解過程中算法的作用

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

即What和How的問題。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

r=3l=4mid查找失敗二分檢索【例3.6】序列A包含14個數(shù)據(jù),如圖3-2所示,分析順序查找方法查找22的過程。0123456789101112136549328101235232227115【例3.7】假設(shè)序列A已排序存放,如圖3-3所示,分析采用二分搜索法在其中查找15的過程。012345678910111213145689101215222327323501234567891011121314568910121522232732357891011121312152223273235789121522【例3.7】假設(shè)序列A已排序存放,如圖3-3所示,分析采用二分搜索法在其中查找15的過程。3.3.2算法的特點1、有窮性2、確定性3、可行性4、零個或多個輸入5、一個或多個輸出3.3.3算法的描述1、自然語言表示法2、偽代碼表示3、流程圖表示4、NS結(jié)構(gòu)流程圖表示5、用計算語言表示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)條件成立時,反復(fù)執(zhí)執(zhí)行給定的處理操作。(1)順序結(jié)構(gòu)(2)選擇結(jié)構(gòu)【例3.9】輸入x,計算x的絕對值存入y中,最后輸出y的值。請畫出其算法流程。(3)循環(huán)結(jié)構(gòu)【例3.10】用傳統(tǒng)流程圖描述計算的算法?!纠?.11】用傳統(tǒng)流程圖描述例3.7所述二分查找算法。4、N-S結(jié)構(gòu)流程圖用N-S流程圖描述例3.10的算法如圖3-16所示。5、用計算機語言表示算法#include<stdio.h>intmain(){intsum,i;sum=0;i=1;while(i<=100) //當(dāng)i<=100時,重復(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、用計算機語言表示算法3.4簡單程序設(shè)計舉例【例3.13】從鍵盤輸入兩個整數(shù)后輸出,交換兩個變量的值后再輸出它們的值。例:交換變量的值

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);//輸入兩個整數(shù)printf("a=%d,b=%d\n",a,b);

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

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

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

sum=gift1+gift2+gift3+gift4+gift5; //計算總價average=sum/5; //求平均值

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

return0;}EAN13條形碼是一種被廣泛使用的商品條形碼,EAN13標(biāo)準(zhǔn)碼共13位數(shù),由「國家代碼」3位數(shù),「廠商代碼」4位數(shù),「產(chǎn)品代碼」5位數(shù),以及「校正碼」1位數(shù)組成?!纠?.15】計算商品條形碼的驗證碼。(1)國家號碼由國際商品條碼總會授權(quán),我國的「國家號碼」為「690-699」。(2)廠商代碼由國家商品條碼總會核發(fā)給申請廠商,占四個碼,代表申請廠商的號碼。(3)產(chǎn)品代碼占五個碼,是代表單項產(chǎn)品的號碼,由廠商自由編定。(4)校正碼占一個碼,是為防止條碼掃描器誤讀的自我檢查?!纠?.15】計算商品條形碼的驗證碼。假設(shè)某EAN-13碼各碼代號如下:N1N2N3N4N5N6N7N8N9N10N11N12C已知,校證碼C計算方法如下:C1=N1+N3+N5+N7+N9+N11C2=(N2+N4+N6+N8+

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論