




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工程大学《程序设计基础》实验报告
基础实践二姓名:王明 班 级:学号: 实验时间: 2017年 5月8日成绩哈尔滨工程大学计算机基础课程教学中心实验五实验题目1:输入两个整数数组,每个数组有5个整数,将两者合并并排序输出。设计思想:定义两个5个元素的数组,一个10个元素的数组,数据类型为整型,通过for循环输入前两个数组的值,并依次存入第三个数组中。另外编写排序函数,在主函数中调用对第三个数组中的元素排序并输出。实验代码及注释:#include<>#include<>voidf1(int*a,inti,intj){intm,n,c;intk;m=i;n=j;k=a[(i+j)/2];do{while(a[m]<k&&m<j)m++;while(a[n]>k&&n>i)n--;if(m<=n){c=a[m];a[m]=a[n];a[n]=c;m+=1;n-=1;}}}while(m<=n);if(m<j)f1(a,m,j);if(n>i)f1(a,i,n);}intmain(){inta1[5],a2[5],c[10];printf("请输入两个数组,每组五个整数:\n");for(inti=0;i<5;i++)scanf("%d%d",&a1[i],&a2[i]);for(inti=0;i<5;i++){c[i]=a1[i];c[i+5]=a2[i];f1(c,0,9);printf("排序后为:\n")for(inti=0;i<10;i++)printf("%d",c[i]);putchar('\n');system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验用到了循环结构对数组输入,这是对多个数据同时输入的一种非常方便的方法。利用指针进行排序,由于形参和实参在数据传递上有单向性,在进行元素交换类数组函数的编写时,需要借用指针。本实验将其中一个主要功能编写为函数,使代码模块化,利于阅读查错。实验题目2:某公司生成5种产品,每周记录生产的每种产品数量和销售数量。在每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息:(a)每周生产和销售的数量;(b)所有生产产品的总量;(c)所有销售产品的总量;(d)每种产品生产和销售的总量;假设生产和销售的产品分别用二维数组M[4][5]和S[4][5]表示。其中,M[i][j]表示第i周生产第j种产品的数量。S[i][j]表示第i周销售第j种产品的数量。假设使用一维数组C[5]来表示每种产品的价格。其中,C[i]表示第j种产品的价格。数组M、S和C的值都在程序中输入。定义两个二维数组Mvalue和Svalue来表示生产和销售的产品价值。输出变量的计算方式如下:Mvalue[i][j]=第i周生产第j种产品的价值=M[i][j]*C[i]Svalue[i][j]=第i周销售第j种产品的价值=S[i][j]*C[i]Mweek[i]=在i周里生产的产品价值二(j从1到5求和)Mvalue[i][j]Sweek[i]=在i周里所有产品的产品价值二(j从1到5求和)Svalue[i][j]Mproduct[i]二在本月里生成第j种的产品价值二(i从1到4求和)Mvalue[i][j]Sproduct[i]二在本月里销售第j种的产品价值二(i从1到4求和)Svalue[i][j]Mtotal二在本月里生成所有产品的产品总价值二(i从1到4求和)Meek[i][j]Stotal二在本月里销售所有产品的产品总价值二(i从1到4求和)Seek[i][j]请编程实现数据的输入和输出。设计思想:本实验中涉及多组数值,如数量、周数、价值等。根据题目要求定义四个二维数组,分别表示生产和销售的数量及价值,再定义四个一维数组表示生产和销售的周数以及产品价值。最后,根据题目中给定的计算方法理清数组之间关系,设计函数进行计算。实验代码及注释:#include<>#include<>intmain(){intM[4][5]={0},S[4][5]={0},C[5]={0},Mvalue[4][5]={0},Svalue[4][5]={0},Mweek[5]={0},Sweek[5]={0},Mproduct[5]={0},Sproduct[5]={0},Mtotal=0,Stotal=0;intMt=0,St=0,sum=0;for(intj=0;j<5;j++){printf("C[%d]=",j+1);scanf("%d",&C[j]);for(inti=0;i<4;i++){for(intj=0;j<5;j++){printf("M[%d][%d]=",i+1,j+1);scanf("%d",&M[i][j]);Mvalue[i][j]=M[i][j]*C[j];}}for(inti=0;i<4;i++){for(intj=0;j<5;j++){printf("S[%d][%d]=",i+1,j+1);scanf("%d",&S[i][j]);Svalue[i][j]=S[i][j]*C[j];)for(inti=0;i<4;i++)(for(intj=0;j<5;j++)(Mweek[i]+=Mvalue[i][j];Sweek[i]+=Svalue[i][j];))for(intj=0;j<5;j++)(for(inti=0;i<4;i++)(Mproduct[j]+=Mvalue[i][j];Sproduct[j]+=Svalue[i][j];}for(inti=0;i<4;i++){Mtotal+=Mweek[i];Stotal+=Sweek[i];}printf("(a):\n");for(inti=0;i<4;i++){printf(" 第 %d 周 生 成 数量:%d\n",i+1,M[i][0]+M[i][1]+M[i][2]+M[i][3]+M[i][4]);printf(" 第 %d 周 销 售 数量:%d\n”,i+1,S[i][0]+S[i][1]+S[i][2]+S[i][3]+S[i][4]);printf("\n");}printf("(b):\n");for(inti=0;i<4;i++){for(intj=0;j<5;j++){Mt+=M[i][j];St+=S[i][j];}}printf("所有生产产品的总量:%d\n",Mt);printf("\n");printf("(c):\n所有销售产品的总量:%d\n",St);printf("\n");printf("(d):\n");for(intj=0;j<5;j++){printf("第%d种产品生产的量:%d\n",j+1,M[0][j]+M[1][j]+M[2][j]+M[3][j]);printf("第%d种产品销售的量:%d\n”,j+1,S[0][j]+S[1][j]+S[2][j]+S[3][j]);printf("\n");}for(inti=0;i<4;i++){for(intj=0;j<5;j++){printf("Mvalue[%d][%d]=%d\n",i+1,j+1,Mvalue[i][j]);printf("Svalue[%d][%d]=%d\n",i+1,j+1,Svalue[i][j]);}}printf("\n");for(inti=0;i<4;i++){printf("Mweek[%d]=%d\n",i+1,Mweek[i]);printf("Sweek[%d]=%d\n",i+1,Sweek[i]);printf("\n");for(intj=0;j<5;j++){printf("Mproduct[%d]=%d\n",j+1,Mproduct[j]);printf("Sproduct[%d]=%d\n",j+1,Sproduct[j]);}printf("\n");printf("Mtotal=%d\n",Mtotal);printf("Stotal=%d\n",Stotal);system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验计算方法已经给出,但涉及较多数组,关系复杂。由于一个数组可以存放多个数据,导致数据之间关系难以理清。求解这类问题时,要小心谨慎地先理清数据之间的关系,再根据给定的算法进行计算。实验题目3:编程将一个字符串插入到另一个字符串的第n个位置。设计思想:定义两个较大的数组,数据类型为字符型。利用循环对数组赋值。定义一个变量控制插入的位置。用strlen函数计算两组字符串长度,在第二个数组中为第一个数组让开位置(留出空位,使原有元素后移至第一数组完全插入时末尾位置),用第一个数组中的字符串覆盖第二个数组中相应位置字符,达到插入的目的。实验代码及注释:#include<>#include<>#include<>intmain()intn,i,j;intlen1,len2;charstr1[256],str2[256];printf("请输入str1=");scanf("%s",&str1);printf("请输入str2=");scanf("%s",&str2);len1=strlen(str2);len2=strlen(str1)+n-1;printf("请输入n=");scanf("%d",&n);for(i=n-1,j=0;i<len2,j<strlen(str1);i++,j++){str2[len1]=str2[i];str2[i]=str1[j];len1++;}printf("%s",str2);system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验用了循环结构对数组进行赋值,这是对多个数据同时输入的一种非常方便的方法。同时,本实验采取了将原有元素后移为即将插入的元素“让位”的插入方法,这也是一种比较常用的方法。在对数组中元素进行移位时,要特别注意是否相差一,因为数组计数从零开始,这种问题特别容易发生。所以,在查错时也要特别注意这一点。实验题目4:编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。设计思想:设计函数对数组中的字符串进行反序排列。首先设计一个函数对数组中的两个元素进行交换,从首尾两端同时进行,第一位和最后一位交换第二位和倒数第二位进行交换,依次类推,实现数组的反序。在主函数中调用。实验代码及注释:#include<>#include<>#include<>#defineswap(a,b){chartemp;temp=a;a=b;b=temp;}voidf2(chars[]){intlenth=strlen(s);chartemp;for(inti=0;i<lenth/2;i++)swap(s[i],s[lenth-1-i]);}intmain(){chars[256];printf("请输入一串字符:\n");scanf("%s",&s);f2(s);printf("反序后为:\n");printf("%s",s);intzimu(chars)intzimu(chars)system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验通过利用数组直接作为函数形参,直接对数组进行反序,省去了借用指针的过程,更加简洁方便。实验题目5:编写程序,从键盘输入一行字符,统计其中英文字母数、空格、数字和其他字符数的个数。设计思想:分别编写三个函数对字符进行检测,函数的编写根据ASCII码进行检测,函数结果返回1或0(符合要求返回1,反之返回0)。在主函数中对输入的字符串进行逐位检测,直接利用三个函数的返回值进行计数,最后分别输出结果。实验代码及注释:#include<>#include<>if(64<s&&s<91||96<s&&s<123)return1;elsereturn0;}intkongge(chars){if(s=='')return1;elsereturn0;}intshuzi(chars){if(48<=s&&s<=57)return1;elsereturn0;intmain(){chars;intzm=0,kg=0,sz=0,qita=0;printf("请输入一串字符:\n");while((s=getchar())!='\n'){zm+=zimu(s);kg+=kongge(s);sz+=shuzi(s);}printf("字母二%d\n空格二%d\n数字二%d”,zm,kg,sz);system("pause");return0;intpanduan(chars[])intpanduan(chars[])验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验利用了ASCII码对字符进行判断,由于字符与ASCII码一一对应,所以ASCII码经常被用来判断字符。本实验中将函数的返回值定位0或1,可以直接用来计数,省去了再次计数的麻烦。实验六实验题目1:编程序求不超过2000的所有对称数。请编写函数,判断一个数字是否为对称数,若是对称数,函数返回值为1,否则返回值为0。主函数完成数据的输入与结果的输出。设计思想:定义一个五位数组,数据类型为字符型。设计函数通过指针对输入字符串的首位和尾位进行比较,然后向中间靠拢,最后得出是否为对称数,作为主函数里的判断条件。在主函数中输入、输出并调用此函数。实验代码及注释:#include<>#include<>#include<>intn=strlen(s);intt=n/2;char*p1,*p2;p1=s;p2=p1+n-1;for(inti=0;i<t;i++){if(*(p1+i)!=*(p2-i))return0;}return1;}intmain(){chars[5];inta,b,c;printf("2000以内对称数有:\n");for(intn=1;n<=2000;n++){sprintf(s,"%d",n);b=panduan(s);if(b==1)printf("%d\t",n);}printf("请输入一个数:“);scanf("%d",&a);sprintf(s,"%d",a);c=panduan(s);if(c==1)printf("%d是对称数\n”,a);elseprintf("%d不是对称数\n”,a);system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验要求判断是否为对称数,很容易想到直接输入数字求其相应数位再进行对比。不过,本实验采用判断字符的方式,使程序更加简洁,占用内存更小。同时,本函数采用指针指向字符串的相应位,直接进行比较,非常方便。实验题目2:请编写函数,判断一个字符串是否是回文。若是回文,函数返回值为1,否则返回值为0.设计思想:采用指针的运算进行移位,在这一过程中对数组的相应位进行比较,从首位和尾位开始比较,比较完成后进行移位,直至全部比较结束。将比较结果作为判断条件,决定是反回何值。实验代码及注释:#include<>#include<>#include<>intpanduan(chars[],intn){char*p1,*p2;p1=s;p2=s+n-1;for(inti=0;i<n/2;i++){if(*(p1+i)!=*(p2-i))return0;}return1;}intmain(){chars[128];printf("请输入一串字符:\n");scanf("%s",&s);if(strlen(s)==1||panduan(s,strlen(s)))printf("1\n");elseprintf("0\n");system("pause");return0;}验证与结论:正常,结果输出正确。总结与心得体会:本实验与上一实验有很大的相似性,函数采用指针指向字符串的相应位,直接进行比较,比较完成后通过指针的运算进行移位,非常方便。在解决多数据问题需要移位时,指针的运算是一种很好的方法。实验题目3:分别利用行指针和指向元素的指针求整型二维数组中最大的元素及其所在的行号与列号。设计思想:通过循环方法对数组进行赋值。指向行时,分别判断每一行最大值再进行比较,同时记录行号和列号。指向元素时,比较所有元素大小,找出最大值,并记录行号和列号。实验代码及注释:#include<>#include<>intmain(){intM,N;printf("请输入数组的行和列:\n");scanf("%d%d",&M,&N);inta[M][N],max,h,l,nu=0;int(*p)[N],*q;printf("请输入%d个数字:\n",M*N)for(inti=0;i<M;i++){for(intj=0;j<N;j++){scanf("%d",&a[i][j]);}printf("\n");}p=a;max=0;
C:\User&\Adminiitrator\Deskt叩\2D1GQ613L8*澧%2口1&0613L8jea^5_4jexe [ |叵11^-青输入五个单诃:asdapplepetpeaiFhallappleasdhallpearpctw报任意^皆续...Pi*oceseexitedaftor43.6GsecondsuitFreturnvalue3清按任意^皆续.一书名3作者 4价格\n");for(inti=0;i<10;i++){scanf("%f%s%s%f",&somebook[i].NUM,&somebook[i].name,&somebook[i].author,&somebook[i].price);}}voidsearchBook_name(charname_1[])inti_book=0;for(inti=0;i<10;i++){if(hasBook(name_1,somebook[i])==1){printf("%.0f%s%s%.2f\n",somebook[i].NUM,somebook[i].name,somebook[i].author,somebook[i].price);i_book++;}}if(i_book==0){printf("没有这本书\n");}}voidsearchBook_price(floatprice_1)for(inti=0;i<10;i++){if(higher(price_1,somebook[i])==1){printf("%.0f%s%s%.2f\n",somebook[i].NUM,somebook[i].name,somebook[i].author,somebook[i].price);}}}intmain(){input();charname_1[10];printf("输入你想查找的书:");scanf("%s",name_1);searchBook_name(name_1);floatprice_1;printf("输入价格:“);scanf("%f",&price_1);searchBook_price(price_1);system("pause");return0;}验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验在结构体中加入了更多的类型,还运用到了循环结构对结构体里的变量进行赋值,是一种比较方便的写法。同时,还用到了对结构体里变量的判断。实验题目3:设有若干个人员的数据,其中有学生和教师。学生的数据包括:姓名、学号、性别、班级,教师数据包括:姓名、职工号、性别、职务。现要求将老师和学生数据放在同一表格中,其中老师的职务和学生的班级共享空间。编程输入相应的数据,然后再输出数据。设计思想:定义一个结构体,包含各个数据,其中最后一项老师职务和学生班级用共用体,根据学号里的是否有s判断是老师还是学生,决定输出类型。实验代码及注释:#include<>#include<>#include<>#defineN4structperson{charname[16];charid[20];charsex[5];union{intclas;charoffice[16];}claoff;structperson*next;}*head,*pthis;voidinput(){structperson*tmp;printf(”请输入个人信息:\n");printf(" \n");for(inti=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程施工安全技术培训方案
- 输电线路电力设备保养方案
- 消防应急疏散指引方案
- 机电设备安装竣工验收方案
- 二零二五年度股权转让与产业链协同发展协议
- 2025版春节前企业提前复工条件及保障合同
- 二零二五年度成品油运输车辆安全标准认证服务合同范本
- 2025版工程劳务分包合同税率调整及税务优惠政策解读
- 二零二五年度个人财产保险法律援助服务合同范本
- 二零二五版出口货物集装箱保险合同:安全运输保障
- 助产专业介绍
- 工程项目招投标流程及风险防控措施
- 《电机与拖动基础》课件(共十一章)
- 民宿合伙协议书范本
- 医学检验质量培训
- 2025年洛阳理工学院招聘硕士研究生学历专任教师考试笔试试题(含答案)
- 养生茶基础知识培训课件
- 无人机应用技术专业认识
- 产科课件-人工流产
- 2025年医学基础知识真题(附答案)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
评论
0/150
提交评论