C语言程序实验报告
姓名:邹琼
实验地点:家
实验时间:2020年5月7日
实验项目:
(1)7.3.1实验练习1
(2)7.3.1实验练习2
(3)7.3.2实验练习1
(4)7.3.2实验练习2
(5)7.3.3
一、实验目的
(1)掌握一维和多维数组的定义和数组元素的引用方法
(2)了解一维和多维数组初始化的方法
(3)学习一维和多维数组的基本算法
(4)掌握字符数组的定义、初始化方法及其元素的引用方法
(5)掌握C语言提供的对字符串进行处理的基本库函数
二、实验内容
(1)7.3.1实验练习1:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排列(冒泡排序)
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
void sort1(int s[],int n)
{
int i,j;
int temp;
for(i=1;i<=9;i++)
for(j=9;j>=0;j--)
if(s[j]
3.问题的简单描述:①交换数组元素;②随机数的产生;③排序函数的调用;
4.问题分析:①定义中间变量来实现数组元素的交换;②通过srand(time(NULL));printf("随机产生10个整数:\n");
来给出10个100以内的整数(a[i]=rand()%100;)
,rand是伪随机函数;③编写排序函数sort1(),再使用循环语句将排好序的10个数依次输出;
5.实验结果
(2)7.3.1实验练习2:写一个函数,对用随机函数产生的10个整数按从小到大的顺序排列(选择排序)
#include
#include
#include
void sort2(int s[],int n)
{
int i,j,k;
int temp;
for(i=0;i<10;i++)
{
k=i;
for(j=i+1;j<10;j++)
{
if(s[j]n-1)
break;
}
if(k!=i)
{
temp=s[k];
s[k]=s[i];
s[i]=temp;
}
}
}
int main()
{
int i,a[10];
srand(time(NULL));
printf("随机产生10个整数:\n");
for(i=0;i<10;i++)
a[i]=rand()%100;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
sort2(a,0);
printf("排序后的10个整数:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
3.问题的简单描述:①选择排序法;②数组元素交换;
4.问题分析:①选择排序法是每一趟在n-i+1个记录中选取关键字最小
的记录作为有序序列中第i个记录;②利用中间变量(如上);
5.实验结果
(3)7.3.2实验练习1:输出指定函数的杨辉三角
#include
void main()
{
int a[50][50],i,j,n;
printf("请输入杨辉三角的行数:");
scanf("%d",&n);
getchar();
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("%d ",a[i][j]);
printf("\n");
}
}
#include
void main()
{
int a[50][50],i,j,n;
printf("请输入杨辉三角的行数:");
scanf("%d",&n);
getchar();
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<=n-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
5.实验结果
6.问题的简单描述:①二维数组的运用;②杨辉三角的构成;(不太熟悉,做的时候有点问题)③等腰三角形时空格的输出;
7.问题分析:①在二维数组中,i控制行,j控制列,再利用循环语句来输出数列;②杨辉三角由两部分构成,一个是1的部分,另一个是数列的部分,这样看的话,逻辑比较清晰(我一开始写的时候有点迷);③在原有的代码基础上,加上一条循环语句for(j=1;j<=n-i;j++)printf(" ");
来输出空格,从而得到等腰三角形。
(4)7.3.2实验练习2:给定年某月某日,将其转成这一年的第几天并输出
#include
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 y,int m,int d)
{
int i,j,s=0;
if(y%4==0&&y%100!=0||y%400==0)
i=1;
else
i=0;
for(j=1;j
3.问题的简单描述:①二维数组的应用;②是否是闰年的判断;③统计天数函数的头部;
4.问题分析:①使用一个二维数组存放闰年和非闰年的每个月的天数;②使用if语句来进行年份是否是闰年的判断if(y%4==0&&y%100!=0||y%400==0)
,若为闰年,则i=1,反之,i=0;③根据原代码可知,在代码的尾部有一个函数day_year(y,m,d)
,首尾呼应,则定义函数头部为int day_year(int y,int m,int d)
;
5.实验结果
(5)7.3.3字符数组的应用:编写程序,判断某一字符串是不是“回文数”
#include
#include
#define N 40
void main()
{
char str[N],ch='Y';
int i;
int len;
printf("请输入:");
gets(str);
len=(int)strlen(str);
for(i=0;i
3.问题的简单描述:①“回文数”的理解;②求字符串的长度;③对输入的字符串是否是回文数的判断;
4.问题分析:①“回文数”是从左至右和从右至左读起来都是一样的字符串;②使用strlen()函数求出字符串的长度;③利用for循环来依次比较输入的字符串,循环的终值为长度的一半;利用if_else语句来判断字符串该字符串是否为回文数,若是,则输出是回文数;
5.实验结果
三、实验小结
感想:通过这次的实验,发现本章的内容学的也不怎么好,之前的知识点也忘记了好多,还是得要多多复习。
知识点小结:
①计算机产生的随机数有两种
1)伪随机数 通过函数rand()获取;
2)真随机数 通过函数srand()(unsigned seed)获取;
②交换两个变量的值,需要借用第三方变量;
③杨辉三角的构成:由两部分构成,一个是1的部分(外面的框架),另一个是数列的部分(内部,通过 a[i][j]=a[i-1][j-1]+a[i-1][j]
计算);通过i控制行,j控制列来输出该杨辉三角;也可加入一句for(j=1;j<=n-i;j++) printf(" ");
来实现等腰三角形的输出;
④常见判断是否为闰年的条件:y%4==0&&y%100!=0||y%400==0
;
④回文数的判断,利用for循环和if_else语句来逐个比较输出的字符串;字符串的长度通过函数strlen()得出,for循环的终值为len/2;