C语言信息安全上机实验报告模版3数组.docx
《C语言信息安全上机实验报告模版3数组.docx》由会员分享,可在线阅读,更多相关《C语言信息安全上机实验报告模版3数组.docx(17页珍藏版)》请在冰豆网上搜索。
C语言信息安全上机实验报告模版3数组
北京信息科技大学
信息管理学院
(课程上机)实验报告
实验课程名称:
C语言程序设计专业:
信息安全
班级:
信安1202学号:
2012012194姓名:
李自然成绩:
实验名称
数组与字符串程序设计
实验地点
3-603
实验时间
1.实验目的:
◆熟练掌握数组程序设计
◆熟练掌握字符串程序设计
◆初步学习应用软件设计方法。
【注】实验总用时:
6课时。
2.实验内容:
将数组奇、偶位置的元素交换存储。
将整型数组中的正数都放在负数之前。
假设数组中没有零元素,并且程序中不得另行开设过渡数组。
有序数组元素插入。
有一个有序数组,现从键盘中输入一个数,将该数插入到数组中,数组仍然有序。
数组的插入排序法程序设计。
插入排序法:
不断将表中的下一元素插入到已排好序的子表中,这个子表不断扩大,直至全部数据排好。
数组的起泡排序法程序设计。
起泡排序法:
数组中相邻元素比较,位置不对交换;连续作若干次。
数组的拉锯排序法程序设计。
拉锯排序法:
是起泡排序法的改进,采用“上浮”、“下沉”交替进行的方式“起泡”。
一元n次多项式的求和与计算问题。
用“非零系数”、“指数”数组(不妨设定系数为整数)可以表示一个一元n次多项式。
现给出Fn(x)、Gm(x)两个多项式,求Hp(x)=Fn(x)+Gm(x)。
并对于键盘输入的x,求Hp(x)的值。
设计程序,用“筛法”求200以内的素数。
“筛法”:
2是素数,2的倍数一定不是素数,筛去;未被筛去的最小数一定是素数,该数的倍数一定不是素数,筛去;……;逐步地,当第一个未被筛去的数大于sqrt(n)时,表中未被筛去的数都是素数。
按格式打印杨辉三角形。
杨辉三角形是我国古代科学家杨辉发现的,即:
二项式(x+y)n的展开项系数具有如下规律。
1
121
1331
14641
15101051
【要求1】用二维数组实现。
【要求2】用一维数组实现。
找二维数组中的“鞍点”及位置。
“矩阵中鞍点”元素是指,在该行所有元素中最大,但在该行所有元素中最小的元素(位置)。
稀疏矩阵的压缩存储问题。
所谓“稀疏矩阵”是指零元素所占比例很高的矩阵(不妨假设该矩阵是整型矩阵)。
这种矩阵可以用“零元素”压缩法进行压缩存储。
也就是开设一个n行三列的数组,每行存一个非零元素的(行号、列号、元素值),通常称“三元组法”。
n=非零元素个数。
【要求1】请编写一个“压缩”程序:
对“稀疏矩阵”进行压缩存储(到“三元组”中)。
【要求2】请再写一个“解压”程序:
对压缩存储在“三元组”中矩阵进行还原存储(到矩阵数组中)。
【要求3(选作)】“三元组”其实可以变为“二元组”对“稀疏矩阵”进行压缩存储,请考虑改进方法,并相应编写基于“二元组”的“稀疏矩阵”“压缩”程序及“解压”程序。
输入两个字符串,按字典顺序比较大小,以文字形式输出哪个字符串大,或相等。
删除字符串中的指定字符。
被删除字符从键盘输入。
(选作)通过一个三维字符数组存储某小型图书馆的图书资料,包括:
书名、书号、作者、出版社、图书分类、在图书馆中的存放位置,上述信息都是以英文形式存储的。
请编写一个小型的图书查询系统,对于用户输入的:
作者名,或书名中的单词或词组,或书号,或书类号,查询出相应的图书信息显示在屏幕上。
请设计一种通过标识认证的查询输入方式。
假设所有英文信息都是规范的。
图书字符数组以初始化方式给出,未来学习了文件后,图书数组将从文件中读入。
3.实验要求:
独立编写程序,上机调试通过,写出实验报告。
4.实验准备:
电脑一台、WindowsXP操作系统、VC++6.0软件。
5.实验过程:
5.1实验一的实验过程
【要求】每道题都独立书写下列内容。
每题的报告应包括如下内容。
5.1.1题目。
可以写:
详见本报告“2.实验内容”),也可以把原题附上。
5.1.2简单思路。
也即程序设计的思考、设计思路及描述。
5.1.3程序结构。
可以用流程图表示,也可用结构性类语言描述。
5.1.4最终程序清单与注释。
一般指经调试正确的程序,如果调试不正确也未修改正确,也要附上。
正确的程序后面调试记录要附上正确的调试结果,调试仍不正确的但后面程序,调试记录要包含错误的内容,并写出你认为可能的错误原因分析。
注释可以简单写,但对复杂的部分可以详细写。
5.1.5测试数据选择。
要包含测试数据选择依据的分析。
调试中的测试数据可能不止一种,也就是说不是执行一次结果正确就证明结果正确。
5.1.6调试记录。
记录调试过程的输入、输出等,可以记录屏幕拷贝内容,也可以用文字说明屏幕显示内容。
并分析通过测试数据及程序执行结果,对程序正确性的分析与判断。
5.1.7实验结论总结。
5.2实验二的实验过程
5.2.1同上要求
5.2.2同上要求
5.2.3同上要求
5.2.4同上要求
5.2.5同上要求
5.2.6同上要求
5.2.7同上要求
……
(本部分可另附页)
实验过程:
1.将数组奇、偶位置的元素交换存储
程序:
#include
voidmain()
{
inta[6],t,i;
printf("put6number\n");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<6;i=i+2)
t=a[i],a[i]=a[i+1],a[i+1]=t;
for(i=0;i<6;i++)
printf("%d",a[i]);
printf("\n");
}
结果:
2.将整型数组中的正数都放在负数之前。
假设数组中没有零元素,并且程序中不得另行开设过渡数组
程序:
#include
voidmain()
{
inta[6]={5,-3,6,1,-7,9},c1,c2,i,k,t;
c1=0;
c2=0;
for(i=0,k=5;i{if(a[i]<0)
c1=1;
elsei++;
if(a[k]>0)
c2=1;
elsek--;
if(c1==1&&c2==1)
{t=a[i],a[i]=a[k],a[k]=t;
c1=0,c2=0;
i++,k--;
}
}
for(i=0;i<6;i++)
printf("%d",a[i]);
}
结果:
3.有序数组元素插入。
有一个有序数组,现从键盘中输入一个数,将该数插入到数组中,数组仍然有序
程序:
#include
voidmain()
{
intm,i,j;
inta[6]={3,5,6,12,88,90};
printf("请插入一个数:
\n");
scanf("%d",&m);
for(i=0;i<5;i++)
if(m{
for(j=4;j>=i;j--)
a[j+1]=a[j];
break;
}
a[i]=m;
for(i=0;i<6;i++)
printf("%3d",a[i]);
}
结果:
4.数组的插入排序法程序设计。
插入排序法:
不断将表中的下一元素插入到已排好序的子表中,这个子表不断扩大,直至全部数据排好
程序:
#include
voidmain()
{
inta[10];
inti,j,t;
printf("input6numbers:
\n");
for(i=0;i<6;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<5;j++)
for(i=0;i<5-j;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
printf("顺数数组为:
\n");
for(i=0;i<6;i++)
printf("%d",a[i]);
printf("\n");
}
结果:
5.数组的起泡排序法程序设计。
起泡排序法:
数组中相邻元素比较,位置不对交换;连续作若干次
程序:
#include
voidmain()
{
intk[6]={5,3,9,21,1,8},i,j,a,b,c,d,t;
a=0;
b=5;
c=5;
d=0;
while(c>d)
{
for(i=a;i
{
if(k[i]>k[i+1])
{
t=k[i];
k[i]=k[i+1];
k[i+1]=t;
c=i;
}
c=i;
}
b=c;
for(j=b;j>a;j--)
{
if(k[j]{
t=k[j];
k[j]=k[j-1];
k[j-1]=t;
d=j;
}
d=j;
}
a=d;
}
for(i=0;i<5;i++)
printf("%d,",k[i]);
printf("%d\n",k[i]);
}
结果:
6.数组的拉锯排序法程序设计。
拉锯排序法:
是起泡排序法的改进,采用“上浮”、“下沉”交替进行的方式“起泡”
程序:
#include
voidmain()
{
intk[6]={2,4,1,7,13,8},i,j,a,b,c,d,t;
a=0;
b=5;
c=5;
d=0;
while(c>d)
{
for(i=a;i
{
if(k[i]>k[i+1])
{t=k[i];k[i]=k[i+1];k[i+1]=t;c=i;}
c=i;
}
b=c;
for(j=b;j>a;j--)
{
if(k[j]{t=k[j];k[j]=k[j-1];k[j-1]=t;d=j;}
d=j;
}
a=d;
}
for(i=0;i<5;i++)
printf("%d,",k[i]);
printf("%d\n",k[i]);
}
结果:
8.设计程序,用“筛法”求200以内的素数。
“筛法”:
2是素数,2的倍数一定不是素数,筛去;未被筛去的最小数一定是素数,该数的倍数一定不是素数,筛去;……;逐步地,当第一个未被筛去的数大于sqrt(n)时,表中未被筛去的数都是素数。
程序:
#include
#include
intmain()
{
inti,j,n,a[201];
for(i=1;i<=200;i++)
a[i]=i;
a[1]=0;
for(i=2;ifor(j=i+1;j<=200;j++)
{
if(a[i]!
=0&&a[j]!
=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for(i=2,n=0;i<=200;i++)
{
if(a[i]!
=0)
printf("%5d",a[i]);
}
printf("\n");
return0;
}
结果:
9.按格式打印杨辉三角形。
杨辉三角形是我国古代科学家杨辉发现的,即:
二项式(x+y)n的展开项系数具有如下规律。
1
121
1331
14641
15101051
【要求1】用二维数组实现。
【要求2】用一维数组实现。
二维数组:
程序:
#include
#defineN6
voidmain()
{
inti,j,a[N][N];
for(i=0;ifor(j=0;j<=i;j++)
if(j==0||j==i)a[i][j]=1;
elsea[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
结果:
一维数组:
程序:
#include
voidmain()
{
inta[6],i,j;
a[0]=1;printf("%d",a[0]);
for(i=1;i<6;i++)
{
a[i]=1;
for(j=i-1;j>=1;j--)a[j]=a[j]+a[j-1];
for(j=0;j<=i;j++)printf("%d",a[j]);
printf("\n");
}
}
结果:
10.找二维数组中的“鞍点”及位置。
“矩阵中鞍点”元素是指,在该行所有元素中最大,但在该行所有元素中最小的元素(位置)。
程序:
#include
voidmain()
{
intk,a[3][4]={1,2,3,13,5,6,7,8,9,10,11,12};
inti,j,max,maxj;
boolflag;
for(i=0;i<3;i++)
{
max=a[i][0];maxj=0;
for(j=0;j<4;j++)
if(a[i][j]>max){max=a[i][j];maxj=j;}
flag=true;
for(k=0;k<3;k++)
if(max>a[k][maxj])
{
flag=false;break;
}
if(flag)
{
printf("鞍点是a[%d][%d]=%d\n",i,maxj,max);break;
}
}
if(!
flag)printf("鞍点不存在\n");
}
结果:
11.稀疏矩阵的压缩存储问题。
所谓“稀疏矩阵”是指零元素所占比例很高的矩阵(不妨假设该矩阵是整型矩阵)。
这种矩阵可以用“零元素”压缩法进行压缩存储。
也就是开设一个n行三列的数组,每行存一个非零元素的(行号、列号、元素值),通常称“三元组法”。
n=非零元素个数。
【要求1】请编写一个“压缩”程序:
对“稀疏矩阵”进行压缩存储(到“三元组”中)。
【要求2】请再写一个“解压”程序:
对压缩存储在“三元组”中矩阵进行还原存储(到矩阵数组中)。
【要求3(选作)】“三元组”其实可以变为“二元组”对“稀疏矩阵”进行压缩存储,请考虑改进方法,并相应编写基于“二元组”的“稀疏矩阵”“压缩”程序及“解压”程序。
程序:
结果:
12.输入两个字符串,按字典顺序比较大小,以文字形式输出哪个字符串大,或相等
程序:
#include
voidmain()
{
chars1[81],s2[81];
inti;
printf("请输入第一个字符串s1=");
gets(s1);
printf("请输入第二个字符串s2=");
gets(s2);
for(i=0;s1[i]==s2[i];i++)
if(s1[i]=='\0'||s2[i]=='\0')break;
if(s1[i]==s2[i])
printf("两字符串相等");
elseif(s1[i]-s2[i]>0)
printf("s1在字典序中排在s2后面");
elseprintf("s1在字典序中排在s2前面\n");
}
结果:
13.删除字符串中的指定字符。
被删除字符从键盘输入。
程序:
#include
voidmain()
{
inti,j;
chars[80],ch;
printf("请输入一个字符串");
gets(s);
printf("请输入要删除的字母ch=");
ch=getchar();
for(i=j=0;s[i]!
='\0';i++)
if(s[i]!
=ch)
s[j++]=s[i];
s[j]='\0';
printf("Thestringafterdeletedis:
");
puts(s);
}
结果:
6.实验总结:
写出本次实验在设计与调试中的技术体会,特别是实验前的程序设计,在实验中发现了什么问题,如何解决的,得到了什么经验与体会等。
说明:
1.实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供学生使用;
2.实验准备由学生在实验或上机之前填写,教师应该在实验前检查;
3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等;
4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;
5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。