C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組

上傳人:xins****2008 文檔編號(hào):94143249 上傳時(shí)間:2022-05-22 格式:DOC 頁(yè)數(shù):31 大小:77.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組_第1頁(yè)
第1頁(yè) / 共31頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組_第2頁(yè)
第2頁(yè) / 共31頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組_第3頁(yè)
第3頁(yè) / 共31頁(yè)

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第7章數(shù)組(31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第7章 數(shù)組【練習(xí) 7-1】將例 7-3 程序中的 break 語(yǔ)句去掉,輸出結(jié)果有變化嗎?假設(shè)輸入數(shù)據(jù)不變,輸出什么?解答:當(dāng)去掉 break 語(yǔ)句后,一旦找到數(shù)據(jù)將不跳出循環(huán),而是繼續(xù)往下找值為 x 的元素,因此程序輸出會(huì)有變化。當(dāng)輸入數(shù)據(jù)仍為 2 9 8 1 9 時(shí),輸出將是 index is 1 index is 4?!揪毩?xí)7-2】將數(shù)組中的數(shù)逆序存放。輸入一個(gè)正整數(shù)n(1n=10),再輸入n個(gè)整數(shù),存入數(shù)組a中,輸出最大值及其對(duì)應(yīng)的最小下標(biāo),下標(biāo)從0開始。試編寫相應(yīng)程序。解答:#includeint main(void)int i,n,temp;int a10;printf(Inpu

2、t n:);scanf(%d,&n);printf(Input %d integer:,n);for(i=0;in;i+)scanf(%d,&ai);printf(After reversed:);for(i=0;in/2;i+)temp=ai;ai=an-1-i;an-1-i=temp;for(i=0;in;i+)printf(%d ,ai);return 0;【練習(xí)7-3】求最大值及其下標(biāo)。輸入一個(gè)正整數(shù)n(1n=10),再輸入n個(gè)整數(shù),存入數(shù)組a中,將先數(shù)組a中的這n個(gè)數(shù)逆序存放,在按順序輸出數(shù)組a中的n各元素。試編寫相應(yīng)程序。解答:#includeint main(void)int i

3、,index,n;int a10;printf(Enter n:);scanf(%d,&n);printf(Enter %d integrs:,n);for(i=0;i=0;i+)printf(%d ,ai);return 0; 【練習(xí) 7-4】找出不是兩個(gè)數(shù)組共有的元素。輸入一個(gè)正整數(shù) n (1n10),再輸入 n 個(gè)整數(shù),存入第1個(gè)數(shù)組中;然后輸入一個(gè)正整數(shù)m(1m=10),再輸入m個(gè)整數(shù),存入第2個(gè)數(shù)組,找出所有不是這兩個(gè)數(shù)組共有的元素。試編寫相應(yīng)程序。解答:#includeint main(void) int i,j,k,m,n,flag,equal;int a25,b25,c25;

4、printf(Enter m:); scanf(%d,&m); printf(Enter %d integers:,m); for(i=0;im;i+) scanf(%d,&ai); printf(Enter n:); scanf(%d,&n); printf(Enter %d integers:,n); for(j=0;jn;j+) scanf(%d,&bj); k=0; for(i=0;im;i+) flag=0; for(j=0;ji;j+) if(ai=aj) flag=1;/判斷一個(gè)數(shù)組中是否有相重的元素,有的話不執(zhí)行 if(!flag) equal=0; for(j=0;jn;j+

5、) if(ai=bj) equal=1; break; if(!equal) ck+=ai; for(i=0;in;i+) flag=0; for(j=0;ji;j+) if(bi=bj) flag=1; if(!flag) equal=0; for(j=0;jm;j+) if(bi=aj) equal=1; break; if(!equal) ck+=bi; printf(%d,c0); for(i=1;ik;i+) printf( %d, ci); printf(n); return 0;【練習(xí) 7-5】給二維數(shù)組賦值時(shí),如果把列下標(biāo)作為外循環(huán)的循環(huán)變量,行下標(biāo)作為內(nèi)循環(huán)的循環(huán)變量,輸入的

6、數(shù)據(jù)在二維數(shù)組中如何存放?用下列 for 語(yǔ)句替換例 7-7 中的對(duì)應(yīng)語(yǔ)句,將輸入的 6 個(gè)數(shù)存入二維數(shù)組中,假設(shè)輸入數(shù)據(jù)不變,輸出什么?與例 7-7 中的輸出結(jié)果一樣嗎?為什么?for( j=0;j2;j+)for( i=0;i3;i+)scanf(“%d”,&aij);解答:當(dāng)把列下標(biāo)作為外循環(huán)的循環(huán)變量,行下標(biāo)作為內(nèi)循環(huán)的循環(huán)變量時(shí),輸入的數(shù)據(jù)將以列優(yōu)先的方式存放。當(dāng)用上述 for 循環(huán)方式時(shí),輸出結(jié)果為:max=a20=10,與原例 7-7不一樣,因?yàn)楫?dāng)用上述方式輸入是,二維數(shù)組中存放值如下: 3 - 9 2 610 - 1【練習(xí) 7-6】 在例 7-9 的程序中,如果將遍歷上三角矩陣

7、改為遍歷下三角矩陣,需要怎樣修改程序?運(yùn)行結(jié)果有變化嗎?如果改為遍歷整個(gè)矩陣,需要怎樣修改程序?輸出是什么?為什么?解答:只需按要求修改矩陣的輸出部分,方法如下,其運(yùn)行結(jié)果不變。 for(i = 0; i n; i+) for(j = 0; j i; j+)temp = aij; aij = aji; aji = temp; 若修改為遍歷整個(gè)程序,方法如下,則運(yùn)行結(jié)果仍將輸出原矩陣,無(wú)法達(dá)到轉(zhuǎn)置要求,原因是矩陣中每個(gè)元素相應(yīng)被交換了 2 次。 for(i = 0; i n; i+) for(j = 0; j n; j+) temp = aij; aij = aji; aji = temp;/先

8、是下三角進(jìn)行交換,后是上三角進(jìn)行交換 【練習(xí)7-7】矩陣運(yùn)算:讀入1個(gè)正整數(shù)n(1n6),再讀入n階方陣a,計(jì)算該矩陣除副對(duì)角線、最后一列和最后一行以外的所有元素之和。副對(duì)角線為從矩陣的右上角至左下角的連線。試編寫相應(yīng)程序。解答:#include int main(void) int i,j,n,sum; int a66; printf(Input n:); scanf(%d,&n); printf(Input array:n ); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); sum=0; for(i=0;in;i+) for(j=0;jn;j+

9、) if(i!=n-1&j!=n-1&i+j!=n-1) sum+=aij; printf(sum=%dn,sum); return 0;【練習(xí) 7-8】方陣循環(huán)右移。讀入2個(gè)正整數(shù)m和n(1=n6),在讀入n階方陣a,將該方陣中的每個(gè)元素循環(huán)向右移m個(gè)位置,即將第0、1、n-1列變換為第n-m、n-m+1、n-1、0、1、n-m-1列,移動(dòng)后的方陣可以存到另一個(gè)二維數(shù)組中。試編寫相應(yīng)程序。解答:#includeint main(void)int m,n,i,j,count;int a66,b66;printf(Enter m:);scanf(%d,&m);printf(Enter n:);s

10、canf(%d,&n);printf(Input array:n);for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij);for(i=0;in;i+) count=0; for(j=0;jn;j+) if(jn-m) bij+m=aij; elsebicount+=aij;for(i=0;in;i+) for(j=0;jn;j+) printf(%d ,bij); printf(n); return 0;【練習(xí) 7-9】計(jì)算天數(shù):輸入日期(年、月、日),輸出它是該年的第幾天。要求調(diào)用例 7-10 中定義的函數(shù) day_of_year(year, month,

11、 day)。試編寫相應(yīng)程序。解答:#includeint day_of_year(int year, int month, int day);int main(void) int year,month,day,day_year; printf(Input year,month,day: ); scanf(%d%d%d,&year,&month,&day); day_year=day_of_year(year,month,day); printf(Days of year: %dn,day_year); return 0;int day_of_year(int year,int month,in

12、t day)int k,leap;int tab213= 0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31;leap=(year%4=0&year%100!=0|year%400=0);for(k=1;kmonth;k+) day=day+tableapk;return day; 【練習(xí)7-10】查找指定字符。輸入一個(gè)字符,再輸入一個(gè)以回車符結(jié)束的字符串(少于80個(gè)字符)。如果找到,則輸出該字符在字符串中所對(duì)應(yīng)的最大下標(biāo),下標(biāo)從0開始;否則輸出”Not Found”。試編寫相應(yīng)程序。解答:#

13、includeint main(void)int i,max,flag;char a80,op;printf(Enter a x:);op=getchar(); fflush(stdin);/或setbuf(stdin,NULL);printf(Enter a string:);i=0;while(ai=getchar()!=n) i+;ai=0;max=0;flag=0;for(i=0;ai!=0;i+) if(ai=op) max=i; flag=1;if(flag=1) printf(Max=%d,max);else printf(Not Found!);return 0; 【練習(xí)7-1

14、1】字符串逆序:輸入一個(gè)以回車符結(jié)束的字符串(少于80個(gè)字符),將該字符串逆序存放,輸出逆序后的字符串。試編寫相應(yīng)程序。解答:#includeint main(void)int i;char str80,a80;printf(Enter a string:);i=0;while(stri=getchar()!=n) i+;stri=0;for(;i=0;i-) putchar(stri); return 0;習(xí)題7一選擇題1假定int類型變量占用兩個(gè)字節(jié),其有定義:int x10=0,2,4; 則數(shù)組x在內(nèi)存中所占字節(jié)數(shù)是 D 。A3 B6 C10 D202以下能正確定義數(shù)組并正確賦初值的語(yǔ)句

15、是 D 。Aint N=5,bNN;Bint a12=1,3;Cint c2=1,2,3,4;Dint d32=1,2,34;3 若有定義:int a23;以下選項(xiàng)中對(duì)數(shù)組元素正確引用的是 D 。Aa20 Ba23 Ca 03 Da1214設(shè)有數(shù)組定義:char array =China;則數(shù)組array 所占的空間為 C 。A4 個(gè)字節(jié) B5 個(gè)字節(jié) C6 個(gè)字節(jié) D7 個(gè)字節(jié)5下述對(duì) C 語(yǔ)言字符數(shù)組的描述中錯(cuò)誤的是 D 。A字符數(shù)組可以存放字符串B字符數(shù)組中的字符串可以整體輸入、輸出C可以在賦值語(yǔ)句中通過(guò)賦值運(yùn)算符=對(duì)字符數(shù)組整體賦值D不可以用關(guān)系運(yùn)算符對(duì)字符數(shù)組中的字符串進(jìn)行比較6有以

16、下定義:char x =abcdefg; char y =a,b,c,d,e,f,g; 則正確的敘述為 C 。A數(shù)組x和數(shù)組y等價(jià) B . 數(shù)組x和數(shù)組y的長(zhǎng)度相同C數(shù)組x的長(zhǎng)度大于數(shù)組y的長(zhǎng)度 D數(shù)組x的長(zhǎng)度小于數(shù)組y的長(zhǎng)度7以下程序的輸出結(jié)果是 C 。int main(void) int m 3=1,4,7,2,5,8,3,6,9;int i, j, k=2;for (i=0;i3;i+)printf (%d ,mki);A4 5 6 B2 5 8 C3 6 9 D7 8 98以下程序的輸出結(jié)果是 B 。int main(void) int aa44=1,2,3,4,5,6,7,8,3,9

17、,10,2,4,2,9,6;int i, s=0;for(i=0;i4;i+) s+=aai1;printf(%dn,s);A11 B19 C13 D20二填空題1設(shè)有定義語(yǔ)句:int a 3=0,1,2; 則數(shù)組元素a12的值是 0 。2下列程序的功能是:求出數(shù)組 x 中各相鄰兩個(gè)元素的和依次存放到a數(shù)組中,然后輸出。請(qǐng)?zhí)羁铡nt main(void ) int x10,a9,i; for(i=0; i10; i+) scanf(%d,&xi); for( _i=1_; i10; i+ ) ai-1=xi+_xi-1 _ ; for(i=0; i9; i+ +) printf(%d ,ai

18、); printf(n);3寫出下列程序的運(yùn)行結(jié)果是 -12 。int main(void) int a10=10,1,-20,-203,-21,2,-2,-2,11,-21;int j,s=0;for(j=0;j10;j+) if(a j%2=0) s+=aj; printf(s=%dn,s); 4寫出下面程序的運(yùn)行結(jié)果 。#include int main(void) float s6=1, 3, 5, 7, 9; float x; int i; scanf(“%f”, &x);for (i=4 ; i=0; i-) if(six) si+1=si; else break;printf(%

19、d n,i+1);return 0;(1) 如果輸入 4,則輸出 2 。(2) 如果輸入 5,則輸出 3 。5下列程序的功能是輸出如下形式的方陣,請(qǐng)?zhí)羁铡?3 14 15 169 10 11 125 6 7 81 2 3 4int main(void) int i,j,x;for(j=4;_j=1_;j-) for(i=1;i=4;i+) x=(j-1)*4+_i_; printf(%4d,x);printf(n);6 以下程序的功能是用來(lái)檢查二維數(shù)組是否對(duì)稱(即對(duì)所有的i,j都有ai j=aj i)。請(qǐng)?zhí)羁铡nt main(void) int a44=1,2,3,4,2,2,5,6,3,7

20、,8,6,7,4; int i,j,found=0;for(j=0;j4;j+) for(i=0;i4;i+) if(_aji!=aij_) _found=1;_ break; if(_found=1_)break;if(found!=0) printf(該二維數(shù)組不對(duì)稱n);else printf(該二維數(shù)組對(duì)稱n);return 0;三程序設(shè)計(jì)題1. 選擇法排序。輸入一個(gè)正整數(shù) n (1n10),再輸入n個(gè)整數(shù),將它們從大到小排序后輸出。試編寫相應(yīng)程序。解答:#includeint main(void)int i,n,index,k,temp;int a10;printf(Enter n:

21、);scanf(%d,&n);printf(Input %d integers:,n);for(i=0;in;i+) scanf(%d,&ai);for(k=0;kn-1;k+) index=k; for(i=k+1;in;i+) if(aindexai) index=i; temp=aindex; aindex=ak; ak=temp; printf(After sorted:); for(i=0;in;i+) printf(%d,ai); printf(n); return 0;2. 求一批整數(shù)中出現(xiàn)最多的數(shù)字。輸入一個(gè)正整數(shù)n(1n1000),再輸入n個(gè)整數(shù),分析每個(gè)整數(shù)的每一位數(shù)字,求

22、出現(xiàn)次數(shù)最多的數(shù)字。例如輸入3個(gè)整數(shù)1234、2345、3456,其中出現(xiàn)次數(shù)最多的數(shù)字是3和4,均出現(xiàn)了3次。試編寫相應(yīng)程序。解答:#includeint main(void)int i,j,k,g,n,max;int a1000,b1000,count1000;printf(Enter n:);scanf(%d,&n);printf(Enter %d integers:,n);for(i=0;in;i+) scanf(%d,&ai);for(i=0;i=9;i+) counti=0;for(i=0;i=9;i+) for(j=0;jn;j+) for(k=0;kn;k+) bk=ak; w

23、hile(aj!=0) if(aj%10=i) counti+; aj=aj/10;for(k=0;kn;k+) ak=bk;max=count0;for(i=0;i=9;i+) if(maxcounti) max=counti;printf(出現(xiàn)最多次數(shù)的數(shù)字和次數(shù)是:);for(i=0;i=9;i+) if(max=counti) printf(%2d-%d,i,counti);return 0;3. 判斷上三角矩陣。輸入一個(gè)正整數(shù)n (1n6)和n階方陣a中的元素,如果a是上三角矩陣,輸出“YES”,否則,輸出“NO”。上三角矩陣,即主對(duì)角線以下的元素都為0的矩陣,主對(duì)角線為從矩陣的左上

24、角至右下角的連線。試編寫相應(yīng)程序。解答:#include int main(void) int i,j,n,flag;int a66; printf(Input n:); scanf(%d,&n); printf(Input array:n); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); for(j=1;jn;j+) flag=0; for(i=1;ij;i+) if(aij=0) flag=1; if(flag) printf(YES!n); else printf(NO!n); return 0;4求矩陣各行元素之和。輸入2個(gè)正整數(shù)m和n (

25、1m6,1 n6),然后輸入該m行n列矩陣a中的元素,分別求出各行元素之和,并輸出。試編寫相應(yīng)程序。解答:#include int main(void) int i,j,m,n,sum; int a66; printf(Input m:); scanf(%d,&m);printf(Input n:); scanf(%d,&n); printf(Input array:n ); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); for(i=0;im;i+) sum=0; for(j=0;jn;j+) sum=sum+aij; printf(sum of

26、row %d is %dn,i,sum); return 0;5找鞍點(diǎn)。輸入一個(gè)正整數(shù)n(1n6)和n階方陣a中的元素,假設(shè)方陣a最多有1個(gè)鞍點(diǎn),如果找到a的鞍點(diǎn),就輸出它的下標(biāo);否則,輸出NO。鞍點(diǎn)的元素值在該行上最大,,在該列上最小。試編寫相應(yīng)程序。解答:#includeint main(void) int flag,i,j,k,row,col,n;int a66; printf(Input n: ); scanf(%d,&n); printf(Input array:n ); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&aij); for(i=0;in

27、;i+) flag=1; col=0; for(j=0;jn;j+) if(aicolaij) col=j; for(k=0;kakcol) flag=0;break; if(flag) row=i; break; if(flag) printf(a%d%d=%dn,row,col,arowcol); else printf(NOn); return 0;7字符串替換。輸入一個(gè)以回車結(jié)束的字符串(少于 80 個(gè)字符),將其中的大寫字母用下面列出的對(duì)應(yīng)大寫字母替換,其余字符不變,輸出替換后的字符串。試編寫相應(yīng)程序。原字母 對(duì)應(yīng)字母 A Z B Y C X D W X C Y B Z A解答:#i

28、nclude int main(void) int i; char ch,str80; printf(Input a string: ); i=0; while(ch=getchar()!=n) stri+=ch; stri=0; for(i=0;stri!=0;i+) if(stri=A) stri=A+Z-stri; printf(After replaced:); for(i=0;stri!=0;i+) putchar(stri); putchar(n); return 0;8 字符串轉(zhuǎn)換成十進(jìn)制整數(shù)。輸入一個(gè)以字符”#”結(jié)束的字符串濾去所有的非十六進(jìn)制字符(不分大小寫),組成一個(gè)新的表

29、示十六進(jìn)制數(shù)字的字符串,然后將其轉(zhuǎn)換為十進(jìn)制數(shù)后輸出。如果過(guò)濾后字符串的首字符為”-”,代表該數(shù)是負(fù)數(shù)。試編寫相應(yīng)程序。解答:#includeint main(void)int i,j,k;char hexad80,str80;long number;printf(Enter a string:);i=0;while(stri=getchar()!=#) i+;stri=0;k=0;for(i=0;stri!=0;i+) if(stri=-|stri=0&stri=a&stri=A&stri=0&hexadi=A&hexadi=a&hexadi=f) number=number*16+hexadi-a+10; if(hexad0=-) printf(Number=%ldn,-number);else printf(Number=%ldn,number);return 0;

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!