C语言基础学习(2)

本文主要介绍C语言中的数组和函数。详细讲解了一维数组的特性,包括数组长度、内存存储、初始化规则以及数组地址的概念。此外,还提到了数组地址与指针的关系,并给出了初始化数组的例子。文章末尾提出了两个练习题,分别是冒泡法排序和报数游戏,鼓励读者通过实践来加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数组和函数

1、一维数组

  • 数组的长度是一定是确定的。

  • 数组在内存里连续存储。

  • 定义一个数组啊a[10],那么
    a[0] 一定存储在低地址,a[9] 一定存储在高地址。

  • 未初始化的局部变量是垃圾值,而未初始化的全局变量是0.

  • 可以不指定数组的长度,但一定要初始化。

  • int a[10]
    其中a不仅表示数组名,还表示数组首元素地址,与&a[0]一样。

  • &a 表示数组的地址

  • 虽然a和&a值是一样的,但是意义不同,a + 1 :表示下一个元素的地址,而&a + 1表示下一个数组的地址。

  • 在定义数组时对数组元素赋以初值。
    例如:int a[10]={0,1,2,3,4,5,6,7,8,9};

  • 可以只给一部分元素赋值。例如:
    int a[10]={0,1,2,3,4};

  • 定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。

  • 如果想使一个数组中全部元素值为0,可以写成:
    int a[10]={0,0,0,0,0,0,0,0,0,0};
    或int a[10]={0};
    不能写成:int a[10]={0*10};
    2、练习
    (1)冒泡法排序:

#include <stdio.h>

int main()
{
	int i, j, tmp;
	int a[5] = {0};

	printf("please input 5 number:\n");
	for (i = 0; i < 5; i++)
		{
			scanf("%d", &a[i]);
		}

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4-i; j++)
		{
			if (a[j] > a[j + 1])
			{
				tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}
	
	for (i = 0; i < 5; i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}

(2)有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int n, i, temp;
	int a[1000] = {0};
	int count = 0;

	printf("输入人数:");
	scanf("%d",&n);

	if (n > 1000)
	{
		printf("ERROR!\n");
		exit(1);
	}

	temp = n;
	for(i = 0; i < n; i++)
	{
		a[i] = i + 1;
	}

	i = 0;
	while(n > 1)
	{
		if(a[i] != 0)
		{
			count++;
		}
		if(count == 3)
		{
			a[i] = 0;
			count = 0;
			n--;
		}
		i++;
		if(i == temp)
		{
			i = 0;
		}
	}
	for (i = 0; i < temp; i++)
	{
		if (a[i] != 0)
		{
			printf("余下的为:%d号\n",a[i]);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值