实验项目数组样本.docx
《实验项目数组样本.docx》由会员分享,可在线阅读,更多相关《实验项目数组样本.docx(14页珍藏版)》请在冰豆网上搜索。
实验项目数组样本
《C语言程序设计》实验报告
实验项目一:
数组
学 号
姓 名
刁建
专业、班级
软工一班
实验时间
实验地点
五楼
指导教师
吕老师
一、实验目的及要求
(1)正确理解数组的概念,熟练掌握一维数组和二维数组的定义和初始化方法。
(2)熟练掌握字符数组和字符串的区别和使用、字符串函数的使用。
(3)熟练掌握一维数组、二维数组以及字符串的输入和输出方法。
(4)掌握冒泡排序、选择排序及查找算法。
(5)掌握字符窜的结束标志,正确使用字符串的结束标志对字符串进行处理。
经过编程和调试程序,加深对数组、字符数组和字符串函数应用的理解二、实验设备(环境)及要求
使用VisualC++6.0;windows系列操作系统的环境。
三、实验内容与步骤(要求以”学号_姓名_题号”为名建立项目;
例项目名为:
_***_01)
1.运行下面的c程序。
运行结果:
2.运行下面的c程序:
1)从键盘输入字符串:
howareyou,观察结果。
运行结果:
2)将上述程序的第四行改成scanf(”%s”,str);,重新运行上述程序,观察输出结果有什么不同,为什么?
重新运行的结果:
用scanf输入时””会被看成"\0",终止
3)如果用%c格式输入输出字符串,程序应怎样修改?
根据用%c格式输入输出字符的特点,修改后的程序为:
3.改错
有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。
#include
#defineM3
#defineN4
voidmain()
{
intmax,i,j,r=0,c=0;
inta[M][N]={{0,94,-10,218},{3,9,10,-81},{45,16,44,-99}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{
max=a[i][j];
r=i;
c=j;
}
printf("max=%d,hang=%d,lie=%d\n",max,r,c);
}
4.改错
下面是用来将数组a中元素按升序排序后输出的源程序。
分析源程序中存在的问题,并对源程序进行修改,使之能争取完成任务。
源程序:
#include
intmain()
{
voidsort(int[],int);
inta[10]={23,12,34,56,8,6,5,4,34,56};
inti,
sort(a,10);
for(i=0;i<10;i++)
printf("%6d",a[i]);
printf("\n");
return0;
}
voidsort(intb[],intn)
{
inti,j,t;
for(i=0;ifor(j=0;jif(b[j]>b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
5.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。
)
6.应用数组求Fabonacci数列的前40项(该数列前两项为1,以后各项均为前相邻两项之和)要求以每行8个输出。
7.用冒泡法对20个整数排序。
20个整数需要键盘键入。
8.用选择法对20个整数排序。
20个整数需要键盘键入。
#include
intmain()
{
voidsort(intarry[],intn);
inta[10],i;
printf("enterarray:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("thesortedarry:
\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
return0;
}
voidsort(intarry[],intn)
{
inti,j,k,t;
for(i=0;i<=n-1;i++)
{
k=i;
for(j=i+1;jif(arry[j]k=j;
t=arry[k];
arry[k]=arry[i];
arry[i]=t;
}
9.编程实现:
对任意一个一维数组,从中找出数组元素的最大值和最小值。
要求:
(1)数组为整型数组(10个元素)。
(2)使用scanf函数实现数组元素的输入。
在输入前给出必要的提示。
(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。
(4)如果现改为20个元素的数组,怎样修改程序?
修改程序后,运行程序进行检查。
如果需要数组元素不断改变,应怎样修改程序?
10.编写一个程序,从键盘读入数据,对一个3*4矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵。
11.编程实现”折半查找”的过程。
折半查找的处理过程是:
在一个数据已排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找。
要求:
(1)设定一个数组存放20个数据,用赋初值的方法在程序中给出(假设这些数据已排序)。
(2)用scanf函数输入一个要找的数。
(3)对查找的结果给出相应的说明,如果找到该数,则给出该数是数组中第几个元素。
如果该数不在数组中,则输出”无此数”信息。
(4)任意输入一些数据,检查程序的正确性。
(5)修改程序,设定输入的数据是无序的,采用scanf函数的形式输入,首先要对这些无序的数据进行排序,然后再采用”折半查找”。
最后经过测试几组差别较大的数据检查程序的正确性。
(6)修改程序,改为函数调用的形式。
编写一个选择法排序函数,对无序数据进行排序;编写一个查找函数对已排好序的数据进行查找。
在主函数中输入数据(无序),调用上述函数,输出结果。
#include
#include
intmain()
{
inta[10];
inti,j,k,t;
printf("输入十个数\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(j=0;j<=9;j++)
for(k=0;k<=9-j;k++)
if(a[k]>a[k+1])
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
printf("排序后\n");
for(j=0;j<=9;j++)
printf("%4d",a[j]);
printf("\n");
printf("输入i\n");
scanf("%d",&i);
if(i==a[4]&&i==a[5])
printf("ended\n");
elseif(i{
if(i==a[2])
printf("该数为第三个\n");
elseif(iif(i==a[1])
printf("该数为第二个\n");
elseif(i==a[0])
printf("该数为第一个\n");
elseif(i==a[3])
printf("该数为第四个\n");
else
printf("无次数\n");
}
else
if(i==a[8])
printf("该数为第9个\n");
elseif(iif(i==a[7])
printf("该数为第8个\n");
elseif(i==a[6])
printf("该数为第7个\n");
elseif(i==a[3])
printf("该数为第四个\n");
else
printf("无次数\n");
return0;
}
四、分析与讨论
对上机实践结果进行分析,上机的心得体会。
五、教师评语
签名:
日期:
成绩