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

    一、实验项目:

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

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

      7.3.2.1、输出指定行数的杨辉三角

      7.3.2.2、给定某年某月某日,将其装换成这一年的第几天并输出

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

    姓名:李儿龙    实验地点:教学楼514教室     实验时间:5月29日

    二、实验要求和内容:

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

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

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

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

    7.3.2.1、输出指定行数的杨辉三角

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

    7.3.2.2、给定某年某月某日,将其装换成这一年的第几天并输出

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

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

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

    三、实验内容

    1、实验一(7.3.1.1):

    1.问题的简单描述:

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

    2.流程图如下:

     

    2,实验代码:

     1 #include"stdio.h"
     2 #include"stdlib.h"
     3 #include"time.h"
     4 int sort1(int s[],int n)
     5 {
     6     int i,j;
     7     int temp;
     8     for(i=0;i<9;i++)
     9     {
    10         for(j=0;j<10-i;j++)
    11         {
    12             if(s[j]<s[j-1])
    13             {
    14                 temp=s[j];
    15                 s[j]=s[j-1];
    16                 s[j-1]=temp;
    17             }
    18         }    
    19     }
    20 }
    21 main()
    22 {
    23     int i,a[10];
    24     srand(time(NULL));/*给出随机种子*/ 
    25     printf("随机产生10个整数:
    ");
    26     for(i=0;i<10;i++)
    27     {
    28         a[i]=rand()%100;/*限制随机数是100以内*/ 
    29     }
    30     for(i=0;i<10;i++)
    31     printf("%d  ",a[i]);
    32     printf("
    ");
    33     sort1(a,i);
    34     printf("排序后的结果:
    ");
    35     for(i=0;i<10;i++)
    36     printf("%d  ",a[i]);
    37 }

    3、运行结果:

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

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

    2、程序流程图:

     

     3、实验代码:

    #include"stdio.h"
    #include"stdlib.h"
    #include"time.h"
    int 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[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个整数:
    ");
        for(i=0;i<10;i++)
        {
            a[i]=rand()%100;
        }
        for(i=0;i<10;i++)
        printf("%d  ",a[i]);
        printf("
    ");
        sort2(a,10);
        printf("排序后的结果:
    ");
        for(i=0;i<10;i++)
        printf("%d  ",a[i]);
    }

    4、运行结果:

     

    5、问题分析:这里采用选择排序法,选择排序法原理是每一次挑出最小的那个数,将他刚在最前面。与冒泡排序法类似,一个是挑出最大的数往后排,一个是挑出最小的数往前排。

    7.3.2:二维数组的应用

    实验练习1:输出指定行数的杨辉三角形

    1、问题的简单描述:

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

    2、程序流程图:

     

    3代码分析:

    #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("
    ");  
        }
            printf("
    ");
      
    }

    4、运行结果:

    5、问题分析:刚开始只是用%d,总是对不起,然后想起调节字符长度。所以采用%5d;

    实验练习2:给定某年某月某日,将其转化成这一年的第几天并输出

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

    2、程序流程图:

     

    3、实验代码:

    #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,n;
        printf("Input year month day:
    ");
        scanf("%d %d %d",&y,&m,&d);
        n=day_year(y,m,d);
        printf("是这年的第%d天
    ",n);
    }

    4、运行结果:

     

    5、问题分析:

     刚开始把形参于实参搞混了。导致不管怎么调但是i=1,天数是347,然后把year引入闰年的判断就解决了。

    7.3.3、判断某一串字符是不是“回文数”

    1、流程图:

     

    2、实验代码:

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

    3、运行结果:

     

    实验小结:

    1、注意定义的参数字符长度,字符长度会影响到数据的排列。

    2、要注意代入的是形参还是实参,参数类型会直接影响实验结果,而且每次结果相同。

  • 相关阅读:
    《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)
    YII 小模块功能
    Netbeans代码配色主题大搜集
    opensuse 启动巨慢 解决方法 90s多
    opensuse 安装 网易云音乐 rpm netease music
    linux qq rpm deb opensuse
    openSUSE 安装 alien
    第一行代码 Android 第2版
    Android Studio AVD 虚拟机 联网 失败
    docker error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuratio
  • 原文地址:https://www.cnblogs.com/123456l/p/10961182.html
Copyright © 2011-2022 走看看