第七章数组上机作业.doc
《第七章数组上机作业.doc》由会员分享,可在线阅读,更多相关《第七章数组上机作业.doc(10页珍藏版)》请在咨信网上搜索。
第七章 数组 通过本章实验作业应达目标 1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。 2.熟练掌握字符数组和字符串的使用方法。 3.掌握数组的一种排序算法。 4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。 本章上交作业 程序7_1.c、7_3.c、7_5.c、7_7.c上传至211.64.135.121/casp。 实验一 一维数组的定义和简单应用 【实验目的】 学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。 【实验内容】 从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。以7_1.c命名本程序并上交。 程序运行界面 【实验提示】 求最大(小)值通常用“打擂台”的方法。首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。 求平均值还要设置一个变量sum,用来累加各元素的值。 实验二 一维数组的排序 【实验目的】 熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。 【实验内容】 从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。分别以7_2_1.c、7_2_2.c和7_2_3.c命名三个程序。 【实验提示】 所谓排序是指把一组杂乱无章的数据按照大小顺序排列。 将被排序的n个数据存放在一个数组中, 假如按升序排列。我们将数组定义为a[n],数据存放在a[0] 到 a[n-1] 中。 1.比较排序法 将a[0]与a[1]比较,若a[1]<a[0],则a[0]与a[1]交换,否则不变,再将a[0]与a[2]比较,同样小者交换到a[0],……如此比较下去至到a[0]与a[n-1]比较,小者放到a[0]中,第一轮比较n-1次,a[0]中的值就是n个数中最小者。然后a[1]再与a[2]比较,方法同上,小者交换到a[1],……第二轮比较n-2次,这样a[1]也就确定了,第三轮a[2]与其后面的数比较,……,共比较n-1轮以后,数组中各元素的值就按升序排列好。 2.选择排序法 选择排序法就是对比较法的改进。它的算法思想是:仍然是a[i]与其后的a[j]进行比较,但是当比较出a[j]小于a[i]时,先不急于交换(因为a[j]并不一定是这一轮中最小的,可能还有更小的),用一个变量p记下j的下标(即第几个数),继续比较下去,将最小数的下标j存放在p中,一轮比较完毕,a[p]便是最小的,这样只要a[i]与a[j]交换即可。一轮只交换一次,大大提高了程序的效率. 其中,一维数组既是数据的存放位置,也是交换的场所,这样可以很好的利用数据的内存空间。 3.冒泡排序法 将要排序的数放在某一个数组中,如a[0]~a[n-1],然后比较数组相邻两元素的值,即a[0]与a[1]比较,假如按升序排列,且a[0]>a[1],则二者交换,否则不变,a[1]再与a[2]比较,前者大就交换,…,依次两两比较至到a[n-2]与a[n-1]比较,经过一轮以后,最大者“沉”到了最后,小数往上“冒”,所以得名“冒泡法”。第二轮比较数组的前n-1个,即a[0]~a[n-2] 。重复此过程,直到所有的元素比较完毕。 实验三 一维数组元素的调换 【实验目的】 进一步加强对数组的应用。 【实验内容】 找出数组中的最小数和次小数,并把最小数和a[0]中的数对调、次小数和a[1]中的数对调,其余数据位置不变。 例如,程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。以7_3.c命名本程序并上交,部分程序如下。 #define N 10 main() {int a[N],i; for(i=0;i<N;i++) scanf("%d",__________ ); ………… /* 编写程序,实现功能 */ for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); } 【实验提示】 本题既可以套用选择法排序,只排序两轮。也可以两次求最值再互换。 实验四 一维数组的查找 【实验目的】 掌握数组的基本查找方法:顺序法和折半查找法。 【实验提示】 查找是计算机中经常要遇到的一种操作,其含义是在一组数据中查找到所查数据的位置。比较简单的是顺序查找法,效率较高的是折半查找法。 1.顺序查找法 顺序查找也叫线性查找,当一组数据无序时,一般采用顺序查找。其基本思想是:从数据集的第一个元素开始,依次将关键字x与数据集中的每一个元素进行比较,直到找到要找的数据。或者数据集遍历完毕,没有找到匹配元素。 2.折半查找法 若是已经排好序的数据,最好采用折半查找法。折半查找法的基本思想是:首先取第一个元素a[low]和最后一个元素a[high]中间的那个元素a[mid]与x比较(其中mid=(low+high)/2 ),如果a[mid]==x则正好找到,否则要看x比a [mid]大还是小,因假设数组已按降序排好,则当x>a[mid]时,则要查找的x在数组的前半部分,这样数组的后半部分就不用去查找了,查找范围缩小为一半。然后在前半部分再找一个中点,与x比较,如此一半一半缩小,如果x在数组当中,终能找到x==a[mid]。 由于每次缩小近一半的范围,所以数组的上、下界是要变化的,不妨用变量low、high、mid分别表示数组当前的上界、下界和中点。 问题:如果x不在数组当中,最终怎样知道? 【实验内容】 在一个已经排好序的数组(升序)中,从键盘上输入某数x,查找x是否在数组内,若在,则在屏幕上输出其下标值。若不存在,则在屏幕上显示“Not found!”。假设数组a[10] 的每个元素分别为{1,2,3,4,6,7,9,10,11,15},若从键盘上读入数x为9,则在屏幕上输出“the number’s position is 7”,若读入数为8,则屏幕上输出“Not found!”。 1. 顺序查找法编写的程序如下,请完善程序,并以7_4_1.c命名本程序。 # include<stdio.h> #define N 10 void main( ) {int a[N]={1,2,3,4,6,7,9,10,11,15}; int i,x; scanf("%d", &x); for(i=0;i<N;i++) if (________ ) {printf("the number's position is %d\n",i+1); _________ ; } if(i==N) printf("Not found!\n"); } 2. 折半查找法编写的程序如下,请完善程序,并以7_4_2.c命名本程序。 #include<stdio.h> #define N 10 void main( ) {int a[N]={1,2,3,4,6,7,9,10,11,15}; int low, high, mid, i, x; scanf("%d", &x ); for(low=0,high=N-1;; ) {mid =_________ ; if(a[mid]==x) {printf("the number's position is %d\n",mid+1); break; } if( _________ ) { printf("Not found\n"); _________ ; } if (a[mid]< x ) low=mid+1; if (a[mid]> x ) _________ ; } } 【讨论与思考】 比较一下两种两种查找方法的优缺点。 实验五 统计指定字符个数 【实验目的】 熟悉字符串的存取和结束标记。 【实验内容】 编写程序从键盘上输入一个字符串和一个字符,统计所指定字符的个数。 例如:从键盘输入字符串为"abaaAAbcaaaca",指定字符为'a',则在屏幕上输出结果是7。以7_5.c命名本程序并上交。 下面给出程序的部分代码。 #include <stdio.h> void main( ) {char a[200], b; int num; puts("Please input a string:"); gets(a); puts("Please enter a character:"); b=getchar( ); ………… /* 编写程序,实现功能 */ pirntf(“The result is %d\n”, num); } 实验六 从字符串中删字符 【实验目的】 熟悉字符串的存取和结束标记。并掌握从一维数组中删除元素的方法。 【实验内容】 编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。 例如:从键盘输入字符串为"abaaAAbcaaaca",要删除的字符为'a',则在屏幕上输出"bAAbcc"。 下面给出程序的部分代码。请完善程序,并以7_6.c命名本程序。 void main( ) {char s[20], ch; int i,j; printf("Please input a string:\n"); gets(s); printf("Please input a character:\n"); ch=getchar(); for( i=0; _________; i++ ) { ………… /* 编写程序,实现功能 */ } puts(s); } 【实验提示】 要考虑被删除的字符在字符串出现多次,而且连续排列的情况。 实验七 数据加密 【实验目的】 学习通过字符数据的ASCII值进行加密的方法。 【实验内容】 某个单位要传递机密数据,数据是10位以内的整数(从键盘输入)。在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用该和除以10的余数代替该数字。在屏幕上显示加密后的数字。以7_7.c命名本程序并上交。 例如:输入数据 327895123, 显示结果为 : 872340678。 【实验提示】 1.应用字符数组来解决该问题。 2.主程序中将各位数字以字符的形式存放,在加密的过程中应该注意‘0’跟 0 的区别。 实验八 将数字字符串转换为相应实数 【实验目的】 学习数字字符串与数值之间的转换问题。 【实验内容】 将键盘上输入的一个数字字符串转换为相应的实数,在屏幕上输出。转换时遇到第一个非数字字符时停止(不包含第一个小数点和起始的负号-)。例如: 若输入字符串“123a45”,得到实数 x=123.0; 若输入字符串“-123.45.765”,得到实数x=-123.45; 若输入字符串“123-56.78”,得到实数 x=123.0; 若输入字符串“-.123”,得到实数 x=-0.123。 下面给出不考虑负数的程序,请在下述程序的基础上补充完善为也能考虑负数的程序,并以7_8.c命名本程序。 #include<stdio.h> void main() {char str[100]; int i,sign;double x,k; gets(str); /* str中存放的是一个数字字符串 */ sign=1;k=0.1; /* sign是一个标志,标识是否出现了第一个小数点 */ x=0; for(i=0;str[i];i++) {if(sign==1) if(str[i]>='0'&&str[i]<='9') x=x*10+(str[i]-48); else if(str[i]=='.') sign=0; else break; else if(str[i]>='0'&&str[i]<='9') {x+=(str[i]-48)*k; k*=0.1; } else break; } printf("x=%lf\n",x); /* x中记录的是转换后得到的数值 */ } 【实验提示】 只有起始的负号-才能作为负数标志,中间的-只能被看做非法字符,使转换结束。 实验九 万年历问题 【实验目的】 学会使用二维数组解决万年历问题。 【实验内容】 已知1900年12月31号是星期一,编写程序,键盘输入1901 ~2300年内任意一个日期,程序输出这一天是星期几。以7_9.c命名本程序。 【实验提示】 1.第四章中有一个实验要求是给出当前日期,求出该日期是本年度中的第几天的程序。大家可以回想以下那个程序中的case语句对应的每一个天数是如何得到的,我们将这个问题用数组来解决。 2.假设我们要求x 年y 月 z日是星期几,必须知道两个日期相间隔的天数。 3.使用二维数组来存放每月的天数,第一行存放平年的每月天数;第二行存放闰年的各月天数。 3.普通年份有365天,365%7=1;所以求总天数时可以不必将年份差×365天。 【讨论与思考】 既然是万年历问题,就应能测任一日期。如果要求能够测任何一日期(1900年之前和之后的任何一天)为周几,本题应如何处理?注意前推和后推的方法有所不同。 习题 1. 定义如下变量和数组 : int k ; int a[3][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9 } ; 则下面语句的输出结果是( ) for(k=0;k<3;k++) printf("%d",a[k][2-k]); A、357 B、369 C、 159 D、 147 2. 执行下面的程序段后,变量k中的值为( ) int k=3,s[2]; s[0]=k;k=s[1]*10; A、不定值 B、33 C、30 D、10 3. 设有数组定义:char array [ ]="China"; 则数组 array所占的空间为( ) A、4个字节 B、5个字节 C、6个字节 D、7个字节 4. 如下程序的输出结果是( ) main( ) { int n[5]={0,0,0},i,k=2; for(i=0;i<k;i++) n[i]=n[i]+1; printf("%d\n",n[k]); } A、不确定的值 B、2 C、1 D、0 5. 有如下程序 main( ) { int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]; printf("%d\n",s); } 该程序的输出结果是( ) A、18 B、19 C、20 D、21 6. 以下程序的输出结果是( ) main( ) { int i,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d,",x[i][2-i]); } A、1,5,9, B、1,4,7, C、3,5,7, D、3,6,9, 7. 当执行下面的程序时,如果输入ABC,则输出结果是( ) #include "stdio.h" #include "string.h" main( ) { char ss[10]="1,2,3,4,5"; gets(ss); strcat(ss,"6789"); printf("%s\n",ss); } A、ABC6789 B、ABC67 C、12345ABC6 D、ABC456789 8.以下程序段的输出结果是( ) char s[ ]= "\\141\141abc\t"; printf("%d\n",strlen(s)); A、9 B、12 C、13 D、14 9. 下面是对s的初始化,其中不正确的是( ) A、char s[5]={“abc” }; B、char s[5]={‘a’,’b’,’c’}; C、char s[5]=“”; D、char s[5]=”abcde” 10. 以下程序的输出结果是____________________ main( ) {char s[ ]="abcdef"; s[3]= '\0'; printf("%s\n",s); } 11. 下列程序段的输出结果是_____________ main( ) { char b[]="Hello,you"; b[5]=0; printf("%s \n", b ); } 12. 在C语言中,二维数组元素在内存中的存放顺序是_____________ 13. 设有定义语句 “ int a[3][4]={{1},{2},{3}} ” ,则a[1][1]值为_____________,a[2][1]的值为_____________ 14. 若在程序中用到 “ putchar() ” 函数时,应在程序开头写上包含命令_____________ ,若在程序中用到 “ strlen() ” 函数时,应在程序开头写上包含命令_____________ 15. 下面程序的功能是输出数组s中最大元素的下标,请填空。 main() { int k,p; int s[]={1,-9,7,2,-10,3}; for(p=0,k=p;p<6;p++) if (s[p]>s[k]) _____________ ; printf("%d\n",k); } 16. 以下程序执行时输入Language Programming<CR>的结果是_____________ #include <stdio.h> main() { char str[30]; scanf("%s",str); printf("str=%s\n",str); } 17. 以下程序可把输入的十进制长整型数以十六进制数的形式输出,请填空。 main() { char b[17]={"0123456789ABCDEF"}; int c[64],d,i=0,base=16; long n; printf("Enter a number:\n"); scanf("%1d",&n); do{c[i]= _____________; i++; n=n/base; }while(n!=0); printf("Transmite new base:\n"); for (--i;i>=0;--i) {d=c[i]; printf("%c",b[ ____________ ]; } } 18. 以下数组定义中,错误的是( ) A、 int a[]={1,2,3}; B、 int a[5]={1,2,3}; C、 int a[3]={1,2,3,4}; D、 int a[5],b; 19.以下数组定义中,正确的是( ) A、 int n=4,a[n]={1,2,3,4}; B、 int a[][2]={1,2,3,4}; C、 int a[2][]={1,2,3,4}; D、 int a[][]={{1,2},{3,4}}; 20.设有如下定义:int a[8][10];在C中一个整数占用4字节,设a的起始地址为1000,则a[1][1]的地址是( ) A、 1000 B、 1004 C、 1036 D、 1044 21. 有数组定义:int a[ ][3]={1,2,3,4,5,6,7,8,9},则a[1][2]的值是( ) A、 2 B、 5 C、 6 D、 8 22.设已定义 char str[6]={'a','b','\0','c','d','\0'}; 执行语句 printf(("%s",str) 后,输出结果为( ) A、 a B、 ab C、 abcd D、 ab\0cd\0 23.引用数组元素时,数组元素下标不可以是( ) A、 字符常量 B、 整型变量 C、 字符串 D、 算术表达式 24.下面程序段的运行结果是( ) void main() {char a[]="abcd",b[]="123"; strcpy(a,b); printf("%s\n",a); } A、 123 B、 123d C、 abcd D、 abcd123 25.下面程序段的运行结果是( ) void main() {char a[]="123",b[]="abcd"; if(a>b) printf("%s\n",a); else printf("%s\n",b); } A、 123 B、 编译时出错 C、 abcd D、 运行时出错- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 数组 上机 作业
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【仙人****88】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【仙人****88】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【仙人****88】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【仙人****88】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文