第七章 数组实验
C语言设计实验报告
试验项目:
1、一维数组的运用
2、二维数组的应用
3、字符数组的应用
姓名:李小玲 实验地点:514教室 实验时间:2019.5.29
一、实验目的与要求
7.3.1一维数组的运用
实验1:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用冒泡排序实现)
1.定义一个一维数组,其大小为10,即它能存放10个数据。
2.使用循环语句,利用随机函数产生10个随机整数存放在数组中。
3.编写排序函数sort 1()。
4.使用循环语句,将排好序的10个数依次输出。
实验2:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用选择排序实现)
实验3:输出指定函数的杨辉三角
1.怎样定义和使用二维数组。
2.怎样用循环进行二维数组中值的计算。
3.使用循环依次输出二维数组中的元素(注意换行);
4.用if语句根据条件判断某个字符是否是大写字母。
实验4:给定某年某月某日,将其转换成这一年的第几天输出
1.使用scanf()函数输入年、月、日。
2.使用一个二维数组存放闰年和非闰年的每个月的天数。
3.使用逻辑表达式判断某年是否是闰年。
4.使用变量day对前几个月的天数进行累加。
实验5:判断某一字符串是否为回文数
1.用scanf()函数,从键盘上输入一个字符串存入字符数组中。
2.求出该字符的长度。
3.用for循环依次比较,循环的终值为长度的一半。
4.设置一个标识符ch,初值为‘Y’,若某字符对不相等,将其设置为‘N’,输出该字符串是否是回文数。
二、实验内容
实验1:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用冒泡排序实现)
1.问题的简单描述:编写程序,利用随机函数产生的10个数,按升序排序输出。
2.实验代码,流程图,效果图:
/*ex7-1.c*/ #include "stdio.h" #include "stdlib.h" #include"time.h" void sort1(int s[ ],int n) { int i,j,temp; for(i=0;i<n-1;i++) //*用于排序外的循环*// { for(j=9;j>=i+1;j--) //*用于排序内的循环*// { if (s[j]<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; printf("%d ",a[i]); } printf(" \n"); sort1(a,i); printf("输出排序后的十个整数:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }
3.分析:第一个实验我做了超级久,首先的话是不知道怎么产生随机数,后面看了课本上的才出来的;再就是刚开始我写的时候没有特别注意在每个for的时候,要把它的包含内容用花括号括起来,比如说:,这个就是我没有用花括号把for里面的内容括起来,所以在产生整数的时候他直接输出的是空格,而不是十个数字(错误示例)以后我会多注意for里面的内容要括号起来。
实验2:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用冒泡排序实现)
1.问题的简单描述:对随机产生的10个随机整数从大到小的顺序排列。
2.实验代码,流程图,效果图:
/*ex7-2.c*/ #include "stdio.h" #include "stdlib.h" #include"time.h" void sort2(int s[ ],int n) { int i,j,temp; for(i=0;i<n-1;i++) //*用于排序外的循环*// { for(j=9;j>=i+1;j--) //*用于排序内的循环*// { if (s[j]<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; printf("%d ",a[i]); } printf("\n"); sort2(a,10); printf("输出排序后的十个整数:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }
3.分析:这个实验跟第一个差不多一样,不同就是采用的是选择排序法,第一个的问题解决了,第二个就不会很难了。
实验3:输出指定函数的杨辉三角
1.问题的简单描述:编写程序,从键盘输入行数,输出指定函数的杨辉三角形。
2.实验代码,流程图,效果图:
/*ex7-3.c*/ #include"stdio.h" main() { int a[50][50],i,j,n; printf("请输入杨辉三角形行数:\n"); scanf("%d",&n); for(i=1;i<=n;i++) { a[i][i]=1; a[i][1]=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++) //*第i行的数字个数为i个*// {
printf("%5d",a[i][j]);
}
printf("\n");
}
}
3.分析:这个杨辉三角,重要的是看懂它的规律,它一开始就定下了每一行的数字都是1;然后每个数字等于上一行的左右两个数字之和,这个在运算过程中也有示例;最后,我还有一个问题就是为什么它i,j不能是从0 开始的,我想了i,j分别代表行列,是从一开始的,但是我试了下0 的时候,感觉又说不通,数组不是从0开始的么?(这个是从0 开始的运行结果)
实验4:给定某年某月某日,将其转换成这一年的第几天输出
1.问题的简单描述:编写程序,从键盘分别输入年、月、日,计算出该天是这年的第几天。
2.实验代码,流程图,效果图:
/*ex7-4.c*/ #include"stdio.h" int day_tab[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int day_year(int year,int month,int day) { int i,j,s=0; if(year % 4 == 0 && year %100 != 0 ||year % 400 == 0) i=1; else i=0; for(j=1;j<month;j++) { s=s+day_tab[i][j]; } s=s+day; return s; } main() { int y,m,d; printf("请输入年月日:\n"); scanf("%d%d%d",&y,&m,&d); printf("是这年的第%d天\n",day_year(y,m,d)); }
3.分析:刚开始的时候,我不会写统计天数函数的头部,其实就是函数的定义,然后判断是否是闰年的时候,我用的是 i 判断,但是要判断的是year这个变量,所以不行;再就是注意输出时候的格式,仔细看流程图。
实验5:判断某一字符串是否为回文数
1.问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否是回文数。
2.实验代码,流程图,效果图:
/*ex7-5.c*/ #include"stdio.h" #include"string.h" #define N 40 main() { char str[N],ch='Y'; int i; int len; printf("请输入一个字符串:"); scanf("%s",&str); len=strlen(str); for(i=0;i<=len/2;i++) //*比较一半的len*// if(str[i]!=str[len-1-i]) //第一个数与最后一个相比*// { ch='Y'; break; } if(ch=='Y') printf("%s是一个回文\n",str); else printf("%s不是一个回文\n",str); }
3.分析:回文数是指正读反读都一样的数字,重点就是,需要比较一半的len就可以了和怎么去比,程序是用第一个数与最后一个相比再以此类推直到len/2的时候,刚开始第一下的时候我没有看懂for循环语句的头部是什么,后面根据流程图捋捋思路,慢慢看也就懂了。
三、实验小结
这次的五个实验,我觉得对我来说还是挺有难度的,就比如刚开始时候的冒泡排序法,我对于内外循环这两个问题就是没弄好,后面我会多注意花括号的使用,并且 在重要的地方加注释;再就是杨辉三角,我刚开始的时候没有看懂流程图里面=3,j=2这个是干什么用的,后面我查了下杨辉三角的定义,就能理解了,所以在做题之前,要看懂原理,比如说,冒泡排序法是什么意思,杨辉三角的规律和回门数的规律,不然的话,我自己光看流程提很难看懂;再就是定义,就说要输出天数的那题,我刚看到要我写统计天数函数头部的时候我就有点懵逼,一下没反应过来是要定义,所以我要多熟悉课本;当然也了解了回门数,杨辉三角等等,还是有收获的,并且我开始会注释一点重要的部分了,因为发现,就算是自己写的代码,现在拿过来看,也会一下没反应过来,所以就是注释的重要性了。