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

上传人:y****3 文档编号:12826885 上传时间:2020-05-29 格式:DOC 页数:16 大小:74.50KB
返回 下载 相关 举报
C语言程序设计(第3版)何钦铭 颜 晖 第7章数组_第1页
第1页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章数组_第2页
第2页 / 共16页
C语言程序设计(第3版)何钦铭 颜 晖 第7章数组_第3页
第3页 / 共16页
点击查看更多>>
资源描述
BatchDoc Word文档批量处理工具第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(Input 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,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; 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+) 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】给二维数组赋值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的数据在二维数组中如何存放?用下列 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 的程序中,如果将遍历上三角矩阵改为遍历下三角矩阵,需要怎样修改程序?运行结果有变化吗?如果改为遍历整个矩阵,需要怎样修改程序?输出是什么?为什么?解答:只需按要求修改矩阵的输出部分,方法如下,其运行结果不变。 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;/先是下三角进行交换,后是上三角进行交换 【练习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+) 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:);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+) printf(%d ,bij); printf(n); return 0;【练习 7-9】计算天数:输入日期(年、月、日),输出它是该年的第几天。要求调用例 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); printf(Days of year: %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; 【练习7-10】查找指定字符。输入一个字符,再输入一个以回车符结束的字符串(少于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+;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; 【练习7-11】字符串逆序:输入一个以回车符结束的字符串(少于80个字符),将该字符串逆序存放,输出逆序后的字符串。试编写相应程序。解答:#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一选择题1假定int类型变量占用两个字节,其有定义:int x10=0,2,4; 则数组x在内存中所占字节数是 D 。A3 B6 C10 D202以下能正确定义数组并正确赋初值的语句是 D 。Aint N=5,bNN;Bint a12=1,3;Cint c2=1,2,3,4;Dint d32=1,2,34;3 若有定义:int a23;以下选项中对数组元素正确引用的是 D 。Aa20 Ba23 Ca 03 Da1214设有数组定义:char array =China;则数组array 所占的空间为 C 。A4 个字节 B5 个字节 C6 个字节 D7 个字节5下述对 C 语言字符数组的描述中错误的是 D 。A字符数组可以存放字符串B字符数组中的字符串可以整体输入、输出C可以在赋值语句中通过赋值运算符=对字符数组整体赋值D不可以用关系运算符对字符数组中的字符串进行比较6有以下定义:char x =abcdefg; char y =a,b,c,d,e,f,g; 则正确的叙述为 C 。A数组x和数组y等价 B . 数组x和数组y的长度相同C数组x的长度大于数组y的长度 D数组x的长度小于数组y的长度7以下程序的输出结果是 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以下程序的输出结果是 B 。int main(void) int aa44=1,2,3,4,5,6,7,8,3,9,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设有定义语句:int a 3=0,1,2; 则数组元素a12的值是 0 。2下列程序的功能是:求出数组 x 中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。int 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); printf(n);3写出下列程序的运行结果是 -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写出下面程序的运行结果 。#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(%d n,i+1);return 0;(1) 如果输入 4,则输出 2 。(2) 如果输入 5,则输出 3 。5下列程序的功能是输出如下形式的方阵,请填空。13 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 以下程序的功能是用来检查二维数组是否对称(即对所有的i,j都有ai j=aj i)。请填空。int main(void) int a44=1,2,3,4,2,2,5,6,3,7,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(该二维数组不对称n);else printf(该二维数组对称n);return 0;三程序设计题1. 选择法排序。输入一个正整数 n (1n10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。解答:#includeint main(void)int i,n,index,k,temp;int a10;printf(Enter n:);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. 求一批整数中出现最多的数字。输入一个正整数n(1n1000),再输入n个整数,分析每个整数的每一位数字,求出现次数最多的数字。例如输入3个整数1234、2345、3456,其中出现次数最多的数字是3和4,均出现了3次。试编写相应程序。解答:#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; while(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(出现最多次数的数字和次数是:);for(i=0;i=9;i+) if(max=counti) printf(%2d-%d,i,counti);return 0;3. 判断上三角矩阵。输入一个正整数n (1n6)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。上三角矩阵,即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。试编写相应程序。解答:#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个正整数m和n (1m6,1 n6),然后输入该m行n列矩阵a中的元素,分别求出各行元素之和,并输出。试编写相应程序。解答:#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 row %d is %dn,i,sum); return 0;5找鞍点。输入一个正整数n(1n6)和n阶方阵a中的元素,假设方阵a最多有1个鞍点,如果找到a的鞍点,就输出它的下标;否则,输出NO。鞍点的元素值在该行上最大,,在该列上最小。试编写相应程序。解答:#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;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字符串替换。输入一个以回车结束的字符串(少于 80 个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串。试编写相应程序。原字母 对应字母 A Z B Y C X D W X C Y B Z A解答:#include 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 字符串转换成十进制整数。输入一个以字符”#”结束的字符串滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为”-”,代表该数是负数。试编写相应程序。解答:#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;BatchDoc Word文档批量处理工具
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 职业技能


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!