数组实验

c程序实验报告

姓名:方缙    实验地点:教学楼514教室    实验时间:5月30日
实验项目:

 1、写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,冒泡排序实现)
 2、写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用选择排序实现)
 3、输出指定行数的杨辉三角形
 4、给定某年某月某日,将其转换成这一年的第几天并输出
 5、编写程序,判断某一字符是不是“回文数”,回文数是从左至右或从从右至左读起来都是一样的字符

一、实验目的与要求

1.写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,冒泡排序实现)

定义一个一维整型数组,其大小为10,即它能存放10个数据
使用循环语句,利用随机函数产生10个整数存放在数组中。
编写排序函数sort1()
使用循环语句,将排好序的10个数依次输出
将数组定义为全局数组或局部数组
在主函数中,用随机函数生成10个元素放入数组中
将sort(1)函数部分放入主函数中

2.写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,用选择排序实现)

定义一个一维整型数组,其大小为10,即它能存放10个数据
使用循环语句,利用随机函数产生10个整数存放在数组中。
编写排序函数sort1()
使用循环语句,将排好序的10个数依次输出
将数组定义为全局数组或局部数组
在主函数中,用随机函数生成10个元素放入数组中
将sort(1)函数部分放入主函数中

3.输出指定行数的杨辉三角形

怎样定义和使用二维数组
怎样用循环进行二维数组中值的计算
使用循环依次输出二维数组中的元素(注意换行)
用if语句根据条件判断某个字符是否是大写字母

4.给定某年某月某日,将其转换成这一年的第几天并输出

使用scanf()函数输入年、月、日
使用一个二维数组存放闰年和非闰年的每个月的天数
使用逻辑表达式判断某年是否是闰年
使用变量day对前几个月的天数进行累加
在强化练习中,学生将练习不使用二维数组存放每个月的天数
使用if语句对年、月、日的正确性进行验证
将存放每个月的天数的二维数组说明为局部数组

5.编写程序,判断某一字符是不是“回文数”,回文数是从左至右或从从右至左读起来都是一样的字符

用scanf()函数,从键盘输入一个字符串存入字符数组中
求出该字符串的长度
用for循环依次比较,循环的终值为长度的一半
设置一个标志符ch,初值为‘Y’,若某字符对不相等,将其设置为‘N’
根据ch是‘Y’还是‘N’,输出该字符串是否是回文数
强化练习中不使用strlen()求出字符串的长度
将求回文数的部分独立出来,编成一个函数

二、实验内容

1.实验练习:7.3.1

问题描述:

编写程序,利用随机函数产生10个随机数,按升序排列输出。

流程图

 

 

实验代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void soetl(int s[],int n)
{
	int i,j,temp;
	for(i=0;i<10;i++)
	 for(j=9;j>=0;)
	 if(s[j]<s[j-1])
	 {
	 	temp=s[j];
	 	s[j]=s[j-1];
	 	s[j-1]=temp;
	 }
	 else j=j-1;
}
int main()
 {
 	int i,a[10];
 	srand(time(0));
 	printf("随机产生10个整数:");
 	for(i=0;i<10;i++)
 	  a[i]=rand()%100;
 	for(i=0;i<10;i++)
    	printf("%d ",a[i]);
        printf("\n");
    soetl(a,10);
    printf("输出排序后的10个整数:");
	for(i=0;i<10;i++)
	 printf("%d ",a[i]); 

}

  


运行结果

 

 

问题:

在做这道题的时候,刚开始不知道怎么调用函数,后来在书上找到了方法,直接在主函数里面输入soetl(a,10 )即可完成函数的调用。其他问题没有遇到,这个程序在课堂上提到过,所以也就没花太多时间就完成了。

2.实验练习:7.3.1.2

问题描述:

编写函数,利用随机函数产生10个随机数,按升序排列输出.

流程图

 

实验代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void soetl(int s[],int n)
{
	int i=0,j,k,temp;
	for(;i<=n-1;i++)
	 {
	 	k=i;j=i+1;
	 for(;j<=n-1;j++)
	 {
	 if(s[k]>s[j])
	    k=j;}
	 if(k!=i)
	 {
	 	temp=s[k];
	 	s[k]=s[i];
	 	s[i]=temp;
	 }
     }
}
int main()
 {
 	int i,a[10];
 	srand(time(0));
 	printf("随机产生10个整数:");
 	for(i=0;i<10;i++)
 	  a[i]=rand()%100;
 	for(i=0;i<10;i++)
    	printf("%d ",a[i]);
        printf("\n");
    soetl(a,10);
    printf("输出排序后的10个整数:");
	for(i=0;i<10;i++)
	 printf("%d ",a[i]); 

}

  

运行结果

 

 

问题:刚开始以为这个实验与第一个实验是一样的,后来发现使用的是两种不同的算法。一种是冒泡排序法,一种是选择排序法。在编写程序的时候确实遇到了一些麻烦,代码没有报错,运行结果就是一直弹出一个结束程序的窗口,后来才发现,因为在使用for循环的时候,程序一直在循环,没有结束,所以就出不来结果,后来在一些for循环后面加上一些大括号就可以出来了。

3.实验练习:7.3.2.1

问题描述:

编写程序,从键盘输入行数,输出指定行数的杨辉三角形。

流程图

 

实验代码

#incude<stdio.h>
int main()
{
int i,j,a[50][50],n;
printf("请输入杨辉三角行数:");
scanf("%d",&n);
for(i=0;i<n;i++)
   {
 a[i][0]=1;
 a[i][i]=1;
  }
  for(i=2;i<=n;i++)
       for(j=1;j<=i-1;j++)
           a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(i=0;i<n;i++)
	{
       for(j=0;j<=i;j++)
          printf("%5d",a[i][j]);
       printf("\n");
    }

    return 0;
}

  

运行结果

 

 

问题:刚开始可能受了第二个程序的影响吧,第二个程序一直出不来,花了我挺长时间的,后来,平静下来了,代码也就一下也就打出来了。没啥问题。

 

4.实验练习: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,s;
	printf("Input year month day:");
	scanf("%d%d%d",&y,&m,&d);
	s=day_year(y,m,d);
	printf("是这年的第%d天\n",s);
 } 

  

运行结果

 

 

问题:这个程序相对其他几个还是挺简单的,一遍过。

 

5.实验练习:7.3.3

问题描述:

编写 程序,从键盘输入一个字符串,判断其是否为回文数。

流程图

 

 

实验代码

#include<stdio.h>
#include<string.h>
#define N 40
main()
{
	char str[N],ch='Y';
	int i,len;
	printf("Input a string:");
	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是回文",str);
	else
	printf("%s不是回文",str);	
}

  

运行结果

 

 

问题:这个程序,看错了书上的代码,将 if (str[i]!=str[len-1-i])  看成 if (str[i]==str[len-1-i])  这个,然后结果就一直相反,还是要细心点,才不会犯这种低级错误。

三、实验小结

这次的实验课确实比之前的难度大一点,但是静下来,其实也就那么回事,在编写代码的时候,可能会碰到代码没错,但就是运行不出来结果,这个时候心态一定要平静下来,仔细的看自己所编写的代码。另外就是要熟悉书本上的知识点,不要碰到书上的还要临时百度。

 

posted @ 2019-05-30 21:56  方缙1024  阅读(429)  评论(0编辑  收藏  举报