第七章 数组实验

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("随机产生十个整数:\n");
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("\n");
31     sort1(a,10);
32     printf("排序后的十个整数:\n");
33     for(i=0;i<10;i++)
34     printf(" %d",a[i]);
35     printf("\n");
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个整数:\n");
29     for(i=0;i<10;i++)
30     {
31         a[i]=rand()%100;
32         printf("%d ",a[i]);
33     }
34     printf("\n");
35     sort2(a,i);
36     printf("排序后的结果:\n");
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("请输入杨辉三角的行数:\n");
 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("\n");
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天\n",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("\n");
13     printf("字符串的长度为%d",len);
14     printf("\n");
15     printf("\n");
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是一个回文数\n",str);
26     else
27     printf("%s不是一个回文数",str);
28 }

3运行结果:

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

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

posted @ 2019-06-02 18:06  钟意你啊  阅读(245)  评论(0编辑  收藏  举报