二級c語言程序設(shè)計習(xí)題及解答ch9數(shù)組參考模板_第1頁
二級c語言程序設(shè)計習(xí)題及解答ch9數(shù)組參考模板_第2頁
二級c語言程序設(shè)計習(xí)題及解答ch9數(shù)組參考模板_第3頁
二級c語言程序設(shè)計習(xí)題及解答ch9數(shù)組參考模板_第4頁
二級c語言程序設(shè)計習(xí)題及解答ch9數(shù)組參考模板_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第九章 數(shù)組一、選擇題 9.1  若已定義:int a=0,1,2,3,4,5,6,7,8,9,*p=a,i;其中0i<=9,則對a數(shù)組元素的引用不正確的是A) ap-a  B) *(&ai)  C) pi  D) *(*(a+i)【解析】A:p開始是數(shù)組a首地址,只要p+則再減去a的首地址ap-a就能取到所有元素,B:&ai循環(huán)取其地址,*(&ai) 是該地址中所存儲的元素 C:p就是指針變量,相當(dāng)于ai,D: *(a+i) 則正確 

2、9.2  以下程序段數(shù)組所有元素輸入數(shù)據(jù),應(yīng)在下劃線填入的是A) a+(i+) B) &ai+1   C) a+i   D) &a+imain() int a10,i=0;while(i<10) scanf("%d",);【解析】因為要遍歷,所以排除B.C,因為D先加1再取值,丟了a0  9.3  以下程序的輸出結(jié)果是  A) 3    

3、;   B) 4         C) 1     D) 2main() int  a10=1,2,3,4,5,6,7,8,9,10,*p=a;  printf("%dn",*(p+2); 【解析】*p=a;p指向首地址,*(p+2)往后移動兩個元素,指向3 9.4  以下程序的輸出結(jié)果是A) 不確定的值&#

4、160;  B) 3    C) 2     D) 1main() int n2=0,i,j,k=2;for(i=0;i<k;i+)for(j=0;j<k;j+) nj=ni+1;printf("%dn",nk); 9.5  以下程序的輸出結(jié)果是   A)17     B)18  

5、60;  C)19     D)20main() int a=2,4,6,8,10,y=1,x,*p; p=&a1;for(x=0;x<3;x+) y+=*(p+x);printf("%dn",y);【解析】p=&a1則p指向元素為4,y+=*(p+x);相當(dāng)于y=1+4+6+8=191 / 16 9.6  以下程序的輸出結(jié)果是A) 6      B) 8   &#

6、160;  C) 4      D) 2main() int a=2,4,6,8,*p=a,i;for(i=0;i<4;i+) ai=*p+;printf("%dn",a2);【解析】p=a,相當(dāng)于重新把a中的內(nèi)容賦給a本身,所以a2=6 9.7  以下程序的輸出結(jié)果是A) 720     B) 120     C) 24  

7、60;  D) 6f(int b,int n)  int i,r=1;for(i=0;i<=n;i+) r=r*bi;return r;main()  int x,a=2,3,4,5,6,7,8,9;x=f(a,3);printf("%dn",x);【解析】調(diào)用x=f(a,3);for循環(huán)4次,將前四個元素相乘,即得r=2*3*4*5; 9.8   以下程序中若第一個printf語句輸出的是194,則第二個printf語句的輸出結(jié)

8、果是A) 212     B) 204      C) 1a4      D) 1a6      12main()  int a=1,2,3,4,5,6,7,8,9,0,*p;p=a;printf("%xn",p);printf("%xn",p+9); 

9、60; 【解析】因為開始p的地址為194,p+9是指指針向后移動9個元素,而不是9個字節(jié),每個int占2個字節(jié),所以共移動18個字節(jié),1個字節(jié)占一個存儲單位,%xn"是16進制,將18轉(zhuǎn)化成16進制是12,所以194+12=2a6 9.9  以下程序的輸出結(jié)果是A) 0987654321  B) 4321098765  C) 5678901234  D) 0987651234fun(int *s,int n1,int n2) int i,j,t;

10、  i=n1; j=n2;while(i<j) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;  i+; j-; main() int a10=1,2,3,4,5,6,7,8,9,0,i,*p=a;fun(p,0,3);  fun(p,4,9);  fun(p,0,9);for(i=0;i<10;i+)  printf("%d",*(a+i);【解析】為了使大家清晰地看出fun(int *s,int n

11、1,int n2)的作用,我自己完善了程序如下:#include <stdio.h>#include <stdlib.h>fun(int *s,int n1,int n2) int i,j,t; i=n1; j=n2;while(i<j) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main() int a10=1,2,3,4,5,6,7,8,9,0,i,*p=a;fun(p,0,3);for(i=0;i<10;i+) printf("%d",*(a+i); printf("n"

12、;); fun(p,4,9); for(i=0;i<10;i+) printf("%d",*(a+i);printf("n");fun(p,0,9);for(i=0;i<10;i+) printf("%d",*(a+i);printf("n");結(jié)果如下:其實,fun(p,0,3);就是將a中的前4個元素倒序,fun(p,4,9); 就是將a中的第5個到第10個倒序,最后fun(p,0,9);全部元素倒序。 9.10  以下程序的輸出結(jié)果是A) 4 4 

13、    B) 2 2     C) 2 4      D) 4 6main() int a5=2,4,6,8,10,*p,*k;p=a;   k=&p;printf("%d",*(p+);printf("%dn",*k);【解析】p指向a的第一個元素,printf("%d",*(p+);先輸出第一個元素為2,然后p+,所

14、以p的地址就為指向4,k=&p; k是存放p的地址的,*k=p,*k就是p所指的元素為4,所以結(jié)果為24 9.11  當(dāng)運行以下程序時輸入三行,每行都是在第一列上開始,CR代表Enter鍵;a<CR>b<CR>cdef<CR>則程序的輸出結(jié)果是A)abcdef      B)a       C)a       D)ab

15、60;        b         bc         cd       cdef              d 

16、;                                f#include "stdio.h"#define  N  6main() char cN;   int i=0

17、;for(i=0;i<N;i+)  ci=getchar();for(i=0;i<N;i+)   putchar(ci);【解析】回車鍵也是字符,所以a<CR>b<CR>cd這六個字符輸出 9.12  若有定義和語句:   int c45,(*cp)5;    cp=c;則對C數(shù)組元素的引用正確的是   A) cp+1    

18、60; B) *(cp+3)       C) *(cp+1)+3       D) *(*cp+2)【解析】cp是行指針,只表示行,若要表示元素,則需要配合列A:表示第二行 B:表示第四行的內(nèi)容,但是為指出那一列 C:*(cp+1)+3只是地址不是元素值,需改為 *( *(cp+1)+3) 9.13  若已定義:  int a43=1,2,3,4,5,6,7,8,9

19、,10,11,12,(*prt)3=a,*p=a0;則能夠正確表示數(shù)組元素a12的表達式是A) *(*prt+1)2)   B) *(*(p+5)   C) (*prt+1)+2   D) *(*(a+1)+2)【解析】A:多了外層的*(),B:p是行地址,加5越界。C:少了外層的*() 9.14  若有定義和語句:int a43=1,2,3,4,5,6,7,8,9,10,11,12,(*prt)3=a,*p4,i;for(i=0;i<4;i+) &

20、#160;pi=ai;則下能夠正確表示a數(shù)組元素的表達式是A) a43    B) p00     C) prt22     D)(*(p+1)1 9.15  以下程序的輸出結(jié)果是  A) 23      B) 26       C) 33 

21、0;     D) 36main() int aa33=2,4,6,i,*p=&aa00; for(i=0;i<2;i+) if(i=0) aaii+1=*p+1;else +p;printf("%d",*p); printf("n");【解析】p指向第一個元素2,if(i=0) aaii+1=*p+1;給aa01賦值2+1=3打印出p的內(nèi)容為2,第二次for循環(huán)+p,使p指向下一個元素即aa01=3,輸出其內(nèi)容為3 9.16  以下程序的輸出結(jié)果是 

22、 A) 60      B) 68       C) 99       D) 108main()  int a34=1,3,5,7,9,11,13,15,17,19,21,23;   int (*p)4=a,i,j,k=0;  for(i=0;i<3;i+)  &

23、#160;for(j=0;j<2;j+)        k+=*(*(p+i)+j);printf("%dn",k);【解析】k+=*(*(p+i)+j);即求和:a00 +a01+ a10+ a11+ a20+ a21=1+3+11+13+17+19=60 9.17  以下程序的輸出結(jié)果是  A) 1,5,9,     B) 1,4,7,    &#

24、160; C) 3,5,7,      D) 3,6,9,main()  int i,x33=1,2,3,4,5,6,7,8,9;for(i=0;i<3;i+)   printf("%d,",xi2-i);【解析】即輸出x02 x11 x20分別為3 5 7  9.18  若有定義語句int  (*p)M; 其中的標(biāo)識符是  A)M個指向整型變量的指針 

25、;  B)指向M個整型變量的函數(shù)指針C)一個指向具有M個整型元素的一維數(shù)組指針        D)具有M個指針元素的一維指針數(shù)組,每個元素都只能指向整型量 二、填空題 9.19  若有以下定義:    double   w10;則數(shù)組元素下標(biāo)的上限是    9     ,下限是  

26、;0         。 9.20  以下程序的輸出結(jié)果是6           。main() int a=2,4,6,*ptr=&a0,x=8,y,z;for(y=0;y<3;y+)z=(*(ptr+y)<x)?*(ptr+y):x;printf("%dn",z);【解析】因為a中元素永遠小于x=8,所以每次For循環(huán)都執(zhí)行

27、z=(*(ptr+y),循環(huán)3次最后輸出的z為6(前幾次的z都被覆蓋了) 9.21  以下程序的輸出結(jié)果是   12     。main() int arr10,i,k=0;for(i=0;i<10;i+)  arri=i;  for(i=0;i<4;i+)   k+=arri+i;printf("%dn",k);【解析】首先arri=i;使得arr中賦值0-9十個

28、數(shù),for循環(huán)4次,k+=arri+i;得k=0+0+1+1+2+2+3+3=12 9.22  以下程序的輸出結(jié)果是 3          .#define N 5fun(char *s,char a,int n) int j;*s=a;j=n;while(a<sj) j-;return j;main() char sN+1; int k,p;for(k=1;k<=N;k+) sk='A'+k+1;printf("%d

29、n",fun(s,'E',N); 9.23  若輸入3個整數(shù)3、2、1,則以下程序的輸出結(jié)果是   2721           。#include <stdio.h>#include <stdlib.h>void sub(int n,int uu) int t;t=uun-; t+=3*uun; n+;if(t>=10) uun+=t/10; uun=t%10;else

30、 uun=t; main() int i,n,aa10=0;scanf("%d%d%d",&n,&aa0,&aa1);for(i=1;i<n;i+) sub(i,aa);for(i=0;i<=n;i+) printf("%d",aai);printf("n"); 9.24  以下程序的輸出結(jié)果是   -850,2,0        .main() &#

31、160;int  i,j,row,col,m;  int  arr33=100,200,300,28,72,-30,-850,2,6;m=arr00;for(i=0;i<3;i+)for(j=0;j<3;j+)if(arrij<m)m=arrij;  row=i;  col=j;printf("%d,%d,%dn",m,row,col);【解析】本題是為找出數(shù)組中的最小值,并輸出其下標(biāo) 9.25  以下findmax返回數(shù)組s中

32、最大元素的下標(biāo),數(shù)組中元素的個數(shù)由t傳入,請?zhí)羁?。findmax(int s,int t)  int k,p;  for(p=0,k=p;p<t;p+)  if(sp>sk)   k=p return   k; 9.26  以下程序統(tǒng)計從終端入的字符中大寫字母的個數(shù),中統(tǒng)計字母的個數(shù),其它依次類推。用號結(jié)束輸入,請?zhí)羁铡?include  "stdip.h"

33、;#include  "ctype.h"main()  int num26=0,i;    char c;while(c=getchar()!="#")   if(isupper(c)  num +=1;for(i=0;i<26;i+)if(numi)  printf("%c:%dn",i+'A',numi);    

34、;三、編程題 9.27  輸入一行數(shù)字字符,請用數(shù)組元素作為計數(shù)器來統(tǒng)計每個數(shù)字字符的個數(shù)。用下標(biāo)為0元素統(tǒng)計字符“1”的個數(shù),下標(biāo)為1的元素統(tǒng)計字符“2”的個數(shù),.?!窘馕觥?include <stdio.h>#include <stdlib.h>#include <ctype.h>main() int num10=0,number;char aa;printf("請輸入一串?dāng)?shù)字,并以#結(jié)束:");while(aa=getchar()!='#')number=(int)aa; /將字符強制轉(zhuǎn)

35、化為數(shù)字number -=48; /由于0的ASCII碼為48,所以轉(zhuǎn)換后要減去48numnumber-1+; /出現(xiàn)一個字符,將記錄該字符個數(shù)的數(shù)組元素相應(yīng)加1for(int i=0;i<9;i+)printf("%d的個數(shù)為:%dt",i+1,numi); /輸出結(jié)果printf("n"); 9.29  編寫函數(shù)把數(shù)組中所有奇數(shù)放在另一個數(shù)組中返回。#include <stdio.h>#define N 10main() int num1N=2,3,56,78,13,45,66,79,80,91,*pt

36、r,count=0,num2N=0;ptr=num1; for(int i=0;i<N;i+)if(ptri%2!=0) num2i=ptri;count +; for(i=0;i<N;i+)if(num2i!=0)printf("Odds的元素為:%2dt",num2i);printf("n"); 9.30  編寫函數(shù)對字符數(shù)組中的輸入字母,按由大到小的字母順序進行排序。#include <stdio.h>main() char chr='a','h','c&

37、#39;,'k','z','c','h','c','y','l','n','w','q','f','b'char t; for(int i=0;i<14;i+)for(int j=i+1;j<15;j+)if(chri>chrj)t=chri;chri=chrj;chrj=t;for(i=0;i<15;i+)printf("chr%2d: %c t",i,chr

38、i);printf("n"); 9.31  輸入若干有序數(shù)放在數(shù)組中。然后輸入一個數(shù),插入到此有序數(shù)列中,插入后,數(shù)組中的數(shù)仍然有序。請對以下三種情況運行你的程序,以便驗證你的程序是否下確。  (1)插在最前    (2)插在最后    (3)插在中間#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define N 6int judgePositi

39、on(int ,int);void exchange(int ,int,int);main() int arrN=10,20,30,40,50,insert,posit;printf("請輸入待插入的數(shù):n");scanf("%d",&insert);posit=judgePosition(arr,insert);exchange(arr,posit,insert);printf("n");int judgePosition(int temp,int insert)int i; for(i=0;i<N-1;i+)if(i

40、nsert<tempi) break; return i;void exchange(int temp,int posit,int insert )for(int i=N-2;i>=posit;i-)tempi+1=tempi;tempposit=insert;for(i=0;i<N;i+)printf("arr%2d=%2dn",i,tempi); 9.32  編寫函數(shù)把任意十進制下整數(shù)轉(zhuǎn)換成二進制數(shù)。提示:把十進制數(shù)不斷被2除余數(shù)放在一個一維數(shù)組中,直到商數(shù)為零。在主函數(shù)中進行輸出,要求不得按逆序輸出。#include &

41、lt;stdio.h>#define N 10main() int origin,resultN,i=0;printf("請輸入一個十進制的數(shù):n");scanf("%d",&origin);do resulti=origin%2;origin /=2;i+;while(origin); printf("該十進制數(shù)轉(zhuǎn)化為二進制數(shù)為:"); for(int j=i-1;j>=0;j-) printf("%d",resultj); printf("n"); 9.33&#

42、160; 編寫函數(shù)調(diào)用隨機函數(shù)產(chǎn)生0到19之間的隨機數(shù),在數(shù)組中存入15個互不重復(fù)的整數(shù)。要求在主函數(shù)中輸出結(jié)果。若已定義為類型,調(diào)用隨機函數(shù)步驟如下:        #include     "stdlib.h"     x=rand()%20     /*產(chǎn)生0到19的隨機數(shù)*/#include <stdio.h>#inc

43、lude <stdlib.h>#define N 15void random();int compare(int ,int,int);main() random(); printf("n");void random()int randomN=0,tag=0,x=-1,i;for(i=0;i<N;i+)x=rand()%20; /*產(chǎn)生0到19的隨機數(shù)*/tag=compare(random,x,i);while(tag!=1)x=rand()%20; /*產(chǎn)生0到19的隨機數(shù)*/tag=compare(random,x,i);randomi=x;print

44、f("15個0-19的不同隨機數(shù)為:");for(i=0;i<N;i+)printf("%dt",randomi); int compare(int random,int x,int i)for(int j=0;j<=i;j+) if(x=randomj)return 0;return 1; 9.34  編寫程序求任意方陣每行、每列、兩對角線一元素之和。#include <stdio.h>#define M 3main()int colM=0,verM=0,recMM,xsum=0,x_sum=0;f

45、or(int i=0;i<M;i+)for(int j=0;j<M;j+)printf("請輸入元素:");scanf("%d",&recij);for( i=0;i<M;i+)for(int j=0;j<M;j+)printf("rec%d%d=%dt",i,j,recij);printf("n");printf("n");for( i=0;i<M;i+)for(int j=0;j<M;j+) coli =coli+recij;veri +=recj

46、i;if(i+j=M-1)x_sum +=recij;if(i=j)xsum +=recij; for(i=0;i<M;i+)printf("各行元素之和分別為:col%d=%dn",i,coli);printf("n");for(i=0;i<M;i+)printf("各列元素之和分別為:ver%d=%dn",i,veri);printf("n");printf("主對角線上的元素的和為:%dnn副對角線上的元素的和為:%dn",xsum,x_sum);若要改變矩陣的維數(shù)可以只改變M的大小即可。 9.35  編寫程序求兩個矩陣的和。#include <stdio.h>#define M 4#define N 3void input(int MN )

溫馨提示

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

評論

0/150

提交評論