第九章参考答案.doc_第1页
第九章参考答案.doc_第2页
第九章参考答案.doc_第3页
第九章参考答案.doc_第4页
第九章参考答案.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上机练习1:1.#includeint main()int i,x,a10;printf(请输入互不相同的10个元素:n);for(i=0;i10;i+)scanf(%d,&ai);printf(请输入要查找的数:);scanf(%d,&x);for(i=0;i10;i+)if(ai=x)break;if(i=10)printf(查无此数n);elseprintf(此数位于数组中的下标:%dn,i);return 0;2.#include int main() int i,n,k=0; char s100,ch; printf(请输入数组元素的个数n); scanf(%d,&n); printf(请输入数组元素n); for(i=0;i=n+1;i+) si=getchar(); si=0; printf(输入查找的数:); ch=getchar();for(i=0;in;i+)if(si=ch) printf(此数位于数组中的序号:%-4dn,i); k+;if(k=0) printf(此数组中没有%c这个数n,ch); else printf(此数组中有%d个%cn,k,ch); return 0;例9.2思考:原题有错:“思考:例9.4程序有一个缺点,如果要找的关键字在数组中出现了两次或两次以上,那么此程序只会显示第一个值的下标。现在对此程序进行部分修改,让其都能显示其下标。”中应该是例9.2程序!#include #define SIZE 11int main() int aSIZE=10,12,14,16,18,20,13,14,134,59; int x,i=0,flag=0; printf(输入查找的数:n); scanf(%d,&x); aSIZE=x; for(i=0;iSIZE;i+) if(ai=aSIZE) printf(此数组中有此数,其下标值为%dn,i); flag=1; if(!flag)printf(此数组中无此数n); return 0; 上机练习2:#include #define SIZE 11int main()char strSIZE= womihgedca;char ch;int found=0; int low=0,high=SIZE-1,mid;printf(输入查找的字符:);scanf(%c,&ch);while(low =high)&(found=0) mid=(low+high)/2;if(chstrmid)high=mid-1;else found=1; if(found=1)printf(此数组中已找到字符%c,它位于下标为%dn,ch,mid);elseprintf(此数组中没有所查找的字符:%cn,ch);return 0; 上机练习3:1.#include #define SIZE 100int main() int aSIZE,i,j,n,temp; printf(请输入数组元素的个数n); scanf(%d,&n); printf(请输入数组元素n); for(i=0;in;i+) scanf(%d,&ai); for(i=0;in-1;i+) for(j=0;jaj+1) temp=aj; aj=aj+1; aj+1=temp; printf(从小到大排序后的数组为:n); for(i=0;in;i+) printf(%6d,ai); printf(n); return 0;2.#include #define SIZE 100int main() char strSIZE,temp; int i,j,n; printf(请输入数组元素的个数n); scanf(%d,&n); printf(请输入数组元素n); for(i=0;i=n+1;i+) scanf(%c,&stri); stri=0; for(i=0;in;i+) for(j=0;jn-i;j+) if(strjstrj+1) temp=strj; strj=strj+1; strj+1=temp; printf(从大到小排序后的数组为:n); for(i=0;i=n;i+) printf(%6c,stri); printf(n); return 0;思考:函数的功能是对数组a 排序,当flag=1时是从小到大排序,当flag=-1时则是从大到小排序。上机练习4:1.#include #define SIZE 100int main() int aSIZE,i,j,n,k,temp; printf(请输入数组元素的个数n); scanf(%d,&n); printf(请输入数组元素n); for(i=0;in;i+) scanf(%d,&ai);for (i=0;i=n-1;i+) k=i;for (j=i+1;jak) k=j; if(k!=i) temp=ai; ai=ak; ak=temp; printf(从大到小排序后的数组为:n); for(i=0;in;i+) printf(%6d,ai); printf(n); return 0;2.#include #define SIZE 100int main() char strSIZE,temp; int i,j,n,k; printf(请输入数组元素的个数n); scanf(%d,&n); printf(请输入数组元素n); for(i=0;i=n+1;i+) scanf(%c,&stri);for (i=0;i=n;i+) k=i;for (j=i+1;jstrk) k=j; if(k!=i) temp=stri; stri=strk; strk=temp; printf(从大到小排序后的数组为:n); for(i=0;in;i+) printf(%6c,stri); printf(n); return 0;思考:问题有错: “思考:仿照例9.5的思考题3,用选择法进行排序,完成函数的填空,flag为1时从小到大排序,flag为0时从大到小排序。”应该修改为“仿照例9.4的思考题3,用选择法进行排序,完成函数的填空,flag为1时从小到大排序,flag为-1时从大到小排序。”for (i=0;i=n-1;i+) k=i;for (j=i+1;j=n-1;j+) if(flag*ajflag*ak) k=j; if(k!=i) temp=ai; ai=ak; ak=temp; 例9.6思考:/*没看懂题意,建议把插入后把原数据往后退一个结果为改成200,10,12,14,16,18,20,13,200,134,59*/#include int main() int a12=10,12,14,16,18,20,13,200,134,59,max,i;max=a0;for(i=0;i10;i+)if(max=0;i-) ai+1=ai;a0=max; printf(插入后新数组为:n);for(i=0;i11;i+) printf(%5d,ai);printf(n);return 0;例9.7思考:否。for(i=0;inum)break; for(j=n;j=i;j-) aj=aj-1; ai=num; 第一个for循环主要寻找num的位置,而第二个for循环是为了吧num插入到数组中,把num后面的数都向后一个。上机练习5:1. 略。2.#include int main() int num,i,j; int a13= 900,800,630,580,234,176,87,72,10,2,-8,-30; printf(输入要插入的数据:); scanf(%d,&num); for(i=0;i12;i+) if(ai=i;j-) aj+1=aj; ai=num; printf(插入%d后的新数组为:n ,num); for (j=0;j13;j+) printf(%5d,aj); printf(n); return 0;上机练习6:1. #include #define SIZE 100int main() int x,n,i; char strSIZE; printf(请输入数组元素的个数n:n); scanf(%d,&n); printf(请输入数组的%d个元素n,n); for(i=0;in|x=0) printf(输入删除位置出错n); else break; while(1); for(i=x;in;i+) stri=stri+1; printf(删除第%d元素后的新数组为:n ,x); for (i=0;in;i+) printf(%-5c,stri); printf(n); return 0;2.#include #define SIZE 100int main() int aSIZE=10,12,14,16,18,20,13,200,134,59; int index,i; index=0; for(i=0;iai) index=i; for(i=index;i9;i+) ai=ai+1; printf(删除第%d元素后的新数组为:n ,index); for (i=0;i9;i+) printf(%-5d,ai); printf(n); return 0;3.#include #define SIZE 100int main() int aSIZE= 10,12,14,16,18,20,13,200,134,59; int i,j,count=0; for(i=0;i10-count;) if(ai%2=0) for(j=i;j9-count;j+) aj=aj+1; count+; i=0; else i+; printf(删除%d个元素后的新数组为:n ,count); for (i=0;i10-count;i+) printf(%-5d,ai); printf(n); return 0;练习与实践:1.#include #define SIZE 100int main() int aSIZE=2,3,20,30,34, 58, 72, 76,78,87,90,900; int i,j,temp; for(i=0;i12;i+) for(j=0;j11-i;j+) if(ajaj+1) temp=aj; aj=aj+1; aj+1=temp; printf(从大到小排序后的数组为:n); for(i=0;i12;i+) printf(%6d,ai); printf(n); return 0;2.#include #define SIZE 100int main() int aSIZE=2, 3,20,30,34, 58, 72, 76,78,87,90,900; int i,j,k,temp;for (i=0;i=11;i+) k=i;for (j=i+1;jak) k=j; if(k!=i) temp=ai; ai=ak; ak=temp; printf(从大到小排序后的数组为:n); for(i=0;i12;i+) printf(%6d,ai); printf(n); return 0;3.#include #define SIZE 100int main()int aSIZE= 900,2,3,58,34,76,87,72,90,20,78,30,max,i,min;max=min=a0;for (i=0;imax)max=ai;else if(aimin)min=ai; printf(max=%dn,max); printf(min=%dn,min); return 0;4.#include #define SIZE 100int main() int aSIZE=2, 3,20,58, 72, 76,78,87,90,900; int i,m,k=0;for(i=0;i10;i+)if(ai%2=0) printf(此数位于数组中的序号:%-4dn,i); k+; if(k=0) printf(此数组中没有%d这个数n,m); else printf(此数组中有%d个偶数n,k); return 0;5.#include #define SIZE 10int main()int aSIZE=2, 3,20,58, 72, 76,78,87,90,900;int i,found=0; int low=0,high=SIZE-1,mid;while(low amid)low=mid+1;else if(87amid)high=mid-1;else found=1; if(found=1)printf(此数组中已找到数87,它位于下标为%dn,mid);else printf(此数组中没有所查找的数:87n); for(i=mid;iSIZE-1;i+) ai=ai+1; printf(删除第%d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论