




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 2012年網(wǎng)絡(luò)三級(jí)上級(jí)題庫(kù)C語(yǔ)言的運(yùn)算符和運(yùn)算順序這是學(xué)好C程序設(shè)計(jì)的基礎(chǔ),C語(yǔ)言的運(yùn)算非常靈活,功能十分豐富,運(yùn)算種類遠(yuǎn)多于其它程序設(shè)計(jì)語(yǔ)言。在表達(dá)式方面較其它程序語(yǔ)言更為簡(jiǎn)潔,如自加、自減、逗號(hào)運(yùn)算使表達(dá)式更為簡(jiǎn)單。當(dāng)多種不同運(yùn)算組成一個(gè)運(yùn)算表達(dá)式,即一個(gè)運(yùn)算式中出現(xiàn)多種運(yùn)算符時(shí),運(yùn)算的優(yōu)先順序和結(jié)合規(guī)則十分重要??荚囍谐S玫倪\(yùn)算符:1.算術(shù)運(yùn)算符包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增(+)、自減(-)2.關(guān)系運(yùn)算符用于比較運(yùn)算。包括大于(>)、小于(<)、等于(=)、 大于等于(>=)、小于等于(<=)和不等于(!=)3.邏輯運(yùn)
2、算符用于邏輯運(yùn)算。包括與(&&)、或(|)、非(!)4.位操作運(yùn)算符左移(<<)、右移(>>)5.賦值運(yùn)算符用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)6.指針運(yùn)算符用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。7.特殊運(yùn)算符有括號(hào)(),成員(.)等幾種。先要明確運(yùn)算符按優(yōu)先級(jí)不同分類,下面我們通過幾個(gè)例子來說明:(1) 5*8/4%10 這個(gè)表達(dá)式中出現(xiàn)3種運(yùn)算符,是同級(jí)運(yùn)算符,運(yùn)算順序按從左至右結(jié)合,因此先計(jì)算5 *8=40,然后被4除,結(jié)果為10,最后是%(求余數(shù))運(yùn)算,所以表達(dá)式的最終結(jié)果為10%10 = 0;
3、(2)a = 3;b = 5;c =+ a* b ;d =a + +* b;(3)(a = 3,b = 5,b+ = a,c = b* 5)三、學(xué)好數(shù)據(jù)類型定義1、 常見的數(shù)據(jù)類型:(1)基本數(shù)據(jù)類型:整型、長(zhǎng)整型、字符型、無符號(hào)型(unsigned char)、實(shí)數(shù)型float、doubleint 整數(shù)-3276832767 ;char 字符 單引號(hào),數(shù)字串問題,轉(zhuǎn)義字符: n ; double、float都是浮點(diǎn)型,double(雙精度型)比float(單精度型)存的數(shù)據(jù)更準(zhǔn)確些,占的空間也更大,int是整型,long是長(zhǎng)整型,long的范圍比int大注意:允許字符變量參與數(shù)值運(yùn)算,即用字
4、符的ASCII 碼參與運(yùn)算。由于大小寫字母的ASCII 碼相差32,因此運(yùn)算后把小寫字母換成大寫字母。然后分別以整型和字符型輸出。(2)指針類型: 定義方式: 類型說明符 *變量名; int *p; char *p; 賦值方法:int a; int *p=&a; 或者 int a;int *p; p=&a; 注意:不允許把一個(gè)數(shù)賦予指針變量,錯(cuò)誤形式: int *p;p=1000; 被賦值的指針變量前不能再加“*”說明符,如寫為*p=&a 錯(cuò)誤指針變量的運(yùn)算: 取地址運(yùn)算符& 取內(nèi)容運(yùn)算符* 注意:指針運(yùn)算符*和指針變量說明中的指針說明符* 不是一回事。在指針變
5、量說明中,“*”是類型說明符,表示其后的變量是指針類型。 而表達(dá)式中出現(xiàn)的“*”則是一個(gè)運(yùn)算符用以表示指針變量所指的變量。例如:main()int a=5,*p=&a;printf ("%d",*p);int a,*pa=&a,*pb;pb=pa; /*把a(bǔ)的地址賦予指針變量pb*/ int a5,*pa;pa=a; (數(shù)組名表示數(shù)組的首地址,故可賦予指向數(shù)組的指針變量pa) 也可寫為:pa=&a0; /*數(shù)組第一個(gè)元素的地址也是整個(gè)數(shù)組的首地址,也可采取初始化賦值的方法:int a5,*pa=a; 指針變量的加減算術(shù)運(yùn)算:(主要針對(duì)數(shù)組變量的操作)
6、 對(duì)于指向數(shù)組的指針變量,可以加上或減去一個(gè)整數(shù)n。設(shè)pa是指向數(shù)組a的指針變量,則pa+n,pa-n,pa+,+pa,pa-,-pa 指針變量加或減一個(gè)整數(shù)n的意義是把指針指向的當(dāng)前位置(指向某數(shù)組元素)向前或向后移動(dòng)n個(gè)位置。注意,數(shù)組指針變量向前或向后移動(dòng)一個(gè)位置和地址加1或減1 在概念上是不同的。因?yàn)閿?shù)組可以有不同的類型各種類型的數(shù)組元素所占的字節(jié)長(zhǎng)度是不同的。如指針變量加1,即向后移動(dòng)1 個(gè)位置表示指針變量指向下一個(gè)數(shù)據(jù)元素的首地址。 而不是在原地址基礎(chǔ)上加1。 例如:int a5,*pa;pa=a; pa指向數(shù)組a,也是指向a0pa=pa+2; pa指向a2,即pa的值為&
7、pa2指針變量的加減運(yùn)算只能對(duì)數(shù)組指針變量進(jìn)行,對(duì)指向其它類型變量的指針變量作加減運(yùn)算是毫無意義。兩個(gè)指針變量之間的運(yùn)算只有指向同一數(shù)組的兩個(gè)指針變量之間才能進(jìn)行運(yùn)算, 否則運(yùn)算無意義。 數(shù)組之間的關(guān)系運(yùn)算: pf1=pf2表示pf1和pf2指向同一數(shù)組元素pf1>pf2表示pf1處于高地址位置pf1<pf2表示pf2處于低地址位置 構(gòu)造數(shù)據(jù)類型:(數(shù)組,結(jié)構(gòu))數(shù)組數(shù)組表示方法 一維數(shù)組 二維數(shù)組 數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組結(jié)構(gòu):在實(shí)際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如, 在學(xué)生登記表中,姓名應(yīng)為字符型;學(xué)號(hào)可為整型或字符型;年齡應(yīng)為整型;性別應(yīng)為字符型;成績(jī)
8、可為整型或?qū)嵭汀?顯然不能用一個(gè)數(shù)組來存放這一組數(shù)據(jù)。 因?yàn)閿?shù)組中各元素的類型和長(zhǎng)度都必須一致,以便于編譯系統(tǒng)處理。為了解決這個(gè)問題,構(gòu)造數(shù)據(jù)類型“結(jié)構(gòu)”。 結(jié)構(gòu)變量#define STU struct stuSTUint num;char name20;char sex;float score;STU boy1,boy2; 結(jié)構(gòu)數(shù)組:typedef struct char dm5;/* 產(chǎn)品代碼 */char mc11;/* 產(chǎn)品名稱 */int dj;/* 單價(jià) */int sl;/* 數(shù)量 */long je;/* 金額 */ PRO;PRO sell MAX;結(jié)構(gòu)中 成員的引用方法 s
9、ell4.dm sellj.je注意:類型定義在所有編程中基本都要用到,類型定義錯(cuò)了,解題結(jié)果就錯(cuò)了,大家一定在解題過程中仔細(xì)看好源題目關(guān)于整型、長(zhǎng)整型、字符型、無符號(hào)型、實(shí)數(shù)型的定義,這樣自定義的中間變量必須與原題數(shù)據(jù)類型一致。四、學(xué)好C語(yǔ)言的四種程序結(jié)構(gòu)1、順序結(jié)構(gòu)順序結(jié)構(gòu)的程序設(shè)計(jì)是最簡(jiǎn)單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語(yǔ)句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。例如三角交換;a = 3,b = 5,現(xiàn)交換a,b的值,這個(gè)問題就好象交換兩個(gè)杯子水,這當(dāng)然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序?yàn)椋?c = a; a = b; b = c;大多數(shù)情況下順序結(jié)構(gòu)都是作為程序的
10、一部分,與其它結(jié)構(gòu)一起構(gòu)成一個(gè)復(fù)雜的程序,例如分支結(jié)構(gòu)中的復(fù)合語(yǔ)句、循環(huán)結(jié)構(gòu)中的循環(huán)體等。2、分支結(jié)構(gòu)順序結(jié)構(gòu)的程序雖然能解決計(jì)算、輸出等問題,但不能做判斷再選擇。對(duì)于要先做判斷再選擇的問題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計(jì)算,下面我介紹幾種基本的分支結(jié)構(gòu)。if(條件)分支體例如: If(a=5)b=a; a=c;c=b; 分支體可以是多條語(yǔ)句,此時(shí)“ ”不可以省略If(a>=7)B=a; 分支體可以是一條語(yǔ)句,此時(shí)“ ”可以省略它有兩條分支路徑可選,一是當(dāng)條件為真,執(zhí)行分支體,否則跳過分支體,這時(shí)分支體就不會(huì)執(zhí)行。if(條件)分支1else分支2這是典型的
11、分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語(yǔ)句構(gòu)成。嵌套分支語(yǔ)句:其語(yǔ)句格式為:if(條件1) 分支1;else if(條件2) 分支2 else if(條件3) 分支3 else if(條件n) 分支n else 分支n+13、循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計(jì)中最能發(fā)揮計(jì)算機(jī)特長(zhǎng)的程序結(jié)構(gòu),C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),在學(xué)習(xí)中我們主要學(xué)習(xí)wh
12、ile、dowhile、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會(huì)明白如何替換使用,如把while循環(huán)的例題,用for語(yǔ)句重新編寫一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見錯(cuò)誤。do while(條件表達(dá)式) ; while (條件表達(dá)式) ; 其中條件表達(dá)式:(若為真(或非0)則繼續(xù)循環(huán))for(表達(dá)式1;表達(dá)式2;表達(dá)3) 語(yǔ)句:表達(dá)式1通常用來給循環(huán)變量賦初值,一般
13、是賦值表達(dá)式。也允許在for語(yǔ)句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式。表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。表達(dá)式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語(yǔ)句。注意 :這三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式, 即每個(gè)表達(dá)式都可由多個(gè)表達(dá)式組成。三個(gè)表達(dá)式都是任選項(xiàng),都可以省略。3、轉(zhuǎn)移語(yǔ)句 break, continue和return。break 跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序continue 結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行 注意: 本語(yǔ)句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。void main()int n=7;d
14、o if (n%7!=0) continue;printf("%d ",n); n+;While(n<=100) void main()int n;for(n=7;n<=100;n+)if (n%7!=0)continue;printf("%d ",n); void main()int n,i;for(n=2;n<=100;n+)for(i=2;i<n;i+)if(n%i=0) break;if(i>=n) printf("t%d",n);注意它們的異同點(diǎn):用while和dowhile循環(huán)時(shí),循環(huán)變量的初
15、始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while 循環(huán)和for循環(huán)都是先判斷表達(dá)式,后執(zhí)行循環(huán)體,而dowhile循環(huán)是先執(zhí)行循環(huán)體后判斷表達(dá)式,也就是說dowhile的循環(huán)體最少被執(zhí)行一次,而while 循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)。順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu)。4、模塊化程序結(jié)構(gòu)C語(yǔ)言的模塊化程序結(jié)構(gòu)用函數(shù)來實(shí)現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個(gè)模塊都編寫成一個(gè)C函數(shù),然后通過主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)
16、用函數(shù)來實(shí)現(xiàn)一大型問題的C程序編寫,因此常說:C程序=主函數(shù)+子函數(shù)。 因些,對(duì)函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過上機(jī)調(diào)試加以鞏固。注意:上機(jī)考試要求考生只對(duì)某個(gè)子函數(shù)作答注意: 模塊化程序中的全局變量與局部變量簡(jiǎn)單記憶方法:主函數(shù)中定義的變量為全局變量,適用于任何子函數(shù),而在子函數(shù)中定義的變量為局部變量,適用范圍只是本函數(shù)。#include <conio.h>#include <stdio.h>void readwriteDat();int isP(int m) int i; for(i=2;i<m;i+) if(m % i=0)retu
17、rn 0; return 1;void num(int m,int k,int xx) int s=0;for(m=m+1;k>0;m+) if(isP(m) xxs+=m; k-;main() int m,n,xx1000; clrscr(); printf("nPlease enter two integers:"); scanf("%d%d",&m,&n); num(m,n,xx); for(m=0;m<n;m+) printf("%d ",xxm); printf("n"); r
18、eadwriteDat();void readwriteDat() int m,n,xx1000, i; FILE *rf,*wf; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i+) fscanf(rf,"%d %d",&m,&n); num(m,n,xx); for(m=0;m<n;m+)fprintf(wf,"%d ",xxm); fprintf(wf,"
19、;n"); fclose(rf); fclose(wf);注意:區(qū)分函數(shù)是否需要返回值 區(qū)分標(biāo)志 函數(shù)定義是否有 void例如:請(qǐng)編寫函數(shù)countValue(),它的功能是:求n以內(nèi)(不包括n)同時(shí)能被3與7整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回,最后結(jié)果s輸出到文件out.dat中。 例如若n為1000時(shí),函數(shù)值應(yīng)為:s=153.909064。 部分源程序存在文件prog1.c中。 請(qǐng)勿改動(dòng)主函數(shù)main()和輸入輸出數(shù)據(jù)函數(shù)progReadWrite()的內(nèi)容。#include <conio.h>#include <math.h>#includ
20、e <stdio.h>double countValue(int n) int i;double s=0.0;for(i=1;i<n;i+)if(i%21=0) s+=i;return sqrt(s);main() clrscr(); printf("自然數(shù)之和的平方根=%fn",countValue(1000); progReadWrite();progReadWrite() FILE *fp,*wf; int i,n; float s; fp=fopen("in.dat","r"); if(fp=NULL) pr
21、intf("數(shù)據(jù)文件in.dat不存在!"); return; wf=fopen("out.dat","w"); for(i=0;i<10;i+) fscanf(fp,"%dn",&n); s=countValue(n); fprintf(wf,"%fn",s); fclose(fp);fclose(wf);五、掌握一些簡(jiǎn)單的算法編程其實(shí)一大部分工作就是分析問題,找到解決問題的方法,再以相應(yīng)的編程語(yǔ)言寫出代碼。要求我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,要完成對(duì)問題的分析就容
22、易了。如兩個(gè)數(shù)的交換、三個(gè)數(shù)的比較、冒泡法排序,這就要求我們要清楚這些算法的內(nèi)在含義,下面介紹考試中出現(xiàn)頻率較高的算法:1、數(shù)字拆分此類題在100題目中占的比重很大,共占了16道題,主要是對(duì)四位數(shù)分解成千位數(shù),百位數(shù),十位數(shù),個(gè)位數(shù),這些就要用到運(yùn)算中的整除(“/”)和求余(“%”)運(yùn)算,一定要理解這兩個(gè)運(yùn)算的結(jié)果。如:已知數(shù)據(jù)文件IN.DAT中存有200個(gè)四位數(shù),并已調(diào)用讀函數(shù)readDat()把這些數(shù)存入數(shù)組a中,請(qǐng)考生編制一函數(shù)jsVal(),其功能是:若一個(gè)四位數(shù)的千位數(shù)字上的值小于等于百位數(shù)字上的值,百位數(shù)字上的值小于等于十位數(shù)字上的值,以及十位數(shù)字上的值小于等于個(gè)位數(shù)字上的值,并且
23、原四位數(shù)是偶數(shù),則統(tǒng)計(jì)出滿足此條件的個(gè)數(shù)cnt并把這些四位數(shù)按從小到大的順序存入數(shù)組b中,最后調(diào)用寫函數(shù)writeDat()把結(jié)果cnt以及數(shù)組b中符合條件的四位數(shù)輸出到OUT.DAT文件中。從解法中可以看出,分別求出這個(gè)四個(gè)位數(shù),假如原四位數(shù)是a千位數(shù):a/1000;百位數(shù):a%1000/100;十位數(shù):a%100/10;個(gè)位數(shù):a%10;2、排序法排序方法很多,只要掌握一種方法,就可以應(yīng)對(duì)南開題中關(guān)于排序題的解法,建議用冒泡排序法。如用冒泡排序法對(duì)10個(gè)不同整數(shù)排序(從小到大),選擇法排序思路:設(shè)有10個(gè)元素a1a10,將a1與a2a10比較,若a1比a2a10都小,則不進(jìn)行交換,即無任何
24、操作;若a2a10 中有一個(gè)比a1小,則將其中最小的一個(gè)(假設(shè)為a)與a1交換,此時(shí)a1中存放了10個(gè)中最小的數(shù)。第二輪將a2與a3a10比較,將剩下9個(gè)數(shù)中的最小者a與a2交換,此時(shí)a2 中存放的10個(gè)數(shù)中第2小的數(shù);依此類推,共進(jìn)行9輪比較,a1到a10就已按從小到大的順序存放。即每一輪都找出剩下數(shù)中的最小一個(gè),代碼如下:9 7 1 2 11 6 8for(i=1;i<=9;i+) 理會(huì)此處為 i<=9 for(j=i+1;j<=10;j+) 理會(huì)此處j=i+1 和j<=10if(a>aj) 此處不能丟掉小括號(hào) 考試當(dāng)中主要考試此處的判斷條件 temp=a;
25、a=aj; aj=temp;重點(diǎn)提示:題庫(kù)中幾乎80%以上題目都用到以上方法,大家必須明白其原理,并熟練掌握。特別提示:該題型請(qǐng)注意在冒泡排序過程中變量的使用。考試過程中常常出現(xiàn)以下畫面,就是由于變量之間使用混淆所造成。例如:考試中典型的數(shù)字排序問題在文件in.dat中有200個(gè)正整數(shù),且每個(gè)數(shù)均在1000至9999之間。函數(shù)ReadDat()讀取這200個(gè)數(shù)存放到數(shù)組aa中。請(qǐng)編制函數(shù)jsSort(),其函數(shù)的功能是:要求按每個(gè)數(shù)的后三位的大小進(jìn)行降序排列,然后取出滿足此條件的前10個(gè)數(shù)依次存入數(shù)組b中,如果后三位的數(shù)值相等,則按原先的數(shù)值進(jìn)行升序排列。最后調(diào)用函數(shù)WriteDat()把結(jié)果
26、bb輸出到文件out.dat中。例:處理前 9012 5099 6012 7025 8088 處理后 5099 8088 7025 6012 9012 注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。 #include<stdio.h>#include<string.h>#include<conio.h>int aa200,bb10;void jsSort() int i,j,data; for(i=0;i<199;i+)for(j=i+1;j<200;j+) if(aai
27、%1000<aaj%1000|aai%1000=aaj%1000&&aai>aaj)data=aai;aai=aaj;aaj=data; for(i=0;i<10;i+) bbi=aai;void main()readDat();jsSort();writeDat();system("pause");readDat()FILE *in;int i;in=fopen("in.dat","r");for(i=0; i<200; i+) fscanf(in,"%d,",&a
28、ai);fclose(in);writeDat()FILE *out;int i;clrscr();out=fopen("out.dat","w");for(i=0; i<10; i+)printf("i=%d,%dn",i+1,bbi);fprintf(out,"%dn",bbi);fclose(out);典型的商品排序問題補(bǔ)充: 考試中出現(xiàn)頻率較高的函數(shù)1、strlen(string) 求字符串長(zhǎng)度 strlen(abdcd) 返回值為 52、strcmp(string1,string2) 比較兩個(gè)字符串
29、大小 返回值大于零 string1>string23、sqrt 求double類型數(shù)值的平方根函數(shù)已知在文件IN.DAT中存有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位),產(chǎn)品名稱mc(字符型10位),單價(jià)dj(整型),數(shù)量sl(整型),金額je(長(zhǎng)整型)五部分組成。其中:金額=單價(jià)*數(shù)量計(jì)算得出。函數(shù)ReadDat()是讀取這100個(gè)銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請(qǐng)編制函數(shù)SortDat(),其功能要求:按產(chǎn)品代碼從大到小進(jìn)行排列,若產(chǎn)品代碼相同,則按金額從大到小進(jìn)行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件O
30、UT6.DAT中。 部分源程序存在文件prog1.c中。請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。#include <stdio.h>#include <mem.h>#include <string.h>#include <conio.h>#include <stdlib.h>#define MAX 100typedef struct char dm5; /*產(chǎn)品代碼*/ char mc11; /*產(chǎn)品名稱*/ int dj; /*單價(jià)*/ int sl; /*數(shù)量*/ long
31、 je; /*金額*/PRO;PRO sellMAX;void ReadDat();void WriteDat();void SortDat()int i,j; PRO xy; 上邊這些是定義了一個(gè)結(jié)構(gòu)體,名字為PRO 定義了一個(gè)PRO的數(shù)組xy 注意大寫PRO for(i=0;i<99;i+)for(j=i+1;j<100;j+) if(strcmp(selli.dm,sellj.dm)<0|strcmp(selli.dm,sellj.dm)=0&&selli.je<sellj.je) xy=selli; sell i=sellj; sellj=xy;
32、void main() memset(sell,0,sizeof(sell); ReadDat(); SortDat(); WriteDat(); void ReadDat() FILE *fp; char str80,ch11; int i; fp=fopen("IN.DAT","r"); for(i=0;i<100;i+) fgets(str,80,fp); memcpy(selli.dm,str,4); memcpy(selli.mc,str+4,10); memcpy(ch,str+14,4);ch4=0; selli.dj=atoi(ch
33、); memcpy(ch,str+18,5);ch5=0; selli.sl=atoi(ch); selli.je=(long)selli.dj*selli.sl; fclose(fp);void WriteDat(void) FILE *fp; int i; fp=fopen("OUT6.DAT","w"); for(i=0;i<100;i+) printf("%s %s %4d %5d %5dn", selli.dm,selli.mc,selli.dj,selli.sl,selli.je); fprintf(fp,"
34、;%s %s %4d %5d %5dn", selli.dm,selli.mc,selli.dj,selli.sl,selli.je); fclose(fp);函數(shù)ReadDat()實(shí)現(xiàn)從文件ENG.IN中讀取一篇英文文章,存入到字符串?dāng)?shù)組xx中;請(qǐng)編制函數(shù)encryptChar(),按給定的替代關(guān)系對(duì)數(shù)組xx中的所有字符進(jìn)行替代,仍存入數(shù)組xx的對(duì)應(yīng)的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS1.DAT中。替代關(guān)系:f(p)=p*11 mod 256(p是數(shù)組中某一個(gè)字符的ASCII值,f(p)是計(jì)算后新字符的ASCII值),如果計(jì)算后f(p)值小于等于32或
35、大于130,則該字符不變,否則將f(p)所對(duì)應(yīng)的字符進(jìn)行替代。部分源程序存在文件prog1.c中。原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個(gè)字符。請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。#include <stdio.h>#include <string.h>#include <conio.h>#include <ctype.h>unsigned char xx5080;int maxline=0;/*文章的總行數(shù)*/int ReadDat(void);void WriteDat(v
36、oid);void encryptChar() int i,j;for(i=0;i<maxline;i+)for(j=0;j<strlen(xxi);j+)if(xxij*11%256<=32|xxij*11%256>130) continue;else xxij=xxij*11%256;void main() clrscr(); if(ReadDat() printf("數(shù)據(jù)文件ENG.IN不能打開!n007"); return; encryptChar(); WriteDat();int ReadDat(void) FILE *fp; int i
37、=0; unsigned char *p; if(fp=fopen("eng.in","r")=NULL) return 1; while(fgets(xxi,80,fp)!=NULL) p=strchr(xxi,'n'); if(p)*p=0; i+; maxline=i;fclose(fp);return 0;void WriteDat(void) FILE *fp; int i; fp=fopen("ps1.dat","w"); for(i=0;i<maxline;i+) printf(
38、"%sn",xxi); fprintf(fp,"%sn",xxi); fclose(fp);或者:void encryptChar() int i,j;unsigned char ch;for(i=0;i<maxline;i+) for(j=0;j<strlen(xxi);j+) ch=xxij*11%256;if(ch<=32|ch>130) continue;else xxij=ch;題庫(kù)中典型的素?cái)?shù)判斷問題int i,j,sum;for(i=100;i<=800;i+) for(j=2;j<i;j+) if(i%
39、j=0) break;if(j=i) sum+=i ; 針對(duì)100題庫(kù)的應(yīng)試辦法1、 按照題目類型分類講解:數(shù)字問題;商品排序;字母替換和字符操作(移動(dòng),排序);選票問題;報(bào)數(shù)出圈問題;特殊問題(數(shù)學(xué)問題,特殊函數(shù))2、 分析算法3、 分析各種題型容易出錯(cuò)位置和形式4、 調(diào)試過程中如何定位錯(cuò)誤5、 針對(duì)個(gè)別題目 帶標(biāo)志 特別對(duì)待,帶 標(biāo)志表示該類型中較復(fù)雜題目,需要多練習(xí)6、 掌握極個(gè)別題目巧妙的方法(比如避開比較難的指針內(nèi)容)下面分類別講解:第一部分 數(shù)字問題抽中率在45%左右數(shù)字題目類型1: 6,11,12- 24、88數(shù)字拆分排序問題(同學(xué)強(qiáng)化練習(xí)) 數(shù)字題目類型2:25,26,27,2
40、8,29,30,31(拆分后拼數(shù)后判斷條件),此類題目千萬小心,小心符合題目要求的“條件。條件出錯(cuò)導(dǎo)致整個(gè)題目出錯(cuò)”。數(shù)字題目類型3:32,33,34,35數(shù)字題目類型4:連續(xù)大于某個(gè)數(shù)相鄰數(shù)字 2, 36,37,38數(shù)字題目類型5:素?cái)?shù)問題 39,40,89,90,91,92其他數(shù)字題目類型:69,70,71,93, 94,95,96, 97, 98, 99, 100帶 標(biāo)志為相對(duì)較難的題目,請(qǐng)大家特別對(duì)待數(shù)字題目類型1-6、int i,j,temp;for(i=0;i<199;i+) for(j=i+1;j<200;j+) if(aai%1000<aaj%1000 | a
41、ai%1000=aaj%1000 && aai<aaj) temp=aai; aai=aaj; aaj=temp; for(i=0;i<10;i+) bbi=aai;同學(xué)考慮:此題可以把條件語(yǔ)句拆成條件語(yǔ)句嵌套11、 數(shù)字題目,涉及右移問題int i,data;for(i=0;i<200;i+)if(xxi>0) /*此處一定先設(shè)定該條件*/totNum+;data=xxi>>1; /*此處一定記住右移符號(hào)>>*/if(data%2=0)totCnt+;totPjz+=xxi;totPjz/=totCnt; /*此處一定在循環(huán)體外
42、邊*/考試過程中同學(xué)容易出現(xiàn)錯(cuò)誤形式:int i,data;for(i=0;i<200;i+)if(xxi>0) totNum+;data=xxi>>1;if(data%2=0)totCnt+;totPjz+=xxi;totPjz/=totCnt;同學(xué)分析以上內(nèi)容為什么出錯(cuò)88、int i,j,cnt=0,bw,sw,gw; for(i=100;i<=999;i+) bw=i/100;sw=i%100/10;gw=i%10;for(j=10;j*j<=i;j+)if(i=j*j&&(bw=sw|sw=gw|gw=bw) bbcnt+=i;re
43、turn cnt; /*此處一定返回cnt*/數(shù)字題目類型2-25qw=ai/1000; bw=ai%1000/100; sw=ai%100/10; gw=ai%10; ab=10*qw+gw; cd=10*bw+sw; if(ab%2!=0&&cd%2!=0&&(ab%5=0|cd%5=0)&&qw!=0&&bw!=0) bcnt+=ai; for(i=0;i<cnt-1;i+) for(j=i+1;j<cnt;j+) if(bi<bj) tmp=ai; ai=aj; aj=tmp; 請(qǐng)同學(xué)查找上題目出錯(cuò)在什么
44、位置數(shù)字題目類型4-2int i,j,data;for(i=0;i<MAX-5;i+)if(ai%2!=0)for(j=i+1;j<=i+5;j+) /* 此處注意不能加大括號(hào) */ if(ai<aj) break; /* 此處注意不能用continue */if(j=i+6) bcnt+=ai; for(i=0;i<cnt-1;i+) for(j=i+1;j<cnt;j+) if(bi>bj) data=bi; bi=bj; bj=data; 36:int i,j,tag;for(i=0;i<MAX-5;i+) if(ai%2=0) for(j=i+
45、1;j<=i+5;j+) if(ai>aj) break; if(j=i+6) /*注意應(yīng)該是i+6不是i+5*/ bcnt+=ai; for(i=0;i<cnt-1;i+) for(j=i+1;j<cnt;j+) if(bi>bj) tag=bi; bi=bj; bj=tag; 37:int i,j,tag;for(i=5;i<MAX;i+) if(ai%2=0) for(j=i-5;j<i;j+) if(ai<aj) break; if(j=i) /*注意應(yīng)該是j=i 而不是j=i+1 考慮此處改成j=i+1應(yīng)該改動(dòng)什么地方*/ bcnt+=
46、ai; for(i=0;i<cnt-1;i+) for(j=i+1;j<cnt;j+) if(bi<bj) tag=bi; bi=bj; bj=tag; 38:int i,j,tag;for(i=5;i<MAX;i+) if(ai%2!=0 &&ai%7=0) for(j=i-5;j<i;j+) if(ai<aj) break; if(j=i) /注意應(yīng)該是j=i 而不是j=i+1 bcnt+=ai; for(i=0;i<cnt-1;i+) for(j=i+1;j<cnt;j+) if(bi<bj) tag=bi; bi=b
47、j; bj=tag; 同學(xué)考慮:38題能把條件:“被7整除”調(diào)整到什么位置” 數(shù)字題目類型5- 89:素?cái)?shù)判斷問題做法1int i,j,bb200; for(i=500;i<=800;i+) /*注意此處的大括號(hào)不能丟*/for(j=2;j<i;j+) if(i%j=0) break;if(j=i) bbcnt+=i; for(i=0;i<cnt;i=i+2) sum+=bbi; for(i=1;i<cnt;i=i+2) sum-=bbi;做法2int i,j,k=1; /*注意此處k初值為1*/ for(i=800;i>500;i-) for(j=2;j<
48、i;j+) if(i%j=0) break; if(j=i) cnt+;sum=sum+k*i;k=k*(-1); 90:int i,j,bw,sw,gw;for(i=100;i<1000;i+) bw=i/100;sw=i%100/10; gw=i%10; for(j=2;j<i;j+) if(i%j=0) break; if(i=j) &&(gw+sw)%10=bw) cnt+; sum+=i; 注意:89,90兩個(gè)題目中源題沒有給出素?cái)?shù)判斷函數(shù),需要自己動(dòng)手編寫91int i; for(i=1;i<=96;i+) if(isPrime(i)&&a
49、mp;isPrime(i+4)&&isPrime(i+10) sum+=i;cnt+; 92int i,s=0; for(m=m+1;k>0;m+) /*注意此處的大括號(hào)不能丟掉 */ for(i=2;i<m;i+)if(m%i=0) break;if(i>=m)xxs+=m;k-;其他數(shù)字題目類型-69:int i,j,data; for(i=0;i<199;i+)for(j=i+1;j<200;j+) if(aai%1000>aaj%1000|aai%1000=aaj%1000&&aai<aaj)data=aai;a
50、ai=aaj;aaj=data; for(i=0;i<10;i+) bbi=aai;70,71 :數(shù)字結(jié)構(gòu)數(shù)組排序問題這類題目主要考察結(jié)構(gòu)數(shù)組的定義和結(jié)構(gòu)數(shù)組元素的引用方法,在前幾種類型的基礎(chǔ)上,比較容易實(shí)現(xiàn)。 另外需要注意:這兩個(gè)題目考察大家函數(shù)返回值問題。即return的使用。 93回文數(shù)int i,strl,half; char xy20; ltoa(n,xy,10); /* 把一整數(shù)轉(zhuǎn)換為字符串注意這里不能使用itoa()函數(shù),因?yàn)閚是long 型的itoa()函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是要轉(zhuǎn)換的數(shù)字,第二個(gè)參數(shù)是要寫入轉(zhuǎn)換結(jié)果的目標(biāo)字符串,第三個(gè)參數(shù)是轉(zhuǎn)移數(shù)字時(shí)所用 的基數(shù)。在上例中,轉(zhuǎn)換基數(shù)為10。10:十進(jìn)制;2:二進(jìn)制. */ strl=strlen(xy); half=strl/2; for(i=0;i<half;i+)if(xyi!=xy-strl) break;if(i>=half) return 1;else return 0;94,95,96,97,98,99,100:統(tǒng)計(jì)問題 (注意此類題目的變量需要賦初值,自動(dòng)保留小數(shù)兩位)其中100題目注意取某個(gè)數(shù)字的整數(shù)部分方法:(long)xxi;(int)xxi-數(shù)字題目應(yīng)對(duì)考試總結(jié):Ø 考
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園圍欄安全管理規(guī)范
- 建設(shè)企業(yè)培訓(xùn)體系實(shí)施綱要
- 護(hù)理診斷教學(xué)
- 插件員工培訓(xùn)體系構(gòu)建
- 2025年水處理試題答案
- 基礎(chǔ)教研室工作計(jì)劃與總結(jié)模版
- 化工行業(yè)2025年一季報(bào)綜述:基礎(chǔ)化工盈利能力邊際好轉(zhuǎn)石油石化業(yè)績(jī)隨油價(jià)短期波動(dòng)15865kb
- 山東省濟(jì)寧市兗州區(qū)2024-2025學(xué)年高二下學(xué)期期中質(zhì)量檢測(cè)化學(xué)試卷(含答案)
- 小學(xué)信息技術(shù)老師上半年工作總結(jié)模版
- 2025年酒店保安年度總結(jié)模版
- 2025年CFA特許金融分析師考試金融產(chǎn)品設(shè)計(jì)與模擬試題
- 2025屆天津市蘆臺(tái)一中高三一模-化學(xué)試卷
- 市政道路工程施工組織設(shè)計(jì)方案
- 醫(yī)療護(hù)理與人文關(guān)懷課件
- 用地理知識(shí)介紹美國(guó)
- 2024-2025年高考生物一輪復(fù)習(xí)知識(shí)點(diǎn)講解專題3-2細(xì)胞呼吸含解析
- 2024年版豬場(chǎng)員工勞動(dòng)合同模板3篇
- 《生物制品連續(xù)制造指南》
- 保衛(wèi)管理員三級(jí)練習(xí)題
- 湖北荊州市監(jiān)利市暢惠交通投資有限公司招聘筆試沖刺題2024
- 食品配送行業(yè)安全生產(chǎn)管理制度
評(píng)論
0/150
提交評(píng)論