计算机科学与技术第次实验报告.docx
《计算机科学与技术第次实验报告.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术第次实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
计算机科学与技术第次实验报告
哈尔滨工程大学
《程序设计基础》实验报告
基础实践一
******
学号:
实验时间:
2018年5月10日
成绩
哈尔滨工程大学计算机基础课程教学中心
实验题目1:
输入两个整数数组,每个数组有五个整数,将两者和并并排列输出。
设计思想:
定义三个数组,将两组数据存储到第三个数组中,再用冒泡排序对其由大到小排序并输出。
实验代码及注释:
#include
#defineN10//宏定义
intmain()
{
inta[5],b[5],c[N];//第一组数据,第二组,合并数组
inti,j,t;//循环变量,中间变量
printf("输入第一组数据:
\n");//输入数据
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("输入第二组数据:
\n");
scanf("%d",&b[i]);
c[i]=a[i];//两组数据合并
c[i+5]=b[i];
}
for(i=0;i{for(j=0;j{if(c[j]{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]);//排序:冒泡,选择,return0;}验证与结论:总结与心得体会:数组合并比较简单但要防止数组越界,数组存储数据是从第0位开始,故要多加注意。冒泡选择是最基础的排序算法必须掌握。实验题目2:某公司生成5种产品,每周记录生产的每种产品数量和销售数量。每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息。每周生成和销售的数量;所有生产产品的总量;所有销售产品的总量;每种产品生产和销售的总量。假设生产和销售的产品和销售分别用二维数组M和S表示,如下所示。其中M[i][j]表示第i周生产第j种产品的数量。S[i][j]表示第i周销售第j种产品的数量。假设使用一维数组C来表示每种产品的价格。其中,C[j]表示第j种产品的价格。数组M、S和C的值都在程序中输入。设计思想:声明四个数组函数:每周生成和销售的数量,所有生产产品的总量,所有销售产品的总量,每种产品生产和销售的总量。然后直接调用使其对主函数中数组值直接改变,最后用循环输出。实验代码及注释:#include#includevoidmoney(doublemva[5][6],doublem[5][6],doublec[6]);//函数声明voidsum1(doublesweek[5],doublem[5][6]);voidsum2(doublempr[6],doublem[5][6]);doublesum3(doublem[5]);intmain(){inti,j;//行,列doubleM[5][6],S[5][6],C[6];//第几周生产第几种产品的数量,第几周销售第几种产品的数量,每种产品的价格doubleMvalue[5][6],Svalue[5][6],Mweek[5],Sweek[5],Mproduct[6],Sproduct[6];doubleMtotal,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);return0;}voidmoney(doublemva[5][6],doublem[5][6],doublec[6])//第i周生产和销售第j种产品的价值{inti,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]);}}}voidsum1(doublesweek[5],doublem[5][6])//第i周生产和销售的产品的价值{inti,j;for(i=1;i<=4;i++){sweek[i]=0;//数组初始化for(j=1;j<=5;j++){sweek[i]=sweek[i]+m[i][j];}}}voidsum2(doublempr[6],doublem[5][6])//在本月生产和销售第j种产品的价值{inti,j;for(j=1;j<=5;j++){mpr[j]=0;//数组初始化for(i=1;i<=4;i++){mpr[j]=mpr[j]+m[i][j];}}}doublesum3(doublem[5])//在本月里生产和销售所有产品总价值{inti;doublesum3=0;for(i=1;i<=4;i++){sum3=sum3+m[i];}returnsum3;}验证与结论:总结与心得体会:数组参数形参实质的本质是指针,使用数组函数使得代码看起来更加整洁,可读性更高。当出现大量复制代码时考虑能否用函数统一起来,否则在后期维护上将变得困难许多。实验题目3:编程将一个字符串插入到另一个字符串的第n个位置。设计思想:使用strlen函数计算数组长度,然后使用循环用倒序赋值使a数组在第n个位置及以后字符向后挪数组b长度,再用倒序赋值法将b赋给a的空位。实验代码及注释:#include#includeintmain(){intn,count1,count2,i,j;//位置,字符串长度,循环变量printf("输入n值:\n");scanf("%d",&n);chara[20];//默认长度为20charb[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;jprintf("%c",a[j]);return0;}验证与结论:总结与心得体会:输入字符串后末尾会有一个\0,在赋值时必须极为小心,有可能会使程序提前终止得不到预期的效果,另外利用strlen函数计算数组长度时不包括末尾的\0。实验题目4:编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。设计思想:输入字符串存储在a数组中,利用strlen函数计算数组a长度,再用循环倒序存储在b数组中并输出。实验代码及注释:#include#include#definen100//宏定义n值为100intmain(){chara[n],b[n];//定义字符串数组inti,j=0;//在数组中存储位置printf("请输入字符:\n");gets(a);//输入字符串i=strlen(a)-1;//数组长度减一for(;i>=0;i--)//倒序输出存储{b[j]=a[i];//倒序存储printf("%c",a[i]);j++;}return0;}验证与结论:总结与心得体会:利用scanf函数输入字符串时无法输入空格,故用了gets函数来输入字符串。实验题目5:编写程序,从键盘输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。设计思想:输入字符串并存储在a数组中,然后将其转换为整型数组存储在数组b中,再利用ASCII码的范围对其进行统计输出。实验代码及注释:#include#include#definen200//宏定义n值为200intmain(){chara[n];//定义字符串数组inti,j;//循环变量intcount1=0,count2=0,count3=0,count4=0;//英文字母、空格、数字和其他字符的个数intb[n];//整型数组printf("请输入字符:\n");gets(a);//输入字符j=strlen(a);//将数组a的长度赋给jfor(i=0;i{b[i]=a[i];//将字符转换成ASCII码存储在b数组中}for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
for(j=0;j{if(c[j]{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]);//排序:冒泡,选择,return0;}验证与结论:总结与心得体会:数组合并比较简单但要防止数组越界,数组存储数据是从第0位开始,故要多加注意。冒泡选择是最基础的排序算法必须掌握。实验题目2:某公司生成5种产品,每周记录生产的每种产品数量和销售数量。每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息。每周生成和销售的数量;所有生产产品的总量;所有销售产品的总量;每种产品生产和销售的总量。假设生产和销售的产品和销售分别用二维数组M和S表示,如下所示。其中M[i][j]表示第i周生产第j种产品的数量。S[i][j]表示第i周销售第j种产品的数量。假设使用一维数组C来表示每种产品的价格。其中,C[j]表示第j种产品的价格。数组M、S和C的值都在程序中输入。设计思想:声明四个数组函数:每周生成和销售的数量,所有生产产品的总量,所有销售产品的总量,每种产品生产和销售的总量。然后直接调用使其对主函数中数组值直接改变,最后用循环输出。实验代码及注释:#include#includevoidmoney(doublemva[5][6],doublem[5][6],doublec[6]);//函数声明voidsum1(doublesweek[5],doublem[5][6]);voidsum2(doublempr[6],doublem[5][6]);doublesum3(doublem[5]);intmain(){inti,j;//行,列doubleM[5][6],S[5][6],C[6];//第几周生产第几种产品的数量,第几周销售第几种产品的数量,每种产品的价格doubleMvalue[5][6],Svalue[5][6],Mweek[5],Sweek[5],Mproduct[6],Sproduct[6];doubleMtotal,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);return0;}voidmoney(doublemva[5][6],doublem[5][6],doublec[6])//第i周生产和销售第j种产品的价值{inti,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]);}}}voidsum1(doublesweek[5],doublem[5][6])//第i周生产和销售的产品的价值{inti,j;for(i=1;i<=4;i++){sweek[i]=0;//数组初始化for(j=1;j<=5;j++){sweek[i]=sweek[i]+m[i][j];}}}voidsum2(doublempr[6],doublem[5][6])//在本月生产和销售第j种产品的价值{inti,j;for(j=1;j<=5;j++){mpr[j]=0;//数组初始化for(i=1;i<=4;i++){mpr[j]=mpr[j]+m[i][j];}}}doublesum3(doublem[5])//在本月里生产和销售所有产品总价值{inti;doublesum3=0;for(i=1;i<=4;i++){sum3=sum3+m[i];}returnsum3;}验证与结论:总结与心得体会:数组参数形参实质的本质是指针,使用数组函数使得代码看起来更加整洁,可读性更高。当出现大量复制代码时考虑能否用函数统一起来,否则在后期维护上将变得困难许多。实验题目3:编程将一个字符串插入到另一个字符串的第n个位置。设计思想:使用strlen函数计算数组长度,然后使用循环用倒序赋值使a数组在第n个位置及以后字符向后挪数组b长度,再用倒序赋值法将b赋给a的空位。实验代码及注释:#include#includeintmain(){intn,count1,count2,i,j;//位置,字符串长度,循环变量printf("输入n值:\n");scanf("%d",&n);chara[20];//默认长度为20charb[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;jprintf("%c",a[j]);return0;}验证与结论:总结与心得体会:输入字符串后末尾会有一个\0,在赋值时必须极为小心,有可能会使程序提前终止得不到预期的效果,另外利用strlen函数计算数组长度时不包括末尾的\0。实验题目4:编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。设计思想:输入字符串存储在a数组中,利用strlen函数计算数组a长度,再用循环倒序存储在b数组中并输出。实验代码及注释:#include#include#definen100//宏定义n值为100intmain(){chara[n],b[n];//定义字符串数组inti,j=0;//在数组中存储位置printf("请输入字符:\n");gets(a);//输入字符串i=strlen(a)-1;//数组长度减一for(;i>=0;i--)//倒序输出存储{b[j]=a[i];//倒序存储printf("%c",a[i]);j++;}return0;}验证与结论:总结与心得体会:利用scanf函数输入字符串时无法输入空格,故用了gets函数来输入字符串。实验题目5:编写程序,从键盘输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。设计思想:输入字符串并存储在a数组中,然后将其转换为整型数组存储在数组b中,再利用ASCII码的范围对其进行统计输出。实验代码及注释:#include#include#definen200//宏定义n值为200intmain(){chara[n];//定义字符串数组inti,j;//循环变量intcount1=0,count2=0,count3=0,count4=0;//英文字母、空格、数字和其他字符的个数intb[n];//整型数组printf("请输入字符:\n");gets(a);//输入字符j=strlen(a);//将数组a的长度赋给jfor(i=0;i{b[i]=a[i];//将字符转换成ASCII码存储在b数组中}for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
if(c[j]{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]);//排序:冒泡,选择,return0;}验证与结论:总结与心得体会:数组合并比较简单但要防止数组越界,数组存储数据是从第0位开始,故要多加注意。冒泡选择是最基础的排序算法必须掌握。实验题目2:某公司生成5种产品,每周记录生产的每种产品数量和销售数量。每个月月末,公司将对其生产规划进行评估。该评估需要以下一个或多个信息。每周生成和销售的数量;所有生产产品的总量;所有销售产品的总量;每种产品生产和销售的总量。假设生产和销售的产品和销售分别用二维数组M和S表示,如下所示。其中M[i][j]表示第i周生产第j种产品的数量。S[i][j]表示第i周销售第j种产品的数量。假设使用一维数组C来表示每种产品的价格。其中,C[j]表示第j种产品的价格。数组M、S和C的值都在程序中输入。设计思想:声明四个数组函数:每周生成和销售的数量,所有生产产品的总量,所有销售产品的总量,每种产品生产和销售的总量。然后直接调用使其对主函数中数组值直接改变,最后用循环输出。实验代码及注释:#include#includevoidmoney(doublemva[5][6],doublem[5][6],doublec[6]);//函数声明voidsum1(doublesweek[5],doublem[5][6]);voidsum2(doublempr[6],doublem[5][6]);doublesum3(doublem[5]);intmain(){inti,j;//行,列doubleM[5][6],S[5][6],C[6];//第几周生产第几种产品的数量,第几周销售第几种产品的数量,每种产品的价格doubleMvalue[5][6],Svalue[5][6],Mweek[5],Sweek[5],Mproduct[6],Sproduct[6];doubleMtotal,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);return0;}voidmoney(doublemva[5][6],doublem[5][6],doublec[6])//第i周生产和销售第j种产品的价值{inti,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]);}}}voidsum1(doublesweek[5],doublem[5][6])//第i周生产和销售的产品的价值{inti,j;for(i=1;i<=4;i++){sweek[i]=0;//数组初始化for(j=1;j<=5;j++){sweek[i]=sweek[i]+m[i][j];}}}voidsum2(doublempr[6],doublem[5][6])//在本月生产和销售第j种产品的价值{inti,j;for(j=1;j<=5;j++){mpr[j]=0;//数组初始化for(i=1;i<=4;i++){mpr[j]=mpr[j]+m[i][j];}}}doublesum3(doublem[5])//在本月里生产和销售所有产品总价值{inti;doublesum3=0;for(i=1;i<=4;i++){sum3=sum3+m[i];}returnsum3;}验证与结论:总结与心得体会:数组参数形参实质的本质是指针,使用数组函数使得代码看起来更加整洁,可读性更高。当出现大量复制代码时考虑能否用函数统一起来,否则在后期维护上将变得困难许多。实验题目3:编程将一个字符串插入到另一个字符串的第n个位置。设计思想:使用strlen函数计算数组长度,然后使用循环用倒序赋值使a数组在第n个位置及以后字符向后挪数组b长度,再用倒序赋值法将b赋给a的空位。实验代码及注释:#include#includeintmain(){intn,count1,count2,i,j;//位置,字符串长度,循环变量printf("输入n值:\n");scanf("%d",&n);chara[20];//默认长度为20charb[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;jprintf("%c",a[j]);return0;}验证与结论:总结与心得体会:输入字符串后末尾会有一个\0,在赋值时必须极为小心,有可能会使程序提前终止得不到预期的效果,另外利用strlen函数计算数组长度时不包括末尾的\0。实验题目4:编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。设计思想:输入字符串存储在a数组中,利用strlen函数计算数组a长度,再用循环倒序存储在b数组中并输出。实验代码及注释:#include#include#definen100//宏定义n值为100intmain(){chara[n],b[n];//定义字符串数组inti,j=0;//在数组中存储位置printf("请输入字符:\n");gets(a);//输入字符串i=strlen(a)-1;//数组长度减一for(;i>=0;i--)//倒序输出存储{b[j]=a[i];//倒序存储printf("%c",a[i]);j++;}return0;}验证与结论:总结与心得体会:利用scanf函数输入字符串时无法输入空格,故用了gets函数来输入字符串。实验题目5:编写程序,从键盘输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。设计思想:输入字符串并存储在a数组中,然后将其转换为整型数组存储在数组b中,再利用ASCII码的范围对其进行统计输出。实验代码及注释:#include#include#definen200//宏定义n值为200intmain(){chara[n];//定义字符串数组inti,j;//循环变量intcount1=0,count2=0,count3=0,count4=0;//英文字母、空格、数字和其他字符的个数intb[n];//整型数组printf("请输入字符:\n");gets(a);//输入字符j=strlen(a);//将数组a的长度赋给jfor(i=0;i{b[i]=a[i];//将字符转换成ASCII码存储在b数组中}for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
t=c[j];
c[j]=c[j+1];
c[j+1]=t;
printf("合并并由大到小排列后数据为:
for(i=0;i<10;i++)
printf("%d\t",c[i]);
//排序:
冒泡,选择,
return0;
验证与结论:
总结与心得体会:
数组合并比较简单但要防止数组越界,数组存储数据是从第0位开始,故要多加注意。
冒泡选择是最基础的排序算法必须掌握。
实验题目2:
某公司生成5种产品,每周记录生产的每种产品数量和销售数量。
每个月月末,公司将对其生产规划进行评估。
该评估需要以下一个或多个信息。
每周生成和销售的数量;
所有生产产品的总量;
所有销售产品的总量;
每种产品生产和销售的总量。
假设生产和销售的产品和销售分别用二维数组M和S表示,如下所示。
其中M[i][j]表示第i周生产第j种产品的数量。
S[i][j]表示第i周销售第j种产品的数量。
假设使用一维数组C来表示每种产品的价格。
其中,C[j]表示第j种产品的价格。
数组M、S和C的值都在程序中输入。
声明四个数组函数:
每周生成和销售的数量,所有生产产品的总量,所有销售产品的总量,每种产品生产和销售的总量。
然后直接调用使其对主函数中数组值直接改变,最后用循环输出。
voidmoney(doublemva[5][6],doublem[5][6],doublec[6]);//函数声明
voidsum1(doublesweek[5],doublem[5][6]);
voidsum2(doublempr[6],doublem[5][6]);
doublesum3(doublem[5]);
inti,j;//行,列
doubleM[5][6],S[5][6],C[6];//第几周生产第几种产品的数量,第几周销售第几种产品的数量,每种产品的价格
doubleMvalue[5][6],Svalue[5][6],Mweek[5],Sweek[5],Mproduct[6],Sproduct[6];
doubleMtotal,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种产品的数量:
scanf("%lf",&S[i][j]);
printf("\n");
printf("请输入第%d种产品的价格:
",j);
scanf("%lf",&C[j]);
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);
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);
voidmoney(doublemva[5][6],doublem[5][6],doublec[6])//第i周生产和销售第j种产品的价值
inti,j;
mva[i][j]=m[i][j]*c[j];
//printf("第%d周生产第%d种产品的价值%lf\n",i,j,m[i][j]*c[j]);
voidsum1(doublesweek[5],doublem[5][6])//第i周生产和销售的产品的价值
sweek[i]=0;//数组初始化
sweek[i]=sweek[i]+m[i][j];
voidsum2(doublempr[6],doublem[5][6])//在本月生产和销售第j种产品的价值
mpr[j]=0;//数组初始化
mpr[j]=mpr[j]+m[i][j];
doublesum3(doublem[5])//在本月里生产和销售所有产品总价值
inti;
doublesum3=0;
sum3=sum3+m[i];
returnsum3;
数组参数形参实质的本质是指针,使用数组函数使得代码看起来更加整洁,可读性更高。
当出现大量复制代码时考虑能否用函数统一起来,否则在后期维护上将变得困难许多。
实验题目3:
编程将一个字符串插入到另一个字符串的第n个位置。
使用strlen函数计算数组长度,然后使用循环用倒序赋值使a数组在第n个位置及以后字符向后挪数组b长度,再用倒序赋值法将b赋给a的空位。
intn,count1,count2,i,j;//位置,字符串长度,循环变量
printf("输入n值:
scanf("%d",&n);
chara[20];//默认长度为20
charb[20];
printf("输入a:
scanf("%s",a);
printf("输入b:
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+count2
for(j=count2-1;j>=0;j--)//倒序赋值将b赋给a空位
a[i]=b[j];
i--;
printf("新字符串为:
");
for(j=0;jprintf("%c",a[j]);return0;}验证与结论:总结与心得体会:输入字符串后末尾会有一个\0,在赋值时必须极为小心,有可能会使程序提前终止得不到预期的效果,另外利用strlen函数计算数组长度时不包括末尾的\0。实验题目4:编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。设计思想:输入字符串存储在a数组中,利用strlen函数计算数组a长度,再用循环倒序存储在b数组中并输出。实验代码及注释:#include#include#definen100//宏定义n值为100intmain(){chara[n],b[n];//定义字符串数组inti,j=0;//在数组中存储位置printf("请输入字符:\n");gets(a);//输入字符串i=strlen(a)-1;//数组长度减一for(;i>=0;i--)//倒序输出存储{b[j]=a[i];//倒序存储printf("%c",a[i]);j++;}return0;}验证与结论:总结与心得体会:利用scanf函数输入字符串时无法输入空格,故用了gets函数来输入字符串。实验题目5:编写程序,从键盘输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。设计思想:输入字符串并存储在a数组中,然后将其转换为整型数组存储在数组b中,再利用ASCII码的范围对其进行统计输出。实验代码及注释:#include#include#definen200//宏定义n值为200intmain(){chara[n];//定义字符串数组inti,j;//循环变量intcount1=0,count2=0,count3=0,count4=0;//英文字母、空格、数字和其他字符的个数intb[n];//整型数组printf("请输入字符:\n");gets(a);//输入字符j=strlen(a);//将数组a的长度赋给jfor(i=0;i{b[i]=a[i];//将字符转换成ASCII码存储在b数组中}for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
printf("%c",a[j]);
输入字符串后末尾会有一个\0,在赋值时必须极为小心,有可能会使程序提前终止得不到预期的效果,另外利用strlen函数计算数组长度时不包括末尾的\0。
实验题目4:
编写一个程序,使输入的一个字符串按反序存放,在主函数中输入输出字符。
输入字符串存储在a数组中,利用strlen函数计算数组a长度,再用循环倒序存储在b数组中并输出。
#definen100//宏定义n值为100
chara[n],b[n];//定义字符串数组
inti,j=0;//在数组中存储位置
printf("请输入字符:
gets(a);//输入字符串
i=strlen(a)-1;//数组长度减一
for(;i>=0;i--)//倒序输出存储
b[j]=a[i];//倒序存储
printf("%c",a[i]);
j++;
利用scanf函数输入字符串时无法输入空格,故用了gets函数来输入字符串。
实验题目5:
编写程序,从键盘输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。
输入字符串并存储在a数组中,然后将其转换为整型数组存储在数组b中,再利用ASCII码的范围对其进行统计输出。
#definen200//宏定义n值为200
chara[n];//定义字符串数组
inti,j;//循环变量
intcount1=0,count2=0,count3=0,count4=0;//英文字母、空格、数字和其他字符的个数
intb[n];//整型数组
gets(a);//输入字符
j=strlen(a);//将数组a的长度赋给j
for(i=0;i{b[i]=a[i];//将字符转换成ASCII码存储在b数组中}for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
b[i]=a[i];//将字符转换成ASCII码存储在b数组中
for(i=0;i{if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围count1++;elseif(b[i]==32)//空格的范围count2++;elseif(b[i]>=48&&b[i]<=57)//数字的范围count3++;elsecount4++;}printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数return0;}验证与结论:总结与心得体会:如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
if((b[i]>=65&&b[i]<=90)||(b[i]>=97&&b[i]<=122))//英文字母的范围
count1++;
elseif(b[i]==32)//空格的范围
count2++;
elseif(b[i]>=48&&b[i]<=57)//数字的范围
count3++;
else
count4++;
printf("英文字母有%d个、空格有%d个、数字有%d个,其他字符有%d个\n",count1,count2,count3,count4);//输出统计个数
如果直接对字符串进行统计不好统计,故将其转换为整型数组利用ASCII码进行统计计数,任何字符都有相对应的ASCII码值,使用ASCII码使问题变得简单。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1