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

    C程序设计实验报告

    实验练习:

      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、实验练习:

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

    2实验代码:

     1 #include"stdio.h"
     2 #include"stdlib.h"
     3 #include"time.h"
     4 void sort1(int s[ ],int n)
     5 {
     6     int i,j;
     7     int temp;
     8     for(i=0;i<n-1;i++)
     9     {
    10         for(j=9;j>=i+1;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("随机产生十个整数:
    ");
    26     for(i=0;i<10;i++)
    27     a[i]=rand()%100;
    28     for(i=0;i<10;i++)
    29     printf(" %d",a[i]);
    30     printf("
    ");
    31     sort1(a,10);
    32     printf("排序后的十个整数:
    ");
    33     for(i=0;i<10;i++)
    34     printf(" %d",a[i]);
    35     printf("
    ");
    36 }

    3运行结果:

    4问题分析:

    该开始我并不知道怎样给出随机种子以及调用排序函数,导致程序报错。

    解决办法:通过百度,将srand()改为srand(time(NULL)),将sort1改为sort1(a,10)。srand(time(NULL))是以当前时间为种子,产生随意数。其中,time(NULL)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来出随机数。

    实验练习 2 

    1、简单问题描述

    写一个函数,对用随机函数产生的10个整数按从小到大的顺序排序(升序,选择排序实现)。程序流程图如下所示:

    2、实验代码

     1 #include"stdio.h"
     2 #include"stdlib.h"
     3 #include"time.h".
     4 void sort2(int s[],int n)
     5 {
     6     int i,j,k;
     7     int temp;
     8     for(i=0;i<n-1;i++)
     9     {
    10         k=i;
    11         for(j=i+1;j<=n-1;j++)/*用于排序内的循环*/
    12         {
    13             if(s[j]<s[k])
    14             k=j;
    15         }
    16         if(k!=i)
    17         {
    18             temp=s[k];/*利用中间变量完成两数组元素的交换*/
    19             s[k]=s[i];
    20             s[i]=temp;
    21         }
    22     }
    23 }
    24 main()
    25 {
    26     int i,a[10];
    27     srand(time(NULL));/*给出随机种子*/
    28     printf("随机产生10个整数:
    ");
    29     for(i=0;i<10;i++)
    30     {
    31         a[i]=rand()%100;
    32         printf("%d ",a[i]);
    33     }
    34     printf("
    ");
    35     sort2(a,i);
    36     printf("排序后的结果:
    ");
    37     for(i=0;i<10;i++)/*输出排序后的结果*/
    38     printf("%d ",a[i]); 
    39 }

    3运行结果:

    4问题分析:此题与第一个程序差别不大。

    实验练习 3

    1、简单问题描述

    编写程序,从键盘输入行数,输出指定行数的杨辉三角形。程序流程图如下所示:

    2、实验代码

     1 #include"stdio.h"
     2 main()
     3 {
     4     int a[50][50],i,j,n;
     5     printf("请输入杨辉三角的行数:
    ");
     6     scanf("%d",&n);
     7     for(i=1;i<=n;i++)
     8     {
     9         a[i][i]=1;
    10         a[i][1]=1;
    11     }
    12     for(i=3;i<=n;i++)
    13     {
    14         for(j=2;j<=i-1;j++)
    15         {
    16             a[i][j]=a[i-1][j-1]+a[i-1][j];
    17         }
    18     }
    19     for(i=1;i<=n;i++)
    20     {
    21         for(j=1;j<=i;j++)
    22         printf("%6d",a[i][j]);
    23         printf("
    ");
    24     }
    25     
    26 
    27         
    28 }

    3运行结果:

    4问题分析:这个程序我觉得有点难,我做了三遍,因为前面的几行需要特别注意。

    实验练习 4

    1、简单问题描述

    编写程序,从键盘分别输入年、月、日,计算出该天是这年中的第几天。程序流程图如下所示:

    2、实验代码

     1 #include"stdio.h"
     2 int day_tab[2][13]={
     3     {0,31,28,31,30,31,30,31,31,30,31,30,31},
     4     {0,31,29,31,30,31,30,31,31,30,31,30,31}};
     5     int day_year(int y,int m,int d)
     6     {
     7         int i,j,s=0;
     8         if(y%4==0&&y%100!=0)
     9         i=1;
    10         else i=0;
    11         for(j=1;j<m;j++)
    12         {
    13             s=s+day_tab[i][j];
    14         }
    15         s=s+d;
    16         return s;
    17     }
    18 main()
    19 {
    20     int y,m,d;
    21     printf("please input year_month_day:");
    22     scanf("%d%d%d",&y,&m,&d);
    23     printf("是这年的第%d天
    ",day_year(y,m,d));
    24 }

    3运行结果:

    4问题分析:此处的return s不能省去,同时参数需要在函数中用到。

    实验练习 5

    1、简单问题描述

    编写程序,从键盘输入·一个字符,判断其是不是“回文数”,程序流程图如下所示:

    2、实验代码

     1 #include"stdio.h"
     2 #include"string.h"
     3 #define N 40
     4 main()
     5 {
     6     char str[N],ch='Y';/*ch为一个标记位,可以为别的/ 
     7     int i;
     8     int len;
     9     printf("Input a string:");
    10     scanf("%s",&str);
    11     len=strlen(str);
    12     printf("
    ");
    13     printf("字符串的长度为%d",len);
    14     printf("
    ");
    15     printf("
    ");
    16     for(i=0;i<=len/2;i++)/*比较一半就可以,也可以全部/ 
    17     {
    18         if(str[i]!=str[len-1-i])
    19         {
    20           ch='N';
    21           break;
    22         }
    23     }
    24     if(ch=='Y')
    25     printf("%s是一个回文数
    ",str);
    26     else
    27     printf("%s不是一个回文数",str);
    28 }

    3运行结果:

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

    实验小结:本次实验主要针对数组的使用,以及函数的使用,需要慢慢了解程序,然后步步紧逼,得出答案。

  • 相关阅读:
    iOS开发UI篇—CAlayer简介
    iOS开发UI篇—ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
    录屏专家
    加载Gif图片方法
    制作酸奶方法
    UITabBar小红点(适配iPad)
    那些著名或非著名的iOS面试题-后编
    iOS学习资源
    实用的Mac软件
    安装iOS企业包流程
  • 原文地址:https://www.cnblogs.com/cyp312/p/10963706.html
Copyright © 2011-2022 走看看