数组实验

C程序设计实验报告

实验项目:函数和宏定义实验

姓名:罗子健 实验地点:物联网实验室 实验时间:2019年5月29日

一、实验目的与要求

(1)掌握一维和多维数组的定义和数组元素的引用方法。

(2)了解一维和多维数组初始化方法。

(3)学习一维和多维数组的基本算法。

(4)掌握字符数组的定义、初始化方法及其元素的引用方法。

(5)掌握C语言提供的对字符串进行处理的基本库函数。


二、实验内容

7.3.1 一维数组的应用

实验练习1

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

2、实验流程图、代码和结果:

 1 /*ex7_1.c*/
 2 #include"stdio.h"
 3 #include"stdlib.h"
 4 #include"time.h" 
 5 sort1(int s[ ], int n)
 6 {
 7     int i,j;
 8     int temp;/*定义中间(临时)变量*/
 9     for(i=0;i<n-1;i++)/*用于排序的外循环for语句i*/
10         for(j=9;j>=i+1;j--)/*用于排序的外循环for语句j*/
11             if(s[j]<s[j-1]) 
12             {
13                 temp=s[j];
14                 s[j]=s[j-1];
15                 s[j-1]=temp;/*利用中间变量,完成两数组元素的交换*/ 
16             }
17 }    
18 main()
19 {
20     int i, a[10];
21     srand(time(NULL));/*给出随机种子*/
22     printf("随机产生10个整数:\n");
23     for(i=0; i<10; i++)
24     a[i]=rand()%100;/*随机产生10个整数*/
25      for(i=0;i<10;i++)
26      printf("%d  ",a[i]);
27      printf("\n");
28      a[i]=sort1(a,i);/*调用排序函数*/
29      printf("排序后的结果\n");/*提示输出排序后的10个整数*/
30      for(i=0;i<10;i++)/*for循环语句*/
31      printf("%d  ", a[i]); 
32 }
7.3.1实验练习1

3、问题分析:要利用随机函数来产生随机数。

实验练习2

1、问题的简单描述:无。

2、实验流程图、代码和结果:

 1 /*ex7_2.c*/
 2 #include"stdio.h"
 3 #include"stdlib.h"
 4 #include"time.h" 
 5 sort2(int s[ ],int n)
 6 {
 7     int i, j, k;
 8     int temp;/*定义中间(临时)变量*/
 9     for(i=0;i<n-1;i++)/*用于排序的外循环for语句*/
10     {    
11         k=i;/*用临时变量k记下最小数的位置*/
12         for(j=i+1;j<=n-1;j++)/*用于排序的内循环for语句*/
13             if(s[k]>s[j]) 
14                 k=j;/*记下最小数的下标*/     
15             if(k!=i)
16             {
17                 temp=s[k];
18                 s[k]=s[i];
19                 s[i]=temp;/*利用中间变量,完成两数组元素的交换*/
20             }
21     }
22 }
23 main()
24 {
25     int i, a[10];
26     srand(time(NULL));/*给出随机种子*/
27     printf("随机产生10个整数:\n");
28     for(i=0; i<10; i++)
29     a[i]=rand()%100;/*随机产生10个整数*/
30      for(i=0;i<10;i++)
31      printf("%d  ",a[i]);
32      printf("\n");
33      a[i]=sort2(a,i);/*调用排序函数*/
34      printf("排序后的结果\n");/*提示输出排序后的10个整数*/
35      for(i=0;i<10;i++)/*for循环语句*/
36      printf("%d  ", a[i]); 
37 }
7.3.2实验练习2

3、问题分析:无。

7.3.2 二维数组的应用

实验练习1

1、问题的简单描述:编写程序,从键盘输入行数,输出指定行数的杨辉三角形。算法流程图如图所示。

2、实验流程图、代码和结果:

 

 1 /*ex7_3.c*/
 2 #include "stdio.h"
 3 main()
 4 {
 5     int a[50][50],i,j,n;
 6     printf("请输入杨辉三角形的行数:\n");/*提示请输入杨辉三角形行数*/
 7     scanf("%d",&n);/*用scanf()函数输入杨辉三角形行数*/
 8     for(i=1;i<=n;i++)/*用循环计算杨辉三角形各个值*/
 9     {
10         a[i][i]=1;
11         a[i][1]=1;
12     }
13     for(i=3;i<=n;i++)
14     {
15         for(j=2;j<=i-1;j++)
16         {
17             a[i][j]=a[i-1][j-1]+a[i-1][j];
18         }
19     }
20     for(i=1;i<=n;i++)
21     {
22         for(j=1;j<=i;j++)    
23         printf("%2d ",a[i][j]);/*用printf()输出杨辉三角形*/ 
24         printf("\n");
25     }
26     printf("\n");
27 } 
7.3.2实验练习1

3、问题分析:要注意i与j的意思,并且需要利用for循环语句来进行数组位置的排列。

实验练习2

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

2、实验流程图、代码和结果:

 

 

 1 /*ex7_4.c*/
 2 #include "stdio.h"
 3 int day_tab[2][13]={
 4     {0,31,28,31,30,31,30,31,31,30,31,30,31},
 5     {0,31,29,31,30,31,30,31,31,30,31,30,31}};
 6     day_year(int year,int month,int day)/*统计天数函数的头部*/
 7     {    int i, j,s=0;
 8         if(year%100!=0&&year%4==0||year%400==0)
 9             i=1;
10         else
11             i=0;/*判断该年是否是闰年,并将其逻辑值给变量i*/
12         for(j=1;j<month;j++)
13         s=s+day_tab[i][j];/*对天数进行累加*/
14         return s=s+day;/*返回总的天数*/         
15 } 
16 main()
17 {    int y, m, d;
18     printf("Input year_month_day:\n");/*提示输入年、月、日*/
19     scanf("%d %d %d",&y,&m,&d);/*分别输入年、月、日*/
20     printf("是这年的第%d天\n",day_year(y, m, d)); 
21 } 
7.3.2实验练习2

3、问题分析:要注意闰年的判定条件。

7.3.3 字符数组的应用

1、问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否为回文数。算法流程图如图所示。

2、实验流程图、代码和结果:

 

 1 /*ex7_5.c*/
 2 #include "stdio.h"
 3 #include "string.h"
 4 #define N 40
 5 main()
 6 {    char str[N],ch='Y';
 7     int i;
 8     int len;
 9     printf("Input a string:\n");/*提示信息Input a string:*/ 
10     scanf("%s",&str);/*用scanf()函数输入一个字符串*/
11     len=strlen(str);/*求字符串的长度*/
12     for(i=0;i<(len/2);i++)/*for循环语句的头部,终值为len/2*/ 
13     if(str[i]!=str[len-1-i])
14     {    ch='N';/*将标志ch设置为'N'*/
15         break;/*退出循环*/ 
16     }
17     if(ch=='Y')/*if语句,当标志ch为'Y'时*/
18         printf("%s是一个回文数\n",str);
19     else
20         printf("%s不是一个回文数\n",str);/*输出该字符串不是回文数*/ 
21 }
7.3.3

3、问题分析:在C语言里等于是“==”,而不是“=”,“=”是赋值。


三、实验小结(在本次实验中收获与不足)

本次实验,在课堂上没有全部完成,主要是实验中的一些知识不懂,前面一些所学的遗忘了,需要去翻书和百度,还不懂的还要去问同学,需要多对之前的知识进行复习和巩固,加强记忆。

posted @ 2019-06-02 22:31  微风未起  阅读(447)  评论(0编辑  收藏  举报