实验报告课程名称程序设计实验项目名称数组班级与班级代码14级计算机科学与技术1班实验室名称(或课室) SS1-332专业计算机科学与技术任课教师学号:姓名:实验日期:2014年月日广东商学院教务处制一.实验目的1.熟练掌握一维数组、二维数组的定义、赋值、输入、输出方法。
2.熟练掌握字符数组和字符串函数的使用。
3.熟练掌握一位数组以及一位数组元素的存储关系。
4.熟练掌握一位数组和二维数组的使用以及在函数中的传递。
5.通过上机实践掌握与数组有关的算法。
二、实验内容上机题1输入并运行以下程序。
实验内容:用2个数组对第3个数组进行赋值#include<stdio.h>main(){int i,a[5],b[5],c[5];a[0]=2,a[1]=6,a[2]=4,a[3]=8,a[4]=9;b[0]=2,b[1]=7,b[2]=9,b[3]=5,b[4]=3;for(i=0;i<=4;i++){c[i]=a[i]*b[i];printf("c[%d]=%d\n",i,c[i]);}}实验步骤○1int a[5]:整型一维数组说明,a是数组名,也是数组的起始地址,该数组可以存储5个整数。
a[0]~a[4]也可以看成是变量标识字符,[]中的数值称为数组下标,下标从0开始。
○2数组赋值方法和一般变量一样。
例如,a[0]=2表示将2赋给a[0]。
运行结果上机题2 输入并运行以下程序。
实验内容:对不指明数组的数组进行赋值并用循环结构进行求和#include<stdio.h>main(){int sum,i;int a[]={5,8,4,6,4,3,8,2,4,5,6};sum=0;for(i=0;i<=10;i++)sum+=a[i];printf("sum=%d\n",sum);}实验结果实验小结○1对全部元素赋初值时,可以不指定数组长度,C编译系统自动根据初值个数来决定数组长度。
○2由于数组元素的下标可以是变量,因此数组的操作一般用循环实现。
上机题3 程序实现:从键盘输入5个数,输出最大、最小元素的值以及它们的下标。
将程序补充完整并上机调试。
实验内容:用循环结构对数组进行输入并求出最大最小值及下标#include<stdio.h>main(){int i,j,k,max,min;int a[5];for(i=0;i<5;i++)scanf("%d",&a[i]);max=min=a[0];i=k=0;for(i=0;i<5;i++){if(max<a[i]){max=a[i];j=i;}else if(max>a[i]){min=a[i];k=i;}}printf("max:a[%d]=%d,min:a[%d]=%d\n",j,max,k,min);}实验结果实验小结:比较最值时令第一个值为最大最小值,再用循环结构把最大值最小值赋给max min上机题4 输入并运行以下程序,分析程序运行结果。
实验内容:二维数组的加法#include<stdio.h>main(){int i,j;int a[3][2]={12,34,24,11,45,20};int b[3][2]={11,23,34,13,10,64};int c[3][2];for(i=0;i<=2;i++)for(j=0;j<=1;j++)c[i][j]=a[i][j]+b[i][j];for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%d+%d=%d ",a[i][j],b[i][j],c[i][j]); printf("\n");}}实验结果:相乘,在其程序的第9行和第12行的“+”改为“*”。
上机题5 程序实现:从键盘输入12个数,组成一个3行4列的二维数组并输出。
将程序补充完整并上机调试。
实验内容:对二维数组的输入输出#include<stdio.h>main(){int a[3][4];int i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("The result is:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%5d",a[i][j]);printf("\n");}}实验小结运行程序后,从键盘输入的12个整数应以空格、Enter键或Tab 键分开。
分别输出各行最小值各列最大值实验过程:#include<stdio.h>main(){int a[3][4];int i,j,min ,max;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("The result is:\n");for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%5d",a[i][j]);min=a[i][0];if(a[i][j]<a[i][0])min=a[i][j];} printf("\t%d\n",min);};for(j=0;j<4;j++){for(i=0;i<3;i++){max=a[0][j];if(a[i][j]>a[0][j])max=a[i][j];} printf("\t%d",max);}实验结果:实验小结:注意格式上机题6 输入并运行以下程序。
实验内容:字符串的输入与输出#include<stdio.h>main(){char a[7]="Foxpro";printf("%s\n");printf("%c\t%c\t%c\n",a[0],a[1],a[2]);}实验结果:实验小结:○1数组可以用字符串进行初始化“char a[7]=“Foxpro”;”,但是不能将字符串直接赋给数组,如“a[7]=”Foxpro;”和“a=”Foxpro;”都是错误的。
○2字符串的最后有串尾标志‘\o’,所以“char a[6]=”Foxpro”;”也是不正确的。
○3用“%s”格式输出指定地址开始的字符串,用“%c”格式输出数组元素的字符。
上机题7 输入并运行以下程序。
实验内容:利用二维数组对字符串进行输入输出#include<stdio.h>main(){int i;char a[][8]={"SQL","Foxpro","Unix","ASP"};for(i=0;i<=3;i++)printf("%s\n",a[i]);}实验小结:“char a[][8]={"SQL","Foxpro","Unix","ASP"};”定义了一个二维数组。
a[0]是一个字符串的串首地址,a[1]是第2个字符串的串首地址,a[i]为第i个字符串的串首地址。
因此,字符串输出时用“printf(“%s”,a[i] );”。
上机题8 输入并运行以下程序,分析程序运行结果。
实验内容:引用函数对数组进行运算#include<stdio.h>main(){int a[5]={1,2,3,4,5};int i;pr(a);for(i=0;i<5;i++)printf("%5d",a[i]);printf("\n");}pr(p)int p[];{int i;for(i=0;i<5;i++)p[i]=p[i]*p[i];}实验结果:实验小结:当形参为数组时,对应的实参为数组名,传递的是数组的首地址,此时实参数组与形参数组共享同一段内存单元,形参数组元素的改变会影响实参数组元素的改变。
上机题9编写程序:从键盘输入一串整数保存到数组中,调用函数antitone()将数组反序并输出。
自定义函数void antitone(int a[],int n)实现将数组中的n个数据按逆序存放。
实验内容:将数组反序并输出,实验步骤:#include<stdio.h>void antitone(int a[],int n);int b[5],n;int i;main(){ n=5;for(i=0;i<n;i++){scanf("%d",&b[i]);}antitone(b,5);}void antitone(int a[],int n){int i,t,c[5];for(i=0;i<n;i++){c[i]=a[n-i-1];printf("%d",c[i]);}}实验结果:实验小结:注意局部变量与全局变量作用域,数组的常量表达式必须是常量,格式必须对,还有对程序的了解。
上机题10已知某数列的前两项为2和3,其后每一项为其前两项之积。
分别用函数和数组实现:从键盘输入一个整数x,判断并输出x最接近数列的第几项?实验内容:从键盘输入一个整数x,判断并输出x最接近数列的第几项实验步骤:#include<stdio.h>#include<math.h>#define M 100int a[M]={2,3};int i,x,t;main(){for(i=0;i<98;i++)a[i+2]=a[i+1]+a[i];scanf("%d",&x);for(i=0;i<99;i++){if(fabs(a[i+1]-x)<fabs(a[i]-x))t=i+1;else t=i;if(x-a[i]<0)break;}printf("%d",t);}实验结果:实验小结:注意对输出时,不要相互赋值例如a【i+1】=a【i】,这样会使输出结果出现数组后几组数据的丢失,注意循环结构的结束循环的控制。
上机题11分别用函数和数组实现,输入10个学生5门课的成绩并完成如下功能:(1)求每个学生的平均分。