欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:37157946       资源大小:315KB        全文页数:14页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    -C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组-第 14 页第7章 数组【练习 7-1】将例 7-3 程序中的 break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉 break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为 x 的元素,因此程序输出会有变化。当输入数据仍为 2 9 8 1 9 时,输出将是 index is 1 index is 4。【练习7-2】将数组中的数逆序存放。输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始。试编写相应程序。解答:#include<stdio.h>int main(void)int i,n,temp;int a10;printf("Input n:");scanf("%d",&n);printf("Input %d integer:",n);for(i=0;i<n;i+)scanf("%d",&ai);printf("After reversed:");for(i=0;i<n/2;i+)temp=ai;ai=an-1-i;an-1-i=temp;for(i=0;i<n;i+)printf("%d ",ai);return 0;【练习7-3】求最大值及其下标。输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素。试编写相应程序。解答:#include<stdio.h>int main(void)int i,index,n;int a10;printf("Enter n:");scanf("%d",&n);printf("Enter %d integrs:",n);for(i=0;i<n;i+)scanf("%d",&ai);for(i=n-1;i>=0;i+)printf("%d ",ai);return 0; 【练习 7-4】找出不是两个数组共有的元素。输入一个正整数 n (1n10),再输入 n 个整数,存入第1个数组中;然后输入一个正整数m(1<m<=10),再输入m个整数,存入第2个数组,找出所有不是这两个数组共有的元素。试编写相应程序。解答:#include<stdio.h>int 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;i<m;i+) scanf("%d",&ai); printf("Enter n:"); scanf("%d",&n); printf("Enter %d integers:",n); for(j=0;j<n;j+) scanf("%d",&bj); k=0; for(i=0;i<m;i+) flag=0; for(j=0;j<i;j+) if(ai=aj) flag=1;/判断一个数组中是否有相重的元素,有的话不执行 if(!flag) equal=0; for(j=0;j<n;j+) if(ai=bj) equal=1; break; if(!equal) ck+=ai; for(i=0;i<n;i+) flag=0; for(j=0;j<i;j+) if(bi=bj) flag=1; if(!flag) equal=0; for(j=0;j<m;j+) if(bi=aj) equal=1; break; if(!equal) ck+=bi; printf("%d",c0); for(i=1;i<k;i+) printf(" %d", ci); printf("n"); return 0;【练习 7-5】给二维数组赋值时,如果把列下标作为外循环的循环变量,行下标作为内循环的循环变量,输入的数据在二维数组中如何存放?用下列 for 语句替换例 7-7 中的对应语句,将输入的 6 个数存入二维数组中,假设输入数据不变,输出什么?与例 7-7 中的输出结果一样吗?为什么?for( j=0;j<2;j+)for( i=0;i<3;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 <stdio.h>int main(void) int i,j,n,sum; int a66; printf("Input n:"); scanf("%d",&n); printf("Input array:n "); for(i=0;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij); sum=0; for(i=0;i<n;i+) for(j=0;j<n;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<=n<6),在读入n阶方阵a,将该方阵中的每个元素循环向右移m个位置,即将第0、1、n-1列变换为第n-m、n-m+1、n-1、0、1、n-m-1列,移动后的方阵可以存到另一个二维数组中。试编写相应程序。解答:#include<stdio.h>int 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;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij);for(i=0;i<n;i+) count=0; for(j=0;j<n;j+) if(j<n-m) bij+m=aij; elsebicount+=aij;for(i=0;i<n;i+) for(j=0;j<n;j+) printf("%d ",bij); printf("n"); return 0;【练习 7-9】计算天数:输入日期(年、月、日),输出它是该年的第几天。要求调用例 7-10 中定义的函数 day_of_year(year, month, day)。试编写相应程序。解答:#include<stdio.h>int 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,31leap=(year%4=0&&year%100!=0|year%400=0);for(k=1;k<month;k+) day=day+tableapk;return day; 【练习7-10】查找指定字符。输入一个字符,再输入一个以回车符结束的字符串(少于80个字符)。如果找到,则输出该字符在字符串中所对应的最大下标,下标从0开始;否则输出”Not Found”。试编写相应程序。解答:#include<stdio.h>int 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个字符),将该字符串逆序存放,输出逆序后的字符串。试编写相应程序。解答:#include<stdio.h>int 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 Da1>214设有数组定义: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;i<3;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;i<4;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; i<10; i+) scanf("%d",&xi); for( _i=1_; i<10; i+ ) ai-1=xi+_xi-1 _ ; for(i=0; i<9; 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;j<10;j+) if(a j%2=0) s+=aj; printf("s=%dn",s); 4写出下面程序的运行结果 。#include <stdio.h>int main(void) float s6=1, 3, 5, 7, 9; float x; int i; scanf(“%f”, &x);for (i=4 ; i>=0; i-) if(si>x) 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;j<4;j+) for(i=0;i<4;i+) if(_aji!=aij_) _found=1;_ break;if(_found=1_)break;if(found!=0) printf("该二维数组不对称n");else printf("该二维数组对称n");return 0;三程序设计题1. 选择法排序。输入一个正整数 n (1<n10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。解答:#include<stdio.h>int main(void)int i,n,index,k,temp;int a10;printf("Enter n:");scanf("%d",&n);printf("Input %d integers:",n);for(i=0;i<n;i+) scanf("%d",&ai);for(k=0;k<n-1;k+) index=k; for(i=k+1;i<n;i+) if(aindex<ai) index=i; temp=aindex; aindex=ak; ak=temp; printf("After sorted:"); for(i=0;i<n;i+) printf("%d",ai); printf("n"); return 0;2. 求一批整数中出现最多的数字。输入一个正整数n(1n1000),再输入n个整数,分析每个整数的每一位数字,求出现次数最多的数字。例如输入3个整数1234、2345、3456,其中出现次数最多的数字是3和4,均出现了3次。试编写相应程序。解答:#include<stdio.h>int 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;i<n;i+) scanf("%d",&ai);for(i=0;i<=9;i+) counti=0;for(i=0;i<=9;i+) for(j=0;j<n;j+) for(k=0;k<n;k+) bk=ak; while(aj!=0) if(aj%10=i) counti+; aj=aj/10;for(k=0;k<n;k+) ak=bk;max=count0;for(i=0;i<=9;i+) if(max<counti) 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 <stdio.h>int main(void) int i,j,n,flag;int a66; printf("Input n:"); scanf("%d",&n); printf("Input array:n"); for(i=0;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij); for(j=1;j<n;j+) flag=0; for(i=1;i<j;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<stdio.h> 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;i<m;i+) for(j=0;j<n;j+) scanf("%d",&aij); for(i=0;i<m;i+) sum=0; for(j=0;j<n;j+) sum=sum+aij; printf("sum of row %d is %dn",i,sum); return 0;5找鞍点。输入一个正整数n(1n6)和n阶方阵a中的元素,假设方阵a最多有1个鞍点,如果找到a的鞍点,就输出它的下标;否则,输出"NO"。鞍点的元素值在该行上最大,,在该列上最小。试编写相应程序。解答:#include<stdio.h>int 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;i<n;i+) for(j=0;j<n;j+) scanf("%d",&aij); for(i=0;i<n;i+) flag=1; col=0; for(j=0;j<n;j+) if(aicol<aij) col=j; for(k=0;k<n;k+) if(aicol>akcol) 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 <stdio.h>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<='Z'&&stri>='A') stri='A'+'Z'-stri; printf("After replaced:"); for(i=0;stri!='0'i+) putchar(stri); putchar('n'); return 0;8 字符串转换成十进制整数。输入一个以字符”#”结束的字符串滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为”-”,代表该数是负数。试编写相应程序。解答:#include<stdio.h>int 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<='9'|stri>='a'&&stri<='f'|stri>='A'&&stri<='F') hexadk+=stri;hexadk='0'j=1;if(hexad0='-') for(k=1;hexadk!='0'k+) if(hexadk!='-') hexadj+=hexadk;else j=0; for(k=0;hexadk=!'0'k+) if(hexadk!='-') hexadj+=hexadk;printf("New string:");for(i=0;hexadi!='0'i+) putchar(hexadi);printf("n");number=0;for(i=0;hexadi!='0'i+)if(hexadi>='0'&&hexadi<='9') number=number*16+hexadi-'0'else if(hexadi>='A'&&hexadi<='F') number=number*16+hexadi-'A'+10;else if(hexadi>='a'&&hexadi<='f') number=number*16+hexadi-'a'+10;if(hexad0='-') printf("Number=%ldn",-number);else printf("Number=%ldn",number);return 0;

    注意事项

    本文(C语言程序设计(第3版)何钦铭 颜 晖 第7章数组(14页).doc)为本站会员(1595****071)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开