数组实验
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 }
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 }
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 }
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 }
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 }
3、问题分析:在C语言里等于是“==”,而不是“=”,“=”是赋值。
三、实验小结(在本次实验中收获与不足)
本次实验,在课堂上没有全部完成,主要是实验中的一些知识不懂,前面一些所学的遗忘了,需要去翻书和百度,还不懂的还要去问同学,需要多对之前的知识进行复习和巩固,加强记忆。