ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:20.41KB ,
资源ID:7894566      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7894566.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数组类型习题及答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数组类型习题及答案.docx

1、数组类型习题及答案8-1 编写程序,将10个数34,3,29,63,70,16,85,82,90,93存放于一组数组中,求出这十个数的和及平均值。解: #include void main() int a10=34,3,29,63,70,16,90,93; int i ,sum=0; float average ; for(i=0;i10;i+) sum=sum+ai ; average=sum/; printf(sum=%d,average=%fn,sum,average);运行结果:sum=565,average=思考:数组有何特点此问题如果不用数组进行处理将会怎样 8-2 编写程序,求存

2、放于上题数组中10个数的最大值,最小值及所在的位置。解:#include void main() int a10=34,3,29,63,70,16,85,82,90,93; int i,sum,max,min,d_max,d_min; max=min=a0; d_max=d_min=0; for(i=1;imax) max=ai;d_max=i; if(aimin) min=ai;d_min=i; printf(max=%d,a%dn,max,d_max); printf(min=%d,a%dn,min,d_min);运行结果:max=93,a9 Min=3,a1思考:数组ai中i的变化意味着

3、什么 8-3 编写程序,从键盘读入50个数存放于一数组中,求出该数组中最大值、最小值及所在位置。 解:#include void main() float a50,max,min; int i,d_max,d_min; for(i=0;i50;i+) scanf(%f,&ai); max=min=a0; d_max=d_min=0; for(i=1;imax) max=ai;d_max=i; if(aimin) min=ai;d_min=i; printf(max=%d,a%dn,max,d_max); printf(min=%d,a%dn,min,d_min); 思考:此题中不用数组也可以处

4、理吗如果可以,区别之处在哪里 8-4将存放于上题数组中的50个数分别按升序,降序排序。 解:#include #define N 3void main() float aN ,t; int i,j; for(i=0;iN;i+) scanf(%f,&ai); /*按升序排序*/ for(i=0;iN;i+) for(j=i;jaj) t=ai;ai=aj;aj=t; printf(%8.2f ,ai); printf(n); /*按降序排序*/ for(i=0;iN;i+) for(j=i;jN;j+) if(aiaj) t=ai;ai=aj;aj=t; printf(%8.2f ,ai);

5、printf(n); 思考:此题中可以不用数组进行处理吗(进一步理解数组的特点。) 8-5 编写程序,从键盘输入某班学生C语言课程考试成绩,评定每个学生C语言成绩等级。如果高于平均分10分,则等级为优秀;如果低于平均分10分,则等级为一般;否则等级为中等。 解:#include #define N 3void main() int i ,j; float average,aN,sum=0; for(i=0;iN;i+) scanf(%f,&ai) ; sum=sum+ai; average=sum/N; for(i=0;iaverage+10) printf(a%d优秀n,i); else i

6、f(aiaverage-10) printf(a%d一般n,i); else printf(a%d中等n,i); 思考:表示数组元素的ai一般称为什么变量它与一般变量有何区别 8-6 某班期终考试有六门课程,编写程序计算每门课程的平均成绩。进一步考虑全年级10个班的情况。 解:#include #define N 30#define M 6void main() int i,j; float averageM,aNM,sum=0; for(i=0;iN;i+) for(j=0;jM;j+) scanf(%f,&aij); for(j=0;jM;j+) sum=0; for(i=0;iN;i+)

7、 sum=sum+sij ; averagej=sum/N; printf(6门课程的平均成绩分别为:n); for(i=0;iM;i+) printf(%f ,averagei); printf(n) ; 思考:在此题中定义的数组aNM中,N表示什么M 表示什么若考虑全年级10个班的情况,程序应做哪些改进8-7 编写程序,将一个一维数组进行逆置。例如,原来顺序为1,3,5,7,则逆置后的顺序为7,3,5,1. 解:#include #define N 4void fun(int a) int i,t ; for(i=0;iN/2;i+) t=ai ; ai=aN-1-i; aN-1-i=t;

8、 for(i=0;iN;i+) printf(%d,ai) ; void main() int i ,aN ; printf(请输入一维数组各元素的值:n); for(i=0;iN;i+) scanf(%d,&ai); fun(a); printf(n); 思考:如果要对7个元素的数组进行逆置操作,只需要修改什么地方数组元素的下标可以是算术表达式吗有何要求 8-8 编写程序,打印如下的杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 解:#include #define N 6void main() int i,j,aNN=1,k; for(i=1;iN;i+) for

9、(j=1;jN;j+) if(j=1|i=j) aij=a00 ; else aij=ai-1j-1+ai-1j ; for(i=1;iN;i+) for(k=1;k=N-i;k+) /* 每行前面的空格*/ printf( ) ; for(j=1;j=i;j+) printf(%4d,aij) ; printf(n) ; 思考: 在此题中定义一个aNN的方阵数组显然有些浪费(有些元素闲置,却占用存储空间),可否考虑用一维数组进行处理 8-9 编写程序,用筛选法求100-1000之间的素数。 解:#include #define N 1000void main() int i,aN,n=0,d

10、b ; for(i=1;iN;i+) ai=1 ; for(i=2;iN/2;i+) if(ai=0) continue ; db=i*2; while(dbN) adb=0; db=db+i; for(i=100;iN;i+) if(ai=1) printf(%d,i); n+ ; if(n%18=0) printf(n) ; printf(n) ;思考:在程序实际已求出了什么范围之间的所有素数在while循环中的“adb=0;”语句的作用是什么了8-10 编写程序,利用数组实现大整数的加减运算。假定大整数不超过10位数字。解:#include #include #define N 10in

11、t aN,bN,cN,dN,jw=0;int flag=1 ;/*标志两个大整数的大小关系*/void chag0(int a,int n) for(int i=0;i=n;i+) ai=0;void add() /*求两个大整数的和*/ int i ; for(i=0;iN;i+) ci=(ai+bi+jw)%10 ; jw=(ai+bi+jw)/10 ;0”. 即第一个字母变成第26个字母,第i个字母变成第26-i+1个字母。非字母字符不变。编写程序将密码译回原文,并输出密码和原文。解:#include #include#define N 100void main() int i =0;

12、char chN, tranN; printf(“请输入密码电文字符串(=A&chi=a&chi=z) trani=(122-chi)+97;else trani=chi;i+; trani=0; printf(“n 电文密码:%s”,ch); printf(“n 原 文 是:%sn”,tran);思考:在C语言中,对字符的比较是如何进行的其基本比较规则是什么8-18 编写程序,读入若干国家的名称,按字典顺序排序输出。 解:#include #include#define N 50#define M 20void main() int i ,j ,n=0; char cnameNM,tranN

13、 ; printf(请输入国家名称(50个且每个名称不超过20个字符,当第一个字符为空格是结束):n); for(i=0;iN;i+) gets(cnamei) ; if(cnamei0= ) break ; n+ ; for(i=0;in-1;i+) for(j=i+1;j0) strcpy(tran,cnamei); strcpy(cnamei,cnamej); strcpy(cnamej,tran); printf(按字典顺序排序后为:n); for(i=0;in;i+) puts(cnamei) ; 思考: 语句“if(cnamei0= ) break ;”的作用是什么若无此语句,程序

14、运行将会出现什么状况。 8-19 若A为nn对称方阵,将A压缩存放到一维数组B中,使B具有n(n+1)/2个元素,且A中信息可全部在B中找到。 解:#include #define N 5#define M N*(N+1)/2 /*用宏处理一维数组的动态下标,内容参见第12章*/void main() int aNN,bM,i,j,k; printf(请输入方阵A的值:n); for(i=1;iN;i+) /*为了易与方阵下标的对应理解,此处弃掉0行0列*/ for(j=1;jN;j+) scanf(%d,&aij); for(i=1;iN;i+) for(j=1;j=i;j+) k=i*(i

15、-1)/2+j; bk=aij; printf(利用一维的b数组输出方阵的值:n); for(i=1;iN;i+) for(j=1;j=j) k=i*(i-1)/2+j ; else k=j*(j-1)/2+i; printf(%d,bk); printf(n) ; 思考: 如果在一个方阵中有大量的0元素(称为稀疏矩阵),如何进行一维的压缩存储8-20 某单位用现金发放工资,编写程序计算各种面值的最佳张数,以保证发给职工工资时不需找零。职工工资与各种面值的张数均要求用数组描述。解:#include #define N 30void main() int i ,j ; float salaryN

16、 ; int s ,money10=1000,500,200,100,50,20,10,5,2,1; int sum10 ;/*存放各种面值的张数*/ for( j=0;j10;j+) sumj=0 ; printf(请输入每个职工的工资(精确到角):n); for( i=0;iN;i+) scanf(%f,salary+i) ; for(i=0;iN;i+) s=int(10*salaryi);/*取出第i个工人的工资并转化为角*/ for(j=0;j10;j+) sumj+=s/moneyj; s=s%moneyj ; /*输出结果*/ for(i=0;i10;i+) if(i7) pri

17、ntf(%d元,moneyi/10); else printf(%3.1f元,moneyi/; printf(n) ; for(i=0;i10;i+) printf( %d ,sumi) ; printf(n) ; 思考:s/moneyj,s%moneyj这两个表达式是用来求什么的如果不用角为单位,程序应如何设计8-21 编写n个学生、m门课程的成绩处理程序:(1) 实际学生人数、课程门数由键盘输入。(2) n个学生、m门课程的成绩用二维实型数组描述,同时考虑学生姓名、学号数据。(3) 求出每个学生的总成绩、平均成绩、并按总成绩排序。(4) 求出每门课程的平均成绩和不及格的人数。解:#incl

18、ude #include#define N 100 /假定学生人数不超过100#define M 8 /假定课程门数不超过8void main() int n,m,i,j,k,lo,t; int noN,scNM,sumN,csumM ,daveM; float raveN ,caveM,ave; char nameN10,nam10 ; printf(请输入(学生人数,课程门数):); scanf(%d,%d,&n,&m) ; for(i=0;in;i+) printf(n请输入第%d个学生的学号、姓名:,i+1); scanf(%d,&noi);gets(namei) ; printf(各

19、门课的考试成绩:); for(j=0;jm;j+) scanf(%d,&scij); for(i=0;in;i+) sumi=0 ; for(j=0;jm;j+) sumi+=scij; ravei=sumi/m ; for(j=0;jm;j+) csumj=0;davej=0; for(i=0;in;i+) if(scij60) davej+; csumj+=scij ; cavej=csumj/n; for(i=0;in-1;i+) /排序过程 k=i ; for(j=i+1;jn;j+) if(sumksumj) k=j ; lo=noi;noi=nok;nok=lo; strcpy(n

20、am,namei);strcpy(namei,namek);strcpy(namek,nam); t=sumi;sumi=sumk;sumk=t; ave=ravei;ravei=ravek;ravek=ave; for(j=0;jm;j+) t=scij;scij=sckj;sckj=t; /*输入显示过程*/ printf(名次 学号 姓名 ); for(i=0;im;i+) printf( 课程%d ,i+1); printf( 总成绩 平均成绩n ); for(i=0;in;i+) printf(%2d %d %10s ,i+1,noi,namei); for(j=0;jm;j+) p

21、rintf( %d ,scij); printf( %d %7.2fn,sumi,ravei); printf(n 各科平均成绩: ); for(j=0;jm;j+) printf(%7.2f,cavej) ; printf(n 不及格人数: ); for(j=0;jm;j+) printf(%7d,davej) ; printf(n) ;思考:二维数组是否可以看作由若干一维数组构成此题中的排序采用了什么方法 8-22在保龄球比赛中,已知每次击倒的保龄球数。计算在一局比赛中一个人的得分,要求同时算出每一轮的得分和每一轮之后的累计得分。 保龄球比赛一局共十轮,前九轮中每一轮最多打两次球;第十轮可

22、以大两次或三次球,每轮几分规则如下: (1) 如果一轮中第一个球击倒全部10只保龄球(称为Strike,好球), 则这一轮的得分等于10分加下两次击倒保龄球的只数。 (2) 如果一轮中两个球击倒全部10只保龄球(称为Spare,成功),则这一轮的得分等于10分加下一次击倒保龄球的只数。 (3) 如果一轮中两个球一共击倒保龄球只数少于10个(称为No mark,平常),则这一轮的得分等于所击倒保龄球的总只数。 解: 此题比较复杂,详细处理过程请参见本书上机实验指导部分的综合练习。为了便于理解,在此我们先将问题简化为:当一局十轮全部滚完后,再进行积分的显示与累计。 程序如下:解:#include

23、void main() int i,j,a112,sc10,sum10 ; a100=0;a101=0;a110=0;a111=0; printf(请输入各轮两次的击倒的保龄瓶(球)数n); for(i=0;i11;i+) if(i10) printf(第%d轮第一次击倒瓶球数:,i+1); scanf(%d,&ai0); if(ai010) printf(第%d轮第二次击倒瓶球数:,i+1); scanf(%d,&ai1); else printf(OK!n);ai1=0; else if(a90+a9110) break; printf(附加第一次击倒瓶球数:) ; scanf(%d,&a

24、i0); if(a90=10) printf(附加第二次击倒瓶球数:) ; scanf(%d,&ai1); else printf(OK!n);ai1=0; if(a9010|ai0+ai110|ai0!=10) break ; for(i=0;i10;i+) if(ai0=10) if(ai+10=0&i9) sci=ai0+ai+10+ai+20; else sci=ai0+ai+10+ai+11; else if(ai0+ai1=10) sci=ai0+ai1+ai+10; else sci=ai0+ai1; if(i=0) sumi=sci ; else sumi=sumi-1+sci; printf( 轮次: ); for(i=1;i=10;i+) printf(%4d,i); printf( 附加); for(j=0;j2;j+) printf(n第%d次得分:,j+1); for(i=0;i11;i+) if(aij!=0|j=0|ai0!=10) printf(%4d,aij); else printf( /); print

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1