c語(yǔ)言試題及答案
以下關(guān)于c語(yǔ)言試題及答案 分享給大家,歡迎閱讀借鑒。更多內(nèi)容請(qǐng)繼續(xù)關(guān)注unjs網(wǎng)。
c語(yǔ)言試題及答案
《C語(yǔ)言試題及答案》簡(jiǎn)介開(kāi)始: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)單介紹,正文正式開(kāi)始》》》
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è)字符是‘’
//是的,以字符指針指向的字符串才要求,因?yàn)橹挥羞@樣,才能知道字符串的長(zhǎng)度,而在字符數(shù)組中,不用,一樣可以知道到哪里是字符數(shù)組的結(jié)尾。
D、‘A’和“A”都是字符串常量
E、若char*S=“ a17bc”;則指針變量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(“ b=%x, x=%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 ”,++p>x); //>的優(yōu)先級(jí)高于++,因此等于是++(p>x),為11
printf(“%d ”,(++p)>x); //p后移一個(gè)元素,其x值為9;
printf(“%d ”,++(*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
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、‘ ’表示什么?
①字符串常數(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í)候,并不包含末尾的;
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
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 (“ ”);
﹜
//輸出結(jié)果
ABCDEFGHIJKL
剛好是字符串?dāng)?shù)組里面的前四個(gè)元素的內(nèi)容連接起來(lái)
2、下列程序?yàn)槭裁礋o(wú)法將用戶輸入的三個(gè)整數(shù)按從小到大排序輸出?應(yīng)該如何修改?(6分)
# include
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
union
﹛
int n;
char ch [2];
﹜u;
void main ()
﹛
int m;
scanf (“%d”,&m);
u.n = m;
printf (“ %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分
文件打開(kāi) 1分
文件讀 2分
排序 3分
文件寫 2分
文件關(guān)閉 1分
# include
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 ”);
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”, “ ”);
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 ', 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 ",*(a[1]+1));
// a[1]代表是第一行字符串Shanghai,加1后得值第一個(gè)字符h的地址,*取出其地址里的值h
printf("%c ",*(*(a+1)+2));
// *(a+i)=a[i] 代表是第一行字符串Shanghai,加2后得值第2個(gè)字符a的地址,*取出其地址里的值
printf("%c ",*(p1+1));
//p1是一字符指針,加一指向第零行第1個(gè)字符e的位置,*取出其地址里的值
printf("%c ",*(*(p2+1)+2));
//p2為一指向數(shù)組的指針,p2是與數(shù)組名等價(jià)的指針,它指向2維數(shù)組的首行,p2+1指針指向了第一行字串Shanghai,加2后得值第2個(gè)字符a的地址,*取出其地址里的值
printf("%s ",*(p1+1));
//打印的從第一個(gè)字符開(kāi)始的第零行余下的字符串eijing
printf("%s ",*(p2[2]);
//p2[2]指的是第二行,打印第二行字符串Chengdu
printf("%s ",*(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)題部分
〈/HEAD〉
這里是HTML文件的主體部分。
換新行。
〈/HTML〉
符號(hào)"<與">"及其之間的內(nèi)容是標(biāo)簽,如〈HTML〉,等。其它部分是標(biāo)題和主體。請(qǐng)按以下說(shuō)明和要求完成程序,將簡(jiǎn)單的HTML文件轉(zhuǎn)換為TXT文件:
1. 序?qū)⒑?jiǎn)單HTML文件的有標(biāo)簽和換行符( )(去掉。標(biāo)題部分結(jié)束(遇到標(biāo)簽)后加上一個(gè)換行符( )。每一個(gè)
標(biāo)簽換成一個(gè)換行符( )。其余部分原樣保留。如上面的簡(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)。如
,
,
等價(jià)。
4.示簽的"<和">"與標(biāo)簽內(nèi)容間無(wú)空格。即不會(huì)出現(xiàn)
或< 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ú)法打開(kāi)文件等。
8.程序不需要包含頭文件。
1、main()函數(shù)形參處理:2分。
2、變量定義1分。
3、打開(kāi)關(guān)閉文件2分;
4、讀源文件1分;
5、能從標(biāo)簽中找出內(nèi)容〈BR〉〈/TITLE〉換為' '部分2分;
6、區(qū)分開(kāi)標(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(“打不開(kāi)源文件”);
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(‘ ’,fout);
break;
case ' ':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 "、a、b、*p、*q;
}
//因?yàn)樵趕wap函數(shù)里交換的是兩個(gè)參數(shù)的地址,所以參數(shù)使用的是兩級(jí)指針,表示交換的是指針的地址,最終使p指向了b,q指向了a。
1,3,3,1
2.
# include
void merge (char *d、char sl、char、S2)
{ while (*sl!='' && *S2!='')
if (*sl<*s2)
d++=*sl++;
else
d++=*s2++;
while (*sl!=') *d++=sl++;
while (*s2!='') *d++=s2++;
*d='',
}
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='';
while (*s)
{ if (c==*s)
tmpe++;
else
{ c=*s;
temp=1;
}
if (max
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)站和離開(kāi)本站時(shí)間。前三個(gè)數(shù)據(jù)項(xiàng)留的寬度為8字符,最后一項(xiàng)結(jié)束后即換行。數(shù)據(jù)項(xiàng)間一定有空格隔開(kāi),每一數(shù)據(jù)項(xiàng)內(nèi)無(wú)空格。
2.你的程序?qū)τ脩敉ㄟ^(guò)命令行參數(shù)指一的車次,在客車車次數(shù)據(jù)文件中查找相應(yīng)車次信息并輸出該次車的始發(fā)站,終點(diǎn)站和離開(kāi)本站時(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ù)不正確! ");
return 1;
}
fp=fopen ("c:checi. txt ","r");
if (fp==NULL)
{ printf ("無(wú)法打開(kāi)數(shù)據(jù)文件! ");
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 ",info [1]);
printf("始發(fā)站:%s ",info [2]);
printf("離本站時(shí)間:%s ",info [3]);
break;
}
}
if (! found )
printf("找不到該次車信息! ");
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
//!的運(yùn)算符最高,<其次,&&最小原式理解為((!b)
二、下面的程序構(gòu)造一個(gè)有向圖,請(qǐng)畫(huà)出其示意圖。(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é)束符‘’不比較)。
例如,若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”后開(kāi)始,遇到“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)
}
/*打開(kāi)編碼文件以及待解碼文件*/
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 ", 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
{
for (i=0; i<3; i++)
{
buffer [i] = p [i];
}
buffer [i] ='';
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
int main( )
{ int a=4,b=3,c=1,x;
x=a>b;
printf(“%d ”,x);
//結(jié)果為1
x=a+b++;
printf(”%d ”,x);
//結(jié)果為6
x=a>b;
printf(”%d ”,x);
//結(jié)果為假,0
x=c&&b==c;
printf(”%d ”,x);
//==的運(yùn)算級(jí)高于&&, c&&(b==c)結(jié)果為假0
return0;
}
2.
#include
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( ”);
}
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
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(” 打開(kāi)字體文件 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(” ”);
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ì)
記得上次開(kāi)班會(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: ");
scanf("%lf",&x);
s=sin(x);
printf("sine of %lf is %lf ",x,s);
}
這個(gè)的功能
[c語(yǔ)言試題及答案]
【c語(yǔ)言試題及答案】相關(guān)文章:
c語(yǔ)言筆試題目及答案09-13
C語(yǔ)言筆試題目及答案08-12
c語(yǔ)言面試題及答案(2)10-11
12個(gè)常見(jiàn)C語(yǔ)言面試題及答案(3)07-22
12個(gè)常見(jiàn)C語(yǔ)言面試題及答案(2)08-07
關(guān)于C語(yǔ)言游戲開(kāi)發(fā)筆試題11-02
職稱英語(yǔ)綜合C試題真題(含答案)05-16