哈尔滨工程大学《程序设计基础》实验报告基础实践一姓名:班级:学号:实验时间 :2018年5月10日成绩哈尔滨工程大学计算机基础课程教学中心实验题目 1:输入两个整数数组,每个数组有五个整数,将两者和并并排列输出。
设计思想:定义三个数组 , 将两组数据存储到第三个数组中 , 再用冒泡排序对其由大到小排序并输出。
实验代码及注释:#include <stdio.h>#include <stdlib.h>#define N 10//宏定义int main(){int a[5],b[5],c[N];//第一组数据,第二组,合并数组int i,j,t;//循环变量,中间变量printf("输入第一组数据 :\n");//输入数据for(i=0;i<5;i++)scanf("%d",&a[i]);printf("输入第二组数据 :\n");for(i=0;i<5;i++)scanf("%d",&b[i]);for(i=0;i<5;i++){c[i]=a[i];//两组数据合并c[i+5]=b[i];}for(i=0;i<N-1;i++)//冒泡排序从大到小{for(j=0;j<N-i-1;j++){if(c[j]<c[j+1]){t=c[j];c[j]=c[j+1];c[j+1]=t;}}}printf("合并并由大到小排列后数据为:\n"); for(i=0;i<10;i++)printf("%d\t",c[i]);//排序 : 冒泡 , 选择 , return 0;}验证与结论:总结与心得体会:数组合并比较简单但要防止数组越界,数组存储数据是从第 0 位开始,故要多加注意。
冒泡选择是最基础的排序算法必须掌握。
实验题目 2:某公司生成 5 种产品,每周记录生产的每种产品数量和销售数量。
每个月月末,公司将对其生产规划进行评估。
该评估需要以下一个或多个信息。
每周生成和销售的数量;所有生产产品的总量;所有销售产品的总量;每种产品生产和销售的总量。
假设生产和销售的产品和销售分别用二维数组M和 S表示,如下所示。
其中 M[i][j]表示第i周生产第j种产品的数量。
S[i][j]表示第i周销售第j 种产品的数量。
假设使用一维数组C来表示每种产品的价格。
其中, C[j] 表示第 j 种产品的价格。
数组 M、S 和 C 的值都在程序中输入。
设计思想:声明四个数组函数:每周生成和销售的数量,所有生产产品的总量,所有销售产品的总量,每种产品生产和销售的总量。
然后直接调用使其对主函数中数组值直接改变,最后用循环输出。
实验代码及注释:#include <stdio.h>#include <stdlib.h>void money(double mva[5][6],double m[5][6],double c[6]);//函数声明void sum1(double sweek[5],double m[5][6]);void sum2(double mpr[6],double m[5][6]);double sum3(double m[5]);int main(){int i,j;//行,列double M[5][6],S[5][6],C[6];//第几周生产第几种产品的数量, 第几周销售第几种产品的数量, 每种产品的价格doubleMvalue[5][6],Svalue[5][6],Mweek[5],Sweek[5],Mproduct[6],Spr oduct[6];double Mtotal,Stotal;for(i=1;i<=4;i++){for(j=1;j<=5;j++){printf("请输入第%d周生产第%d种产品的数量:",i,j);scanf("%lf",&M[i][j]);printf("请输入第 %d 周销售第 %d 种产品的数量:",i,j);scanf("%lf",&S[i][j]);}}printf("\n");for(j=1;j<=5;j++){printf("请输入第 %d种产品的价格 :",j);scanf("%lf",&C[j]);}printf("\n");money(Mvalue,M,C);//调用函数money(Svalue,S,C);sum1(Mweek,Mvalue);sum1(Sweek,Svalue);sum2(Mproduct,Mvalue);sum2(Sproduct,Svalue);Mtotal=sum3(Mweek);Stotal=sum3(Sweek);for(i=1;i<=4;i++){for(j=1;j<=5;j++){printf("第%d周生产第%d种产品的价值%.2lf\n",i,j,Mvalue[i][j]);printf("第%d周销售第%d种产品的价值%.2lf\n",i,j,Svalue[i][j]);printf("在本月里生成第%d种产品的价值%.2lf\n",j,Mproduct[j]);printf("在本月里销售第%d种产品的价值%.2lf\n",j,Sproduct[j]);}printf("在第 %d周生产的产品价值 %.2lf\n",i,Mweek[i]);printf("在第 %d周所有产品的价值 %.2lf\n",i,Sweek[i]);}printf("在本月里生产所有产品总价值%.2lf\n",Mtotal);printf("在本月里销售所有产品总价值%.2lf\n",Stotal);return 0;}void money(double mva[5][6],double m[5][6],double c[6])//第i 周生产和销售第j 种产品的价值{int i,j;for(i=1;i<=4;i++){for(j=1;j<=5;j++){mva[i][j]=m[i][j]*c[j];//printf("第%d周生产第%d种产品的价值%lf\n",i,j,m[i][j]*c[j]);}}}void sum1(double sweek[5],double m[5][6])//第i周生产和销售的产品的价值{int i,j;for(i=1;i<=4;i++){sweek[i]=0;//数组初始化for(j=1;j<=5;j++){sweek[i]=sweek[i]+m[i][j];}}}void sum2(double mpr[6],double m[5][6])//在本月生产和销售第j种产品的价值{int i,j;for(j=1;j<=5;j++){mpr[j]=0;//数组初始化for(i=1;i<=4;i++){mpr[j]=mpr[j]+m[i][j];}}}double sum3(double m[5])//在本月里生产和销售所有产品总价值{int i;double sum3=0;for(i=1;i<=4;i++){sum3=sum3+m[i];}return sum3;}验证与结论:总结与心得体会:数组参数形参实质的本质是指针,使用数组函数使得代码看起来更加整洁,可读性更高。
当出现大量复制代码时考虑能否用函数统一起来,否则在后期维护上将变得困难许多。
实验题目 3:编程将一个字符串插入到另一个字符串的第n 个位置。
设计思想:使用在第给 astrlen 函数计算数组长度,然后使用循环用倒序赋值使 a n 个位置及以后字符向后挪数组 b 长度,再用倒序赋值法将的空位。
数组b 赋实验代码及注释:#include <stdio.h>#include <string.h>int main(){int n,count1,count2,i,j;//位置,字符串长度,循环变量printf("输入 n 值:\n");scanf("%d",&n);char a[20];//默认长度为20char b[20];printf("输入 a:\n");scanf("%s",a);printf("输入 b:\n");scanf("%s",b);count1=strlen(a);//计算字符串 a 与 b 的长度count2=strlen(b);for(i=count1-1;i>=(n-1);i--)//倒序赋值,使a在第n个位置及以后字符向后挪count2 位a[i+count2]=a[i];i=n-1+count2;//对i重新赋值为n-1+count2for(j=count2-1;j>=0;j--)//倒序赋值将 b 赋给 a 空位{a[i]=b[j];i--;}printf("新字符串为 :");for(j=0;j<count1+count2;j++)printf("%c",a[j]);return 0;}验证与结论:总结与心得体会:输入字符串后末尾会有一个\0, 在赋值时必须极为小心, 有可能会使程序提前终止得不到预期的效果,另外利用strlen 函数计算数组长度时不包括末尾的 \0 。
实验题目 4:编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。
设计思想:输入字符串存储在 a 数组中 , 利用 strlen 函数计算数组 a 长度 , 再用循环倒序存储在 b 数组中并输出。
实验代码及注释:#include <stdio.h>#include <string.h>#define n 100//宏定义n值为100int main(){char a[n],b[n];//定义字符串数组int i,j=0;//在数组中存储位置printf("请输入字符 :\n");gets(a);//输入字符串i=strlen(a)-1;//数组长度减一for(;i>=0;i--)//倒序输出存储{b[j]=a[i];//倒序存储printf("%c",a[i]);j++;}return 0;}验证与结论:总结与心得体会:利用 scanf 函数输入字符串时无法输入空格 , 故用了 gets 函数来输入字符串。