试验项目4:数组1
《《C C 语言程序设计》实验报告语言程序设计》实验报告 实验项目一:数组实验项目一:数组 学号 实验时间2019.03.06 姓名 实验地点机房 6 专业、班级 指导教师 一、实验目的及要求 (1) (2) (3) (4) (5) 正确理解数组的概念,熟练掌握一维数组和二维数组的定义和初始化方法。 熟练掌握字符数组和字符串的区别和使用、字符串函数的使用。 熟练掌握一维数组、二维数组以及字符串的输入和输出方法。 掌握冒泡排序、选择排序及查找算法。 掌握字符窜的结束标志,正确使用字符串的结束标志对字符串进行处理。 通过编程和调试程序,加深对数组、字符数组和字符串函数应用的理解二、 实验设备(环境) 及要求 使用 Visual C++ 6.0;windows 系列操作系统的环境。 三、实验内容与步骤(要求以“学号要求以“学号_ _姓名姓名_ _题号”为名建立项目;题号”为名建立项目; 例项目名为:例项目名为:2013050201_***_012013050201_***_01) 1. 运行下面的 c 程序。 运行结果: 123450 分析: 赋值的时候 num[0]=1 num[1]=2 num[2]=3 num[3]=4 num[4]=5 num[5]=0 2. 运行下面的 c 程序: 1)从键盘输入字符串:how are you,观察结果。 运行结果: 输出 how are you 2)将上述程序的第四行改成scanf( “%s” ,str) ; ,重新运行上述程序,观察输出结果 有什么不同,为什么? 重新运行的结果:how 分析: 前者输出的是字符串后者输出的是字符 3)如果用%c 格式输入输出字符串,程序应怎样修改? 根据用%c 格式输入输出字符的特点,修改后的程序为: #include int main() { int i; char str[11]={ h , o , w , a , r , e , y , o , u }; for(i=0;ia[i]) min=a[i];min=a[i]; k=i;}k=i;} for(i=0;i10;i++)for(i=0;i10;i++) printf(“%d“,a[i]);printf(“%d“,a[i]); printf(“\n“);printf(“\n“); printf(“printf(“最大值为最大值为%d,%d,在数组中的位置为在数组中的位置为%d\n“,max,j);%d\n“,max,j); printf(“printf(“最小值为最小值为%d,%d,在数组中的位置为在数组中的位置为%d“,min,k);%d“,min,k); return 0;return 0; } } 10.编写一个程序,从键盘读入数据,对一个3*4 矩阵进行赋值,求其转置矩阵,然后输出 原矩阵和转置矩阵。 #include int main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int b[4][3],i,j; for(i=0;i3;i++) {for(j=0;j4;j++) {printf(“%5d “,a[i][j]); b[j][i]=a[i][j];} printf(“\n“);} printf(“\n“); for(i=0;i4;i++) {for(j=0;j3;j++) printf(“%5d “,b[j][i]); printf(“\n“); }return 0; } 11.编程实现 “折半查找” 的过程。 折半查找的处理过程是: 在一个数据已排好序的数组中, 首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小, 则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果 前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部 继续进行折半查找。 要求: (1)设定一个数组存放20 个数据,用赋初值的方法在程序中给出(假设这些数据已排 序) 。 (2)用 scanf 函数输入一个要找的数。 (3)对查找的结果给出相应的说明,如果找到该数,则给出该数是数组中第几个元素。 如果该数不在数组中,则输出“无此数”信息。 (4)任意输入一些数据,检查程序的正确性。 (5)修改程序,设定输入的数据是无序的,采用scanf 函数的形式输入,首先要对这些 无序的数据进行排序,然后再采用“折半查找” 。最后通过测试几组差别较大的数据检 查程序的正确性。 (6)修改程序,改为函数调用的形式。编写一个选择法排序函数,对无序数据进行排 序;编写一个查找函数对已排好序的数据进行查找。在主函数中输入数据(无序) ,调 用上述函数,输出结果。 #include int main() { int a[20]={1,2,3,5,6,8,12,13,15,18,19,26,27,29,34,36,38,40,42,46}; int x,low,mid,high,found; low=0,high=19,found=0; scanf(“%d“, while(lowa[low]) low=mid-1; else if(xa[mid]) high=mid-1; else found=1; } if(found) printf(“这个数是第%d 个数\n“,mid+1); else printf(“未找到\n“); return 0; } 四、分析与讨论 对上机实践结果进行分析,上机的心得体会。 五、教师评语 签名: 日期: 成绩