C语言程序设计(第3版)何钦铭颜晖第7章数组PDF.pdf
《C语言程序设计(第3版)何钦铭颜晖第7章数组PDF.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计(第3版)何钦铭颜晖第7章数组PDF.pdf(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学号页脚内容 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
2、;printf(Input n:);scanf(%d,&n);学号页脚内容 2printf(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各元素。试编写相应程序。解答:#
3、include学号页脚内容 3int main(void)int i,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 (1 n10) ,再输入 n 个整数,存入第1个数组中;然后输入一个正整数m(1m=10),再输入 m个整数,存入第2 个数组,找出所有不是这两个数组共有的元素。试编写相应程序。学号页脚内容 4解答:#includeint main(voi
4、d)int i,j,k,m,n,flag,equal;int a25,b25,c25;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);学号页脚内容 5k=0;for(i=0;im;i+)flag=0;for(j=0;ji;j+)if(ai=aj)flag=1;/ 判断一个数组中是否有相重的元素,有的
5、话不执行if(!flag)equal=0;for(j=0;jn;j+)if(ai=bj)equal=1;break;if(!equal)ck+=ai;学号页脚内容 6for(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);学号页脚内容 7for(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 - 92 6学号页脚内容 810 -
7、 1【练习 7-6】 在例 7-9 的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么?解答:只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。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 = ai
8、j; aij = aji;学号页脚内容 9aji = temp;/先是下三角进行交换,后是上三角进行交换【练习 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=
9、0; 学号页脚内容 10for(i=0;in;i+)for(j=0;jn;j+)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;prin
10、tf(Enter m:);学号页脚内容 11scanf(%d,&m);printf(Enter 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;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+)学号页脚内容 12printf(%d ,bij);printf(n);return 0;【练习 7-9】计算天数:输入日期 (年、月、日
11、 ),输出它是该年的第几天。要求调用例7-10 中定义的函数 day_of_year(year, month, 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);学号页脚内容 13printf(Days of year: %
12、dn,day_year);return 0;int day_of_year(int year,int month,int 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; 学号页脚内容 14 【练习 7-10】查找指定字符。输入一个字符,再输入一个以回车符结束的字符串(少于
13、80 个字符) 。如果找到,则输出该字符在字符串中所对应的最大下标,下标从0 开始;否则输出 ” Not Found ” 。试编写相应程序。解答:#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+;学号页脚内容 15ai=0;max=0;flag=0;for(i=0;ai!=0;i+)if(ai=op) m
14、ax=i;flag=1;if(flag=1)printf(Max=%d,max);elseprintf(Not Found!);return 0; 【练习 7-11 】字符串逆序:输入一个以回车符结束的字符串(少于80个字符) ,将该字符串逆序存放,输出逆序后的字符串。试编写相应程序。解答:学号页脚内容 16#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;习题 7学
15、号页脚内容 17一选择题1 假定 int 类型变量占用两个字节, 其有定义:int x10=0,2,4; 则数组 x在内存中所占字节数是D 。A3 B6 C 10 D202以下能正确定义数组并正确赋初值的语句是D 。Aint N=5,bNN;Bint a12=1,3;C int c2=1,2,3,4;Dint d32=1,2,34;3若有定义: int a23;以下选项中对数组元素正确引用的是D 。Aa20 Ba23 C a 03 Da1214设有数组定义: char array =China;则数组 array 所占的空间为C 。A4 个字节B5 个字节C 6 个字节D7 个字节学号页脚内容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 钦铭颜晖第 数组 PDF
限制150内