计算机科学与技术实验报告(1)_第1页
计算机科学与技术实验报告(1)_第2页
计算机科学与技术实验报告(1)_第3页
计算机科学与技术实验报告(1)_第4页
计算机科学与技术实验报告(1)_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、哈尔滨工程大学程序设计基础实验报告基础实践二姓 名: 王明 班 级:学 号:实验时间:2017 年 5 月 8 日成绩哈尔滨工程大学计算机基础课程教学中心实验五实验题目1:输入两个整数数组,每个数组有 5个整数,将两者合并并排序输出。设计思想:定义两个5个元素的数组,一个10个元素的数组,数据类型 为整型,通过for循环输入前两个数组的值,并依次存入第三个数组中。另外编写排序函数,在主函数中调用对第三个数组中的元素排序并输出。实验代码及注释:#include#includevoid f1(int *a, int i, int j)int m, n, c;int k;m = i;n = j;k

2、= a(i + j) / 2;do while (amk&mk&ni) n-;if (m = n) c = am;am = an;an = c;m+=1;n-=1; while (m = n);if (mi) f1(a, i, n);int main()int a15,a25,c10;printf( 请输入两个数组,每组五个整数:n);for(int i=0;i5;i+)scanf(%d %d,&a1i,&a2i);for(int i=0;i5;i+)ci=a1i;ci+5=a2i;f1(c,0,9);printf( 排序后为: n);for(int i=0;i10;i+)printf(%d

3、,ci);putchar(n);system(pause);return 0;验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验用到了循环结构对数组输入,这是对多个数据同时输入的一种非常方便的方法。 利用指针进行排序, 由于形参和实参在数据传递上有单向性,在进行元素交换类数组函数的编写时,需要借用指针。本实验将其中一个主要功能编写为函数,使代码模块化,利于阅读查错。实验题目 2 :某公司生成5 种产品,每周记录生产的每种产品数量和销售数量。在每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息:(a)每周生产和销售的数量;(b)所有生产产品的总量;(c)所有销售产品

4、的总量;(d)每种产品生产和销售的总量;假设生产和销售的产品分别用二维数组M45 和 S45 表示。其中,Mij 表示第 i 周生产第 j 种产品的数量。 Sij 表示第 i 周销售第 j种产品的数量。 假设使用一维数组C5 来表示每种产品的价格。 其中, Ci表示第j种产品的价格。数组 M S和C的值都在程序中输入。定义两个二维数组Mvalue 和 Svalue 来表示生产和销售的产品价值。输出变量的计算方式如下:Mvalueij=第 i 周生产第j 种产品的价值=Mij*CiSvalueij=第 i 周销售第j 种产品的价值=Sij*CiMweeki= 在 i 周里生产的产品价值=(j 从

5、 1 到 5 求和) MvalueijSweeki= 在 i 周里所有产品的产品价值 (= j 从 1 到 5 求和) SvalueijMproducti=在本月里生成第j种的产品价值=( i从 1到 4 求和)MvalueijSproducti=在本月里销售第j种的产品价值=( i从 1到 4 求和)SvalueijMtotal= 在本月里生成所有产品的产品总价值= ( i 从 1 到 4 求和)MeekijStotal= 在本月里销售所有产品的产品总价值= ( i 从 1 到 4 求和)Seekij请编程实现数据的输入和输出。设计思想:本实验中涉及多组数值,如数量、周数、价值等。根据题目要

6、求定义四个二维数组,分别表示生产和销售的数量及价值,再定义四个一维数组表示生产和销售的周数以及产品价值。最后,根据题目中给定的计 算方法理清数组之间关系,设计函数进行计算。实验代码及注释:#include#includeint main()intM45=0,S45=0,C5=0,Mvalue45=0,Svalue45= 0,Mweek5=0,Sweek5=0,Mproduct5=0,Sproduct5=0,M total=0,Stotal=0;int Mt=0,St=0,sum=0;printf(C%d=,j+1);scanf(%d,&Cj);for(int i=0;i4;i+)for(int

7、 j=0;j5;j+)printf(M%d%d=,i+1,j+1);scanf(%d,&Mij);Mvalueij=Mij*Cj;for(int i=0;i4;i+)for(int j=0;j5;j+)printf(S%d%d=,i+1,j+1);scanf(%d,&Sij);Svalueij=Sij*Cj;for(int i=0;i4;i+)for(int j=0;j5;j+)Mweeki+=Mvalueij;Sweeki+=Svalueij;for(int j=0;j5;j+)for(int i=0;i4;i+)Mproductj+=Mvalueij;Sproductj+=Svalueij

8、;for(int i=0;i4;i+)Mtotal+=Mweeki;Stotal+=Sweeki;printf(a):n);for(int i=0;i4;i+)printf(第%d周生成数量:dn”,i+1,Mi0+Mi1+Mi2+Mi3+Mi4);printf(第%d周销售数量:dn,i+1,S皿0+Si1+Si2+Si3+Si4);printf(n);printf(b):n);for(int i=0;i4;i+)for(int j=0;j5;j+)Mt+=Mij;St+=Sij;printf( 所有生产产品的总量:%dn,Mt);printf(n);printf(c):n 所有销售产品的总

9、量:%dn,St);printf(n);printf(d):n);for(int j=0;j5;j+)printf( 第 %d 种 产 品 生 产 的 总量:dn,j+1,M0j+M1j+M2j+M3j);printf( 第 %d 种 产 品 销 售 的 总量:dn,j+1,S0j+S1j+S2j+S3j);printf(n);for(int i=0;i4;i+)for(int j=0;j5;j+)printf(Mvalue%d%d=%dn,i+1,j+1,Mvalueij);printf(Svalue%d%d=%dn,i+1,j+1,Svalueij);printf(n);for(int i

10、=0;i4;i+)printf(Mweek%d=%dn,i+1,Mweeki);printf(Sweek%d=%dn,i+1,Sweeki);printf(n);for(int j=0;j5;j+)printf(Mproduct%d=%dn,j+1,Mproductj);printf(Sproduct%d=%dn,j+1,Sproductj);printf(n);printf(Mtotal=%dn,Mtotal);printf(Stotal=%dn,Stotal);system(pause);return 0;验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验计算方法已经给出,但涉

11、及较多数组,关系复杂。由于一个数组可以存放多个数据,导致数据之间关系难以理清。求解这类问题时,要小心谨慎地先理清数据之间的关系,再根据给定的算法进行计算。实验题目 3 :编程将一个字符串插入到另一个字符串的第 n 个位置。设计思想:定义两个较大的数组,数据类型为字符型。利用循环对数组赋值。 定义一个变量控制插入的位置。 用 strlen 函数计算两组字符串长度,在第二个数组中为第一个数组让开位置(留出空位,使原有元素后移至第一数组完全插入时末尾位置) ,用第一个数组中的字符串覆盖第二个数组中相应位置字符,达到插入的目的。实验代码及注释:#include#include#includeint m

12、ain()int n,i,j;int len1,len2;char str1256,str2256;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;ilen2,jstrlen(str1);i+,j+)str2len1=str2i;str2i=str1j;len1+;printf(%s,str2);system(pause);return 0

13、;验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验用了循环结构对数组进行赋值,这是对多个数据同时输入的一种非常方便的方法。 同时, 本实验采取了将原有元素后移为即将插入的元素 “让位”的插入方法,这也是一种比较常用的方法。在对数组中元素进行移位时,要特别注意是否相差一,因为数组计数从零开始,这种问题特别容易发生。所以,在查错时也要特别注意这一点。实验题目 4 :编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。设计思想:设计函数对数组中的字符串进行反序排列。首先设计一个函数对数组中的两个元素进行交换,从首尾两端同时进行,第一位和最后一位交换第二位和倒数第二位

14、进行交换,依次类推,实现数组的反序。在主函数中调用。实验代码及注释:#include#include#define swap(a,b) char temp; temp=a;a=b;b=temp;void f2(char s)int lenth=strlen(s);char temp;for(int i=0;ilenth/2;i+)swap(si,slenth-1-i);int main()char s256;printf( 请输入一串字符: n);scanf(%s,&s);f2(s);printf( 反序后为: n);printf(%s,s);system(pause);return 0;验证

15、与结论:程序运行正常,结果输出正确。总结与心得体会:本实验通过利用数组直接作为函数形参,直接对数组进行反序,省去了借用指针的过程,更加简洁方便。实验题目 5 :编写程序,从键盘输入一行字符,统计其中英文字母数、空格、数字和其他字符数的个数。设计思想:分别编写三个函数对字符进行检测,函数的编写根据ASCll 码进行检测,函数结果返回 1 或 0 (符合要求返回1,反之返回 0) 。在主函数中对输入的字符串进行逐位检测,直接利用三个函数的返回值进行计数,最后分别输出结果。#includeint zimu(char s)if(64s&s91|96s&s123)return 1;else return

16、 0;int kongge(char s)if(s= )return 1;else return 0;int shuzi(char s)if(48=s&s=57)return 1;else return 0;int main()char s;int zm=0,kg=0,sz=0,qita=0;printf( 请输入一串字符: n);while(s=getchar()!=n)zm+=zimu(s);kg+=kongge(s);sz+=shuzi(s);printf( 字母=%dn 空格=%dn 数字=%d,zm,kg,sz);system(pause);return 0;验证与结论:程序运行正常

17、,结果输出正确。总结与心得体会:本实验利用了 ASCll 码对字符进行判断,由于字符与 ASCll 码一一对应,所以 ASCll 码经常被用来判断字符。 本实验中将函数的返回值定位 0或 1, 可以直接用来计数,省去了再次计数的麻烦。实验六实验题目 1 :编程序求不超过2000 的所有对称数。请编写函数,判断一个数字是否为对称数,若是对称数,函数返回值为 1,否则返回值为 0。主函数完成数据的输入与结果的输出。设计思想:定义一个五位数组,数据类型为字符型。设计函数通过指针对输入字符串的首位和尾位进行比较,然后向中间靠拢,最后得出是否为对称数,作为主函数里的判断条件。在主函数中输入、输出并调用此

18、函数。实验代码及注释:#include#include#includeint panduan(char s)int n=strlen(s);int t=n/2;char *p1,*p2;p1=s; p2=p1+n-1;for(int i=0;it;i+)if(*(p1+i)!=*(p2-i)return 0;return 1;int main()char s5;int a,b,c;printf(2000 以内对称数有:n);for(int n=1;n=2000;n+)sprintf(s,%d,n);b=panduan(s);if(b=1)printf(%dt,n);printf( 请输入一个数

19、:);scanf(%d,&a);sprintf(s,%d,a);c=panduan(s);if(c=1)printf(%d 是对称数 n,a);elseprintf(%d 不是对称数n,a);system(pause);return 0;验证与结论:程序运行正常,结果输出正确。总结与心得体会:本实验要求判断是否为对称数,很容易想到直接输入数字求其相应数位再进行对比。不过,本实验采用判断字符的方式,使程序更加简洁,占用内存更小。同时,本函数采用指针指向字符串的相应位,直接进行比较,非常方便。实验题目 2 :请编写函数,判断一个字符串是否是回文。若是回文,函数返回值为 1,否则返回值为 0.设计思

20、想:采用指针的运算进行移位,在这一过程中对数组的相应位进行比较, 从首位和尾位开始比较, 比较完成后进行移位, 直至全部比较结束。将比较结果作为判断条件,决定是反回何值。实验代码及注释:#include#include#includeint panduan(char s,int n)char *p1,*p2;p1=s;p2=s+n-1;for(int i=0;in/2;i+)if(*(p1+i)!=*(p2-i)return 0;return 1;int main()char s128;printf( 请输入一串字符: n);scanf(%s,&s);if(strlen(s)=1|pandua

21、n(s,strlen(s)printf(1n);elseprintf(0n);system(pause);return 0;验证与结论:.青输入一尊字符: ftsdf ghlhgf dsa清按任意德性续一.运行正常,结果输出正确总结与心得体会: 本实验与上一实验有很大的相似性,函数采用指针指向字符串的相应位,直接进行比较,比较完成后通过指针的运算进行移位,非常方便。在解决多数据问题需要移位时,指针的运算是一种很好的方法。实验题目 3 :分别利用行指针和指向元素的指针求整型二维数组中最大的元素及其所在的行号与列号。设计思想:通过循环方法对数组进行赋值。指向行时,分别判断每一行最大值再进行比较,

22、同时记录行号和列号。 指向元素时, 比较所有元素大小, 找出最大值,并记录行号和列号。实验代码及注释:#include#include int main()int M,N;n);printf ( 请输入数组的行和列:scanf(%d%d,&M,&N);int aMN,max,h,l,nu=0;int (*p)N,*q;printf(请输入 d数字:n,M*N);for(int i=0;iM;i+)for(int j=0;jN;j+)scanf(%d,&aij);printf(n);p=a; max=0;| = !叵C:User$AdfninistratorDestop201&061318623

23、1&061318.$3t0-3exe海沏人敛祖田仃2 2净输入4个数字.3 4用2 ,忱 非夕所2, ,为 6 -TE3- b - 为,S 大继 最避 素意元电向/第XiH.UU里耳 5 :Process exited after 25.23 seconds with retui*n ualue 0 请按任意遴继续2.书名 3.作者4.价格n);for(int i=0;i10;i+)scanf(%f %s %s %f,&somebooki.NUM,&,&some booki.author ,&somebooki.price );void searchBook_nam

24、e(char name_1口)int i_book=0;for(int i=0;i10;i+)if(hasBook(name_1,somebooki)=1)printf(%.0f %s %s %.2fn,somebooki.NUM,, somebooki.author ,somebooki.price );i_book+;if(i_book=0)printf( 没有这本书 n);void searchBook_price(float price_1)for(int i=0;i10;i+)if(higher(price_1,somebooki)=1)printf(%.

25、0f %s %s %.2fn,somebooki.NUM,, somebooki.author ,somebooki.price );int main()input();char name_110;printf( 输入你想查找的书 :);scanf(%s,name_1);searchBook_name(name_1);float price_1;printf( 输入价格 :);scanf(%f,&price_1);searchBook_price(price_1);system(pause);return 0;验证与结论:程序运行正常,结果输出正确。总结与心得体会:

26、本实验在结构体中加入了更多的类型,还运用到了循环结构对结构体里的变量进行赋值,是一种比较方便的写法。同时,还用到了对结构体里变量的判断。实验题目 3 : 设有若干个人员的数据,其中有学生和教师。学生的数据包括:姓名、学号、性别、班级,教师数据包括:姓名、职工号、性别、职务。现要求将老师和学生数据放在同一表格中,其中老师的职务和学生的班级共享空间。编程输入相应的数据,然后再输出数据。设计思想:定义一个结构体,包含各个数据,其中最后一项老师职务和学生班级用共用体,根据学号里的是否有s 判断是老师还是学生,决定输出类型。实验代码及注释:#include #include #include #define N 4 struct personchar name16;char id20;char sex

温馨提示

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

评论

0/150

提交评论