C语言数组实验报告.docx
《C语言数组实验报告.docx》由会员分享,可在线阅读,更多相关《C语言数组实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
C语言数组实验报告
深圳大学实验报告
课程名称:
程序设计基础
实验项目名称:
数组
学院:
光电工程学院
专业:
光电信息科学与技术
********
报告人:
温宏宇学号:
**********班级:
4班
实验时间:
2016-5-12
实验报告提交时间:
教务处制
一、实验目的与要求:
实验目的:
掌握一维数组和二维数组的定义、赋值和输入输出的方法;
掌握字符数组和字符串函数的使用;
掌握与数组有关的算法(特别是排序算法)。
实验要求:
1.输入数据、输出数据应加以说明(交互性);
2.程序应注意使用注释语句(可读性);
3.对各种可能的输入情况都要考虑处理方案(健壮性);
4.按报告内容要求完成实验报告。
二、实验环境:
地点:
D506
硬件环境:
Pentium(R)4CPU3.00GHz
2.99GHz,1.00GB的内存
机器编号:
55661-OEM-0011903-00297
软件环境:
MicrosoftVisualC++
操作系统:
WindowsXP
C++语言环境:
VC6.0
project类型:
WIN32ConsoleApplication
编程序并上机调试运行。
(1). 排序过程:
(习题6.2)
(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数
交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,
将它与第二个数交换—第二趟选择排序
(3)重复上述过程,共经过n-1趟排序后,排序结束
(2). 将给定的一数插入到有序的数组中。
(习题6.4)
(3). 找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
(习题6.8)
应当至少准备两组测试数据:
①二维数组有鞍点
98020540
90-60961
210-310189
②二维数组没有鞍点
98020540
90-601961
210-310189
45541567
用scanf函数从键盘输入数组各元素的值,检查结果是否正确。
题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。
因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。
如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。
请同学们修改程序以实现之。
(4). 分类统计三行字符个数。
(习题6.10)
四、实验步骤与过程:
(给出程序分析和算法描述(流程图或文字)、程序核心代码。
)
1.程序分析:
{
inta[11];\\定义数组
inti,j,t,p,number;\\定义变量
printf("Input10numbers:
\n");\\输入提示
for(i=0;i<10;i++)\\for循环为输入数据
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}\\两个for循环及中间变量t实现冒泡排序
printf("Thesortednumbers:
\n");
for(i=0;i<10;i++)\\运用for循环输出
{
printf("%d",a[i]);
}算法描述:
程序核心代码:
#include
voidmain()
{
inta[11];
inti,j,t,p,number;
printf("Input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
printf("Thesortednumbers:
\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
2.程序分析:
#include
voidmain()
{
inta[11];
inti,j,t,p,number;
printf("Input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
printf("Thesortednumbers:
\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n请输入要插入的数字\n")\\提示输入;
scanf("%d",&number);
p=0;
while(p<10)\\用循环判断数字的大小和位置
{
if(number<=a[p])break;
elsep++;
}
for(i=9;i<=p;i--);\\用for循环将大于number的右移一位
{
a[i+1]=a[i];
}
a[p]=number;\\将number插入数组
for(i=0;i<11;i++)\\输出
{
printf("%d",a[i]);
}
}
算法描述:
程序核心代码:
#include
voidmain()
{
inta[11];
inti,j,t,p,number;
printf("Input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
printf("Thesortednumbers:
\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n请输入要插入的数字\n");
scanf("%d",&number);
p=0;
while(p<10)
{
if(number<=a[p])break;
elsep++;
}
for(i=9;i<=p;i--);
{
a[i+1]=a[i];
}
a[p]=number;
for(i=0;i<11;i++)
{
printf("%d",a[i]);
}
}
3.程序分析:
for(i=0;i{
m=a[i][0];
b=i,c=0;
for(j=0;jif(a[i][j]>m)
{
m=a[i][j];
b=i,c=j;
}
d=1;
for(j=0;j{
if(m>a[j][c])
{
d=0;break;
}//如果有元素比m小,那么当前点肯定不是鞍点,跳出循环,开始下一行的判断
}
if(d==1)
{
printf("鞍点为a[%d][%d]=%d",b,c,a[b][c]);
//break;//不用跳出,因为鞍点可能还有,不止一个
}
}
//if(d!
=1)printf("此矩阵无鞍点!
");算法描述:
程序核心代码:
#include
#defineM4
#defineN5
intmain()
{
inti,j,a[M][N],b,c,d,m;//d判断是否有鞍点的变量,m为在该行的最大值,b,c记录序号。
printf("请输入%d*%d个数",M,N);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
printf("矩阵为\n");
for(i=0;i{
for(j=0;jprintf("%-5d",a[i][j]);
printf("\n");
}
for(i=0;i{
m=a[i][0];
b=i,c=0;
for(j=0;jif(a[i][j]>m)
{
m=a[i][j];
b=i,c=j;
}
d=1;
for(j=0;j{
if(m>a[j][c])
{
d=0;break;
}//如果有元素比m小,那么当前点肯定不是鞍点,跳出循环,开始下一行的判断
}
if(d==1)
{
printf("鞍点为a[%d][%d]=%d",b,c,a[b][c]);
//break;//不用跳出,因为鞍点可能还有,不止一个
}
}
//if(d!
=1)printf("此矩阵无鞍点!
");
}
4.程序分析:
inti,j,upp,low,dig,spa,oth;//定义变量
chartext[3][80];//定义字符串
upp=low=dig=spa=oth=0;
for(i=0;i<3;i++)
{
printf("pleaseinputline%d:
\n",i+1);
gets_s(text[i]);
for(j=0;j<80&&text[i][j]!
='\0';j++)//通过循环来计算各字符的个数
{
if(text[i][j]>='A'&&text[i][j]<='Z')upp++;
elseif(text[i][j]>='a'&&text[i][j]<='z')low++;
elseif(text[i][j]>='0'&&text[i][j]<='9')dig++;
elseif(text[i][j]=='')spa++;
elseoth++;
算法描述:
程序核心代码:
#include
intmain()
{
inti,j,upp,low,dig,spa,oth;
chartext[3][80];
upp=low=dig=spa=oth=0;
for(i=0;i<3;i++)
{
printf("pleaseinputline%d:
\n",i+1);
gets_s(text[i]);
for(j=0;j<80&&text[i][j]!
='\0';j++)
{
if(text[i][j]>='A'&&text[i][j]<='Z')upp++;
elseif(text[i][j]>='a'&&text[i][j]<='z')low++;
elseif(text[i][j]>='0'&&text[i][j]<='9')dig++;
elseif(text[i][j]=='')spa++;
elseoth++;
}
}
printf("\nuppercase:
%d\n",upp);
printf("lowercase:
%d\n",low);
printf("digit:
%d\n",dig);
printf("space:
%d\n",spa);
printf("other:
%d\n",oth);
return0;
}
五、实验结果与数据分析:
(有运行结果的界面截图,实验结果与实验结果分析,说明实验结果是否达到要求?
并提出对程序的改进想法)。
1.第一个实验的运行结果如下图:
2、第二个实验运行结果如下图:
3.第三个实验的运行结果如下图:
4.第四个实验的运行结果如下图:
六、实验体会:
(自己在编程或程序编译运行中遇到的难点、问题及解决办法)
1.这个实验比较简单,只要理解了冒泡算法和循环条件就可以很容易的设计出来
2.这个实验需要有第一个实验的基础才能做,先要把已有的数字进行排序,然后再插入一个数字,困难的地方在于如何插入数字,插在哪里,以及原来的数字如何右移,同样需要用到for循环的嵌套
3.在计算过程中,主要是如何理解鞍点,有想过先行大小和列大小的的算法然后再判断是否为同一个数的算法,然后发现出现错误,改成了先行后列。
4.出现了vs2015中无法使用gets函数,即使把安全周期关了也不可以,后来XX说gers_s函数,实现起来还是很简答,主要通过ASC码判读是大写、小写还是数字。
七、自我评价:
(请给自己此次实验进行百分制打分)
92
八、诚信声明:
本人郑重承诺在完成该作业过程中不发生任何不诚信现象,一切不诚信所导致的后果均由本人承担。
签名:
温宏宇
时间:
__2016-5-15__
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。