C语言数组实验报告
C语言数组实验报告
姓名:胡熙国 实验地点:一教524 实验时间:2021-6-9
一、实验目的与要求
- 掌握一维和多维数组的定义和数组元素的使用方法。
- 了解一维和多维数组初始化的方法。
- 学习一维和多维数组的基本方法。
- 掌握C语言提供的对字符串进行处理的基本函数库。
二、实验内容
实验一
1.问题描述
- 写一个函数,对用随机函数产生的10个数按从小到大的顺序排序,用冒泡排序做。
2.试验代码
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void pao(int s[], int n)
{
int i, j;
int temp;
for (i = 0; i < n - 1; i++)
{
for (j = 9; j >= i + 1; j--)
{
if (s[j] < s[j - 1])
{
temp = s[j];
s[j] = s[j - 1];
s[j - 1] = temp;
}
}
}
}
int main()
{
int i, a[10];
srand(time(NULL));
printf("随机产生的10个整数\n");
for (i = 0; i < 10; i++)
{
a[i] = rand() % 100;
printf("%d", a[i]);
printf(" ");
}
pao(a, 10);
printf("\n");
printf("排序后的数字\n");
for (i = 0; i < 10; i++)
{
printf("%d", a[i]);
printf(" ");
}
}
3.效果截图
4.问题分析
- srand(time(NULL)); 产生随机数要加上 #include "time.h"头文件
- a[i] = rand() % 100; 可以使产生的随机数都在100以内
- 冒泡排序的原理图
实验二
1.问题描述
- 写一个函数,对用随机函数产生的10个数按从小到大的顺序排序,用选择排序排序做。
2.试验代码
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void sort2(int s[], int n)
{
int i, j, k, temp;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j <= n - 1; j++)
{
if (s[j] < s[k])
{
k = j;
}
}
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;
printf("%d", a[i]);
printf(" ");
}
printf("\n");
sort2(a, 10);
printf("排序后的数字\n");
for (i = 0; i < 10; i++)
{
printf("%d", a[i]);
printf(" ");
}
}
3.效果截图
4.问题分析
- 选择排序的原理以升序为例,简单说就是首先把第一个数和其余的数依次进行比较,得到最小的那一个把它和第一个换位置,然后再从第二个数开始比较,以此类推,最后得到结果。
- 选择排序的原理图
实验三
1.问题描述
- 输出指定行数的杨辉三角。
2.试验代码
#include <stdio.h>
int main()
{
int a[50][50], i, j, n;
printf("请输入杨辉三角的行数:\n");
scanf("%d", &n);
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("%4d", a[i][j]);
}
printf("\n");
}
}
3.效果截图
4.问题分析
- 先用一个双重for循环将杨辉三角里面数之间的关系确定,并且储存到定义好的二维数组里,最后在将数组遍历一下打印出三角形。
实验四
1.问题描述
- 输入年月日,计算改天是这年的第几天。
2.试验代码
#include <stdio.h>
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 < m; j++)
{
s = s + day_tab[i][j];
}
s = s + d;
return s;
}
int main()
{
int y, m, d;
printf("请输入年,月,日:");
scanf("%d,%d,%d", &y, &m, &d);
printf("这是%d年的第%d天\n", y, day_year(y, m, d));
}
3.效果截图
4.问题分析
- 首先定义一个二维数组,分别储存闰年和平年每个月份的天数,再根据输入的年月日将天数累加起来就得到了最终的结果。
实验五
1.问题描述
- 输入一个字符串,判断是否为回文数。
2.试验代码
#include <stdio.h>
#include <string.h>
#define N 40
int main()
{
char str[N], ch = 'Y';
int i, len;
printf("请输入一个字符串");
scanf("%s", &str);
len = strlen(str);
for (i = 0; i <= len / 2; i++)
{
if (str[i] != str[len - 1 - i])
{
ch = 'N';
break;
}
}
if (ch == 'Y')
{
printf("%s是回文数\n", str);
}
else
{
printf("不是一个回文数");
}
}
3.效果截图
4.问题分析
- 在for循环的条件时不需要些i<=len,这样写会进行更多的循环,只需要i<=len/2就行。
三、实验小结
- 常见的排序算法 对于常见的排序算法在这里面有详细的介绍
- 在前两个试验里复习到了前面的产生随机数的函数
- 在 string.h 头文件里面有很多的字符串处理函数需要花时间去了解掌握