C程序设计实验报告
实验项目:数组实验
姓名:郑文亮 实验地点:家 实验时间:4月21日and5月19日
一、实验目的与要求
1、 一维数组的应用
泡沫排序法实现对随机数组的升序排列
选择排序法实现对随机数组的升序排列
2、二维数组的应用
输出指定行数杨辉三角形
给定年月日,转换成这一年的第几天
3、字符数组应用
输入一段字符串判断是否为“回文数”
二、实验内容
7.3.1一维数组的应用
(一)
1、问题描述:编写程序,利用随机函数产生的10个数,按升序排序输出。
2、流程图:
3、实验代码
#include"stdio.h" #include"stdlib.h" #include"time.h" int sort1(int s[],int n) { int i,j; int temp; for(i=0;i<9;i++) { for(j=0;j<10-i;j++) { if(s[j]1]) { temp=s[j]; s[j]=s[j-1]; s[j-1]=temp; } } } } main() { int i,a[10]; srand(time(NULL));/*给出随机种子*/ printf("Ëæ»ú²úÉú10¸öÕûÊý:\n"); for(i=0;i<10;i++) { a[i]=rand()%100;/*限制100以内随机数*/ } for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); sort1(a,i); printf("排序结果:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }
(二)
1、问题描述:对随机产生的10个随机整数从大到小的顺序排列。
2、流程图:
3、实验代码
#include"stdio.h" #include"stdlib.h" #include"time.h" int sort2(int s[],int n) { int i,j,k; int temp; for(i=0;i1;i++) { k=i; for( j=i+1;j<=n-1;j++) { if(s[j]<s[k]) { k=j; } } if(k!=i) { temp=s[k]; s[k]=s[i]; s[i]=temp; } } } main() { int i,a[10]; srand(time(NULL)); printf("随机产生10个整数:\n"); for(i=0;i<10;i++) { a[i]=rand()%100; } for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); sort2(a,10); printf("排序结果:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }
4、运行结果
7.3.2 二维数组的应用
(一)
1、问题描述:编写程序,从键盘输入行数,输出指定行数的杨辉三角形。
2、流程图:
3、实验代码
#includemain() { int a[50][50],i,j,n; printf("请输入杨辉三角行数:"); scanf("%d",&n); for(i=1;i<=n;i++) { a[i][i]=1; a[i][1]=1; } for(i=3;i<=n;i++) { for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=1;i<=n;i++) { for(j=1;j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } }
4、运行结果
(二)
1、问题描述:给定年月日,转换成这一年的第几天
2、流程图:
3、实验代码
#includeint main ( ) { int y,m,d,day=0; int a[2][12]= { {31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}, }; scanf("%d%d%d",&y,&m,&d); int i; for(i=1; i ) { if ((y%100!=0&&y%4==0)||y%400==0) { day+=a[1][i-1]; } else day+=a[0][i-1]; } printf("%d年%d月%d日是这一年的第%d天",y,m,d,day+d); }
4、运行结果
7.3.3 字符数组的应用
1、问题描述:编写程序,从键盘输入一个字符串,判断其是否是回文数。
2、流程图:
3、实验代码
#include#include<string.h> #define N 40 main() { char str[N],ch='Y'; int i; int len; printf("请输入一个字符串:"); scanf("%s",str); len=strlen(str); i=0; for(i=0;i<=len/2;i++) { if(str[i]!=str[len-i-1]) { ch='N'; break; } } if(ch=='Y') { printf("%s是回文数\n",str); } else { printf("不是回文数\n"); } }
4、运行结果
三、实验小结
收获: 1、通过泡沫排序与选择排序的使用,对于排序法有了更加系统的了解。
C语言中排序法总共有六种:泡沫、选择、插入、快速、希尔、堆叠排序法;
这次实验前两种排序法的学习方法可以引用到后面的排序法学习;
2、在实验中学习到了产生随机种子的函数:srand((unsigned seed) time (Null )),
还了解到该函数不能放在循环内,否则随机出来的数都是一样的,同时还要考虑在
使用一个新的函数时要注意是否加入头文件;
3、在产生随机数时应该要考虑产生数的范围,给出提示或者加以限定在某个已知的范围内;
4、写程序时,有意识的去注意了对齐方式,在美观度与层次感上有很大的提高,同时还在
一些较为复杂的后面加了注释说明,便于自己养成一个良好的习惯;