【C语言】数组练习题分享
好久没记录(氵)博客了,今天记录一下昨天学习的数组练习题中的内容
数组练习题
[TOC]
昨天学习的练习题挺多的,下面只记录了几个我个人认为比较重要和典型的内容
(1)错误的引用数组
题目:
1 | int arr[10]={0}; |
下面错误的引用方式是:
A. arr[0]=1 B.arr[0]=5*2 C. arr[10]=2 D.arr[1]=arr[2]*arr[0]
arr[10]代表数组中有10个元素,但是arr[10]的引用是下标,指第11个元素
这超出了数组10个元素的范围
答案是 C
(2)数组中的逗号表达式
请问以下代码输出的结果是什么?
1 |
|
首先,arr数组中的每个元素都是一个整型元素,占用的字节是4个bit位
所以sizeof计算数组中的元素个数,将它们所占空间相加
- 其中逗号表达式(3,4) —–> 只产生一个结果,4
以防万一,这里提一下逗号表达式的概念
逗号表达式
逗号表达式中的内容可以是数字,也可以是表达式
1 |
|
这个代码的结果是1
运算过程如下
- c=1
- a=c+3=1+3=4
- b=a-4=4-4=0
- c+=b —-> c=c+b=1+0=1
逗号表达式会从左到右依次计算里面的每个表达式
输出的结果是逗号表达式中最后一个表达式的结果
所以上面数组中(3,4)这个逗号表达式产生的结果是4
printf输出的结果是16(4个元素)
(3)数组中字符串和字符元素的区别
1 | int arr1[]={"abcdef"}; |
- 数组arr1和arr2等价 ×
一个是字符串,一个是字符元素,它们的含义是不同的
- 数组arr1和arr2的长度相同 ×
这两个的长度实际上是不同的
因为“abcdef”这个字符串的后面,是有一个字符串结束标志\0的
- 数组arr1的长度大于arr2的长度 √
(这里我可能有错的地方,还请dalao无情指正)
(4)自定义函数与数组的简单练习题
题目如下
创建一个整形数组,实现以下操作
1.实现函数init()初始化数组为全0
2.实现print()打印数组中的每个元素
3.实现reverse()函数完成数组元素的逆置
前两个自定义函数的实现形式非常相似
我们只需要用一个for循环,利用i依次访问数组中的每个元素,将它们打印出来或者赋值为0实现初始化
1 | void print(int arr[], int sz)//打印数组中的每个元素 |
这里需要注意的一个点是sz(数组元素个数)我们必须在主函数main中计算,不能在自定义函数中计算
因为传过来的数组是首元素的地址,这时候用sizeof计算的数组元素长度是不准确的
主函数main如下
1 | int main() |
reverse函数的基本理念和另外两个函数其实是相似的
这里我们依旧会用到“空盒子”tmp来完成我们的交换
同时我们需要使用循环来确认什么时候停止交换
即左右两个数组元素的下标一样的时候(或者值一样)就停止交换
1 | void reverse(int arr[], int sz)//数组元素的逆置 |
当我们进行两个数组之间的元素调换的时候,也需要用for循环+tmp空盒子的方式一一交换每个数组对应下标的元素
- 前提,两个数组的元素个数相同
下面这种代码是错误的
1 | int tmp=arr1 |
实现形式和上面打印和初始化的自定义函数的思路是一样的,这里不再赘述!
如果本博客对你有帮助,还请点赞支持一下!这是对我的最大鼓励