第七次实验报告
C程序设计实验报告
姓名:童飞 实验地点:教学楼514教室 实验时间:5月16日
一、实验目的与要求
1、 一维数组的应用
- 泡沫排序法实现对随机数组的升序排列
- 选择排序法实现对随机数组的升序排列
2、二维数组的应用
- 输出指定行数杨辉三角形
- 给定年月日,转换成这一年的第几天
3、字符数组应用
- 输入一段字符串判断是否为“回文数”
二、实验内容
7.3.1
实验练习(一)、1、写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用冒泡排序实现)
2、
3、
#include"stdio.h" #include"stdlib.h" #include"time.h" sortl(int s[],int n) { int i,j; int temp; for(int i=0;i<10;i++) for(int j=0;j<10-i;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((int)time(NULL)); printf("随机产生10个整数: "); for(i=0;i<10;i++) a[i]=rand()%100; for(i=0;i<10;i++) printf("%d ",a[i]); printf(" "); sortl(a,i); printf("输出排序后的十个整数: "); for(i=0;i<10;i++) printf("%d ",a[i]); }
4、刚开始做这题的时候,因为不太熟悉数组的运用而且对冒泡排序法不太会,所以做了很久,还有对随机数生成不知道用什么函数,之后翻书才知道,然后就做出来了。
实验练习(二)、1、写一个函数,对随机产生的10个整数按从小到大的顺序排序(升序,用选择排序实现)
2、
3、
#include"stdio.h" #include"stdlib.h" #include"time.h" sortl(int s[],int n) { int i,j,k; int temp; for(i=0;i<10;i++) { k=i; for(j=i+1;j<10;j++) if(s[k]>s[j]) k=j; temp={s[k]}; s[k]=s[i]; s[i]=temp; } } main() { int i,a[10]; srand((int)time(NULL)); printf("随机产生10个整数: "); for(i=0;i<10;i++) a[i]=rand()%100; for(i=0;i<10;i++) printf("%d ",a[i]); printf(" "); sortl(a,i); printf("输出排序后的十个整数: "); for(i=0;i<10;i++) printf("%d ",a[i]); }
4、本题跟上题的思路大体差不多,就是要了解选择排序法。
7.3.2
实验练习(一)、1、输出指定行数的杨辉三角形
2、
3、
#include"stdio.h" main() { int a[50][50],i,j,n; printf("请输入杨辉三角行数: "); scanf("%d",&n); for(i=1;i<=n;i++) { a[i][n]=1; a[i][n-i+1]=1; for(j=n-i+2;j<=n;j++) { a[i][j]=a[i-1][j]+a[i-1][j+1]; } for(j=n-i+1;j<=n;j++) { printf("%d ",a[i][j]); if(j==n) printf(" "); } } }
4、本题是一个二维数组的运用,i,j分别代表的是二维数组的行和列,i,j分别代表的是二维数组的行和列,然后还要了解一下杨辉三角,就可以做出。
实验练习(二)、1、给定某年某月某日,将其转换成这一年的第几天并输出
2、
3、
#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 if((year%4==0&&year%100!=0)||(year%400==0)) 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("请输入年、月、日: "); scanf("%d%d%d",&y,&m,&d); printf("是这年的第%d天 ",day_year(y,m,d)); }
4、一开始我做这题运行了好多次都是运行不出来,运行一月份的可以,但是运行一月以上的就直接停止运行,然后经过晓鹏老师的帮助,去掉了%d中间的逗号就可以运行,但是我觉得这很不合理,加上逗号也行啊,但晓鹏老师说有时候计算机不能识别。
7.3.3
1、编写程序,从键盘输入一个字符串,判断其是否是回文数。
2、
3、
#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++) if(str[i]!=str[Len-1-i]) { ch='N'; break; } if(ch=='Y') printf("%s是一个回文数 ",str); else printf("%s不是一个回文数 ",str); }
4、开始没运行出来但是后来在for循环中加上break后就做出来了
三、实验小结
本次实验主要针对于数组的运用,了解数组并熟练运用for循环,然后加上对srand函数的运用,难度也比之前要加强了。