zoukankan      html  css  js  c++  java
  • 第七章 数组实验

    C语言设计实验报告

    试验项目:

    1、一维数组的运用

    2、二维数组的应用

    3、字符数组的应用

    姓名:李小玲  实验地点:514教室  实验时间:2019.5.29

    一、实验目的与要求

    7.3.1一维数组的运用

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

    1.定义一个一维数组,其大小为10,即它能存放10个数据。

    2.使用循环语句,利用随机函数产生10个随机整数存放在数组中。

    3.编写排序函数sort 1()。

    4.使用循环语句,将排好序的10个数依次输出。

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

    实验3:输出指定函数的杨辉三角

    1.怎样定义和使用二维数组。

    2.怎样用循环进行二维数组中值的计算。

    3.使用循环依次输出二维数组中的元素(注意换行);

    4.用if语句根据条件判断某个字符是否是大写字母。

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

    1.使用scanf()函数输入年、月、日。

    2.使用一个二维数组存放闰年和非闰年的每个月的天数。

    3.使用逻辑表达式判断某年是否是闰年。

    4.使用变量day对前几个月的天数进行累加。

    实验5:判断某一字符串是否为回文数

    1.用scanf()函数,从键盘上输入一个字符串存入字符数组中。

    2.求出该字符的长度。

    3.用for循环依次比较,循环的终值为长度的一半。

    4.设置一个标识符ch,初值为‘Y’,若某字符对不相等,将其设置为‘N’,输出该字符串是否是回文数。

    二、实验内容

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

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

    2.实验代码,流程图,效果图:

    /*ex7-1.c*/
    #include "stdio.h"
    #include "stdlib.h"
    #include"time.h"
    void sort1(int s[ ],int n)
    {
        int i,j,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个整数:
    ");
        for(i=0;i<10;i++) 
             {
                a[i]=rand()%100;
                printf("%d ",a[i]);
             } 
        
    
        printf(" 
    ");
        sort1(a,i);
        printf("输出排序后的十个整数:
    ");
        for(i=0;i<10;i++)
        printf("%d ",a[i]);
        
        }

    3.分析:第一个实验我做了超级久,首先的话是不知道怎么产生随机数,后面看了课本上的才出来的;再就是刚开始我写的时候没有特别注意在每个for的时候,要把它的包含内容用花括号括起来,比如说:这个就是我没有用花括号把for里面的内容括起来,所以在产生整数的时候他直接输出的是空格,而不是十个数字(错误示例)后我会多注意for里面的内容要括号起来。

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

    1.问题的简单描述:对随机产生的10个随机整数从大到小的顺序排列。

    2.实验代码,流程图,效果图:

    /*ex7-2.c*/
    #include "stdio.h"
    #include "stdlib.h"
    #include"time.h"
    void sort2(int s[ ],int n)
    {
        int i,j,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个整数:
    ");
        for(i=0;i<10;i++) 
             {
                a[i]=rand()%100;
                printf("%d ",a[i]);
             } 
        
        printf("
    ");
        sort2(a,10);
        printf("输出排序后的十个整数:
    ");
        for(i=0;i<10;i++)
        printf("%d ",a[i]);
        
    }

    3.分析:这个实验跟第一个差不多一样,不同就是采用的是选择排序法,第一个的问题解决了,第二个就不会很难了。

    实验3:输出指定函数的杨辉三角

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

    2.实验代码,流程图,效果图:

    /*ex7-3.c*/
    #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;  //*第一列全为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++)  //*第i行的数字个数为i个*//
        
                {
    printf(
    "%5d",a[i][j]);
                }
    printf("
    "); 
    }

    }

    3.分析:这个杨辉三角,重要的是看懂它的规律,它一开始就定下了每一行的数字都是1;然后每个数字等于上一行的左右两个数字之和,这个在运算过程中也有示例;最后,我还有一个问题就是为什么它i,j不能是从0 开始的,我想了i,j分别代表行列,是从一开始的,但是我试了下0 的时候,感觉又说不通,数组不是从0开始的么?(这个是从0 开始的运行结果)

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

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

    2.实验代码,流程图,效果图:

     /*ex7-4.c*/
     #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
         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));
         
     }

    3.分析:刚开始的时候,我不会写统计天数函数的头部,其实就是函数的定义,然后判断是否是闰年的时候,我用的是 i 判断,但是要判断的是year这个变量,所以不行;再就是注意输出时候的格式,仔细看流程图。

    实验5:判断某一字符串是否为回文数

    1.问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否是回文数。

    2.实验代码,流程图,效果图:

     /*ex7-5.c*/
     #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++)  //*比较一半的len*//
        if(str[i]!=str[len-1-i])  //第一个数与最后一个相比*//
        {
            ch='Y';
            break;
        }
        if(ch=='Y')
        printf("%s是一个回文
    ",str);
        else
            printf("%s不是一个回文
    ",str);
     } 

    3.分析:回文数是指正读反读都一样的数字,重点就是,需要比较一半的len就可以了和怎么去比,程序是用第一个数与最后一个相比再以此类推直到len/2的时候,刚开始第一下的时候我没有看懂for循环语句的头部是什么,后面根据流程图捋捋思路,慢慢看也就懂了。

    三、实验小结

        这次的五个实验,我觉得对我来说还是挺有难度的,就比如刚开始时候的冒泡排序法,我对于内外循环这两个问题就是没弄好,后面我会多注意花括号的使用,并且 在重要的地方加注释;再就是杨辉三角,我刚开始的时候没有看懂流程图里面=3,j=2这个是干什么用的,后面我查了下杨辉三角的定义,就能理解了,所以在做题之前,要看懂原理,比如说,冒泡排序法是什么意思,杨辉三角的规律和回门数的规律,不然的话,我自己光看流程提很难看懂;再就是定义,就说要输出天数的那题,我刚看到要我写统计天数函数头部的时候我就有点懵逼,一下没反应过来是要定义,所以我要多熟悉课本;当然也了解了回门数,杨辉三角等等,还是有收获的,并且我开始会注释一点重要的部分了,因为发现,就算是自己写的代码,现在拿过来看,也会一下没反应过来,所以就是注释的重要性了。

  • 相关阅读:
    继承人人前端笔试题
    【转】ASP.NET应用程序生命周期趣谈
    C#中正则表达式的高级应用
    使用C#导入导出数据到Excel
    Server.Transfer详细解释
    防止刷新重复post提交
    程序只运行一次的方法
    注释很全的抽象工厂(没用简单工厂优化)
    利用反射动态调用类成员C#
    编程经历的一些思考
  • 原文地址:https://www.cnblogs.com/backy2/p/10957882.html
Copyright © 2011-2022 走看看