C语言程序设计实验报告(6)

 

------------恢复内容开始------------

C程序设计实验报告六

实验项目:7.3.1-1冒泡排序法排序;7.3.1-2选择排序法排序;7.3.2杨辉三角;7.3.2-2计算天数;7.3.3 判断回文数

姓名:蔡鹏

实验地点:家中

实验时间:2020.5.7--2020.5.19

一、实验目的与要求:

1、巩固学生对一维数组这种数据结构的理解,增强其程序设计能力

2、巩固学生对二维数组这种数据结构的理解

二、实验内容

1、实验练习:7.3.1-1 冒泡排序法排序

1问题的简单描述:编写程序,利用随机函数产生10 个整数,并按升序排列输出。

2实验代码:

#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int sort1(int s[],int n)
{
     int i,j;
     int temp;
     for(i=0;i<9;i++)
     {
         for(j=0;j<10-i;j++)
         {
             if(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;/*限制随机数是100以内*/ 
     }
     for(i=0;i<10;i++)
     printf("%d  ",a[i]);
     printf("\n");
     sort1(a,i);
     printf("排序后的结果:\n");
     for(i=0;i<10;i++)
     printf("%d  ",a[i]);
}

3问题分析:刚开始不太会用数组,以及产生随机数不知道用啥函数。


 


2、实验练习:7.3.1-2 选择排序法排序

1问题的简单描述:编写程序,利用随机函数产生10 个整数,并按升序排列输出。

2实验代码:

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

3问题分析:这个程序是利用选择排序法对产生的随机数组进行排序,大致的做法和前面冒泡排序法的是差不多的,仅需修改一下排序函数即可。


 


3、实验练习:7.3.2-1 杨辉三角

1问题的简单描述:编写程序,从键盘输人行数,输出指定行数的杨辉三角形。

2实验代码:

#include"stdio.h"
main()
{
    int a[50][50],i,j,n;
    printf("请输入杨辉三角形的行数:");
    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("%5d",a[i][j]);        
        printf("\n");  
    }
        printf("\n");
  
}

3问题分析:这题是一个二维数组的运用,一开始没搞清楚每个循环中每个语句的前后顺序,后面一直看着流程图不断地调整顺序才调好。



 4、实验练习:7.3.2-2 计算天数

1问题的简单描述:编写程序,从键盘分别输入年、月、日,计算出该天是这年中的第几天。

2实验代码:

#include 
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)
    {
        s=s+day_tab[i][j];
    }
    s=s+day;
    return s;
}
main()
{
    int y,m,d,n;
    printf("请输入年、月、日:");
    scanf("%d%d%d",&y,&m,&d);
    n=day_year(y,m,d);
    printf("是这年的第%d天\n",n);
}

3,问题分析: 无



 

5、实验练习:7.3.3 判断回文数

1问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否为回文数。(回文数是从左至右和从右至左读起来都是一样的字符串)

2实验代码:

#include 
#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;i2;i++)
    {
        if(str[i]!=str[len-i-1])
        {
            ch='n';
            break;
        }
     }
     if(ch=='y')
     printf("%s是一个回文数\n",str);
     else
     printf("%s不是回文数",str);
}

3问题分析:判断回文数,需要从开头到最后和最后到开头一样,即str[i]与str[lem-1-i]一样,可以比较一半也可以比较全部。



 

实验小结:本次实验主要用到了数组,在实验中对数组的运用还不是特别熟练,尤其再用到二维数组时做起来有点吃力,其次在实验中还运用了许多的函数,许多还是后来查找才知道用的,srand函数的运用,以及for语句的运用结合到一起,难度有了很大的提升,在学习数组的内容时还需要多多练习才能够更熟练的掌握。


 

 

------------恢复内容结束------------

你可能感兴趣的:(C语言程序设计实验报告(6))