c語言數(shù)組習題_第1頁
c語言數(shù)組習題_第2頁
c語言數(shù)組習題_第3頁
c語言數(shù)組習題_第4頁
c語言數(shù)組習題_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、數(shù)組練習解答1 定義一個名為a的單精度實型一維數(shù)組,長度為4,所有元素的初值均為0的數(shù)定義語句是_【分析】按照一般數(shù)據(jù)定義語句的格式,可以直接寫出方法一(參看答案);考慮到所有元素均賦初值時可以省略數(shù)組長度,可以寫出方法二(參看答案);考慮到不省略數(shù)組長度,給部分元素賦初值時,所有未賦初值的元素均有空值(對數(shù)值型數(shù)組來說,初值為0),可以寫出方法三(參看答案);考慮到選用靜態(tài)型,不賦初值所有元素也自動賦予。空值(對數(shù)值型數(shù)組來說,初值為0),可以寫出方法四(參看答案)?!敬鸢浮糠椒ㄒ唬篺loat a400,00,00,00;      

2、;  方法二:float a 00,00,00,00;        方法三:float a4= 00;        方法四: static float 4;2 下列數(shù)組定義語句中,錯誤的是() char x1'a';       auto char x1=0; static char xl;     char xl;【分析】顯然

3、答案中給字符型數(shù)組賦初值的格式不對(不能直接賦予字符常量,必須用花括號括住),所以備選答案是符合題意的答案?!敬鸢浮?3 用"冒泡排序法"對n個數(shù)據(jù)排序,需要進行n一1 步。其中第k步的任務是:自下而上,相鄰兩數(shù)比較,小者調(diào)上;該操作反復執(zhí)行nk次?,F(xiàn)在假設有4個數(shù)據(jù):4、l、3、2要排序,假定4為上、2為下,則利用"冒泡排序法"執(zhí)行第2步后的結(jié)果是_?!痉治觥块_始排序前的排列執(zhí)行第1步后的排列執(zhí)行第2步后的排列       4     

4、0; 1      1       1       4      2       3       2      4       2 

5、0;     3      3 【答案】 l、2、4、34 用"選擇排序法"對n個數(shù)據(jù)排序,需要進行n1步。其中第k步的任務是:在第k個數(shù)據(jù)到第n個數(shù)據(jù)中尋找最小數(shù),和第k個數(shù)據(jù)交換。現(xiàn)在假設有4個數(shù)據(jù):4、1、3、2要排序,則利用"冒泡排序法"執(zhí)行第2步后的結(jié)果是_。【分析】  開始排序前的排列為:    4    1    3   

6、2         執(zhí)行第1步后的排列為:   1     4    3    2         執(zhí)行第2步后的排列為:   1     2    3    4【答案】1、2、3、45 下列數(shù)組定義

7、語句中,正確的是() int a=1,2,3,4,5,6;      char a23'a','b'; int a3= 1,2,3,4,5,6;    static int a1,2,3,4,5,6;【分析】C語言規(guī)定,二維數(shù)組定義時不允許省略第二維的長度,所以備選答案是錯誤的。C語言還規(guī)定,定義字符型數(shù)組時不允許直接使用"字符常量"的方式賦初值,所以備選答案也是錯誤的。顯然備選答案符合題意?!敬鸢浮? 定義一個名為"s"的字符型數(shù)組,并且賦初

8、值為字符串"123"的錯誤語句是()char s=1','2','3','0 ';    char s="123";char s="123n"            char s4='1','2','3';【分析】備選答案中省略了數(shù)組長度,所以每個元素都賦了初值,共計4個元素,初值依次為'

9、;l'、'2'、'3'、'0',最后一個元素的值為字符串結(jié)束標記,所以數(shù)組S中存放的是字符串"123",該答案不符合題意(即正確的);備選答案中直接賦予字符串作為初值所以數(shù)組s的長度為4,其中的初值是字符串"123",不符合題意(即正確的);備選答案中也是給數(shù)組s賦予字符串的初值,但是字符串不是"123",而是"123n",所以該答案符合題意(即錯誤的);顯然答案也不符合題意(即正確的)。下面來分析答案為什么是正確的,該答案給出了數(shù)組長度為4,賦初值時僅給前3

10、個元素賦予字符'1 '、 '2'、'3',第 4個元素沒有賦初值,按照 C語言的規(guī)定,也有初值,且初值為空值, 對字符型數(shù)組來說,空值就是'0',即字符率結(jié)束標記,所以數(shù)組S中存放的也是字符串" 123"?!敬鸢浮? 設有下列數(shù)據(jù)定義語句,則數(shù)組元素xi的值是_。int i 3,x4= 1,2,3;【分析】由于i的初值為3,所以xi就是x3。由于數(shù)組的下標是從0開始的,所以x3實際上是數(shù)組x的第4個元素。從定義語句中可以看出數(shù)組x的前3個元素的初值依次為1、2、3,第4個元素沒有賦初值,其初值自動設為空值,對整

11、型數(shù)組來說,空值是0,顯然x3的值是0.【答案】08 設有下列數(shù)據(jù)定義語句,則 puts(s00)的輸出結(jié)果是_; puts(s0輸出結(jié)果是_。char s45='l','0',"23","345","40";【分析】首先分析字符型數(shù)組s的初值,s的第1行中存放的字符串是"1"、第2行中存放的符串是"23"、第3行中存放的字符串是"345"、第4行中存放的字符串是"4"。puts()函數(shù)的功能是輸出從"參數(shù)&quo

12、t;處開始存放的字符串中有效字符。按照上的分析,第1個輸出的結(jié)果是從"S00"開始的字符串,這個地址對應的就是數(shù)s的第1行,所以輸出結(jié)果為1;第2個輸出的結(jié)果是從“s”開始的字符串,這個址對應的也是數(shù)組s的第1行,所以輸出結(jié)果也為1?!敬鸢浮?#160; 1         19 設有下列數(shù)據(jù)定義語句:char a410="11","22","33","44";則 puts(strcat(a1,a3)的輸出結(jié)果是_;

13、putS(strcpy(a0,a2)的輸出結(jié)果是_。【分析】字符數(shù)組a共有4行,每行存放一個字符串。這4行的首地址依次為:a0、a1、a2、a3,從這4個地址開始存放的字符串依次為:"11"、"22"、"33"、"44"。strcat(a1,a3)函數(shù)調(diào)用的功能是將s3處的字符串連接到al的字符串后面,所以執(zhí)行該函數(shù)調(diào)用后的al處的字符串為"2244",而該函數(shù)的返回值就是a1的首地址,puts()函數(shù)的功能就是輸出這個地址存放的字符串,由此,第1個輸出的結(jié)果就是:2244。同樣理由可以分析st

14、rcpy(a0,a2)的功能是將a2處的字符串("33")復制到a0處,返回a0的地址,puts()輸出的就是a0處的字符串,結(jié)果為:33?!敬鸢浮?244         3310 設有下列數(shù)據(jù)定義語句:       char str210="abc","ABC";則printf("d",strcmp(str1,str0)的輸出結(jié)果是_;printf("d",str

15、cmp(strlwr(str1,str0),str0)的輸出結(jié)果是_?!痉治觥孔址蛿?shù)組str中,從str0開始存放的字符串是"abc"、從strl開始存放的字符串是"ABC"。strcmp(strl,str0)是比較strl和str【0處的兩個字符串的大小,由于"ABC"是小于"abc"的,按照srrcmp函數(shù)的功能可知,返回值是一個小于0的整數(shù),這是第1個空的答案。再來分析第2個空的答案,strlwr(strl)函數(shù)的功能是將strl處的字符串中大寫字母改為小寫字母,其返回值是修改后字符串的地址。strcmp(

16、stlwr(sir1),str0)函數(shù)的功能是比較strl和str0處的字符串,由于strl處的字符串已經(jīng)改為小寫字母了,所以和 str0處的字符串完全相同,返回值是0,這就是第2個空的答案。答案某個小于0的任意整數(shù)      011 下列程序的功能是讀取10個實數(shù),然后依次輸出前l(fā)個實數(shù)和、前2個實數(shù)和、前9個實數(shù)和、前10個實數(shù)和。請?zhí)顚懗绦蛑腥鄙俚恼Z句。   main()   float f10,X00;    int i;    for(

17、i=0;i10;i+)       scanf(" f", fi);    for(i=1;i=10;i+)        _         printf("sum of NO 2dfn",i,x);          

18、0;  【分析】瀏覽程序清單后,可以發(fā)現(xiàn)前一個次數(shù)型循環(huán)是輸入 10個實數(shù)存入數(shù)組 f中。后一個次數(shù)型循環(huán)是計算前i個實數(shù)和并存入變量X中,然后再輸出這個x的值。程序中所缺少的語句就是實現(xiàn)"計算前i個實數(shù)和并存入變量X中"的。當i等于1時,x要等于f0的值,即fil的值;當i等于2時,x要等于f0 fl的值,即f0fi1的值,此時f0的值已經(jīng)計算并存入變量x中;當i等于3時,x要等于f0f1f2的值,即f0f1fil的值,此時f0f1的值已經(jīng)計算并存入變量x中;由此可以推出:前i個值的計算公式為:xxfi1,將這個表達式組成語句就是需要填寫的內(nèi)容。【答案】 x=x

19、fil; 或  xfil;12 運行下列程序的輸出結(jié)果是() 111ll     llll      lll     222    main()    int a=1,2,3,4, 5 ,i;     for( i=1;i 5; i)     printf(" 1d", ai ai一1); 

20、;   【分析】首先分析數(shù)組a各元素的值,由于是賦初值,很容易看出:a0 1、a12、a45。再分析次數(shù)型循環(huán)共計執(zhí)行4次(i1、i2、i3、i4),每次輸出1位整數(shù);iai1,當i1時,輸出的是211;當i2時,輸出的是32l;當i=3時,輸出的是43l;當i4時,輸出的是541。整個程序的輸出結(jié)果是1111。【答案】13 下列程序的功能是輸入一個5行5列的實數(shù)矩陣,然后求出其中的最大數(shù)和最小數(shù),并且對調(diào)這兩個數(shù)后,再輸出,請?zhí)顚懗绦蛑腥鄙俚恼Z句。 main()  float f 55,max, x; int i,j,max_l,max_J,

21、min_i,min_J; for(i0;i5;i)    for(j0;j5;j)       scanf("f",x);         fijx;       maxminf00;max_imax_imin_imin_j 0;for(i= 0;i5;i)    for(j0;j5;j) 

22、0;     if(maxfij)          maxfij,max_ii,max_jj;        if(minfij)         _        fmax_imax_jmin;fmin_imin_jmax;  

23、;     for(i0;i5;i)          printf("n");           for(j0;j5;j)               printf("82f",fij)

24、;             【分析】首先宏觀上閱讀程序,可以看出程序的基本結(jié)構(gòu)是:用雙重次數(shù)型循環(huán)讀取5行5列矩陣的元素值存入二維數(shù)組f中;尋找矩陣中的最大數(shù)和最小數(shù);交換最大數(shù)和最小數(shù);輸出交換后的矩陣元素值。需要填寫的語句屬于第2個部分?,F(xiàn)在來仔細分析這個部分的程序。通常尋找最大數(shù)(或最小數(shù))的算法是首先假定最前面的數(shù)是最大數(shù)(或最小數(shù)),并記錄該數(shù)及其在數(shù)組中的下標,然后依次處理所有元素,若當前處理的元素大于(小于)最大數(shù)(最小數(shù)),則重新記錄新的最大數(shù)(最小數(shù))及其下標。從本程

25、序清單來看,的確是采用了這個算法,由于是同時求最大數(shù)和最小數(shù),所以用max、max_i、max_j分別記錄當前的最大數(shù)及其行列下標,用min、min_i、min_j分別記錄當前的最小數(shù)及其行列下標。在二重循環(huán)的循環(huán)體中有兩條單分支語句,前一個單分支語句的功能很清楚,判斷當前的數(shù)組元素是否大于最大數(shù),是則重新記錄最大數(shù)及其行列下標(注意,這里是用一個逗號表達式完成三項賦值工作的)。循環(huán)體中的第2條單分支語句當然是求當前最小數(shù)的,由此分析,當條件成立(當前數(shù)組元素小于當前最小數(shù))時,需要重新記錄當前的最小數(shù)及其行列下標,所缺少的語句正是完成這項工作的,由于只能用一條語句完成三項賦值工作,所以必須使

26、用遠號表達式。對照該循環(huán)體的前一個單分支語句,很容易寫出所缺少的語句。接下來閱讀以后的程序,來驗證所填寫的語句。接下來的兩條賦值語句正好完成了最大數(shù)和最小數(shù)的交換工作。前一個語句“fmax_imax_j min;”是將找到的最小數(shù)存入對應最大數(shù)的位置(maxi是最大數(shù)的行下標,max_i是最大數(shù)的列下標,fmax_imaxj就是最大數(shù)),類似的,后一個語句“fminimin_jmax ;”是將找到的最大數(shù)存入對應最小數(shù)的位置。【答案】minfij,minii,minj=j;14 閱讀下列 程序,寫出程序運行后的輸出結(jié)果。  main() int al=1,3,6,7,100

27、,a2=2,4,5,8,100,a10,i,j,k;   ij0;   for(k0;k8;k)       if(a1i<a2j)         aka1i;       else         aka2j;   for (k 0; k 8; k

28、)       printf("1d",ak);  【分析】程序開始用賦初值方式給數(shù)組al和a2的所有元素賦值。接下來是給變量 i、j清0,從后面的for循環(huán)中可以看出,變量i、j是作為一維數(shù)組的下標的,所以它們的初值是從0下標開始的。重點分析其后的次數(shù)型循環(huán),共計循環(huán)8次,控制變量k的值依次為0、l、7,這個控制循環(huán)的變量k也是作為下標使用的。再分析循環(huán)體,這是一條雙分支語句,控制條件是“a1iaj”,即a1數(shù)組的第葉元素值小于a2數(shù)組的第j個元素值。這個條件成立時,執(zhí)行的操作包括: al數(shù)組的第i個元

29、素存入 a數(shù)組的第 k個元素中、同時 i加1,使得 a1i成為其后的元素;如果這個條件不成立(即a2數(shù)組的第 j個元素值小于或等于 al數(shù)組的第 i個元素值),執(zhí)行的操作包括: a2數(shù)組的第j個元素在入a數(shù)組的第k個地素中、同時j加1,使得a2j成為其后的元素。綜合上述的分析,可以看出,循環(huán)體的工作是將數(shù)組al和a2的當前元素中值小的元素復制到數(shù)組 a中,如果數(shù)組 al的元素被復制,則其下標后移一個位置,指向 al的新元素;如果數(shù)組a2的元素被復制,則其下標后移一個位置,指向a2的新元素。該循環(huán)執(zhí)行8次,恰好把數(shù)組a1和數(shù)組a2中的各4個元素按照從小到大的順序復制到數(shù)組a中。最后看看輸出,是一

30、個次數(shù)型循環(huán)語句,輸出的結(jié)果是數(shù)組a中的8個元素值,而且輸出格式為一位整數(shù),結(jié)果當然是: 12345678。    請讀者注意,由于原來的兩個數(shù)組al和a2中的元素是從小到大的順序排列的,所以合并后的數(shù)組a的元素也必然是從小到大的。這是一種排序的算法,稱為"兩路歸并排序法"。但是,真正的兩路歸并排序法要考慮到某個數(shù)組的元素全部復制后,另一個數(shù)組中的剩余元素要全部復制。本程序中沒有考慮這個"臨界問題",而是采用了在兩個數(shù)組的有效數(shù)據(jù)之后,放一個最大數(shù)的方法,并且知道歸并后的數(shù)據(jù)總個數(shù)。【答案】 1234567815 閱讀下列程

31、序,寫出程序運行后的輸出結(jié)果。    include "string.h"    main()    char s320="2345","123456","2347";     int i, k;     for( k 0, i1; i 3; i)        if(strcm

32、p(sk,si)0) k i:     puts(sk);    【分析】該程序很簡單,開始給二維字符型數(shù)組賦初值為3個字符串,通過一個次數(shù)型循環(huán)求得變量k的值,然后輸出sk對應的字符串。從上面的分析可知,關鍵是循環(huán)語句執(zhí)行后變量k的值等于多少?我們呵以用記錄的方法來記錄在循環(huán)中變量k的值。   執(zhí)行循環(huán)語句,記錄如下:   k0,i1,控制循環(huán)的條件"i 3'成立,執(zhí)行循環(huán)體的單分支語句,條件"(strcmp  (sk,si)0"相當于

33、"(strcmp("2345","123456")0",條件不成立,變量k值不變,i加1后繼續(xù)循環(huán);    k0,i 2,控制循環(huán)的條件"i 3"成立,執(zhí)行循環(huán)體的單分支語句,條件"(strcmp(sk,si)0"相當于"(strcmp("2345","2345")0",條件成立,執(zhí)行ki,k值為2,i加1后繼續(xù)循環(huán);     k2,i=3,控制循環(huán)的條件"

34、i3"不成立,退出循環(huán)。     此時變量k值為2.     執(zhí)行"puts(sk);"語句,輸出的是s2處存放的 字符串:2347     顯然該程序的主要功能是在3個字符串中。尋找最大字符串的【答案】 234716 閱讀下列程序,寫出程序的主要功能。    main()    int i, a10, x, flag 0;      f

35、or(i=0; i<10;i十十)          scanf("d", a 【i】);      scanf("d", X);      for(i=0;i10;i十十)         if( x ai)      &

36、#160;     flag i十1;              break;                  if(flag= 0 )        printf("no found!n

37、");      else        printf("dn",flag);    【分析】該程序?qū)儆诒容^簡單的,開始定義整型數(shù)組a以及整型變量x、flag和i。下面的次數(shù)型循環(huán)是輸入10個整數(shù)到數(shù)組a中,此時可以看出變量i是作為循環(huán)的控制變量使用的。接著輸入一個整數(shù)到變量x中。接下來的次數(shù)型循環(huán)執(zhí)行10次,這是標準的用單重次數(shù)型循環(huán)來依次處理一維數(shù)組元素的程序段,處理的內(nèi)容是循環(huán)體中的單分支語句,即判斷當前的數(shù)組

38、元素是否等于變量x,是,則在變量師中記錄 i1后退出循環(huán);否,則繼續(xù)循環(huán)。由此可以分析出,這個流環(huán)足在數(shù)組a中尋找x的,找不到,則變社flag的值不會改變(注意動值為0);如果找到,則lleq變量的值將等于il,其中的i是循環(huán)控制變量,也就是找到的數(shù)組元素的下標,將其加 1后存入變量flag,所以此時的flag是對應數(shù)組元素的下標加 1的。我們再仔細分析一下,當i0時,找到的是數(shù)組元素a0,此時flag為1,表示是數(shù)組的第1個元素,即在10個待查整數(shù)中的序號為 1;當 i l時,找到的是數(shù)組元素 a1,此時 flag為2,表示是數(shù)組的第 2個元素,即在 10個待查整數(shù)中的序號為 2. 當 i9

39、時,找到的是數(shù)組元素a9,此時 flag為10,表示是數(shù)組的第1O個元素,即在10個待查整數(shù)中的序號為10.所以,找到則flag的值為1、2、10;找不到則為0。循環(huán)后面的輸出恰好是按照flag的值分別處理找到和找不到的兩種情況。綜上所述,可以總結(jié)出本程序的主要功能。【答案】輸入10個整數(shù)存入數(shù)組a,再輸入一個整數(shù)x,在數(shù)組a中查找x。找到輸出x在10個整數(shù)中的序號(從1開始),找不到則輸出"no found!"。17 閱讀下列程序,寫出程序的主要功能。   main()   int i,sum 0,a 10;  

40、   for(i0;i10;i)        scanf(" d",ai);     for(i9;i0;i)        if( ai 7 0)          sumai;         

41、  printf("d",ai);                printf("nsumdn",sum);    【分析】這是標準的次數(shù)型循環(huán)結(jié)構(gòu)。第1個循環(huán)是輸入10個整數(shù)存入數(shù)組a中;第 2個循環(huán)是從后向前的順序依次處理一維數(shù)組的元素。具體的處理是體現(xiàn)在其循環(huán)體中,它是判斷當前數(shù)是否滿足條件“ai70”,滿足條件的元素則參加累加的計算,并輸出滿足條件的數(shù)組元素。退出循環(huán)后

42、,再輸出這些滿足條件的數(shù)組元素之和。    程序功能的關鍵是搞清楚條件"ai7 0"的含義,其實很簡單,這個條件就是"數(shù)組元素能被7整除"。綜上所述,可以總結(jié)出該程序的主要功能?!敬鸢浮枯斎?0個整數(shù),按從后向前的順序依次尋找并輸出其中能被7整除的所有整數(shù)以及能被7整除的這些整數(shù)的和。18 編一個程序,計算并輸出下列數(shù)列的前24項,每行輸出4項。        數(shù)列第1項的值1      

43、0; 數(shù)列第2項的值2        數(shù)列第k項的值=第kl項的值十第k2項的值,當k為奇數(shù)時,        數(shù)列第k項的值=第kl項的值一第k2項的值,當k為偶數(shù)時?!痉治觥壳髷?shù)列的前 24項可使用次數(shù)型循環(huán)結(jié)構(gòu),只要按照給出的公式計算并保存即可。按每行4個數(shù)據(jù)的格式輸出一維數(shù)組中的數(shù)據(jù)是一個標準的次數(shù)型循環(huán)?!敬鸢浮縱oid main()       long int a25=0,1,2 ;

44、        int i;        for(i3;i25;i)          if( i 2! 0)            aiailai2;         

45、; else            aiai一1ai2;        for (i 1; i 25; i )            printf("8ld",ai);          &

46、#160;   if(i40)                printf("n");                     19 編一個程序,輸入一個3X3的實數(shù)矩陣,求兩個對角線元素中各自的最大值。【分析】用二重次

47、數(shù)型循環(huán)解決矩陣的輸入。用一重次數(shù)型循環(huán)求主對角線元素的最大數(shù),用單分支結(jié)構(gòu)求次主對角線元素中的最大數(shù)?!敬鸢浮?main()        float s33,max1,max2,x;          int i,j;          for(i0;i3 ;i)       

48、;       for(j=0;j3;j+)                  scanf("f", x);                    sijx;&

49、#160;                            max1s00;          for(i=1;i3;i十十)             if(max1sii)   max1=sii;          max2=s02;    

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論