C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc

上传人:飞****9 文档编号:134118599 上传时间:2020-06-02 格式:DOC 页数:16 大小:51KB
返回 下载 相关 举报
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc_第1页
第1页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc_第2页
第2页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc_第3页
第3页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc_第4页
第4页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc》由会员分享,可在线阅读,更多相关《C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组.doc(16页珍藏版)》请在金锄头文库上搜索。

1、第7章 数组【练习 7-1】将例 7-3 程序中的 break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉 break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为 x 的元素,因此程序输出会有变化。当输入数据仍为 2 9 8 1 9 时,输出将是 index is 1 index is 4。【练习7-2】将数组中的数逆序存放。输入一个正整数n(1n=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始。试编写相应程序。解答:#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;【练习7-3】求最大值及其下标。输入一个正整数n(1n=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素。试编写相应程序。解答:#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; 【练习 7-4】找出不是两个数组共有的元素。输入一个正整数 n (1n10),再输入 n 个整数,存入第1个数组中;然后输入一个正整数m(1m=10),再输入m个整数,存入第2个数组,找出所有不是这两个数组共有的元素。试编写相应程序。解答:#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;/判断一个数组中是否有相重的元素,有的话不执行 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;【练习 7-5】给二维数组赋值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的

6、数据在二维数组中如何存放?用下列 for 语句替换例 7-7 中的对应语句,将输入的 6 个数存入二维数组中,假设输入数据不变,输出什么?与例 7-7 中的输出结果一样吗?为什么?for( j=0;j2;j+)for( i=0;i3;i+)scanf(“%d”,&aij);解答:当把列下标作为外循环的循环变量,行下标作为内循环的循环变量时,输入的数据将以列优先的方式存放。当用上述 for 循环方式时,输出结果为:max=a20=10,与原例 7-7不一样,因为当用上述方式输入是,二维数组中存放值如下: 3 - 9 2 610 - 1【练习 7-6】 在例 7-9 的程序中,如果将遍历上三角矩阵

7、改为遍历下三角矩阵,需要怎样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么?解答:只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。 for(i = 0; i n; i+) for(j = 0; j i; j+)temp = aij; aij = aji; aji = temp; 若修改为遍历整个程序,方法如下,则运行结果仍将输出原矩阵,无法达到转置要求,原因是矩阵中每个元素相应被交换了 2 次。 for(i = 0; i n; i+) for(j = 0; j n; j+) temp = aij; aij = aji; aji = temp;/先

8、是下三角进行交换,后是上三角进行交换 【练习7-7】矩阵运算:读入1个正整数n(1n6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。试编写相应程序。解答:#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;【练习 7-8】方阵循环右移。读入2个正整数m和n(1=n6),在读入n阶方阵a,将该方阵中的每个元素循环向右移m个位置,即将第0、1、n-1列变换为第n-m、n-m+1、n-1、0、1、n-m-1列,移动后的方阵可以存到另一个二维数组中。试编写相应程序。解答:#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;【练习 7-9】计算天数:输入日期(年、月、日),输出它是该年的第几天。要求调用例 7-10 中定义的函数 day_of_year(year, month,

11、 day)。试编写相应程序。解答:#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,int day)int k,lea

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号