C语言数组实验报告

C语言数组实验报告


姓名:胡熙国 实验地点:一教524 实验时间:2021-6-9


一、实验目的与要求

  1. 掌握一维和多维数组的定义和数组元素的使用方法。
  2. 了解一维和多维数组初始化的方法。
  3. 学习一维和多维数组的基本方法。
  4. 掌握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.效果截图

image

4.问题分析

  • srand(time(NULL)); 产生随机数要加上 #include "time.h"头文件
  • a[i] = rand() % 100; 可以使产生的随机数都在100以内
  • 冒泡排序的原理图 image

实验二

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.效果截图

image

4.问题分析

  • 选择排序的原理以升序为例,简单说就是首先把第一个数和其余的数依次进行比较,得到最小的那一个把它和第一个换位置,然后再从第二个数开始比较,以此类推,最后得到结果。
  • 选择排序的原理图 image

实验三

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.效果截图

image

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.效果截图

image

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.效果截图

image

4.问题分析

  • 在for循环的条件时不需要些i<=len,这样写会进行更多的循环,只需要i<=len/2就行。

三、实验小结

  • 在前两个试验里复习到了前面的产生随机数的函数
  • 在 string.h 头文件里面有很多的字符串处理函数需要花时间去了解掌握
posted @ 2021-06-15 20:05  huxiguo  阅读(1381)  评论(0编辑  收藏  举报
https://blog-static.cnblogs.com/files/xiaokang01/js.js 这是添加的文件的链接 color="2, 215, 215" 粒子的颜色设置 opacity="10" 粒子的透明度 count="17500" 粒子的个数