C语言实验报告 数组_第1页
C语言实验报告 数组_第2页
C语言实验报告 数组_第3页
C语言实验报告 数组_第4页
C语言实验报告 数组_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

PAGE9-学生实验报告学院:软件与通信工程学院课程名称:C语言与程序设计专业班级:通信121姓名:学号:学生实验报告(4)学生姓名学号同组人实验项目函数√□必修□选修√√□演示性实验□验证性实验□操作性实验□综合性实验√实验地点M002实验仪器台号指导教师实验日期及节次周一56节课一、实验综述1、实验目的及要求1.一维数组和二维数组的定义方法,以及其元素的访问形式2.用字符数组来处理字符串及字符串处理函数3.掌握数组处理中的有关排序和查找算法2、实验仪器、设备或软件计算机、VC++6.0、office、相关的操作系统等。二、实验过程(实验步骤、记录、数据、分析)实验题目:1.用冒泡法将从控制台输入的10个学生的成绩从高到低进行排序;输入一个学生的成绩,插入到已排好序的学生成绩数组中去;最后将排好序的成绩单进行反序存放。(一)、程序如下:#include<stdio.h>voidorder(intn,inta[]){ inti,j,t; for(i=0;i<=n-2;i++) for(j=1;j<=n-i-1;j++) if(a[j-1]>a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;}}voidinsert(intn,inta[]){ order(n,a);}voidmain(){ inta[11],i; for(i=0;i<=9;i++) scanf("%d",&a[i]); order(10,a); for(i=9;i>=0;i--) printf("%2d",a[i]); putchar('\n'); printf("Enterastudent'sgrade:"); scanf("%d",&a[10]); insert(11,a); for(i=0;i<=10;i++) printf("%2d",a[i]); putchar('\n');}(二)、在VC++中输入程序并编译它。如图:程序没有错误(三)、结论1、实验结果:2、分析讨论:(1)此道实验题主要是让我们学会使用冒泡法将一组无序的数据按照一定的顺序(由小到大或有大到小)进行排列:先两个两个(邻近的两个数据)比较,使得每次最大的数总在前面或后面(或最小的数总在前面或后面),这样,经过n*(n-1)/2次的比较之后,所有的数据将会按照一定顺序排列。(2)本题中包含多个实验项目,但每个实验项目之间又有一定的联系。在已排好顺序的学生成绩中插入一个学生成绩并重新排序,可以考虑采用调用刚刚排序的函数,避免再次编写类似的程序。(3)此实验让我对数组最为函数参数有了更加深刻的了解。函数实参和形参变量的数据类型和形式必须相同。作为函数实参的可以是数组元素或数组名,当作为函数实参的是数组名时,形参变量也必须是数组名,实际上,此时,实参与形参之间的值传递是将实参数组的起始地址(指针值)传递给形参变量。(四)、指导教师评语及成绩:2.编写程序,将两个字符串连接起来,不使用strcat()函数。(一)、程序如下:#include<stdio.h>voidmain(){ chara[80],b[80]; inti=0,j=0; gets(a);gets(b); while(a[i]!='\0') i++; a[i]=''; while(b[j]!='\0') a[++i]=b[j++]; a[++i]='\0'; puts(a);}(二)、在VC++中输入程序并编译它。如图:三、结论1、实验结果:2、分析讨论:(1)本次实验使用了puts和gets函数来代替printf和scanf函数进行输出和输入,带来了极大的方便。puts函数在进行字符数组输出时遇到‘\0’才会停止输出,并且该函数在输出结束后自动回车换行,这一点有别于printf函数,却很方便;gets函数在从标准输入设备输入字符时,遇到换行符才会停止输入,若用scanf函数,则碰到空格符或者换行符就停止输入,对于本题,明显不符合题意,用gets函数则不会出现这样的情况。(2)此外,由于puts函数遇到‘\0’才会停止输出(这是正常输出)的特殊性,所以在连接时,必须将第一个字符数组中的第一个‘\0’修改为空格(或其他字符),并且连接完成后,必须加上一个‘\0’的元素,否则会有输出错误。(四)、指导教师评语及成绩:3、(1)求3×3矩阵的对角线元素之和。程序如下:#include<stdio.h>#defineN3voidmain(){ inta[N][N],sum=0,i,j; printf("Pleaseinputanarray:\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) scanf("%d",&a[i][j]); } for(i=0;i<N;i++) { for(j=0;j<N;j++) if(i==j||i+j==N-1)sum+=a[i][j]; } printf("Thesumofspecialelementsis%d\n",sum);}(二)、在VC++中输入程序并编译它。如图:程序没有错误(三)、结论1、实验结果:2、分析讨论:(1)对于二维数组元素值的读入,应使用双重循环来实现。(2)二维数组定义时,数组长度必须是常量或者符号常量,不能是变量,这一点尤其要注意。(3)矩阵处于对角线上的元素的下标要么相等,要么相加等于一常数,这一点是我们解题的关键。(四)、指导教师评语及成绩:3、(2)从键盘输入一个0~99999之间的整数。①它是一个几位数;②将该数的各位数字按逆序输出。(一)、程序如下:#include<stdio.h>voidmain(){ inta[5],x,i=0,j; printf("Pleaseinputanintegerfromzerotoonethousand:\n"); scanf("%d",&x); while(x!=0){ a[i++]=x%10; x=x/10; } printf("它是一个%d位数\n",i++); for(j=0;j<i-1;j++) printf("%d",a[j]); putchar('\n');}(二)、在VC++中输入程序并编译它。如图程序没有错误(三)、结论1、实验结果:2、分析讨论:(1)持续使用求余运算可以分离出一个整数各个位数上的数。(2)持续使用整除(对于两整数而言)可以帮助判别一个整数是几位数。(3)数组与数组之间不可以进行赋值运算,但数组元素可以被赋值,这一点暗示了strcpy函数存在的必要性。(7)编写一个函数voidad(inta[M][N])找出一个M行N列(M、N为符号常量)的二维数组a中的“鞍点”。在主函数中输入二维数组a的值,并将它作为实参调用ad函数。所谓“鞍点”是指该位置上的元素在该行上最大,而在该列上最小(一个二维数组中可能没有鞍点)。假设二维数组a中的所有整数都是不相等的。、程序如下:#include<stdio.h>#defineM3#defineN3voidad(inta[][N]){ intmax,i,j,k,s,r; for(i=0;i<M;i++) { s=1; max=a[i][0];r=0; for(j=1;j<M;j++) if(a[i][j]>max){max=a[i][j];r=j;} for(k=0;k<N;k++) { if((max<a[k][r])||(max==a[k][r]))s=0; else{s=1;break;} } if(s==0)printf("Theadis%d\n",max); } if(s==1)printf("Thereisnoad\n");}voidmain(){ inti,j,a[M][N]; printf("Pleaseinputanarray:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) sca

温馨提示

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

最新文档

评论

0/150

提交评论