《C語(yǔ)言試題及答案》簡(jiǎn)介開始:C語(yǔ)言部分一、選擇題(每小題2分,共10分)(下在各小題,分別有一個(gè)或多個(gè)正確答案,請(qǐng)將所有正確答案的編號(hào),填寫在該小題題干后的括號(hào)內(nèi)。錯(cuò)選或漏選均不得分)。1、若定義:inta[2][3]{0,2,4,6,8,10};以下描述正確的有(A,C,D,E)A、*(a+1)為元素6的地址這里a+1a[1]的地址;*(a+1)的。。此內(nèi)容文章屬于《考試資料》欄目,以上內(nèi)容為《C語(yǔ)言試題及答案2011-6-6 19:22:09》簡(jiǎn)單介紹,正文正式開始》》》
C語(yǔ)言部分 一、選擇題(每小題2分,共10分) (下在各小題,分別有一個(gè)或多個(gè)正確答案,請(qǐng)將所有正確答案的編號(hào),填寫在該小題題干后的括號(hào)內(nèi)。錯(cuò)選或漏選均不得分)。 1、若定義:int a[2][3]{0,2,4,6,8,10};以下描述正確的有( A,C,D,E ) A、*(a+1)為元素6的地址 這里a+1=a[1]的地址;*(a+1)的值是6,故A正確。 B、*(a[1]+1)的值為2 為8,故B不正確 C、**(a+1)+2的值為8 這里a+1是一個(gè)指針,指向的是a[1]. *(a+1)為a[1],a[1]指向的是a[1][0]. **(a+1)為6,加2得8,故C正確; D、a[0]與a相同 因二者都是指針,指針的地址都是指向數(shù)組中的第一個(gè)元素的地址,故D正確。 E、a[1][2]的值為10 它是指第二行的第三個(gè)元素,為10,正確 2、對(duì)函數(shù)的正確使用方法描述( A,C,D )。 A、用數(shù)組做函數(shù)參數(shù)時(shí),必須在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組 B、實(shí)參數(shù)組元素和形參數(shù)組元素類型可以不一致 C、形參數(shù)組長(zhǎng)度可以不指定 D、形參數(shù)組長(zhǎng)度可以大于實(shí)參數(shù)組長(zhǎng)度 E、數(shù)組名做參數(shù)屬于值傳遞 3、對(duì)靜態(tài)變量的正確描述( A,B,D,E ) A、靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配單元( ) B、靜態(tài)外部變量可以賦初值,也可以不賦初值 C、靜態(tài)外部變量的作用與外部變量相同 D、靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束時(shí),仍保存其值,不會(huì)隨著消失。 E、靜態(tài)局部變量只賦一次初值 4、下列描述正確的是( A ,C)。 A、由main 函數(shù)及其參數(shù)argc和* argv[]可以實(shí)現(xiàn)命令行方式 B、使用fclose關(guān)閉文件時(shí),先釋放文件指針,再寫緩沖區(qū)數(shù)據(jù)到文件中 //先寫緩沖區(qū)數(shù)據(jù)到文件中,再釋放文件指針 C、字符數(shù)組并不要求它的最后一個(gè)字符是‘\0’ //是的,以字符指針指向的字符串才要求,因?yàn)橹挥羞@樣,才能知道字符串的長(zhǎng)度,而在字符數(shù)組中,不用\0,一樣可以知道到哪里是字符數(shù)組的結(jié)尾。 D、‘A’和“A”都是字符串常量 E、若char*S=“\ta\017bc”;則指針變量S指向的字符串所占的字節(jié)數(shù)是7 5、在緩沖文件系統(tǒng)中用于讀寫的函數(shù)有( A,B,D ) A、putchar () B、fread() C、rewind () D、purw() E、fseek() 二、程序閱讀,并給出運(yùn)行結(jié)果(共10分,每題5分)。 (1)main() { unsigned a,b,x int n; a=0x763 輸出結(jié)果: n=6; b=a<<(12n); x=(a>>n2)^b; //+,,的優(yōu)先級(jí)比<<,>>高。 printf(“\nb=%x,\nx=%x”,b,x); } 在用2個(gè)字節(jié)表示整數(shù)的系統(tǒng)中 結(jié)果為 d8c0 d8b6 在用4個(gè)字節(jié)表示整數(shù)的系統(tǒng)中 結(jié)果為 1d8c0 1d8b6 故以上兩種結(jié)果都正確。 (2) #include 〈stdin.h〉 struct m {int x; int *y; } *p; int a [4]={12,33,40,100}; struct m b [4]={10,&a[2],9,&a[3],8,&a[0],7,&a[1]}' main() { p=b; 輸出結(jié)果: printf(“%d\n”,++p>x); //>的優(yōu)先級(jí)高于++,因此等于是++(p>x),為11 printf(“%d\n”,(++p)>x); //p后移一個(gè)元素,其x值為9; printf(“%d\n”,++(*p>y)); //>的優(yōu)先級(jí)高于*, 此時(shí)p已指向b[1],故*(p>y)為a[3]為100.自加后為101; } 故輸出結(jié)果為: 11 9 101 三、程序設(shè)計(jì)(共10分) 設(shè)在文件a.txt和文件b.txt中分別存有兩個(gè)字符串,設(shè)計(jì)一個(gè)程序?qū)⑦@兩個(gè)字符串按依序交叉的方式合并為一個(gè)字符串(例如“aaaaa”與“bbb”的合并結(jié)果為“abababaa”,而“bbb”與“aaaaa”的合作結(jié)果為“ bababaa”,)并將結(jié)果存入文件a.txt中。 【答案】 寫程序時(shí),可以分別讀取a.txt文件和b.txt文件,注意(1),無(wú)論a文件先讀完還是b文件先讀完,程序都能作出適應(yīng)性的判斷。注意(2)把a(bǔ)和b合并的結(jié)果,寫到一個(gè)臨時(shí)文件c中,最后把c的文件覆蓋到a文件中,達(dá)到題意的要求。 #include<stdio.h> main() { FILE *fp,*fq,*fr; char ch; if((fp=fopen("a.txt","r+"))==NULL) { printf("cannot open file a.txt"); exit(0); } if((fq=fopen("b.txt","r"))==NULL) { printf("cannot open file b.txt"); exit(0); } fr=fopen("c.txt","w+"); while(!feof(fp)) { ch=fgetc(fp); fputc(ch,fr); if(!feof(fq)) { ch=fgetc(fq); fputc(ch,fr); } } while(!feof(fq)) { ch=fgetc(fq); fputc(ch,fr); } rewind(fp); rewind(fr); while(!feof(fr)) { ch=fgetc(fr); fputc(ch,fp); } fclose(fp); fclose(fq); fclose(fr); } 1.2 四川大學(xué)2001年攻讀碩士學(xué)位研究生入學(xué)考試試題 及 答案 1.2.1第2001年――C語(yǔ)言程序設(shè)計(jì) 題目 一、單項(xiàng)選擇題(在每小題的四個(gè)備選答案中,選出一個(gè)正確的答案,并將其號(hào)碼寫在答題紙上。請(qǐng)注意注明題號(hào)。每小題1分,共計(jì)6分) 1、‘\t’表示什么? ①字符串常數(shù) ②標(biāo)識(shí)符 ③變量 ④字符常量 答案:④ 2、對(duì)宏定義不正確的描述是哪一個(gè)? ①在進(jìn)行宏定義時(shí),可以引用已經(jīng)定義的宏名,可以層層置換 //可以引用已經(jīng)定義了的宏名,可以層層置換 ②宏名的有效范圍包括本文件的任何位置 //宏名的有效范圍定義命令之后到本源文件結(jié)束,可以用#define終止宏定義的作用域 ③寵定義不是語(yǔ)句,不必在行末加分號(hào) //是預(yù)處理定義語(yǔ)句 ④對(duì)程序中雙引號(hào)括起來(lái)的字符串,即使與宏名相同,也不進(jìn)行置換 3、若定義static char s[20]=”computer”;則執(zhí)行語(yǔ)句x = strlen(s);之后,x的值為多少? ①20 ②9 ③8 ④19 //strlen函數(shù)計(jì)算char*型字符串的長(zhǎng)度的時(shí)候,并不包含末尾的\0; 4、以下哪一個(gè)表達(dá)式取值是正確的? ①6>5結(jié)果為6 ②6&&5結(jié)果為7 ③6||5結(jié)果為7 ④6<5結(jié)果為0 5、如定義 enum weekday {one, two, thr, fou, fiv}; enum weekday working; 以下哪個(gè)是不正確的枚舉變量的使用? ①working = thr; ②working =2; ③working = (enum weekday)2; ④working = (enum weekday) (53); //不能對(duì)其賦值 6、下列說(shuō)法中正確的是哪一個(gè)? ①sizeof (char) 是結(jié)果為整型的表達(dá)式 ②sizeof (char) 是一個(gè)不合法的表示形式 ③sizeof (char) 是一種函數(shù)調(diào)用 ④sizeof (char) 是結(jié)果為實(shí)型的表達(dá)式 二、閱讀程序,并回答問(wèn)題(共12分) 1、下列程序的輸出是什么?(3分) # include <stdio. h> void main () ﹛ char * aplha [6] = ﹛“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”﹜; char **p; int i; p = aplha; for (i = 0; i<4; i++) printf (“%s”, p[i]); printf (“\n”); ﹜ //輸出結(jié)果 ABCDEFGHIJKL 剛好是字符串?dāng)?shù)組里面的前四個(gè)元素的內(nèi)容連接起來(lái) 2、下列程序?yàn)槭裁礋o(wú)法將用戶輸入的三個(gè)整數(shù)按從小到大排序輸出?應(yīng)該如何修改?(6分) # include <stdio.h> void swap (int x, int y) ﹛ int t = x; x = y; y = t; ﹜ void main () ﹛ int a, b, c; scanf (“%d, %d, %d”, &a, &b, &c); if (a>b) swap (a, b); if (a>c) swap (a, c); if (b>c) swap (b, c); printf (“%d, %d, %d”, a, b, c); ﹜ //函數(shù)swap采用值傳遞,雖然將形參x和y交換了,但是并不影響到實(shí)參。將值傳遞改成指針傳遞就可以了。 C函數(shù)參數(shù)采用值傳遞方式,雖然swap函數(shù)將形式參數(shù)x和y的值進(jìn)行了調(diào)換,但是影響不到相應(yīng)的實(shí)在參數(shù)。所以在主函數(shù)中,通過(guò)調(diào)用sawp函數(shù)調(diào)換a和b(或a或c,或b和c)的值是根本達(dá)不到目的的。 修改: (1)(2分) void swap (int *x, int*y) ﹛ int t = *x; *x = *y; *y = t; ﹜ (2)(2分)主函數(shù) if(a>b) swap(&a,&b); if(a>c) swap(&a,&c); if(b>c) swap(&b,&c); 3、假設(shè)系統(tǒng)為基本整型量分配2個(gè)字節(jié),為字符型量分配1個(gè)字節(jié)。下列程序完成的功能是什么?(3分) # include <stdio. h> union ﹛ int n; char ch [2]; ﹜u; void main () ﹛ int m; scanf (“%d”,&m); u.n = m; printf (“\n%u, %u”,u.ch[0], u.ch[1]); ﹜ //該程序的功能,取用戶輸入的整數(shù)值的高字節(jié)和低字節(jié),并按照任意整數(shù)的低字節(jié)和高字節(jié)分別輸出。 三、程序設(shè)計(jì)題(12分) 假設(shè)一個(gè)文本文件中保存著100個(gè)整數(shù),請(qǐng)將這100個(gè)整數(shù)按從小到大的順序?qū)懙搅硪粋€(gè)文本文件中去,并且在新文件中每10個(gè)整數(shù)占一行。源文件名和目標(biāo)文件名通過(guò)命令行參數(shù)獲取。 分?jǐn)?shù)分配: 變量定義 2分 命令行參數(shù)處理 1分 文件打開 1分 文件讀 2分 排序 3分 文件寫 2分 文件關(guān)閉 1分 # include <stdio. h> void main(int argc, char *argv[]) ﹛ FILE *fin, *fout; Int a [100], i, j, t; if(argc!=3) ﹛ printf (“ You forgot to enter a filename\n”); return; ﹜ fin = fopen (argv[1], “r”); fout = fopen (argv[2], “w”); for (i = 0; i<100; i++) fscanf (fin, “%d”, &a[i]); for (i = 0; i<99; i++) for (i = 0; i<99-i; i++) if (a[j]>a[j+1]) ﹛t = a[j]; a[j] = a[j+1]; a[j+1]=t;﹜ for (i = 0; i<100; i++) ﹛ if (i%10 = 0) fprintf (fout, “%s”, “\n”); fprintf (fout, “%d”, a[i]); ﹜ fclose (fin); fclose (fout); ﹜ 1.3 四川大學(xué)2002年攻讀碩士學(xué)位研究生入學(xué)考試試題 及 答案 1.3.1 第2002年――C語(yǔ)言題目 C語(yǔ)言程序設(shè)計(jì)(共30分) 一、單項(xiàng)選擇題(在每小題的四個(gè)備選答案中,選出一個(gè)正確答案。每小題1分,共6分) 1、如果I為整型變量,f為float型變量,c表達(dá)式'a'+I*f的類型為 。 A、字符型 B、整型 C、單精度型 D、雙精度型 //即使是兩個(gè)float型的數(shù)據(jù)相加,都化成double型 float型的數(shù)據(jù)在運(yùn)算時(shí)一律轉(zhuǎn)化成雙精度型,提高其運(yùn)算精度 2、關(guān)于c表達(dá)式5||(a=b+c)==3的值,正確的說(shuō)法為 。 A、值為1 B、值為5 C、值為0 D、僅這一個(gè)表達(dá)式,不能確定值,必須知道a,b,c的值后才能計(jì)算。 //等號(hào)==的優(yōu)先級(jí)高于||所以先計(jì)算(a=b+c)==3但是不論它為真或假,在與5進(jìn)行或運(yùn)算時(shí),按照或運(yùn)算的法則,只要一方為真,表達(dá)式的結(jié)果為真。
3、若整型變量a的值為50,則c表達(dá)式a>>2的值為 。 A、50 B、25 C、12.5 D、12 //每右移一位除以2,且由于a為整型,結(jié)果為整型 4、若c,c1,c2均為字符型變量,下列語(yǔ)句執(zhí)行后。 c='a'; c1=++c; c2=c++; c1,c2的值分別為 。 A、c1='b',c2='c' B、c1='a', c2='c' C、c1='b',c2='b' D、c1='a',c2='b' //前加加,先加1后使用值,后加加是先使用其值在加加,所以c加加后的值賦予c1,c1得值b,c2先使用值,再加加,c2得值b 5、以下c 語(yǔ)句執(zhí)行后, int i, s=0; for (i=0;i<10;i++)s+=i; printf ('%d\n', i); 輸出的內(nèi)容為 。 A、0 B、9 C、10 D、11 //i值在循環(huán)外定義,所以其值循環(huán)結(jié)束仍有意義,得值10 6、以下c語(yǔ)句執(zhí)行后, char s1[100] =″I like C 1anguage″,s2[100]; strcpy(s2, s1); strcat (s1, s2); puts (s2); 輸出的內(nèi)容為 。 A、I B、I like C language C、I like C language I like C language D、I like C language I like C language I like C language //連接后的串存在s1里,對(duì)s2沒(méi)有影響 二、閱讀程序,寫出該程序的執(zhí)行結(jié)果。(4分) # include 〈stdio.h〉 void main ( ) { char a [3] [10]={"Beijing ","Shanghai", "Chengdu"}; char p1, (*p2)[10]; p1=a[0]; p2=a; printf("%c\n",*(a[1]+1)); // a[1]代表是第一行字符串Shanghai,加1后得值第一個(gè)字符h的地址,*取出其地址里的值h printf("%c\n",*(*(a+1)+2)); // *(a+i)=a[i] 代表是第一行字符串Shanghai,加2后得值第2個(gè)字符a的地址,*取出其地址里的值 printf("%c\n",*(p1+1)); //p1是一字符指針,加一指向第零行第1個(gè)字符e的位置,*取出其地址里的值 printf("%c\n",*(*(p2+1)+2)); //p2為一指向數(shù)組的指針,p2是與數(shù)組名等價(jià)的指針,它指向2維數(shù)組的首行,p2+1指針指向了第一行字串Shanghai,加2后得值第2個(gè)字符a的地址,*取出其地址里的值 printf("%s\n",*(p1+1)); //打印的從第一個(gè)字符開始的第零行余下的字符串eijing printf("%s\n",*(p2[2]); //p2[2]指的是第二行,打印第二行字符串Chengdu printf("%s\n",*(p2+1)); //p2+1指向的是第一行字符串shanghai 三、按要求編寫函數(shù)。(8分) 在一程序中定義了如下結(jié)構(gòu)類型用于處理單向鏈表: struct linkage { int value; struct linkage *pNext; }; 現(xiàn)已經(jīng)編寫出按節(jié)點(diǎn)的成員a值從小到大建立初始鏈表的函數(shù) create ( ),如下所示: struct linkage * create (void ) { struct linkage * pHead; int a[4]={2,1,3,5}; pHead=NULL; for (i=0;i<4;i++) pHead=addItem(pHead,a[i]); return pHead; } 在該函數(shù)的for循環(huán)前,pHead為NULL;在執(zhí)行整個(gè)for循環(huán)后,創(chuàng)建的鏈表如下所示: 即在被調(diào)函數(shù)addItem( )中,需要?jiǎng)討B(tài)分配內(nèi)存,生成新節(jié)點(diǎn),將傳入的第二參數(shù)的值賦給該節(jié)點(diǎn)的成員value:并通過(guò)第一個(gè)參數(shù)鏈表首節(jié)點(diǎn)確定適當(dāng)位置放置該新節(jié)點(diǎn)。 請(qǐng)完成函數(shù): struct linkage * addItem (struct linkage *pHead, int value ); 返回值指向單向鏈表頭節(jié)點(diǎn)。 你可能用到下面的動(dòng)態(tài)內(nèi)存分配函數(shù)。 void* malloc (unsigned int size);其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。返回值為指向分配域起始地址的指針。 1、在空鏈表中加第一個(gè)節(jié)點(diǎn)2分; 2、加到當(dāng)前鏈表頭節(jié)點(diǎn)前2分; 3、加到當(dāng)前鏈表頭節(jié)之后適當(dāng)位置,可分為兩步。2分; 4、其它部分2分,包括整體結(jié)構(gòu),變量定義,返回值。 struct linkage *addItem (struct linkgae *pHead ,int value) { struct linkage *p ,*q,*r,*s; p=pHead; if (!p) { r=(struct linkage *) malloc (sizeof (struct linkage)); r>a=value; r>pNext =NULL; pHead=r; } else if (value <=p>a) { r=(struct linkage *) malloc (sizeof (struct linkage)); r>a=value; r>pNext =p; pHead=r; else { q=p>pNext; while (q) if (value<=q>a) break; else { p=q; q=p>pNext; } r=(struct linkage *)malloc (sizeof (struct linkage)); r>a=value; r>pNext=q; p>pNext=r; } return pHead; } 四、程序設(shè)計(jì)。(12分) 單位HTML文件由標(biāo)簽,標(biāo)題和正文主體等部分組成。如下所示: 〈HTML〉 〈HEAD〉 〈TITLE〉HTML標(biāo)題部分</TITLE> 〈/HEAD〉 <BODY> 這里是HTML文件的主體部分。<BR>換新行。 </BODY> 〈/HTML〉 符號(hào)"<與">"及其之間的內(nèi)容是標(biāo)簽,如〈HTML〉,</TITLE>等。其它部分是標(biāo)題和主體。請(qǐng)按以下說(shuō)明和要求完成程序,將簡(jiǎn)單的HTML文件轉(zhuǎn)換為TXT文件: 1. 序?qū)⒑?jiǎn)單HTML文件的有標(biāo)簽和換行符(\n)(去掉。標(biāo)題部分結(jié)束(遇到</TITLE>標(biāo)簽)后加上一個(gè)換行符(\n)。每一個(gè)<BR>標(biāo)簽換成一個(gè)換行符(\n)。其余部分原樣保留。如上面的簡(jiǎn)單HTML文件處理為(↙表示換行): HTML標(biāo)題部分↙ 這里是HTML文件的主體部分。↙ 換新行。 2.簡(jiǎn)單HTML文件的標(biāo)簽內(nèi)沒(méi)有嵌套情況,即在"<和">"這間不會(huì)再出現(xiàn)"<或">"。 3.標(biāo)簽內(nèi)的內(nèi)容大小寫無(wú)關(guān)。如<br>,<Br>,<BR>等價(jià)。 4.示簽的"<和">"與標(biāo)簽內(nèi)容間無(wú)空格。即不會(huì)出現(xiàn)<BR >或< BR>等情況。 5.標(biāo)題和正文中不會(huì)出現(xiàn)"<和">"字符,它們通過(guò)轉(zhuǎn)義字符實(shí)現(xiàn),這時(shí)尤需考慮。 6.程序需要處理命令行參數(shù)。第一個(gè)參數(shù)指要處理的HTML文件名,第二個(gè)參數(shù)指定處理后要存放的文件名。這兩個(gè)文件都是文本文件。 7.程序必須進(jìn)行必要的出錯(cuò)處理,如無(wú)法打開文件等。 8.程序不需要包含頭文件。 1、main()函數(shù)形參處理:2分。 2、變量定義1分。 3、打開關(guān)閉文件2分; 4、讀源文件1分; 5、能從標(biāo)簽中找出內(nèi)容〈BR〉〈/TITLE〉換為'\n'部分2分; 6、區(qū)分開標(biāo)簽和其它部分,并按要求寫入目標(biāo)文件2分; 7、整體結(jié)構(gòu)正確2分; void main (int argc, char *argv[]) { char C,tag[7]; int status ,len ; FILE*fin,*fout; if (argc!=3) { printf("參數(shù)個(gè)數(shù)不對(duì)!") exit (1) } if ((fin=fopen (argv [1],"r")))==NULL) { printf(“打不開源文件”); exit(1); } if ((fout=fopen (argv [2],"w")))==NULL) { printf("無(wú)法寫入文件!"); fclose (fin); exit (1); } status =0; while ((c=fgetc (fin)))!=EOF) switch (C) { case '<': status=1; len=0; break; case ‘>’: status=0; if(len<=6) tag[len]=0; if(!strcmp(tag,”/title”)||!strcmp(tag,”br”)) fputc(‘\n’,fout); break; case '\n':break; default: if (! status) fputc (c,fout); else { len++; if (len<=6); tag[len1]=c; } } fclose (fin); fclose (fout); } 1.4 四川大學(xué)2003年攻讀碩士學(xué)位研究生入學(xué)考試試題及 答案 1.4.1 第2003年――C語(yǔ)言題目
C語(yǔ)言程序設(shè)計(jì)(40分) 一、分析下面的 程序,寫出程序執(zhí)行結(jié)果。(每小題4分,共2分) 1、 #include 〈stdio.h〉 void swap (int **p1,int **p2) { int *t; t=*p1; p1=p2; *p2=t; } void main( ) { int a=1、b=3、*p=&a、*q=&b; swap(&p、&q); printf('%d、5d、%d、%d\n"、a、b、*p、*q; } //因?yàn)樵趕wap函數(shù)里交換的是兩個(gè)參數(shù)的地址,所以參數(shù)使用的是兩級(jí)指針,表示交換的是指針的地址,最終使p指向了b,q指向了a。 1,3,3,1 2. # include <stdio.h> void merge (char *d、char sl、char、S2) { while (*sl!='\0' && *S2!='\0') if (*sl<*s2) d++=*sl++; else d++=*s2++; while (*sl!='\0) *d++=sl++; while (*s2!='\0') *d++=s2++; *d='\0', } void main( ) { char sl="acdgh",s2="bcfhi",s3[20]; merge(s3,s1,s2); puts(s3) } //將兩個(gè)字符串合為一個(gè)按照字母順序排列的串 abccdfghhi 二、按要求完成C函數(shù)。(每小題10分,共20分) 1.int maxsameChar(char *s); 該函數(shù)計(jì)算字符串 s中最大連續(xù)相同的字符個(gè)數(shù)。例如,若s 為"aaabbbb",則返回值為4;若s為"abcde",則返回值為1。 int maxSameChar (char *s) { int temp=1, max=0; char c='\0'; while (*s) { if (c==*s) tmpe++; else { c=*s; temp=1; } if (max<temp) max=temp; s++; } return max; } 2. struct mode *reverse(struct mode *pHead); 其中,struct node 定義如下: struct node { int key ; struct node *pNext; }; 此函數(shù)傳入的pHead指向要處理的單向鏈表頭,該鏈表以NULL指針結(jié)束。函數(shù)實(shí)現(xiàn)鏈表鏈接方向(包括pHead 指向的原頭節(jié)點(diǎn))的反轉(zhuǎn),如圖1所示。并將新鏈表頭指針作為函數(shù)值返回。在完成此函數(shù)時(shí),你只能利用原有鏈表節(jié)點(diǎn),不能申請(qǐng)新節(jié)點(diǎn)空間。 struct node* reverse (struct node* pHead) { struct nodt *p,*q,*t; if (pHead==NULL) return NULL; p=pHead; q=p>pNext; while (q! NULL) { t =q>pNext; q>pNext=p; p=q; q=t; } pHead>pNext=NULL; pHead=p; return pHead; }
三、按要求完成簡(jiǎn)單的客車車次查詢程序。(12分) 某車站需要一個(gè)簡(jiǎn)單的客車車次查詢程序。說(shuō)明如下: 1. 客車車次數(shù)據(jù)文件checi.txt放在c:\data目錄下,格式為: T8 成都 北京西 09:30 1364 成都 北京西 14:20 K118 攀枝花 北京西 22:00 … … … 其中每行為一次車的信息,分為4個(gè)數(shù)據(jù)項(xiàng):車次,始發(fā)站,終點(diǎn)站和離開本站時(shí)間。前三個(gè)數(shù)據(jù)項(xiàng)留的寬度為8字符,最后一項(xiàng)結(jié)束后即換行。數(shù)據(jù)項(xiàng)間一定有空格隔開,每一數(shù)據(jù)項(xiàng)內(nèi)無(wú)空格。 2.你的程序?qū)τ脩敉ㄟ^(guò)命令行參數(shù)指一的車次,在客車車次數(shù)據(jù)文件中查找相應(yīng)車次信息并輸出該次車的始發(fā)站,終點(diǎn)站和離開本站時(shí)間,如果未找到,則輸出“找不到該次車信息!”。 3.你的程序可以使用標(biāo)準(zhǔn)的C庫(kù)函數(shù),可以不引用文件。程序中應(yīng)給出必要的注釋。
int main (int argc, char *argv [ ]) { char info [4] [20]; FILE * fp; int I,found=0; if (argc!=2) { printf("參數(shù)個(gè)數(shù)不正確!\n"); return 1; } fp=fopen ("c:\\checi. txt ","r"); if (fp==NULL) { printf ("無(wú)法打開數(shù)據(jù)文件!\n"); return 1; } while (! feof (fp)) { for (I=0;i<4; i++) fscanf (fp,"%s",info[i]); if (!stricmp (info[0],argv[1])) { found=1; printf("始發(fā)站:%s\n",info [1]); printf("始發(fā)站:%s\n",info [2]); printf("離本站時(shí)間:%s\n",info [3]); break; } } if (! found ) printf("找不到該次車信息!\n"); return 0; } 1.5 四川大學(xué)2004年攻讀碩士學(xué)位研究生入學(xué)考試試題及 答案
1.5.1 第2004年――C語(yǔ)言題目 C語(yǔ)言程序設(shè)計(jì)(40分) 一、寫出下列表達(dá)運(yùn)算后a的值,設(shè)a,b 均為 int ,每個(gè)表達(dá)式運(yùn)算到a=2,b=3。(5分) (1) a+=b*5 //a=a+b*5,為17 (2) a=b++ //a=3 (3) a%=(a%=b) //結(jié)果為0 (4) a=a>b&&b>a||a //>的優(yōu)先級(jí)高于&&和||原式理解為(a>b)&&(b>a)||a &&運(yùn)算符高于||,原式理解為((a>b)&&(b>a))||a,因?yàn)閍值為2,結(jié)果為1真?;蜻\(yùn)算是有一為1 (5) a=!b<a&&!a<b //!的運(yùn)算符最高,<其次,&&最小原式理解為((!b)<a)&&((!a)<b))結(jié)果為1 二、下面的程序構(gòu)造一個(gè)有向圖,請(qǐng)畫出其示意圖。(10分) include 〈stdio.h〉 struct node /*有向圖的節(jié)點(diǎn)類型*/ { int key; struct node *left,*right,*up,*down; }; int main (int argc ,char * argv []) { int i; struct node nodes[5]; for( i=0;i<5;i++) { nodes [i].key=i; nodes [i].left=NULL; nodes [i].right=NULL; nodes [i].up=NULL; nodes [i].down=NULL; } nodes [0].left=nodes+1; nodes [1].left=nodes; nodes [1].up=nodes+2; nodes [2].down=nodes+3; nodes [3].right=nodes+4; nodes [4].up=nodes; nodes [4].down=nodes+1; return 0; } 三、按要求完成函數(shù)。(10分) int sameChar sAT SamePos (char *s1,char *s2); 兩個(gè)字符串的字符進(jìn)行同位置比較,返回相同的字符數(shù)(串結(jié)束符‘\0’不比較)。 例如,若s1="abc",s2="Abc",則返回值為2。 int sameCharAtSame Pos (char *s1,char *s2) { int counter =0; while (*sl && *s2) { if (*s1 == *s2) counter ++; s1++; s2++; } return counter; } 四、按要求編寫程序?qū)σ环N特殊字符串解碼。(15分) 要處理的特殊字符串由A,C,G,U四個(gè)字符組成,如下所示: ACUGCCCAUGAAAAACUUUUGACAC 其有效信息子串從第一次出現(xiàn)“AUG”后開始,遇到“UGA”結(jié)束(不包括“AUG”和“UGA”。)如上面的編碼串需解碼的有效子串為: AAAAACUUU 有效子串中每3個(gè)字符(如“AAA”,“CGA”)作為一個(gè)密碼子(可以保證,有效子串的長(zhǎng)度一定為3的整數(shù)倍。)可能的密碼子(62種)及相應(yīng)碼值以如下形式放在編碼文件code.txt中(按密碼子字典序排列); AAA K AAC N ………… UUU F 請(qǐng)編寫C程序?qū)Υ娣旁谖募械奶厥庾址獯a,在屏幕輸出解碼串。如:KNF KNE 要求: 1、編碼文件code.txt放在c盤根目錄下; 2、要解碼的特殊字符串以文件形式存放,其串長(zhǎng)不超過(guò)1024字符; 3、你編寫的程序應(yīng)能處理命令參數(shù),指定要解碼的字符串文件; 4、程序中可以使用C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),不需要寫出頭文件; 5、程序中應(yīng)有必有的注釋。 #include 〈stdio.h〉 #include 〈string.h〉 struct { char name[4]; char code; } table [62]; int main (int argc,char *argv [ ]) { FILE *code? file=NULL, *string file =NULL; char string [1024+2],buffer[4],*p,*end ; int I; /* 檢查命令行參數(shù)*/ if (argc<=1) } /*打開編碼文件以及待解碼文件*/ code? file=fopen ("c:\\code. txt","r"); string file =fopen (argv[1],"r"); if (code_file= = NULL | | string_file = =NULL) return 1; /* 讀編碼文件,將結(jié)果記入表中 */ for (i=0; i<62; i++) { fscanf(code_file, "%s %c\n", tabie[i], name, &table[i].code); } /*讀待解碼文件內(nèi)容到string中 */ fgets (string, sizeof (string), string_file); /* 掃描有效子串頭 */ p= strstr(string, "AUG"); end = strstr (p + 3 , "UGA"); /*讀有效子串,查表輸出解碼字符,直到子串尾 */ for (p+=3; p<end; P+=3) { for (i=0; i<3; i++) { buffer [i] = p [i]; } buffer [i] ='\0'; for (i=0; i<62; i++) { if (strcmp (buffer, table [i].name)) = = 0) { printf("%c", table[i]. code); break; } } } /* 關(guān)閉編碼文件以及待解碼文件 */ fclose (code_file); fclose (string_file); return 0; } 1.6 四川大學(xué)2011年攻讀碩士學(xué)位研究生入學(xué)考試試題及 答案 1.6.1 第2011年――C語(yǔ)言題目 C語(yǔ)言程序設(shè)計(jì)(50分) 一、 讀程序,寫執(zhí)行結(jié)果(8分) 1、 #include<stdio.h> int main( ) { int a=4,b=3,c=1,x; x=a>b; printf(“%d\n”,x); //結(jié)果為1 x=a+b++; printf(”%d\n”,x); //結(jié)果為6 x=a>b; printf(”%d\n”,x); //結(jié)果為假,0 x=c&&b==c; printf(”%d\n”,x); //==的運(yùn)算級(jí)高于&&, c&&(b==c)結(jié)果為假0 return0; } 2. #include<stdio.h> int main( ) { inti,j; for(I=0;I=8;I+=2)
{ for(j=0;j<(8I)/2;j++ printf(”+”); for(j=0;j<=I;j++) printf(”*”); printf(\n”); } return0; } ++++* +++*** ++***** +******* 二.按要求完成函數(shù)。(28分) 1. 一種最簡(jiǎn)單的字符串加密方法是將字符串的每一字符加上一個(gè)偏移量offset(不考慮溢出)。請(qǐng)編寫木相應(yīng)的編解碼函 數(shù),其原型分別為: char*encode(char*s,int offset); char *decode(char *s,offset); char *encode(char *s,int offset) { char *p=s; while (*p) { *p +=offset; } renturn s; }
char *decode(char *sm int iffset) { char *p= s; while(*p) { *p=offset; } return s; } 2編寫函數(shù)將兩個(gè)節(jié)點(diǎn)值遞增的單向鏈表歸并為一個(gè)。要求利用原節(jié)點(diǎn)空間。鏈表節(jié)點(diǎn)定義為: struct node { int value; struct node *pNext; }; 函數(shù)原型為: struct node *merge(struct node *a, struct node *b); 其中a,b為要?dú)w并的兩個(gè)單向鏈表頭節(jié)點(diǎn)指針,函數(shù)返回值為歸并后的單向鏈表頭節(jié)點(diǎn)指針。 struct node { int value struct node *pNext; } struct node *merge(struct node *a, struct node *b) { struct node *p; struct node *q struct node *t; if (a>value <=b>vaLue) { p=a; q=b } else { p=b q=a; } t=p; while (q) { if (p>pNext ==NULL) { P>Pnext=q break; } if (q>value<p>pNext>value) { struct node.*k=q>pNext; q>pNxt=p>pNext; p>pNext=q; q=k; continue; } p=p>pNext; } return t; } 三.編寫程序模擬數(shù)字LED顯示。(14分) 編寫程序完成如下功能:用戶鍵盤輸入最多四位的整數(shù),在屏幕上以類似LED方式顯示。如用戶輸入為: 8234 則輸出
其中每個(gè)數(shù)字字模均為7行×4列。09+個(gè)數(shù)字的字模順序地以文本形式存放在方件C:\font.txt中。 要求: 1、 輸出的各數(shù)字間有1個(gè)空格; 2、 你的程序可以使用C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),不需要寫出頭文件; 3、 程序中應(yīng)有必有的注釋。 char font[10][7][5]; 94 int n; 95 int digit[4]; 96 int length=0; 97 98/ * 裝載字體文件 */ 99 void load fontsO 100 { 101 int I, j, k; 102 FILE *file; 103 104 file = fopen(”c:\\font”,”r”); 105 if (file==NULL) 106 { 107 printf(” 打開字體文件 font. Txt 錯(cuò)誤|n”); 108 exit(1); 109 } 110 111 for (k = 0; k<10;k++) 112 { 113 for (I=0; I<7; I++) 114 { 115 char line[10]; 116 fgets(line, 5, file); 117 for (j=0; j<4;j++) 118 { 119 font[k][I][j]=line[j]; 120 } 121 font[k][I][4]=0; 122 } 123 } 124 125 fclose(file); 126 } 127 128/* 將輸入的整數(shù)解碼為單個(gè)的數(shù)字*/ 129 void decode() 130 { 131 int I; 132 int m=n; 133 for (I=0; I <4;I++) 134 { 135 digit[I]=m % 10; 136 m =m/10; 137 138 if (m==0) 139 break; 140 } 141 142 length = I + 1; 143 if (length >=4) 144 length=4; 145 } 146 147 /* 顯示LED */ 148 void disnlav() 149 { 150 int I,j; 151 for (I=0; I<7;I++) 152 { 153 for (j = lengthI; j>=0;j__) 154 { 155 printf(”%s”, font[j][I]); 156 printf(” ”); 157 } 158 printf(” \n”); 159 } 160 } 161 162 int main() 163 { 164 165 load fonts(); 166 167 scanf(”%d”, &n); 168 decode(); 169 display(); 170 }
C語(yǔ)言試題及答案的延伸閱讀——c語(yǔ)言學(xué)習(xí)體會(huì)
記得上次開班會(huì)的時(shí)候我吹牛說(shuō)要和你們一起學(xué)習(xí)c語(yǔ)言,不知不覺(jué)已經(jīng)快半個(gè)月拉。我得對(duì)自己的話負(fù)責(zé)。今天我把借來(lái)的教材看了看,以前真的是不了解,今天才知道它是貝爾實(shí)驗(yàn)室的設(shè)計(jì)師Dennis在1972年設(shè)計(jì)的。c語(yǔ)言是其他計(jì)算機(jī)語(yǔ)言的基礎(chǔ),其他的計(jì)算機(jī)語(yǔ)言都是在它的基礎(chǔ)上研發(fā)。所以學(xué)好c語(yǔ)言對(duì)于以后要在自動(dòng)化專業(yè)有所發(fā)展的同學(xué)是非常有好處的,尤其是將來(lái)的plc編程、電子產(chǎn)品設(shè)計(jì)等等,都需要用到c語(yǔ)言。 今天我學(xué)習(xí)了一個(gè)最最簡(jiǎn)單的程序,感覺(jué)十分有收獲,明白了它的最基本的道理——它也是一門語(yǔ)言,和我們的漢語(yǔ)是一樣的,它也有自己的語(yǔ)法、邏輯結(jié)構(gòu),只要是能真正的去理解它,還是很容易學(xué)會(huì)的。 今天學(xué)習(xí)的程序如下: #include #include main() { double x,s; printf("input number:\n"); scanf("%lf",&x); s=sin(x); printf("sine of %lf is %lf\n",x,s); } 這個(gè)的功能
C語(yǔ)言試題及答案之外的更多信息,請(qǐng)?jiān)L問(wèn): 《工總結(jié)大全》
|