数组实验

C程序设计实验报告

实验项目:
姓名:谢梅芳
实验地点:1教520
实验时间:2021.6.9
一、实验目的与要求

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

二、实验内容
1、实验练习:7.3.1习1
1.1问题的简单描述:
编写程序,利用随机函数产生10个整数,并按升序排列输出。
1.2实验代码:需要使用MARKDOWN插入代码。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort(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;	
	}
}
void 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\t",a[i]);
	printf("\n");
	sort(a,10);
	printf("请输出排序后的10个整数:\n");
	for(i=0;i<10;i++)
	printf("%d\t",a[i]);
}

实验结果:

1.3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

(1)不知如何使用随机函数以及如何给出随机种子;用srand()函数要与rand()函数,同时要两者使用才能随机产生数。
(2)内外循环的内容不太明白。
⑶数字的升降序不太明白,对些许代码为什么这样写不知道原因。

2、实验练习:7.3.1习2
2.1问题的简单描述:
写一个函数,对随机产生的10个整数按从小到大的顺序排序(升序,用选择排序实现)。
2.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()%100;
	for(i=0;i<10;i++)
	printf("%d\t",a[i]);
	printf("\n");
	sort2(a,10);
	printf("请输出排序后的10个整数:\n");
	for(i=0;i<10;i++)
	printf("%d\t",a[i]);
}

实验结果:

2.3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

⑴不明白srand(time(NULL))及a[i]=rand()%100的含义,使随机产生数。

3、实验练习:7.3.2习1
3.1问题的简单描述:
编写程序,从键盘输入行数,输出指定行数的杨辉三角形。
3.2实验代码:

#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("%6d",a[i][j]);
    	printf("\n");
	}
 } 

实验结果:

3.3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

⑴我按照流程图写代码,将流程用代码完全写出来时以为就完成了,可最后仍无法输出,最后明白同时输出时,应整体一起输出。

4、实验练习:7.3.2习2
4.1问题的简单描述:
编写程序,从键盘分别输入年,月,日,计算出该天是这年中的第几天。
4.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((i%4==0&&i%100!=0)||(i%400==0))
	i=1;
	else
	i=0;
	for(j=1;j<m;j++)
	{
		for(j=1;j<m;j++)
		s=s+day_tab[i][j];
		s=s+d;
	}
	return s;
}
void main()
{
	int y,m,d,num;
	printf("请输入年,月,日:\n");
	scanf("%d %d %d",&y,&m,&d);
	num=day_year(y,m,d);
	printf("是这年的第%d天\n",day_year(y,m,d));
}

实验结果:

4.3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

⑴统计天数函数的头部书写迷糊。
⑵要特别注意是否为闰年的判断方法。

5、实验练习:7.3.3
5.1问题的简单描述:
编写程序,从键盘输入一个字符串,判断其是否是回文数。
5.2实验代码:

#include <stdio.h>
#include <string.h>
#define N 40
void main()
{
	char str[N],ch='Y';
	int i;
	int len;
	printf("请输入一个字符串:\n");
	scanf("%s",&str);
	len=strlen(str);//调用默认函数 
	for(i=0;i<=len/2;i++) 
	{
	if(str[i]==str[len-1-i])
	break;	
	else
	ch='N';	
	}
	if(ch=='Y')
	printf("%s是一个回文数\n",str);
	else
	printf("%s不是一个回文数\n",str);
} 

实验结果:

5.3问题分析:(重点分析在实验过程中出现的问题,及解决方法。)

⑴一开始不明白为什么要用strlen()函数,后知其是用来获取字符串长度。
⑵判断str[i]与str[len-1-i]是否相等时,其代码要与流程图反一下。

三、实验小结(在本次实验中收获与不足 20分)

不足:对于数组的使用迷糊;
有些函数的使用不明白并且不知其具体作用;
当双层循环与条件语句碰上时老是书写错误,不知具体顺序。
收获:明白了一些不常用函数的一些作用,对数组有了进一步的理解,但仍还不是太懂,明白了判断闰年的方法,并熟悉了对%s的使用。

posted @ 2021-06-17 18:22  ❤️三石  阅读(74)  评论(0编辑  收藏  举报