C语言程序设计何钦铭颜晖第7章数组.docx
- 文档编号:25414210
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:22
- 大小:24.76KB
C语言程序设计何钦铭颜晖第7章数组.docx
《C语言程序设计何钦铭颜晖第7章数组.docx》由会员分享,可在线阅读,更多相关《C语言程序设计何钦铭颜晖第7章数组.docx(22页珍藏版)》请在冰豆网上搜索。
C语言程序设计何钦铭颜晖第7章数组
第7章数组
【练习7・1】将例7-3程序中的break语句去掉,输出结果有变化吗?
假设输入数据不变,输出什么?
解答:
当去掉break语句后,一旦找到数据将不跳出循环,而是继续往下找值为x的元素,因此程序输出会有变化。
当输入数据仍为29819时,输出将是indexis1indexis4O
【练习7-2】将数组中的数逆序存放。
输入一个正整数n(Kn<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始。
试编写相应程序。
解答:
#include
inti,n,temp;
inta[10];
printf("lnputn:
M);
scant(期d:
&n);printf(”lnput%dinteger:
'\n);for(i=0;i scanf「%d: &a[i]);printfC'Afterreversed: ");for(i=0;i temp=a[i];a[i]=a[n-l-i];a[n-l-i]=temp: } for(i=0;i a[i]); return0; 【练习7・3】求最大值及其下标。 输入一个正整数n(l 试编写相应程序。 解答: #include inti,index,n;inta[10]; printf("Entern: M);scanff%d: &n); printf「Enter%dintegrs: ",n);for(i=0;i &a[i]); for(i=n-l;i>=0;i++)printf('%d: return0; 【练习7-4]找出不是两个数组共有的元素。 输入一个正整数n(l 试编写相应程序。 解答: #include intijXm,n,flag,equal; inta[25],b[25],c[25]; printf("Enterm: n);scanff'%d: &n);printf(,,Enter%dintegers: ",m); for(i=0;i printf("Entern: M); scanff场d: &n);printf(MEnter嵋dintegers: ",n); for(j=0;j scanf(n%dH,&b[j]); k二0; for(i=0;i flag=O; for(j二O;j if(a[i]==aOJ) flag^l;//判断一个数组中是否有相重的元素,有的话不执行 equal=0; for(j=0;j if(! equal) c[k++]=a[i]; } } for(i=0;i flag=O; forG=0;j if(bD]==bffl) flag=l; if(! flagX equal=0; for(j二0;j 二二a[j]){ equal=1; break; } if(! equal) c[k++]二b[i]; } } printf(,,%d,,,c[0]); for(i二2;i printf(”%d",c[i]); printf(M\nM); return0; } 【练习7-5]给二维数组賦值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的数据在二维数组中如何存放? 用下列for语句替换例7-7中的对应语句,将输入的6个数存入二维数组中,假设输入数据不变,输出什么? 与例7-7中的输岀结果一样吗? 为什么? for(j=0;j<2;j++) for(i=0;i<3;i++) 解答: 当把列下标作为外循环的循环变量,行下标作为内循环的循环变量时,输入的数据将以列优先的方式存放。 当用上述for循环方式时,输出结果为: max=a[2][0]=10,与原例7-7不一样,因为当用上述方式输入是,二维数组中存放值如下: 3-9 26 10-1 【练习7-6]在例7-9的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎样修改程序? 运行结果有变化吗? 如果改为遍历整个矩阵,需要怎样修改程序? 输出是什么? 为什么? 解答: 只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。 for(i=0;i for(j二0;j temp二a[i][j]; aBD]=aOJD]; aQ][i]=temp; } 若修改为遍历整个程序,方法如下,则运行结果仍将输出原矩阵,无法达到转置要求,原因是矩阵中每个元素相应被交换了2次。 for(i=0;i for(j=0;j temp=a[i]Q]; a丽]=aDlH; aO]H二temp;////先是下三角进行交换,后是上三角进行交换 } 【练习7-7]矩阵运算: 读入1个正整数n(lWnW6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。 副对角线为从矩阵的右上角至左下角的连线。 试编写相应程序。 解答: #inelude intmain(void) { inti,j,n,sum; inta⑹[6]; printf(,,lnputn: M); scanfC^d'&n); printf(MlnputarrayAnM); for(i=0;i for(j=0;j scant(期d: &a[i][j]); sum=0; for(i=0;i for(j=0;j if(i! =n-l&&j! 二rvl&&+j! =n-l)sum+=a[i][j]; printf(,,sum二汕n: sum); return0; } 【练习7-8]方阵循环右移。 读入2个正整数m和n(l<=n<6),在读入ri阶方阵a,将该方阵中的每个元素循环向右移m个位置,即将第0、1、…、n-1列变换为第n-m、n-m+l、…、n-K0、1、…、n-m-1列,移动后的方阵可以存到另一个二维数组中。 试编写相应程序.: : 解答: #include intmain(void) { intm,nJj.count; inta⑹[6],b[6]⑹; printf("Enterm: M); scanff'%d: &n); printf("Entern: M); scant(期d: &n); printf(Mlnputarray: \n,B); for(i=0;i for(j=0;j scant(期d: &a[i][j]); for(i=0;i count=0; for(j=0;j 计G b[i]G+m]=a[i]0]; else b0[count++]=a|j]O]; } for(i=0;i for(j=0;j printf("%d",b[i][j]); printfCV); } return0; } 【练习7-9]计算天数: 输入日期(年、月、日),输出它是该年的第几天。 要求调用例7-10中定义的函数day_of_year(year,month,day)o试编写相应程序: 解答: #include intday_of_year(intyear,intmonth,intday); intmain(void) { intyear.month,day,dayj(ear; printf(Mlnputyear,month,day: M); scanff'%d%d%d: &yeai;&month.&day); day_year=day_of^ear(year,month,day); printf("Daysofyear: %d\n,\day_year); return0; } intday_of_year(intyear.intmonthjntday) { intkleap; inttab[2][13]={ {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二(yearW4二二0&&year%100! =0||yearW400二二0); for(k=l;k day=day+tab[leap][k]; returnday; } 【练习7-10]查找指定字符。 输入一个字符,再输入一个以回车符结束的字符串(少于80个字符)。 如果找到,则输出该字符在字符串中所对应的最大下标,下标从0开始;否则输出wNotFounds试编写相应程序。 解答: #include intmain(void) { inti,max,flag; chara[80],op; printf(MEnterax: M); op=getchar(); fflush(stdin);//或setbuf(stdin,NULL); printf("Enterastring: u); i二0; while((a[i]=getcharO)! =i\n') i++; a[i]二、0: max二0; flag=0; for(i=0;a[i]! =,\0,;i++) if(a[i]==op){ max二i; flag=l; } if(flag==l) printfC'Max=%d: max); else print^'NotFound! *1); return0; } 【练习7-11]字符串逆序: 输入一个以回车符结束的字符串(少于80个字符),将该字符串逆序存放,输出逆序后的字符串。 试编写相应程序。 解答: #include intmain(void) { inti; charstr[80]? a[80]; printf("Enterastring: "); i二0; while((str[i]二getchar())! 二、rf) i++; for(;i>=0;i--) putchar(str[i]); return0; } 习题7 —•选择题 1-假定int类型变量占用两个字节,其有定义: intx[10]二{0,2,4};则数组x在内存中所占字节数是Do A・3B・6C・10D・20 2.以下能正确定义数组并正确赋初值的语句是D。 A•intN=5,b[N][N]; B.inta[l][2]={{l},{3}}; C.intc[2]0={{1.2},{3,4}}; D.intd⑶[2]={{1,2},{34}}; 3・若有定义: inta⑵[3];以下选项中对数组元素正确引用的是D。 C.a[0][3] 4.设有数组定义: chararray[]=,,ChinaM;则数组array所占的空间为C。 A・4个字节B・5个字节C・6个字节D・7个字节 5.下述对C语言字符数组的描述中错误的是Do A.字符数组可以存放字符串 B.宇符数组中的字符串可以整体输入、输出 C.可以在赋值语句中通过赋值运算符”二"对宇符数组整体賦值 D.不可以用关系运算符对字符数组中的字符串进行比较 6•有以下定义: charx[]=“abcdefg“;chary[则正确的叙述为 Co A•数组x和数组y等价B.数组x和数组y的长度相同 C•数组X的长度大于数组y的长度D•数组x的长度小于数组y的长度 7.以下程序的输出结果是C。 intmain(void) {intm[]⑶={1,47,2,5,8,3,6.9}; intijk二2; for(i=0;i<3;i++) printffHd■\m[k][i]); } A.456B・258C・369D・789 8.以下程序的输出结果是B。 intmain(void) {intaa[4][4]={{l,2,3,4},{5,6,7,8},{3,9,10,2}.{4,2.9,6}}; inti,s=0: for(i=0;i<4;i++) s+二aa[i][l]; printf(,,Wd\n,,ls); } A・B・19C・13D・20 二.填空题 1•设有定义语句: inta[][3]={{0},{l},{2}};则数组元素a[l][2]的值是0。 2.下列程序的功能是: 求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。 请填空。 intmain(void) {intx[10],a[9].i; for(i=0;i<10;i++)scanf「%d: &x[i]); for(」=1_;i<10;i++)a[i-l]=x0+_x[l-l]_; for(i二0;i<9;i++)printff'^dM,a[i]);printf(M\nM); } 3•写出下列程序的运行结果是-12o intmain(void) {inta[10]={10,1,-20,-203,-21,2,-2,-2,11,-21};intj,s=O; for(j=0;j<10;j++) if(a[j]%2==0)s+二a[j];printf(,,s=Wd\n,,,s); } 4•写出下面程序的运行结果。 #inelude intmain(void) {floats⑹二{1,3,5,7,9}; floatx; inti; scanf(%: &x); for(i=4;i>=0;i--)唯B>x)s[i+*s[j]; elsebreakprintfC^d\n",i+l); return0; } (1)如果输入4,则输岀2o ⑵如果输入5,则输岀3。 5・ 下列程序的功能是输岀如下形式的方阵,请填空。 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 intmain(void) {intij.x; for(j=4;j>=l_;j--) {for(i=l;i<=4;i++) {x=G-l)*4+J_; printf(,M4dMlx); } pnntfC,\nM); } } 6.以下程序的功能是用来检查二维数组是否对称(即对所有的i,j都有aD]G]=aD]B)o请填空。 intmain(void) {inta[4][4]二{1,2,34,225,637,867,4}; inti,j,found=0; for(j=0;j<4;j++) {for(i=0;i<4;i++) CafflD]'=aD]DU{ _found=l;- break; } if(_found二二reak; } 计(found! 二O)printf「该二维数组不对称\rf); elseprintff该二维数组对称\n“); return0; } 三・程序设计题 1.选择法排序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 钦铭颜晖第 数组