数组实验实验报告.docx
- 文档编号:3845065
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:19
- 大小:159.79KB
数组实验实验报告.docx
《数组实验实验报告.docx》由会员分享,可在线阅读,更多相关《数组实验实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
数组实验实验报告
C语言程序设计试验汇报
专业:
计算机科学与技术班级:
计算机科学与技术创新试验班日期:
-12-22成绩:
试验组别:
第次试验:
指导老师:
学生姓名:
学号:
同组人姓名:
试验名称:
数组试验
一、试验目
(1)掌握数组说明、初始化和使用
(2)掌握一维数组作为函数参数时实参使用方法;
(3)掌握字符串处理函数设计,包含串操作函数及数字串与数之间转换函数实现算法。
(4)掌握基于分支策略二分查找算法和选择排序算法思想,以及相关算法实现。
二、试验内容及要求
1.源程序改错
下面是用来将数组a中元素按升序排序后输出源程序。
分析源程序中存在问题,并对源程序进行修改,使之能争取完成任务。
源程序:
#include
intmain(void)
{
inta[10]={27,13,5,32,23,3,17,43,55,39};
voidsort(int[],int);
inti;
sort(a[0],10);
for(i=0;i<10;i++)
printf("%6d",a[i]);
printf("\n");
return0;
}
voidsort(intb[],intn)
{
inti,j,t;
for(i=0;i for(j=0;j if(b[j] t=b[j],b[j]=b[j+1],b[j+1]=t; } 2.源程序完善、修改、替换 (1)下面源程序用于求解瑟夫问题: M个人围成一个圈,从第一个人开始依次从1直N循环报数,每当报数为N时报数人出圈,直到圈中只剩下一个人。 请在源程序中下划线处填写合适代码来完善程序。 源程序: #include #defineM10 #defineN3 intmain(void) { inta[M],b[M]; inti,j,k; for(i=0;i a[i]=i+1; for(i=M,j=0;i>1;i--){ for(k=1;k<=N;k++) if(++j>i-1)j=0; b[M-i]=j? ____: ___; if(j) for(k=--j;k ________________; } for(i=0;i printf("%6d",b[i]); printf("%6d\n",a[0]); return0; } (2)上面程序中使用数组元素值表示圈中人编号,故每当有些人出圈是都要压缩数组,这种算法不够精炼。 假如采取做标识措施,即每当有些人出圈是对对应数组元素做标识,从而可省掉压缩数组时间,这么处理效率会更高部分。 所以,请采取做标识措施修改 (1)中程序,并使修改后程序与 (1)中程序有相同功效。 3.跟踪调试程序 在下面所给源程序中,函数strncat(s,t,n)原来应该讲字符数组t前n个字符链接到字符数组s中字符串尾部。 不过函数strncat在定义是代码有误,不能实现上述功效,请按下面要求进行操作,并回复问题和排除错误。 (1)单步实施源程序。 进入函数strncat后观察表示式s、t和i。 当光条落在for语句所在行是吗,i位多少? 当光条落在strnca函数块结束标识所在行时,s,t分别为和值? i=22s和t没有改变 (2)分析函数犯错原因,排除错误,是函数正确实现功效,最终写出程序结果。 源程序: #include voidstrncat(char[],char[],int); intmain(void) { chara[50]="Theadoptedsymbolis",b[27]="abcdefghijklmnopqrstuvwxyz"; strncat(a,b,4); printf("%s\n",a); return0; } voidstrncat(chars[],chart[],intn) { inti=0,j; while(s[i++]); for(j=0;j s[i++]=t[j++]; s[i]='\0'; } 4.程序设计 编写并上机调试运行实现以下功效程序: (1)编写一个程序,从键盘读入数据,对一个3*4矩阵进行赋值,求其转置矩阵,然后输出原举这个和转置矩阵。 (2)编写一个程序,其功效要求是: 输入一个整数,将她在内存中二进制表示每一位转换成对应数字字符,存放在一个数组中,然后输出该整数二进制表示. (3)编写一个程序,其功效是: 输入n个学生姓名和c语言课程成绩,将成绩按从高到低次序排序,姓名同时做对应调整,输出排序后姓名和成绩。 然后,输入一个c成绩,用二分进行搜,假如搜到,输出姓名和成绩,没有,输出“notfound! ”。 5.选做题 编写并上机调试运行能实现以下功效函数和程序: (1)编写函数strnins(s,t,n),其功效是: 将字符数组t中字符串插入到字符数组中第n个字符后边。 (2)编写一个实现八皇后问题程序。 输出全部解法。 三、试验步骤 1.源程序改错: #include voidsort(intb[],intn); intmain(void) { inta[10]={27,13,5,32,23,3,17,43,55,39}; voidsort(int[],int); inti; sort(a,10); for(i=0;i<10;i++) printf("%6d",a[i]); printf("\n"); return0; } voidsort(intb[],intn) { inti,j,t; for(i=0;i for(j=0;j if(b[j]>b[j+1]) t=b[j],b[j]=b[j+1],b[j+1]=t; } 2.源程序完善、修改、替换 (1) #include #defineM10 #defineN3 intmain(void) { inta[M],b[M]; inti,j,k; for(i=0;i a[i]=i+1; for(i=M,j=0;i>1;i--) { for(k=1;k<=N;k++) if(++j>i-1)j=0; b[M-i]=j? a[j-1]: a[i]; if(j) for(k=--j;k a[k]=a[k+1]; } for(i=0;i printf("%6d",b[i]); printf("%6d\n",a[0]); return0; } (2) #include #defineM10 #defineN3 intmain(void) { inta[M],b[M]; inti,j,k,t; for(i=0;i a[i]=i+1; for(i=M,j=0;i>1;i--) { for(k=1;k<=N;k++) { for(;a[j]>10;j++); if(j++>=(M-1))j=0; } b[M-i]=j? a[j-1]: a[M-1]; if(j) { b[M-i]=a[j-1]; a[j-1]=11; } else { for(t=1;a[M-t]>10;t++); b[M-i]=a[M-t]; a[M-t]=11; } } for(i=0;i printf("%6d",b[i]); for(i=0;i if(a[i]<11)printf("%6d",a[i]); return0; } 3.跟踪调试程序 #include voidstrncat(char[],char[],int); intmain(void) { chara[50]="Theadoptedsymbolis",b[27]="abcdefghijklmnopqrstuvwxyz"; strncat(a,b,4); printf("%s\n",a); return0; } voidstrncat(chars[],chart[],intn) { inti=0,j; while(s[i]! ='\0') s[i++]; for(j=0;j s[i++]=t[j++]; s[i]='\0'; } 4.程序设计 (1) #include #include intmain(void) { inti,j; chars[3][5],c; printf("pleaseinputyourjuzhen: \n"); for(i=0;i<3;i++) for(j=0;j<5;j++) { c=getchar(); if(isdigit(c)) s[i][j]=c; } printf("thejuzhenyouinputis: \n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) putchar(s[i][j]); putchar('\n'); } printf("thejuzhenhasbeenchangedinto: \n"); for(j=0;j<4;j++) { for(i=0;i<3;i++) putchar(s[i][j]); putchar('\n'); } return0; } (2) #include #defineMAX16 intmain() { intn,i; chars[MAX]; printf("pleaseinputanumber: \n"); scanf("%d",&n); if(n>=-32768&&n<=32767) ; else { printf("wrong: thenumberistoolarge"); return-1; } if(n>=0) { for(i=0;n! =0;i++) { s[i]=n%2+'0'; n/=2; } for(;i<=MAX-1;i++) s[i]='0'; } else { n=-(n+1); for(i=0;n! =0;i++) { s[i]=n%2+'0'; n/=2; } for(;i<=MAX-2;i++) s[i]='0'; for(i=0;i if(s[i]=='1') s[i]='0'; elseif(s[i]=='0') s[i]='1'; s[i]='1'; } for(i=MAX-1;i>=0;i--) putchar(s[i]); return0; } (3) #include #include intbinsearch(intn,ints[],intx); intmain() { inti,j,m,n,k,a; ints[10]; structstudents{ char*name; intgrade; }ACM[7]={ {"zhang",90}, {"li",69}, {"wang",87}, {"zhao",73}, {"sun",83}, {"tian",92}, {"ying",82} }; structstudentst; malloc(sizeof(structstudents)); printf("theoriginallistis: \nname\tgrade\n"); for(m=0;m<=6;m++) printf("%s\t%d\n",ACM[m].name,ACM[m].grade); for(i=0;i<6;i++) for(j=0;j<6-i;j++) if(ACM[j].grade>ACM[j+1].grade) t=ACM[j],ACM[j]=ACM[j+1],ACM[j+1]=t; printf("nowthelistis: \nname\tgrade\n"); for(k=0,m=0;m<=6&&k<=6;k++,m++) s[k]=ACM[m].grade; for(m=6;m>=0;m--) printf("%s\t%d\n",ACM[m].name,ACM[m].grade); printf("pleaseinputagrade: \n"); scanf("%d",&n); a=binsearch(n,s,7); if(a==-1) { printf("wrong: thenumberhasnotbeenfound\n"); return-1; } printf("%s\t%d\n",ACM[a].name,ACM[a].grade); return0; } intbinsearch(intn,ints[],intx) { intlow,high,mid; low=0; high=x-1; while(low<=high) { mid=(low+high)/2; if(n high=mid-1; elseif(n>s[mid]) low=mid+1; else returnmid; } return-1; } 5.选做题 (1) #include voidstrnins(char*s,char*t,intn); intmain() { intn; chars[]="oh,ihave"; chart[]="failedagain"; printf("theoriginalstringsis: \n%s\n",s); printf("theoriginalstringtis: \n%s\n",t); printf("pleaseinputanumber: \n"); scanf("%d",&n); strnins(s,t,n); printf("nowthestringis: \n%s\n",s); return0; } voidstrnins(char*s,char*t,intn) { inti; for(i=1;i<=n&&(*s)! ='\0';s++,i++) ; for(;(*t)! ='\0';s++,t++) *s=*t; *s='\0'; } (2) #include intmain() { inti,j,k,l,m,n,o,p; intq=0; printf("theanswerof8queensarelistasfollow: \n"); for(i=1;i<=8;i++) for(j=1;j<=8;j++) if(j==i||j==i+1||j==i-1) continue; else for(k=1;k<=8;k++) if(k==i||k==i+2||k==i-2||k==j||k==j+1||k==j-1) continue; else for(l=1;l<=8;l++) if(l==i||l==i+3||l==i-3||l==j||l==j+2||l==j-2||l==k||l==k+1||l==k-1) continue; else for(m=1;m<=8;m++) if(m==i||m==i+4||m==i-4||m==j||m==j+3||m==j-3||m==k||m==k+2||m==k-2||m==l||m==l-1||m==l+1) continue; else for(n=1;n<=8;n++) if(n==i||n==i+5||n==i-5||n==j||n==j+4||n==j-4||n==k||n==k+3||n==k-3||n==l||n==l-2||n==l+2||n==m||n==m+1||n==m-1) continue; else for(o=1;o<=8;o++) if(o==i||o==i+6||o==i-6||o==j||o==j+5||o==j-5||o==k||o==k+4||o==k-4||o==l||o==l-3||o==l+3||o==m||o==m+2||o==m-2||o==n||o==n+1||o==n-1) continue; else for(p=1;p<=8;p++) { if(p==i||p==i+7||p==i-7||p==j||p==j+6||p==j-6||p==k||p==k+5||p==k-5||p==l||p==l-4||p==l+4||p==m||p==m+3||p==m-3||p==n||p==n+2||p==n-2||p==o||p==o-1||p==o+1) continue; else { printf("(1,%d)\t(2,%d)\t(3,%d)\t(4,%d)\t(5,%d)\t(6,%d)\t(7,%d)\t(8,%d)\t\n",i,j,k,l,m,n,o,p); q++; } } printf("%d",q); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 实验 报告