當前位置:學問谷 >

個人範例 >求職 >

c語言試題及答案

c語言試題及答案

以下關於c語言試題及答案 分享給大家,歡迎閲讀借鑑。更多內容請繼續關注pincai網。

c語言試題及答案

c語言試題及答案

《C語言試題及答案》簡介開始:C語言部分一、選擇題(每小題2分,共10分)(下在各小題,分別有一個或多個正確答案,請將所有正確答案的編號,填寫在該小題題幹後的括號內。錯選或漏選均不得分)。1、若定義:inta[2][3]{0,2,4,6,8,10};以下描述正確的有(A,C,D,E)A、*(a+1)為元素6的地址這裏a+1a[1]的地址;*(a+1)的。。此內容文章屬於《考試資料》欄目,以上內容為《C語言試題及答案2011-6-6 19:22:09》簡單介紹,正文正式開始》》》

C語言部分

一、選擇題(每小題2分,共10分)

(下在各小題,分別有一個或多個正確答案,請將所有正確答案的編號,填寫在該小題題幹後的括號內。錯選或漏選均不得分)。

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是一個指針,指向的是a[1]. *(a+1)為a[1],a[1]指向的是a[1][0]. **(a+1)為6,加2得8,故C正確;

D、a[0]與a相同

因二者都是指針,指針的地址都是指向數組中的第一個元素的地址,故D正確。

E、a[1][2]的值為10

它是指第二行的第三個元素,為10,正確

2、對函數的正確使用方法描述( A,C,D )。

A、用數組做函數參數時,必須在主調函數和被調函數中分別定義數組

B、實參數組元素和形參數組元素類型可以不一致

C、形參數組長度可以不指定 D、形參數組長度可以大於實參數組長度

E、數組名做參數屬於值傳遞

3、對靜態變量的正確描述( A,B,D,E )

A、靜態局部變量在靜態存儲區內分配單元( )

B、靜態外部變量可以賦初值,也可以不賦初值

C、靜態外部變量的作用與外部變量相同

D、靜態局部變量在函數調用結束時,仍保存其值,不會隨着消失。

E、靜態局部變量只賦一次初值

4、下列描述正確的是( A ,C)。

A、由main 函數及其參數argc和* argv[]可以實現命令行方式

B、使用fclose關閉文件時,先釋放文件指針,再寫緩衝區數據到文件中

//先寫緩衝區數據到文件中,再釋放文件指針

C、字符數組並不要求它的最後一個字符是‘’

//是的,以字符指針指向的字符串才要求,因為只有這樣,才能知道字符串的長度,而在字符數組中,不用,一樣可以知道到哪裏是字符數組的結尾。

D、‘A’和“A”都是字符串常量

E、若char*S=“ a17bc”;則指針變量S指向的字符串所佔的字節數是7

5、在緩衝文件系統中用於讀寫的函數有( A,B,D )

A、putchar () B、fread() C、rewind () D、purw() E、fseek()

二、程序閲讀,並給出運行結果(共10分,每題5分)。

(1)main()

{ unsigned a,b,x

int n;

a=0x763 輸出結果:

n=6;

b=a<<(12n);

x=(a>>n2)^b; //+,,的優先級比<<,>>高。

printf(“b=%x,x=%x”,b,x);

在用2個字節表示整數的系統中

結果為

d8c0

d8b6

在用4個字節表示整數的系統中

結果為

1d8c0

1d8b6

故以上兩種結果都正確。

(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; 輸出結果:

printf(“%d”,++p>x); //>的優先級高於++,因此等於是++(p>x),為11

printf(“%d”,(++p)>x); //p後移一個元素,其x值為9;

printf(“%d”,++(*p>y));

//>的優先級高於*, 此時p已指向b[1],故*(p>y)為a[3]為100.自加後為101;

故輸出結果為:

11

9

101

三、程序設計(共10分)

設在文件和文件中分別存有兩個字符串,設計一個程序將這兩個字符串按依序交叉的方式合併為一個字符串(例如“aaaaa”與“bbb”的合併結果為“abababaa”,而“bbb”與“aaaaa”的合作結果為“ bababaa”,)並將結果存入文件中。

【答案】

寫程序時,可以分別讀取文件和文件,注意(1),無論a文件先讀完還是b文件先讀完,程序都能作出適應性的判斷。注意(2)把a和b合併的結果,寫到一個臨時文件c中,最後把c的文件覆蓋到a文件中,達到題意的要求。

#include

main()

{

FILE *fp,*fq,*fr;

char ch;

if((fp=fopen("","r+"))==NULL)

{ printf("cannot open file ");

exit(0);

}

if((fq=fopen("","r"))==NULL)

{ printf("cannot open file ");

exit(0);

}

fr=fopen("","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 四川大學2001年攻讀碩士學位研究生入學考試試題 及 答案

1.2.1第2001年??C語言程序設計 題目

一、單項選擇題(在每小題的四個備選答案中,選出一個正確的答案,並將其號碼寫在答題紙上。請注意註明題號。每小題1分,共計6分)

1、‘ ’表示什麼?

①字符串常數 ②標識符 ③變量 ④字符常量

答案:④

2、對宏定義不正確的描述是哪一個?

①在進行宏定義時,可以引用已經定義的宏名,可以層層置換

//可以引用已經定義了的宏名,可以層層置換

②宏名的有效範圍包括本文件的任何位置

//宏名的有效範圍定義命令之後到本源文件結束,可以用#define終止宏定義的作用域

③寵定義不是語句,不必在行末加分號

//是預處理定義語句

④對程序中雙引號括起來的字符串,即使與宏名相同,也不進行置換

3、若定義static char s[20]=”computer”;則執行語句x = strlen(s);之後,x的值為多少?

①20 ②9 ③8 ④19

//strlen函數計算char*型字符串的長度的時候,並不包含末尾的;

4、以下哪一個表達式取值是正確的?

①6>5結果為6 ②6&&5結果為7

③6||5結果為7 ④6<5結果為0

5、如定義

enum weekday {one, two, thr, fou, fiv};

enum weekday working;

以下哪個是不正確的枚舉變量的使用?

①working = thr; ②working =2;

③working = (enum weekday)2;

④working = (enum weekday) (53);

//不能對其賦值

6、下列説法中正確的是哪一個?

①sizeof (char) 是結果為整型的表達式

②sizeof (char) 是一個不合法的表示形式

③sizeof (char) 是一種函數調用

④sizeof (char) 是結果為實型的表達式

二、閲讀程序,並回答問題(共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 (“”);

?

//輸出結果

ABCDEFGHIJKL

剛好是字符串數組裏面的前四個元素的內容連接起來

2、下列程序為什麼無法將用户輸入的三個整數按從小到大排序輸出?應該如何修改?(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);

?

//函數swap採用值傳遞,雖然將形參x和y交換了,但是並不影響到實參。將值傳遞改成指針傳遞就可以了。

C函數參數採用值傳遞方式,雖然swap函數將形式參數x和y的值進行了調換,但是影響不到相應的實在參數。所以在主函數中,通過調用sawp函數調換a和b(或a或c,或b和c)的值是根本達不到目的的。

修改:

(1)(2分)

void swap (int *x, int*y)

?

int t = *x;

*x = *y;

*y = t;

?

(2)(2分)主函數

if(a>b) swap(&a,&b);

if(a>c) swap(&a,&c);

if(b>c) swap(&b,&c);

3、假設系統為基本整型量分配2個字節,為字符型量分配1個字節。下列程序完成的功能是什麼?(3分)

# include

union

?

int n;

char ch [2];

?u;

void main ()

?

int m;

scanf (“%d”,&m);

u.n = m;

printf (“%u, %u”,[0], [1]);

?

//該程序的功能,取用户輸入的整數值的高字節和低字節,並按照任意整數的低字節和高字節分別輸出。

三、程序設計題(12分)

假設一個文本文件中保存着100個整數,請將這100個整數按從小到大的順序寫到另一個文本文件中去,並且在新文件中每10個整數佔一行。源文件名和目標文件名通過命令行參數獲取。

分數分配:

變量定義 2分

命令行參數處理 1分

文件打開 1分

文件讀 2分

排序 3分

文件寫 2分

文件關閉 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 四川大學2002年攻讀碩士學位研究生入學考試試題 及 答案

1.3.1 第2002年??C語言題目

C語言程序設計(共30分)

一、單項選擇題(在每小題的四個備選答案中,選出一個正確答案。每小題1分,共6分)

1、如果I為整型變量,f為float型變量,c表達式'a'+I*f的類型為 。

A、字符型 B、整型 C、單精度型 D、雙精度型

//即使是兩個float型的數據相加,都化成double型 float型的數據在運算時一律轉化成雙精度型,提高其運算精度

2、關於c表達式5||(a=b+c)==3的值,正確的説法為 。

A、值為1 B、值為5 C、值為0

D、僅這一個表達式,不能確定值,必須知道a,b,c的值後才能計算。

//等號==的優先級高於||所以先計算(a=b+c)==3但是不論它為真或假,在與5進行或運算時,按照或運算的法則,只要一方為真,表達式的結果為真。

3、若整型變量a的值為50,則c表達式a>>2的值為 。

A、50 B、25 C、12.5 D、12

//每右移一位除以2,且由於a為整型,結果為整型

4、若c,c1,c2均為字符型變量,下列語句執行後。

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 語句執行後,

int i, s=0;

for (i=0;i<10;i++)s+=i;

printf ('%d', i);

輸出的內容為 。

A、0 B、9 C、10 D、11

//i值在循環外定義,所以其值循環結束仍有意義,得值10

6、以下c語句執行後,

char s1[100] =″I like C 1anguage″,s2[100];

strcpy(s2, s1);

strcat (s1, s2);

puts (s2);

輸出的內容為 。

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裏,對s2沒有影響

二、閲讀程序,寫出該程序的執行結果。(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後得值第一個字符h的地址,*取出其地址裏的值h

printf("%c",*(*(a+1)+2));

// *(a+i)=a[i] 代表是第一行字符串Shanghai,加2後得值第2個字符a的.地址,*取出其地址裏的值

printf("%c",*(p1+1));

//p1是一字符指針,加一指向第零行第1個字符e的位置,*取出其地址裏的值

printf("%c",*(*(p2+1)+2));

//p2為一指向數組的指針,p2是與數組名等價的指針,它指向2維數組的首行,p2+1指針指向了第一行字串Shanghai,加2後得值第2個字符a的地址,*取出其地址裏的值

printf("%s",*(p1+1));

//打印的從第一個字符開始的第零行餘下的字符串eijing

printf("%s",*(p2[2]);

//p2[2]指的是第二行,打印第二行字符串Chengdu

printf("%s",*(p2+1));

//p2+1指向的是第一行字符串shanghai

三、按要求編寫函數。(8分)

在一程序中定義瞭如下結構類型用於處理單向鏈表:

struct linkage {

int value;

struct linkage *pNext;

};

現已經編寫出按節點的成員a值從小到大建立初始鏈表的函數

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;

在該函數的for循環前,pHead為NULL;在執行整個for循環後,創建的鏈表如下所示:

即在被調函數addItem( )中,需要動態分配內存,生成新節點,將傳入的第二參數的值賦給該節點的成員value:並通過第一個參數鏈表首節點確定適當位置放置該新節點。

請完成函數:

struct linkage * addItem (struct linkage *pHead, int value );

返回值指向單向鏈表頭節點。

你可能用到下面的動態內存分配函數。

void* malloc (unsigned int size);其作用是在內存的動態存儲區中分配一個長度為size的連續空間。返回值為指向分配域起始地址的指針。

1、在空鏈表中加第一個節點2分;

2、加到當前鏈表頭節點前2分;

3、加到當前鏈表頭節之後適當位置,可分為兩步。2分;

4、其它部分2分,包括整體結構,變量定義,返回值。

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;

四、程序設計。(12分)

單位HTML文件由標籤,標題和正文主體等部分組成。如下所示:

〈HTML〉

〈HEAD〉

〈TITLE〉HTML標題部分

〈/HEAD〉

這裏是HTML文件的主體部分。

換新行。

〈/HTML〉

符號"<與">"及其之間的內容是標籤,如〈HTML〉,等。其它部分是標題和主體。請按以下説明和要求完成程序,將簡單的HTML文件轉換為TXT文件:

1. 序將簡單HTML文件的有標籤和換行符()(去掉。標題部分結束(遇到標籤)後加上一個換行符()。每一個

標籤換成一個換行符()。其餘部分原樣保留。如上面的簡單HTML文件處理為(?表示換行):

HTML標題部分?

這裏是HTML文件的主體部分。?

換新行。

2.簡單HTML文件的標籤內沒有嵌套情況,即在"<和">"這間不會再出現"<或">"。

3.標籤內的內容大小寫無關。如

,

,

等價。

4.示籤的"<和">"與標籤內容間無空格。即不會出現

或< BR>等情況。

5.標題和正文中不會出現"<和">"字符,它們通過轉義字符實現,這時尤需考慮。

6.程序需要處理命令行參數。第一個參數指要處理的HTML文件名,第二個參數指定處理後要存放的文件名。這兩個文件都是文本文件。

7.程序必須進行必要的出錯處理,如無法打開文件等。

8.程序不需要包含頭文件。

1、main()函數形參處理:2分。

2、變量定義1分。

3、打開關閉文件2分;

4、讀源文件1分;

5、能從標籤中找出內容〈BR〉〈/TITLE〉換為''部分2分;

6、區分開標籤和其它部分,並按要求寫入目標文件2分;

7、整體結構正確2分;

void main (int argc, char *argv[])

{ char C,tag[7];

int status ,len ;

FILE*fin,*fout;

if (argc!=3)

{ printf("參數個數不對!")

exit (1)

if ((fin=fopen (argv [1],"r")))==NULL)

{

printf(“打不開源文件”);

exit(1);

}

if ((fout=fopen (argv [2],"w")))==NULL)

{

printf("無法寫入文件!");

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 四川大學2003年攻讀碩士學位研究生入學考試試題及 答案

1.4.1 第2003年??C語言題目

C語言程序設計(40分)

一、分析下面的 程序,寫出程序執行結果。(每小題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;

}

//因為在swap函數裏交換的是兩個參數的地址,所以參數使用的是兩級指針,表示交換的是指針的地址,最終使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)

}

//將兩個字符串合為一個按照字母順序排列的串

abccdfghhi

二、按要求完成C函數。(每小題10分,共20分)

maxsameChar(char *s);

該函數計算字符串 s中最大連續相同的字符個數。例如,若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;

};

此函數傳入的pHead指向要處理的單向鏈表頭,該鏈表以NULL指針結束。函數實現鏈表鏈接方向(包括pHead 指向的原頭節點)的反轉,如圖1所示。並將新鏈表頭指針作為函數值返回。在完成此函數時,你只能利用原有鏈表節點,不能申請新節點空間。

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;

三、按要求完成簡單的客車車次查詢程序。(12分)

某車站需要一個簡單的客車車次查詢程序。説明如下:

1. 客車車次數據文件放在c:data目錄下,格式為:

T8 成都 北京西 09:30

1364 成都 北京西 14:20

K118 攀枝花 北京西 22:00

… … …

其中每行為一次車的信息,分為4個數據項:車次,始發站,終點站和離開本站時間。前三個數據項留的寬度為8字符,最後一項結束後即換行。數據項間一定有空格隔開,每一數據項內無空格。

2.你的程序對用户通過命令行參數指一的車次,在客車車次數據文件中查找相應車次信息並輸出該次車的始發站,終點站和離開本站時間,如果未找到,則輸出“找不到該次車信息!”。

3.你的程序可以使用標準的C庫函數,可以不引用文件。程序中應給出必要的註釋。

int main (int argc, char *argv [ ])

{ char info [4] [20];

FILE * fp;

int I,found=0;

if (argc!=2)

{ printf("參數個數不正確!");

return 1;

fp=fopen ("c:checi. txt ","r");

if (fp==NULL)

{ printf ("無法打開數據文件!");

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("始發站:%s",info [1]);

printf("始發站:%s",info [2]);

printf("離本站時間:%s",info [3]);

break;

if (! found )

printf("找不到該次車信息!");

return 0;

1.5 四川大學2004年攻讀碩士學位研究生入學考試試題及 答案

1.5.1 第2004年??C語言題目

C語言程序設計(40分)

一、寫出下列表達運算後a的值,設a,b 均為 int ,每個表達式運算到a=2,b=3。(5分)

(1) a+=b*5

//a=a+b*5,為17

(2) a=b++

//a=3

(3) a%=(a%=b)

//結果為0

(4) a=a>b&&b>a||a

//>的優先級高於&&和||原式理解為(a>b)&&(b>a)||a

&&運算符高於||,原式理解為((a>b)&&(b>a))||a,因為a值為2,結果為1真。或運算是有一為1

(5) a=!b

//!的運算符最高,<其次,&&最小原式理解為((!b)

二、下面的程序構造一個有向圖,請畫出其示意圖。(10分)

include 〈stdio.h〉

struct node /*有向圖的節點類型*/

{ 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]=i;

nodes [i]=NULL;

nodes [i]t=NULL;

nodes [i]=NULL;

nodes [i]=NULL;

nodes [0]=nodes+1;

nodes [1]=nodes;

nodes [1]=nodes+2;

nodes [2]=nodes+3;

nodes [3]t=nodes+4;

nodes [4]=nodes;

nodes [4]=nodes+1;

return 0;

三、按要求完成函數。(10分)

int sameChar sAT SamePos (char *s1,char *s2);

兩個字符串的字符進行同位置比較,返回相同的字符數(串結束符‘’不比較)。

例如,若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;

四、按要求編寫程序對一種特殊字符串解碼。(15分)

要處理的特殊字符串由A,C,G,U四個字符組成,如下所示:

ACUGCCCAUGAAAAACUUUUGACAC

其有效信息子串從第一次出現“AUG”後開始,遇到“UGA”結束(不包括“AUG”和“UGA”。)如上面的編碼串需解碼的有效子串為:

AAAAACUUU

有效子串中每3個字符(如“AAA”,“CGA”)作為一個密碼子(可以保證,有效子串的長度一定為3的整數倍。)可能的密碼子(62種)及相應碼值以如下形式放在編碼文件中(按密碼子字典序排列);

AAA K

AAC N

…………

UUU F

請編寫C程序對存放在文件中的特殊字符串解碼,在屏幕輸出解碼串。如:KNF

KNE

要求:

1、編碼文件放在c盤根目錄下;

2、要解碼的特殊字符串以文件形式存放,其串長不超過1024字符;

3、你編寫的程序應能處理命令參數,指定要解碼的字符串文件;

4、程序中可以使用C語言的標準庫函數,不需要寫出頭文件;

5、程序中應有必有的註釋。

#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;

/* 檢查命令行參數*/

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;

/* 讀編碼文件,將結果記入表中 */

for (i=0; i<62; i++)

{

fscanf(code_file, "%s %c", tabie[i], name, &table[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])) = = 0)

{

printf("%c", table[i]. code);

break;

}

}

}

/* 關閉編碼文件以及待解碼文件 */

fclose (code_file);

fclose (string_file);

return 0;

}

1.6 四川大學2011年攻讀碩士學位研究生入學考試試題及 答案

1.6.1 第2011年??C語言題目

C語言程序設計(50分)

一、 讀程序,寫執行結果(8分)

1、

#include

int main( )

{ int a=4,b=3,c=1,x;

x=a>b;

printf(“%d”,x);

//結果為1

x=a+b++;

printf(”%d”,x);

//結果為6

x=a>b;

printf(”%d”,x);

//結果為假,0

x=c&&b==c;

printf(”%d”,x);

//==的運算級高於&&, c&&(b==c)結果為假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;

}

++++*

+++***

++*****

+*******

二.按要求完成函數。(28分)

1. 一種最簡單的字符串加密方法是將字符串的每一字符加上一個偏移量offset(不考慮溢出)。請編寫木相應的編解碼函

數,其原型分別為:

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編寫函數將兩個節點值遞增的單向鏈表歸併為一個。要求利用原節點空間。鏈表節點定義為:

struct node

{ int value;

struct node *pNext;

};

函數原型為:

struct node *merge(struct node *a, struct node *b);

其中a,b為要歸併的兩個單向鏈表頭節點指針,函數返回值為歸併後的單向鏈表頭節點指針。

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;

}

三.編寫程序模擬數字LED顯示。(14分)

編寫程序完成如下功能:用户鍵盤輸入最多四位的整數,在屏幕上以類似LED方式顯示。如用户輸入為:

8234

則輸出

其中每個數字字模均為7行×4列。09+個數字的字模順序地以文本形式存放在方件C:中。

要求:

1、 輸出的各數字間有1個空格;

2、 你的程序可以使用C語言標準庫函數,不需要寫出頭文件;

3、 程序中應有必有的註釋。

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 錯誤|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/* 將輸入的整數解碼為單個的數字*/

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語言試題及答案的延伸閲讀——c語言學習體會

記得上次開班會的時候我吹牛説要和你們一起學習c語言,不知不覺已經快半個月拉。我得對自己的話負責。今天我把借來的教材看了看,以前真的是不瞭解,今天才知道它是貝爾實驗室的設計師Dennis在1972年設計的。c語言是其他計算機語言的基礎,其他的計算機語言都是在它的基礎上研發。所以學好c語言對於以後要在自動化專業有所發展的同學是非常有好處的,尤其是將來的plc編程、電子產品設計等等,都需要用到c語言。

今天我學習了一個最最簡單的程序,感覺十分有收穫,明白了它的最基本的道理——它也是一門語言,和我們的漢語是一樣的,它也有自己的語法、邏輯結構,只要是能真正的去理解它,還是很容易學會的。

今天學習的程序如下:

#include

#include

main()

{

double x,s;

printf("input number:");

scanf("%lf",&x);

s=sin(x);

printf("sine of %lf is %lf",x,s);

}

這個的功能

標籤: 試題 語言
  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flgr/qiuzhi/14gj7.html