C语言数组题目汇

文章详细介绍了C语言中一维数组的库函数strlen和sizeof的用法,包括数组下标的访问,以及如何通过循环遍历数组。同时,讲解了二维数组的不同打印方式,并给出了冒泡排序的实现示例。此外,还讨论了数组名的特殊性及其在内存中的表示。
摘要由CSDN通过智能技术生成

一维数组题目汇

1数组常用的库函数和操作符strlen和sizeof

代码一

int main()
{
	int arr[] = { 1,2,3 };//不完全初始化
	char arr2[4] = { 'a',98 };
	char arr3[4] = "ab";
	char arr4[] = "abshsh";
	printf("%d\n", sizeof(arr4));
	printf("%d\n", strlen(arr4));
	return 0;
}

代码二


int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a','b','c' };
	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));//其中的arr2中只有三个字符串'a','b','c'里面没有\0
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));//15是乱码了
	return 0;
}

补充说明:sizeof计算arr4所占空间的大小,7个元素-char 7*1=7,strlen求字符串的长度,当到\0时就停止了,求的是’\0’之前的字符串的个数,arr3中里面有三个字符ab还有一个\0,strlen和sizeof没什么关系
strlen是求字符串长度的-只能针对字符串求长度-库函数-使用时引用头文件
sizeof 计算变量,数组,类型的额大小-单位是字符-操作符

2.数组下标访问arr

2.1.基本数组访问方法

int main()
{
	char arr[] = "abcdef";
	printf("%c\n", arr[3]);
	return 0;
}

2.2利用循环进行全部数组访问

方法一

int main()
{
	char arr[] = "abcdef";
	int i = 0;
	for (i = 0;i < 6;i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

方法二

int main()
{
	char arr[] = "abcdef";
	int i = 0;
	int len = strlen(arr);
	for (i = 0;i < len;i++)
	//for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

补充说明 //for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数

方法三

int main()
{

	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);//下标访问打印字符
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

方法四打印地址,利用地址访问

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("&arr[%d]=%p\n", i, &arr[i]);
	}
	return 0;
}

补充说明:%d对应的是i

二维数组题目汇

1.不同的方式打印二维数组

1.1利用下标的方式

#include<stdio.h>
int main()
{
	int arr[3][4] = { {1,2,3},{4,5} };
	//1 2 3 4
	//4 5 0 0
	//0 0 0 0
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

1.2利用指针地址的方式

int main()
{
	int arr[3][4] = { {1,2,3},{4,5} };
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}//与打印一维数组一样

2.数组作为函数参数-将一个整形数组排序(冒泡排序)

2.1什么是冒泡排序

在这里插入图片描述

补充说明:将一个整形数组排序
冒泡排序:相邻两个元素之间进行计较排序
10个元素9趟,变成9个元素8趟,每一趟就是相邻两个元素进行比较交换

2.2冒泡排序的举例

对于9,8,7,6,5,4,3,2,1,0进行升降排序

#include<stdio.h>
void bubble_sort(int arr[],int sz)//注意哦sz不能在函数中计算
{
	//确定冒泡排序的趟数,n个元素有n-1个趟数
	int i = 0;
	for (i = 0;i < sz - 1;i++)
	{
		//每一趟冒泡排序
		int j = 0;
		for (j = 0;j < sz -1- i;j++)//sz-i=可以知道不同的趟数
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}

}
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//对arr进行排序,排成升序
	bubble_sort(arr, sz);//冒泡排序函数
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

还有另一种方法就是 int flag = 1;假设这一趟要排序的数据已经有序//这是一个状态的定义,如果为一则不用再冒泡排序了

void bubble_sort(int arr[], int sz)
{
	int i = 0;
	for (i = 0;i < sz - 1;i++)
	{
		int flag = 1;
		每一趟冒泡排序
		int j = 0;
		for (j = 0;j < sz - 1 - i;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				flag = 0;//本趟排列的数据其实不完全有序
			}
		}
		if (flag == 1)
		{
         break;
		}
	}
}

补充说明:1.break只能在for和Switch中使用,在循环语句中使用,在这里不是作用于if语句,而是在这个条件满足的条件下怎样

三数组名介绍

1.什么是数组名

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5 };
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%d\n", *arr);
	return 0;
}

补充说明:从计算结果可知:数组名就是首元素的地址

2数组名特殊的例外

1.sizeof(数组名)-数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名,数组名代表整个数组,&数组名,取出的是整个数组的地址

来点实际的例子

int main()
{
	int arr[] = { 1,2,3,4,5 };
	//例子1234455
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr);
	printf("%p\n", arr+1);
	printf("%p\n", &arr[0]+1);
	printf("%p\n", &arr + 1);

补充说明;arr,&arr[0]取的是首元素的地址1,下标为0的为首元素
&arr-数组的地址和数组首元素的地址是一样的,但代表的意义不一样,有什么不一样呢?可以参考后面三个打印的结果明显看出,地址的增加的数目不同。一个是单个,一个是整体。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
C语言数组题目及答案 题目:求一个整型数组中的最大值和最小值,并计算平均值。 解答:可以通过遍历整型数组来求解最大值、最小值和平均值。 首先,定义一个整型数组,并赋值。假设数组名为arr,长度为n。 然后,初始化最大值和最小值为数组中的第一个元素arr[0],并初始化累加和sum为0。 接下来,使用for循环从数组的第二个元素(arr[1])开始遍历数组: - 如果当前元素arr[i]大于最大值max,则更新最大值为arr[i]; - 如果当前元素arr[i]小于最小值min,则更新最小值为arr[i]; - 将当前元素arr[i]累加到sum中。 循环结束后,最大值、最小值和sum的值就得到了。 最后,通过除以n求得数组的平均值avg,即avg = sum / n。 代码示例: #include <stdio.h> int main() { int arr[] = {5, 2, 8, 1, 9}; // 定义整型数组并赋值 int n = sizeof(arr) / sizeof(arr[0]); // 数组长度 int max = arr[0]; // 初始化最大值 int min = arr[0]; // 初始化最小值 int sum = 0; // 初始化累加和 float avg = 0; // 初始化平均值 for (int i = 1; i < n; i++) { if (arr[i] > max) { max = arr[i]; // 更新最大值 } if (arr[i] < min) { min = arr[i]; // 更新最小值 } sum += arr[i]; // 累加 } avg = (float)sum / n; // 计算平均值 printf("最大值:%d\n", max); printf("最小值:%d\n", min); printf("平均值:%f\n", avg); return 0; } 运行以上代码,输出结果为: 最大值:9 最小值:1 平均值:5.000000 这样,我们就可以通过遍历数组来求解最大值、最小值和平均值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直爱莲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值