亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

推薦文檔列表

高級語言程序設(shè)計(jì)考試心得

時(shí)間:2021-10-05 16:36:30 復(fù)習(xí)指導(dǎo) 我要投稿

高級語言程序設(shè)計(jì)考試心得

  由于自學(xué)考試的社會(huì)性,為了體現(xiàn)公正和公平,試題不能像本科院校中常見的那樣重復(fù)使用。自學(xué)考試的試卷內(nèi)容有廣泛且分散的特點(diǎn),這要求考生必須全面地復(fù)習(xí)教材的內(nèi)容。

高級語言程序設(shè)計(jì)考試心得

  1.單項(xiàng)選擇題

  試題中的單項(xiàng)選擇題中的多數(shù)試題涉及整本教材介紹的概念和知識(shí)點(diǎn)。為解答這類試題,要求考生要熟練地掌握和熟記大綱中指出的“識(shí)記”和“領(lǐng)會(huì)”的內(nèi)容。考生應(yīng)摘出教材中有關(guān)C語言的重要概念、定義、有關(guān)語言成分性質(zhì)的敘述,對它們深入的理解和熟記,并對語言的一些基本規(guī)定能作簡單的應(yīng)用。清考生注意,理解、熟記和大段地背誦的區(qū)別。由于考題表現(xiàn)形式的多樣性,理解是最重要的,僅對關(guān)鍵性的概念才有準(zhǔn)確熟記的必要,多數(shù)的概念因是理解,并要求能熟練應(yīng)用。試題通常要求對某個(gè)概念、術(shù)語或計(jì)算結(jié)果作出判斷,或?qū)σ恍┮?guī)定作簡單的應(yīng)用等。由于計(jì)算機(jī)科學(xué)是一門新興學(xué)科,許多概念還沒有唯一性的定義,不同書籍由于出發(fā)點(diǎn)或論述領(lǐng)域不同,同一概念會(huì)有不同的說法,為此考生在復(fù)習(xí)迎考時(shí),不要脫離指定自學(xué)考試教材,而從其它教材出發(fā)進(jìn)行復(fù)習(xí)。

  「例1」設(shè)有以下代碼定義字符數(shù)組c和字符指針變量pc:

  char c[10]=“abed”,*pc=c;

  問*(pc+4)的值。供選擇的答案有:

 、佟癮bcd‘   ②'\0'    ③ ' d'         ④不能確定

  上述代碼使字符數(shù)組c的前5個(gè)元素依次為:c[0]=‘a(chǎn)’c[1]=‘b’, c[2]=‘c’, c[3]= ‘d',c[4]=’\0‘。初始化pc=c使字符指針變量pc指向c數(shù)組的首元素c[0].而表達(dá)式pc+4的值是c[4]的指針。因此,表達(dá)式*(pc+4)就是引用c[4].所以問題的解答為②。

  「例2」指出下列說法中錯(cuò)誤的敘述。

 、贅(gòu)成數(shù)組的所有元素的數(shù)據(jù)類型必須是相同的

  ②用指針法引用數(shù)組元素允許數(shù)組元素的下標(biāo)越界

 、垡痪S數(shù)組元素的下標(biāo)為1,2,3,……

 、芏x數(shù)組時(shí)的長度可以是整型常量表達(dá)式

  由數(shù)組的概念知,數(shù)組的全部元素有相同的數(shù)據(jù)類型,另在定義數(shù)組時(shí),需指出數(shù)組的元素個(gè)數(shù),指定數(shù)組元素個(gè)數(shù)的表達(dá)式必須在編譯時(shí)可計(jì)算的,即只允許是常量表達(dá)式,不可以含有變量。所以①和④是正確的敘述,不是問題要求的解答。在C語言中,當(dāng)指針指向數(shù)組的某元素(不一定是數(shù)組的首元素)時(shí),可利用該指針加減一個(gè)整表達(dá)式,構(gòu)成指針表達(dá)式指向數(shù)組的某元素,然后用取內(nèi)容運(yùn)算符。間接引用指針表達(dá)式所指的數(shù)組元素。如有代碼:

  int a[100],* P;

  表達(dá)式p=&a「20]使p指向a[20],,通過p引用數(shù)組a[l],可用表達(dá)式*(p-19)。由C語言的約定,當(dāng)指針指向數(shù)組某元素時(shí),用指針表達(dá)式引用它所指的數(shù)組的某元素也可寫成等價(jià)的下標(biāo)引用形式,如表達(dá)式*(p-9)可以等價(jià)地寫成p[-19].這里-19是一個(gè)負(fù)整數(shù),所以敘述②也是一個(gè)正確敘述。這種表示方法是借用下標(biāo)表示法,與指針加減的整表達(dá)式引用數(shù)組元素,其中加減的整數(shù)實(shí)際不是數(shù)組元素的下標(biāo)。還需要指出一點(diǎn),指針與整表達(dá)式和的新指針不應(yīng)該指向數(shù)組之外的別的地址。如前述的例子中指針變量p指向a[20],表達(dá)式*(p+n)中的 n要求不能小于 20,也不能大于 79.最后,C語言規(guī)定數(shù)組元素的下標(biāo)從0開始順序編號,所以選擇③才是錯(cuò)誤的敘述。

  2.填充題

  填充題要考核的內(nèi)容與選擇題的考核內(nèi)容基本相同,但考核的形式不同。填充題的試題多數(shù)是從基本概念兒語言關(guān)于數(shù)據(jù)類型、程序?qū)ο、程序結(jié)構(gòu)等的規(guī)定、C程序設(shè)計(jì)基本技巧等引伸的具體應(yīng)用。如C語言規(guī)定每個(gè)字符占一個(gè)字節(jié),每個(gè)字符串除存儲(chǔ)它所包含的字符外,在字符串最后一個(gè)字符之后還存有一個(gè)字符串結(jié)束符。對于這樣兩個(gè)基本概念和規(guī)定,填充題可能是問具體的一個(gè)字符和一個(gè)字符串各占多少個(gè)字節(jié)等。因填充題是概念或規(guī)定的具體應(yīng)用,解答的難度也就比選擇題的要大,不可能有猜得分的機(jī)會(huì)。

  「例3」下列函數(shù)的功能是統(tǒng)計(jì)并返回形參指針S所指向的字符串所含字符‘A’的個(gè)數(shù)。試完成程序,寫出應(yīng)填寫在程序空框中的代碼。

  int counts(char *s)

  { int n;

  for( n=0;。 ; s++)

  if(*s==‘A’)n++;

  return n;

  }

  為統(tǒng)計(jì)字符指針s所指字符串包含的某字符的出現(xiàn)次數(shù),必須用一個(gè)循環(huán)順序考察整個(gè)字符串。由從指針s所指字符串的首字符開始,每考察一個(gè)字符后,指針s后移一個(gè)字符位置,考察循環(huán)直至字符率結(jié)束終止。所以填寫在空框中的正確代碼可寫成* S! =‘\ 0’。由于字符串束符‘\ 0’的代碼為 8位全0,其值為 0,正確解答也可寫成* S。 0,或更簡潔地寫成*s.

  「例4」在內(nèi)存中存儲(chǔ)‘A’要占用____字節(jié),存儲(chǔ)“A”又要占用____字節(jié)。

  由于C語言規(guī)定字符只占1個(gè)字節(jié),一個(gè)具體的字符當(dāng)然也只占1個(gè)字節(jié)。字符串“A”要有1個(gè)字節(jié)用于存儲(chǔ)字符‘A’,另需要1個(gè)字節(jié)存儲(chǔ)字符串的結(jié)束符,所以它要占用連續(xù)的2個(gè)字節(jié)。

  「例5」設(shè)整型變量a、b的值均為3,執(zhí)行語句:

  b= a++, b++, ++a;

  后,a的值為____,b的值為____.

  該試題的表達(dá)式書寫形式一般不會(huì)直接出現(xiàn)在實(shí)際應(yīng)用程序中,但作為考核考生對有關(guān)表達(dá)式的計(jì)算規(guī)則,也不失為是一個(gè)很有意義的試題。賦值表達(dá)式自右至左計(jì)算,而逗號運(yùn)算符的優(yōu)先級最低,并且逗號表達(dá)式自左至右逐一計(jì)算,并以最后子表達(dá)式的值為逗號表達(dá)式的結(jié)果。上述表達(dá)式的計(jì)算順序可用以下3個(gè)表達(dá)式語句等價(jià)表示:

  b=a++;b++;++a;

  由以上一系列表達(dá)式知,變量b的最終值與其原來值無關(guān),表達(dá)式b= a+十是先計(jì)算a++。表達(dá)式a+十的值是變量a的原先值3,但又讓變量a增1后變?yōu)?.然后表達(dá)式b++又使變量b增1,變成4.而計(jì)算++a的值,是讓a增1,使a的值變?yōu)?.所以上述表達(dá)式使變量a的值變?yōu)?,b的值變?yōu)?.

  如上述表達(dá)式改寫為:

  b+=(a++,b++,++a);

  請讀者回答執(zhí)行該表達(dá)式后,變量a和b的值又分別為多少。

  3.程序分析題

  程序分析題要求考生閱讀程序,回答程序的輸出結(jié)果,或指出程序的功能;卮疬@類問題,要求考生將自己當(dāng)作一臺(tái)假想的計(jì)算機(jī),模擬執(zhí)行序。

  對于這類試題常有兩種可用的方法。一是從程序的初值、循環(huán)結(jié)構(gòu)、條件等發(fā)現(xiàn)程序的規(guī)律廠是完全從模擬執(zhí)行出發(fā)讀程序,求出程序的輸出結(jié)果。如采用后一種方法,由于程序執(zhí)行的動(dòng)態(tài)性,程序中的有關(guān)變量,隨著程序的執(zhí)行,變量的值就會(huì)不斷變化。一般來說,隨時(shí)記住全部變量的當(dāng)前值是非常困難的。一個(gè)行之有效的方法是用一個(gè)變量表,將程序中的全部變量羅列在該表中,某個(gè)變量值的變化記錄在該變量當(dāng)前值的欄中,這樣就能方便地列出各個(gè)變量的動(dòng)態(tài)變化過程。在這里,考生要當(dāng)心函數(shù)形參及函數(shù)的局部變量與實(shí)參變量及程序的外部全局變量同名的情況。為了區(qū)別它們,對于函數(shù)形參和局部變量可以標(biāo)上它所屬的函數(shù)名,以與同名的實(shí)參變量及外部全局變量相區(qū)別。由于試題程序總是完成某種有一定意義的計(jì)算工作。一般來說,程序的執(zhí)行過程舍有某種規(guī)律存在。如能找出程序的規(guī)律,就不需要逐句閱讀程序的語句,能直接導(dǎo)出程序的結(jié)果。程序的規(guī)律從以下幾個(gè)方面著手:有關(guān)變量的初值,特別是數(shù)組的初值;程序的循環(huán)控制結(jié)構(gòu),特別是遍歷數(shù)組的循環(huán),它的循環(huán)控制變量將控制數(shù)組元素下標(biāo)的變化;循環(huán)體中的語句的條件,一般條件有兩種形式,一種是由數(shù)組元素值的大小描述,另一種是由元素的下標(biāo)值描述,前者用于對其值滿足某種條件的元素進(jìn)行指定的計(jì)算,后者用于對滿足條件的某些位置上的元素進(jìn)行指定的計(jì)算。

  最容易出題,變化也最多的是數(shù)組(包括字符串)處理程序,正確解答這類試題要熟練掌握兩點(diǎn):一是引用數(shù)組元素的兩個(gè)等價(jià)方法,即用數(shù)組首元素指針(數(shù)組名)和下標(biāo)引用數(shù)組元素,及通過指向數(shù)組元素的指針間接引用數(shù)組的元素;二是一些常用的簡單算法,如數(shù)組或字符串遍歷、插入元素或刪除元素,以及常用的排序方法等。對于文件處理程序,要注意文件當(dāng)前的讀/寫位置,即對于讀文件,注意當(dāng)前讀人的數(shù)據(jù)及前讀頭位置;對于寫文件,要注意當(dāng)前寫入的數(shù)據(jù)。另外要特別指出的是,通過讀程序,能發(fā)現(xiàn)程序執(zhí)行的規(guī)律是非常有用的技術(shù)。但這個(gè)技術(shù)的掌握是建立在熟讀大量的程序和自己編寫過大量程序的基礎(chǔ)上的。如一個(gè)程序是對數(shù)組的前n個(gè)元素執(zhí)行某種操作?忌陂喿x這種程序時(shí),不妨假定輸入的n值為4或5,將n等于4或5的結(jié)果類推到任意的n.

  「例6」閱讀下列程序,寫出程序運(yùn)行后的輸出結(jié)果。

 。 include <stdio.h>

  main()

  {int a[][3]={1,2,3,4,5,6,7,8,9};

  int i,j,s1= 0,s2= 0;

  for(i= 0;i<3, i++)

  for(j=0;j<3;j++){

  if(i==j(luò))sl+=a[i][j];

  if(i+j==2) s2+=a[i][j];

  }

  printf(“sl=%ds2=%d\n”, sl,sZ);

  }

  首先將二維數(shù)組a的初值寫成每行3個(gè)元素,由于程序只提供9個(gè)初值,a只有3行:

  1 2 3

  4 5 6

  7 8 9

  程序用a[i][j]引用a的元素,所以外循環(huán)i是控制行的循環(huán),內(nèi)循環(huán)j是控制列的循環(huán),這兩重循環(huán)控制遍歷整個(gè)數(shù)組 a的全部元素。條件 i==j表示當(dāng)行下標(biāo)與列下標(biāo)相等時(shí),即是 a的主對角錢上的元素時(shí),將它們累計(jì)到變量s1,所以s1的值為15.條件i+j==2用于控制行下標(biāo)與列下標(biāo)之和為行列下標(biāo)之和為某個(gè)常數(shù)的元素是同在某條右高左低斜線上的元素。對于3行3列的二維數(shù)組來說,就是副對角線上的元素。將這些元素累計(jì)于變量s2,所以s2的值也是15.

  「例7」閱讀下列程序,簡述程序的主要功能。

  main()

  { int i,s[10],*p=&s[9];

  for(i=0;i<10;i++) scanf(“%d”,&s[i]);

  for(;p>=s;p——) print(“%d”,*p);

  printf(“\n );

  }

  程序中定義的變量i用于循環(huán)控制,數(shù)組S用于存儲(chǔ)讀人的整數(shù),指針變量p的初值指向數(shù)組S的末元素。程序的第一個(gè)循環(huán)用于順序輸入數(shù)組S的10個(gè)元素的情。從程序的第二個(gè)循環(huán)代碼知,每循環(huán)一次,指針p減1,即指向數(shù)組的前一個(gè)元素,循環(huán)條件直至循環(huán)處理了數(shù)組的首元素后結(jié)束,循環(huán)體只是簡單地輸出指針當(dāng)前所指的數(shù)組元素。所以該循環(huán)實(shí)現(xiàn)從數(shù)組的末元素開始逆序遍歷數(shù)組輸出。這樣程序的功能可簡述如下:

  “順序輸入10個(gè)整數(shù),并逆序輸出它們的值!

  4.程序設(shè)計(jì)題

  程序設(shè)計(jì)題是給出問題,要求考生自己獨(dú)立編寫程序?忌綍r(shí)認(rèn)真參加上機(jī)實(shí)習(xí),自己編寫程序,是能解答這類試題的基本條件。多數(shù)考生學(xué)了程序設(shè)計(jì)以后,能基本了解教材的內(nèi)容,能解答大部分前述三種類型的試題,平時(shí)還能指出別人程序的錯(cuò)誤,但由于很少自己動(dòng)手,或不知道從何著手編寫程序等原因,自己還一直不會(huì)編程序。簡單程序的設(shè)計(jì)通常要包含兩個(gè)步驟:首先是設(shè)想計(jì)算方法,即用什么方法來解決給定的計(jì)算問題;其次是將求解方法告訴計(jì)算機(jī),命令計(jì)算機(jī)怎么做。第一步工作人們采用常人的思維習(xí)慣,而第二步工作必須采用計(jì)算機(jī)的思維習(xí)慣。對于程序設(shè)計(jì)的初學(xué)者來說,最困難的可能還是很難適應(yīng)計(jì)算機(jī)程序的思維習(xí)慣,人們幾乎無法承受程序必須將要計(jì)算機(jī)完成的計(jì)算過程描述得幾乎絕對的精細(xì)和精確。但對計(jì)算機(jī)來說,這又是非常必要的。編寫程序就是在向計(jì)算機(jī)講話,非常精確地告訴計(jì)算機(jī)怎么做。

  「例8」編一個(gè)程序,從名為“text.txt”的文本文件中讀取一個(gè)字符顯示在屏幕上。

  本例題要求實(shí)現(xiàn)最簡單的文件處理。如考生知道文件處理程序的編寫要點(diǎn),就能方便地寫出程序。

  文件處理程序有以下幾個(gè)要點(diǎn):

 。╨)在程序的開始處,用包含預(yù)處理命令,包含標(biāo)準(zhǔn)文件Stdio.h.定義文件指針變量和存儲(chǔ)文件名的字符數(shù)組。如以下代碼所示:

  # include<stdio.h>

  file *fp  /* 定義文件指針變量 fp*/

  char fname「40」=“某文件名”;

  (2)如文件名在程序執(zhí)行時(shí)輸入,可用以下代碼:

  prinif(“請輸入文件名(包括文件的目錄路徑、文件的擴(kuò)展名)\n);

  scanf(“%s%*c”,fname);/*輸入文件名及其隨后的回車符。/

  (3)使用文件前,必須先打開文件,常用的有兩種打開方式:

  老文件打開為了讓程序從正文文件輸入數(shù)據(jù),用讀方式打開,則用以下代碼:

  if((fp=fopen(fname,“r‘’))== NULL) {/* 為讀打開*/

  printf(“%s文件不能打開,結(jié)束程序的執(zhí)行\(zhòng)n”,fname);

  return;

  }

  若文件打開為了讓程序向正文文件輸出數(shù)據(jù),則用以下代碼:

  fp=fopen(fname,“w”);/*為寫打開*/

  讀打開時(shí),要求被打開文件已存在。寫打開時(shí),若被打開文件不存在,則建立一個(gè)以fname內(nèi)容命名的新文件;若被打開文件已存在,則該文件上的數(shù)據(jù)被刪除。

 。4)文件使用結(jié)束后,要及時(shí)關(guān)閉,如以下代碼所示:

  fclose(fp);/* 以后中又可用于打開文件。/

 。5)調(diào)用有關(guān)文件輸入輸出庫函數(shù)。最經(jīng)常使用的有:

  調(diào)用函數(shù) fgetC()從文件輸入下一個(gè)字符,如:

  Ch= fgetC(fp);/*將輸入字符存于變量 Ch*/

  調(diào)用函數(shù)fscanf()從文件按指定格式輸入數(shù)據(jù),如:

  fscanf(fp,“%d%d”,&k,&j);/*從文件輸入兩個(gè)整數(shù)分別存于k和j*/除在第一位置增加一個(gè)文件指針變量實(shí)參外,其余與函數(shù)Scanf()的用法全相同。

  調(diào)用函數(shù)fputc()向文件輸出一個(gè)字符,如:

  fputC(Ch,fp);/*將變量ch中的字符輸出到文件。/

  調(diào)用函數(shù)fprintf()向文件按指定格式輸出數(shù)據(jù),如:

  fprintf(fp,“%d%d\n”,k,j);

  該函數(shù)調(diào)用是按格式要求將k和j的值輸出到文件。除在第一位置增加一個(gè)文件指針變量實(shí)參外,其余與函數(shù)prinif()的用法全相同。

  (6)從正文文件逐一輸入字符,作某種處理的程序結(jié)構(gòu)為:

  int c;/*若要用EOF測試文件結(jié)束,則不能為char類型*/

  FILE *fp;

  ……/*說明有關(guān)變量和設(shè)置初值等*/

  if((fp=fopen文件名,“r”))==NULL){/*以輸入方式打開*/

  printf(“不能打開文件%s./n”,“文件名字符列”);

  return;

  }

  while((c=fgetc(fp))!= EOF){

  ……/* 這里對剛讀人的字符信息C作某種處理*/

  }

  fclose(fp);

  ……/* 輸出處理結(jié)果*/

 。7)字符逐一生成輸出,形成新文件程序的一般結(jié)構(gòu)形式有:

  int c;/*也可以是 char類型*/

  對于本例題,只要包含上述(1)、(3)、(5)和(4)即可,寫成完整程序如下:

 。 include<stdio.h>

  FILE*FP;/*定義文件指針變量 fp*/

  char fname[40]=“text.txt”;

  main()

  {char c;/*或 int c*/

  if((fp= fopen(fname,“r”))== NULL){ /*為讀打開*/

  printf(“%s文件不能打開,結(jié)束程序的執(zhí)行\(zhòng)n”,fname);

  return;

  }

  c=fgetc(fp);/*將從文件輸入的字符存于變量c*/

  printf(“%c\n”, c);

  fclose(fp);/*中所指文件關(guān)閉*/

  }

  「例9」編寫函數(shù)f,該函數(shù)沒有浮點(diǎn)型數(shù)組形參float[]和整型形參n,函數(shù)的功能是計(jì)算并返回p[]中前n個(gè)元素的平均值。由于函數(shù)返回已知數(shù)組的平均值,函數(shù)的頭有以下形式:

  float f( float p[], int n)

  函數(shù)為了計(jì)算平均值,需要兩個(gè)計(jì)算步驟,首先是求出數(shù)組元素之和,然后將求得的和除以元素個(gè)數(shù)。嚴(yán)格地說,函數(shù)還因防止形參n小于等于0的情況,假定當(dāng)n小等于0時(shí),函數(shù)返回0值。為求數(shù)組元素和,需要一個(gè)存儲(chǔ)和的變量(例如說S)。求和通過遺歷數(shù)組實(shí)現(xiàn),有兩種實(shí)現(xiàn)方法:

  一是引入一個(gè)循環(huán)控制變量(例如說i),并讓 i作為弓傭數(shù)組元素的下標(biāo)(如 p[i])。所以有以下代碼:

  float f(float p[], int n)

  { int i; float s;

  if(n<=0)return 0.0;

  for( s=0.0, i=0; i<n; i++) s+= p[i];

  return s/n;

  }

  二是由于函數(shù)的數(shù)組形參實(shí)際是一個(gè)指針變量,遍歷數(shù)組直接可用指針形參p實(shí)現(xiàn)。循環(huán)次數(shù)可讓變量 j控制, j的初值為 n,每次循環(huán)后讓 j減 1,循環(huán)直至 j為 0結(jié)束。寫成 C代碼如下:

  float f( float p[], int n)

  { floa S; int j=n;

  if( n<=0) return 0.0;

  for( s=0.0; j>0; j——) s+=*p++;

  return s/n;

  }