版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
./第九章數(shù)組一、選擇題
[9.1]
若已定義:int
a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0<=i<=9,則對(duì)a數(shù)組元素的引用不正確的是a[p-a]
B>*<&a[i]>
C>p[i]
D>*<*<a+i>>[解析]A:p開始是數(shù)組a首地址,只要p++則再減去a的首地址a[p-a]就能取到所有元素,B:&a[i]循環(huán)取其地址,*<&a[i]>
是該地址中所存儲(chǔ)的元素C:p就是指針變量,相當(dāng)于a[i],D:*<a+i>則正確
[9.2]
以下程序段數(shù)組所有元素輸入數(shù)據(jù),應(yīng)在下劃線填入的是A>a+<i++>
B>&a[i+1]
C>
a+i
D>&a[++i]main<>{
int
a[10],i=0;while<i<10>
scanf<"%d",_>;}[解析]因?yàn)橐闅v,所以排除B.C,因?yàn)镈先加1再取值,丟了a[0]
[9.3]
以下程序的輸出結(jié)果是A>3
B>
4
C>1
D>2main<>{
int
a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf<"%d\n",*<p+2>>;}[解析]*p=a;p指向首地址,*<p+2>>往后移動(dòng)兩個(gè)元素,指向3
[9.4]
以下程序的輸出結(jié)果是A>
不確定的值
B>
3
C>2
D>1main<>{
int
n[2]={0},i,j,k=2;for<i=0;i<k;i++>for<j=0;j<k;j++>
n[j]=n[i]+1;printf<"%d\n",n[k]>;}
[9.5]
以下程序的輸出結(jié)果是
A>17
B>18
C>19
D>20main<>{inta[]={2,4,6,8,10},y=1,x,*p;p=&a[1]; for<x=0;x<3;x++>y+=*<p+x>; printf<"%d\n",y>;}[解析]p=&a[1]則p指向元素為4,y+=*<p+x>;相當(dāng)于y=1+4+6+8=19
[9.6]
以下程序的輸出結(jié)果是A>6
B>8
C>4
D>2main<>{inta[]={2,4,6,8},*p=a,i; for<i=0;i<4;i++>a[i]=*p++; printf<"%d\n",a[2]>;}[解析]p=a,相當(dāng)于重新把a(bǔ)中的容賦給a本身,所以a[2]=6
[9.7]
以下程序的輸出結(jié)果是A>720
B>
120
C>24
D>6f<int
b[],int
n>{
int
i,r=1;for<i=0;i<=n;i++>r=r*b[i];returnr;}main<>{
int
x,a[]={2,3,4,5,6,7,8,9};x=f<a,3>;printf<"%d\n",x>;}[解析]調(diào)用x=f<a,3>;for循環(huán)4次,將前四個(gè)元素相乘,即得r=2*3*4*5;
[9.8]
以下程序中若第一個(gè)printf語句輸出的是194,則第二個(gè)printf語句的輸出結(jié)果是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<"%x\n",p>;printf<"%x\n",p+9>;
}[解析]因?yàn)殚_始p的地址為194,p+9是指指針向后移動(dòng)9個(gè)元素,而不是9個(gè)字節(jié),每個(gè)int占2個(gè)字節(jié),所以共移動(dòng)18個(gè)字節(jié),1個(gè)字節(jié)占一個(gè)存儲(chǔ)單位,%x\n"是16進(jìn)制,將18轉(zhuǎn)化成16進(jìn)制是12,所以194+12=2a6
[9.9]
以下程序的輸出結(jié)果是A>0987654321
B>
4321098765
C>5678901234
D>0987651234fun<int
*s,int
n1,intn2>{
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
a[10]={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
n1,intn2>的作用,我自己完善了程序如下:#include<stdio.h>#include<stdlib.h>fun<int*s,intn1,intn2>{inti,j,t;i=n1;j=n2;while<i<j>{t=*<s+i>;*<s+i>=*<s+j>;*<s+j>=t;i++;j--;}}main<>{inta[10]={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">;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é)果如下:其實(shí),fun<p,0,3>;就是將a中的前4個(gè)元素倒序,fun<p,4,9>;就是將a中的第5個(gè)到第10個(gè)倒序,最后fun<p,0,9>;全部元素倒序。
[9.10]
以下程序的輸出結(jié)果是A>4
4
B>2
2
C>24
D>46main<>{
int
a[5]={2,4,6,8,10},*p,**k;p=a;
k=&p;printf<"%d",*<p++>>;printf<"%d\n",**k>;}[解析]p指向a的第一個(gè)元素,printf<"%d",*<p++>>;先輸出第一個(gè)元素為2,然后p++,所以p的地址就為指向4,k=&p;k是存放p的地址的,*k=p,**k就是p所指的元素為4,所以結(jié)果為24
[9.11]
當(dāng)運(yùn)行以下程序時(shí)輸入三行,每行都是在第一列上開始,<CR>代表Enter鍵;a<CR>b<CR>cdef<CR>則程序的輸出結(jié)果是A>abcdef
B>a
C>a
D>ab
b
bc
cd
cdef
d
f#include"stdio.h"#define
N
6main<>{charc[N];
int
i=0;for<i=0;i<N;i++>
c[i]=getchar<>;for<i=0;i<N;i++>
putchar<c[i]>;}[解析]回車鍵也是字符,所以a<CR>b<CR>cd這六個(gè)字符輸出
[9.12]
若有定義和語句:
int
c[4][5],<*cp>[5];
cp=c;則對(duì)C數(shù)組元素的引用正確的是
A>cp+1
B>*<cp+3>
C>*<cp+1>+3
D>*<*cp+2>[解析]cp是行指針,只表示行,若要表示元素,則需要配合列A:表示第二行B:表示第四行的容,但是為指出那一列C:*<cp+1>+3只是地址不是元素值,需改為*〔
*<cp+1>+3
[9.13]
若已定義:
int
a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},<*prt>[3]=a,*p=a[0];則能夠正確表示數(shù)組元素a[1][2]的表達(dá)式是A>*<<*prt+1>[2]>
B>*<*<p+5>>
C><*prt+1>+2
D>*<*<a+1>+2>[解析]A:多了外層的*〔,B:p是行地址,加5越界。C:少了外層的*〔
[9.14]
若有定義和語句:int
a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},<*prt>[3]=a,*p[4],i;for<i=0;i<4;i++>
p[i]=a[i];則下能夠正確表示a數(shù)組元素的表達(dá)式是A>a[4][3]
B>p[0][0]
C>
prt[2][2]
D><*<p+1>>[1]
[9.15]
以下程序的輸出結(jié)果是A>23
B>
26
C>33
D>36main<>{intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for<i=0;i<2;i++>{ if<i==0>aa[i][i+1]=*p+1; else++p; printf<"%d",*p>;} printf<"\n">;}[解析]p指向第一個(gè)元素2,if<i==0>aa[i][i+1]=*p+1;給aa[0][1]賦值2+1=3打印出p的容為2,第二次for循環(huán)++p,使p指向下一個(gè)元素即aa[0][1]=3,輸出其容為3
[9.16]
以下程序的輸出結(jié)果是A>60
B>
68
C>99
D>108main<>{
int
a[3][4]={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++>
for<j=0;j<2;j++>
k+=*<*<p+i>+j>;printf<"%d\n",k>;}[解析]k+=*<*<p+i>+j>;即求和:a[0][0]+a[0][1]+a[1][0]+a[1][1]+a[2][0]+a[2][1]=1+3+11+13+17+19=60
[9.17]
以下程序的輸出結(jié)果是
A>1,5,9,
B>1,4,7,
C>3,5,7,
D>3,6,9,main<>{
int
i,x[3][3]={1,2,3,4,5,6,7,8,9};for<i=0;i<3;i++>
printf<"%d,",x[i][2-i]>;}[解析]即輸出x[0][2]x[1][1]x[2][0]分別為357
[9.18]
若有定義語句int
<*p>[M];
其中的標(biāo)識(shí)符是
A>M個(gè)指向整型變量的指針
B>指向M個(gè)整型變量的函數(shù)指針C>一個(gè)指向具有M個(gè)整型元素的一維數(shù)組指針D>具有M個(gè)指針元素的一維指針數(shù)組,每個(gè)元素都只能指向整型量二、填空題
[9.19]
若有以下定義:
double
w[10];則數(shù)組元素下標(biāo)的上限是9,下限是0。
[9.20]
以下程序的輸出結(jié)果是6。main<>{inta[]={2,4,6},*ptr=&a[0],x=8,y,z;for<y=0;y<3;y++>z=<*<ptr+y><x>?*<ptr+y>:x;printf<"%d\n",z>;}[解析]因?yàn)閍[]中元素永遠(yuǎn)小于x=8,所以每次For循環(huán)都執(zhí)行z=<*<ptr+y>,循環(huán)3次最后輸出的z為6〔前幾次的z都被覆蓋了
[9.21]
以下程序的輸出結(jié)果是12。main<>{
int
arr[10],i,k=0;for<i=0;i<10;i++>
arr[i]=i;
for<i=0;i<4;i++>
k+=arr[i]+i;printf<"%d\n",k>;}[解析]首先arr[i]=i;使得arr[]中賦值0-9十個(gè)數(shù),for循環(huán)4次,k+=arr[i]+i;得k=0+0+1+1+2+2+3+3=12
[9.22]
以下程序的輸出結(jié)果是3
.#defineN5fun<char*s,chara,intn>{ intj; *s=a; j=n; while<a<s[j]>j--; returnj;}main<>{ chars[N+1]; intk,p; for<k=1;k<=N;k++>s[k]='A'+k+1; printf<"%d\n",fun<s,'E',N>>;}
[9.23]
若輸入3個(gè)整數(shù)3、2、1,則以下程序的輸出結(jié)果是2721。#include<stdio.h>#include<stdlib.h>voidsub<intn,intuu[]>{ intt; t=uu[n--]; t+=3*uu[n]; n++; if<t>=10> { uu[n++]=t/10;uu[n]=t%10; } else uu[n]=t;}main<>{ inti,n,aa[10]={0}; scanf<"%d%d%d",&n,&aa[0],&aa[1]>; for<i=1;i<n;i++>sub<i,aa>; for<i=0;i<=n;i++>printf<"%d",aa[i]>; printf<"\n">;}
[9.24]
以下程序的輸出結(jié)果是-850,2,0
.main<>{
int
i,j,row,col,m;
int
arr[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};m=arr[0][0];for<i=0;i<3;i++>for<j=0;j<3;j++>if<arr[i][j]<m>{m=arr[i][j];
row=i;
col=j;}printf<"%d,%d,%d\n",m,row,col>;}[解析]本題是為找出數(shù)組中的最小值,并輸出其下標(biāo)
[9.25]
以下findmax返回?cái)?shù)組s中最大元素的下標(biāo),數(shù)組中元素的個(gè)數(shù)由t傳入,請(qǐng)?zhí)羁?。findmax<int
s[],int
t>{
int
k,p;
for<p=0,k=p;p<t;p++>
if<s[p]>s[k]>
k=p
;return
k;}
[9.26]
以下程序統(tǒng)計(jì)從終端入的字符寫字母的個(gè)數(shù),中統(tǒng)計(jì)字母的個(gè)數(shù),其它依次類推。用#號(hào)結(jié)束輸入,請(qǐng)?zhí)羁铡?include
"stdip.h"#include
"ctype.h"main<>{
int
num[26]={0},i;
charc;while<<c=getchar<>>!="#">
if<isupper<c>>
num+=1;for<i=0;i<26;i++>if<num[i]>
printf<"%c:%d\n",i+'A',num[i]>;}
三、編程題
[9.27]
輸入一行數(shù)字字符,請(qǐng)用數(shù)組元素作為計(jì)數(shù)器來統(tǒng)計(jì)每個(gè)數(shù)字字符的個(gè)數(shù)。用下標(biāo)為0元素統(tǒng)計(jì)字符"1"的個(gè)數(shù),下標(biāo)為1的元素統(tǒng)計(jì)字符"2"的個(gè)數(shù),...。[解析]#include<stdio.h>#include<stdlib.h>#include<ctype.h>main<>{ intnum[10]={0},number;charaa; printf<"請(qǐng)輸入一串?dāng)?shù)字,并以#結(jié)束:">; while<<aa=getchar<>>!='#'>{ number=<int>aa;//將字符強(qiáng)制轉(zhuǎn)化為數(shù)字 number-=48;//由于0的ASCII碼為48,所以轉(zhuǎn)換后要減去48 num[number-1]++;//出現(xiàn)一個(gè)字符,將記錄該字符個(gè)數(shù)的數(shù)組元素相應(yīng)加1 } for<inti=0;i<9;i++>{ printf<"%d的個(gè)數(shù)為:%d\t",i+1,num[i]>;//輸出結(jié)果 } printf<"\n">;}
[9.29]
編寫函數(shù)把數(shù)組中所有奇數(shù)放在另一個(gè)數(shù)組中返回。#include<stdio.h>#defineN10main<>{ intnum1[N]={2,3,56,78,13,45,66,79,80,91},*ptr,count=0,num2[N]={0}; ptr=num1; for<inti=0;i<N;i++>{ if<ptr[i]%2!=0>{ num2[i]=ptr[i]; count++; } }for<i=0;i<N;i++>{ if<num2[i]!=0> printf<"Odds的元素為:%2d\t",num2[i]>; } printf<"\n">;}
[9.30]
編寫函數(shù)對(duì)字符數(shù)組中的輸入字母,按由大到小的字母順序進(jìn)行排序。#include<stdio.h>main<>{ charchr[]={'a','h','c','k','z','c','h','c','y','l','n','w','q','f','b'}; chart;for<inti=0;i<14;i++>{ for<intj=i+1;j<15;j++>{ if<chr[i]>chr[j]>{ t=chr[i];chr[i]=chr[j];chr[j]=t; } } } for<i=0;i<15;i++>{ printf<"chr[%2d]:%c\t",i,chr[i]>; } printf<"\n">;}
[9.31]
輸入若干有序數(shù)放在數(shù)組中。然后輸入一個(gè)數(shù),插入到此有序數(shù)列中,插入后,數(shù)組中的數(shù)仍然有序。請(qǐng)對(duì)以下三種情況運(yùn)行你的程序,以便驗(yàn)證你的程序是否下確。〔1插在最前〔2插在最后〔3插在中間#include<stdio.h>#include<stdlib.h>#include<ctype.h>#defineN6intjudgePosition<int[],int>;voidexchange<int[],int,int>;main<>{intarr[N]={10,20,30,40,50},insert,posit; printf<"請(qǐng)輸入待插入的數(shù):\n">; scanf<"%d",&insert>; posit=judgePosition<arr,insert>; exchange<arr,posit,insert>; printf<"\n">;}intjudgePosition<inttemp[],intinsert>{ inti;for<i=0;i<N-1;i++>{ if<insert<temp[i]>break;}returni;}voidexchange<inttemp[],intposit,intinsert>{ for<inti=N-2;i>=posit;i-->{ temp[i+1]=temp[i]; } temp[posit]=insert; for<i=0;i<N;i++>{ printf<"arr[%2d]=%2d\n",i,temp[i]>; }}
[9.32]
編寫函數(shù)把任意十進(jìn)制下整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)。提示:把十進(jìn)制數(shù)不斷被2除余數(shù)放在一個(gè)一維數(shù)組中,直到商數(shù)為零。在主函數(shù)中進(jìn)行輸出,要求不得按逆序輸出。#include<stdio.h>#defineN10main<>{ intorigin,result[N],i=0; printf<"請(qǐng)輸入一個(gè)十進(jìn)制的數(shù):\n">; scanf<"%d",&origin>; do{ result[i]=origin%2; origin/=2; i++; }while<origin>;printf<"該十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)為:">;for<intj=i-1;j>=0;j-->{ printf<"%d",result[j]>;} printf<"\n">;}
[9.33]
編寫函數(shù)調(diào)用隨機(jī)函數(shù)產(chǎn)生0到19之間的隨機(jī)數(shù),在數(shù)組中存入15個(gè)互不重復(fù)的整數(shù)。要求在主函數(shù)中輸出結(jié)果。若已定義為類型,調(diào)用隨機(jī)函數(shù)步驟如下:
#include
"stdlib.h"
x=rand<>%20
/*產(chǎn)生0到19的隨機(jī)數(shù)*/#include<stdio.h>#include<stdlib.h>#defineN15voidrandom<>;intcompare<int[],int,int>;main<>{random<>;printf<"\n">;}voidrandom<>{ intrandom[N]={0},tag=0,x=-1,i; for<i=0;i<N;i++>{ x=rand<>%20;/*產(chǎn)生0到19的隨機(jī)數(shù)*/ tag=compare<random,x,i>; while<tag!=1>{ x=rand<>%20;/*產(chǎn)生0到19的隨機(jī)數(shù)*/ tag=compare<random,x,i>; } random[i]=x; } printf<"15個(gè)0-19的不同隨機(jī)數(shù)為:">; for<i=0;i<N;i++>{ printf<"%d\t",random[i]>; }}intcompare<intrandom[],intx,inti>{ for<intj=0;j<=i;j++>{if<x==random[j]>{ return0; } } return1;}
[9.34]
編寫程序求任意方陣每行、每列、兩對(duì)角線一元素之和。#include<stdio.h>#defineM3main<>{ intcol[M]={0},ver[M]={0},rec[M][M],xsum=0,x_sum=0; for<inti=0;i<M;i++>{ for<intj=0;j<M;j++>{ printf<"請(qǐng)輸入元素:">; scanf<"%d",&rec[i][j]>; } } for<i=0;i<M;i++>{ for<intj=0;j<M;j++>{ printf<"rec[%d][%d]=%d\t",i,j,rec[i][j]>; } printf<"\n">; } printf<"\n">; for<i=0;i<M;i++>{ for<intj=0;j<M;j++>{col[i]=col[i]+rec[i][j]; ver[i]+=rec[j][i]; if<i+j==M-1>{ x_sum+=rec[i][j]; } if<i==j>{ xsum+=rec[i][j]; } } } for<i=0;i<M;i++>{ printf<"各行元素之和分別為:col[%d]=%d\n",i,col[i]>; } printf<"\n">; for<i=0;i<M;i++>{ printf<"各列元素之和分別為:ver[%d]=%d\n",i,ver[i]>; } printf<"\n">; printf<"主對(duì)角線上的元素的和為:%d\n\n副對(duì)角線上的元素的和為:%d\n",xsum,x_sum>;}若要改變矩陣的維數(shù)可以只改變M的大小即可。
[9.35]
編寫程序求兩個(gè)矩陣的和。#include<stdio.h>#defineM4#defineN3voidinput<int[M][N]>; voidoutput<int[M][N]>;voidsumAdd<int[M][
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度勞動(dòng)合同終止與離職證明書
- 二零二五年度股東持股權(quán)益變動(dòng)與公司長期發(fā)展戰(zhàn)略協(xié)議
- 施工現(xiàn)場(chǎng)施工防地質(zhì)災(zāi)害制度
- 職場(chǎng)演講稿的創(chuàng)意寫作技巧
- 持續(xù)關(guān)注客戶體驗(yàn)銀行如何通過CRM提升其貸款業(yè)務(wù)的穩(wěn)健性
- 防疫物資保障應(yīng)急預(yù)案
- 二手房屋買賣合同協(xié)議
- 中外合資飯店建設(shè)與運(yùn)營合同
- 三方就業(yè)合同模板
- 產(chǎn)學(xué)研合作協(xié)議合同樣本
- 2025版大學(xué)食堂冷鏈?zhǔn)巢呐渌头?wù)合同模板3篇
- 新能源發(fā)電項(xiàng)目合作開發(fā)協(xié)議
- 《中醫(yī)體重管理臨床指南》
- 2025年上半年潞安化工集團(tuán)限公司高校畢業(yè)生招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2025年山東魯商集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 大型活動(dòng)中的風(fēng)險(xiǎn)管理與安全保障
- 課題申報(bào)書:個(gè)體衰老差異視角下社區(qū)交往空間特征識(shí)別與優(yōu)化
- 江蘇省招標(biāo)中心有限公司招聘筆試沖刺題2025
- 綜采工作面過空巷安全技術(shù)措施
- 云南省麗江市2025屆高三上學(xué)期復(fù)習(xí)統(tǒng)一檢測(cè)試題 物理 含解析
評(píng)論
0/150
提交評(píng)論