数组实验

第五次实验报告

实验项目:数组实验

姓名:丁哲航 实验时间:2021.6.9 实验地点:一教

一、实验目的与要求

1、掌握一维数组和多维数组的定义和数组元素的引用方法。
2、了解一维数组和多维数组的初始化方法。
3、学习一维数组和多维数组的基本算法。
4、掌握字符数组的定义、初始化方法及其元素的引用方法。
5、掌握C语言提供的对字符串进行处理的基本库函数

二、实验内容

实验7.3.1.1

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void sortl(int s[ ],int n)
{
	int i,j;
	int 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();
	   	printf("%d",a[i]);
		printf(" ");
    }
	sortl(a,10);
	printf("ÅÅÐòºóµÄ½á¹û:\n");
	for(i=0;i<10;i++)
	{
	printf("%d ",a[i]);
	printf(" ");
    }
}


问题分析:srand(time(NULL))会产生随机数,冒泡排序会将前一个和后一个进行比较,如果前面的数更大,就将两者进行交换,从第一个数排到最后一个数,从而实现从小到大排序。

实验7.3.1.2

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void sort2(int s[], int n)
{
	int i,j,k;
	int temp; 
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<=n-1;j++)
		{
			if(s[k]>s[j])
	        {
		        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();
    }
	for(i=0;i<10;i++)
	printf("%d", a[i]);
	printf("\n");
	sort2(a[10],10);
	printf("排序后的结果:\n");
	for(i=0;i<10;i++)
	printf("%d ",a[i]);
}


问题分析:选择排序和冒泡排序结果相同但过程不同,冒泡排序是将每一个数进行比较,再把小的数放在前面,选择排序则是在位置上对每一个数进行选择,第一个位置就选出所有数中最小的放入,第二个位置就从剩下的数中选出最小的数,以此类推。

实验7.3.2.1

#include"stdio.h"
void 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;
	}
	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("%d\t",a[i][j]);
		printf("\n");
	}
}


问题分析:杨辉三角需要注意算法的设计,其中需要用两个for循环确定行和列的关系,其他部分较简单。

实验7.3.2.2

#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 y,int m,int d)
{
	int i,j,s=0;
	if(y%4==0&&y%100!=0||y%400==0)
	i=1;
	else
	i=0;
	for(j=1;j<m;j++)
	s=s+day_tab[i][j];
	s=s+d;
	return s;
}
main()
{
	int y,m,d;
	printf("Please Input the year,month and day:\n");
	scanf("%d%d%d",&y,&m,&d);
	printf("It is this year %d day.",day_year(y,m,d)); 
}


问题分析:自定义函数的编写有一定困难,注意用if语句判断该年是闰年还是平年,还要注意函数的调用,我在编写代码时出错花了较长时间纠正。

三、实验小结

1.对书本上的知识运用不太熟练,在编写函数的过程中常会出错。经过此次练习可以积累经验,巩固知识。
2.加快了自己打代码的速度和准确率。

posted @ 2021-06-25 21:00  丁哲航  阅读(68)  评论(0编辑  收藏  举报