1. 老司机带你玩转指针和数组!
各位老铁们,大家好!今天咱们来聊聊C语言的第六章——指针和数组。这章可是C语言的重中之重,也是很多同学头疼的地方。别慌,老司机来了!今天就带大家一起玩转指针和数组,让你彻底征服第六章的PTA题目!
咱得先说清楚,什么是指针?简单来说,指针就像是一个地址牌,指向内存中某个位置。它可以用来存储变量的地址,也可以用来操作内存数据。而数组呢,就好比一个房间,里面可以存放各种各样的数据,每个数据都有自己的编号(下标)。
指针和数组看起来好像很复杂,但其实只要掌握了它们的本质,你就会发现它们其实很简单,甚至有点好玩!就比如你想要去某家餐厅吃饭,首先要找到餐厅的地址,然后才能顺利到达。指针就相当于这个地址,而数组就像是一张餐桌,上面摆放着各种美食,每个美食都有它自己的位置。
接下来,咱们就来分析一下浙大版C语言程序设计题目集第六章的PTA题目。老司机带你逐题讲解,让你轻松应对!
第一题:交换两个变量的值
这题可是指针的经典应用,也是C语言中的基本功。题目要求你编写一个函数,用指针交换两个变量的值。
代码示例:
c
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
解释:
1. 函数参数是两个指针变量 a 和 b,分别指向两个待交换的变量的地址。
2. 使用一个临时变量 temp 来存储 a 指向的值。
3. 将 b 指向的值赋给 a 指向的变量。
4. 将 temp 中存储的值(即 a 指向的值)赋给 b 指向的变量。
指针的作用就是让你直接操作内存数据,用指针交换变量值就像是在玩“偷天换日”的游戏,偷偷地把两个变量的值互换。是不是很刺激?
第二题:字符串逆序
这题要求你编写一个函数,将输入的字符串逆序。
代码示例:
c
void reverseString(char str) {
int len = strlen(str);
char temp;
for (int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
解释:
1. 使用 strlen 函数获取字符串的长度。
2. 使用循环遍历字符串的前半部分,每次交换首尾两个字符的值。
3. 循环结束后,字符串就成功逆序了。
这题考验了你对指针和数组的灵活运用。就像把一串珠子倒着串一样,通过指针和数组,你就能轻松地将字符串倒过来。
第三题:寻找数组中的最大值和最小值
这题要求你编写一个函数,在数组中寻找最大值和最小值。
代码示例:
c
void findMaxMin(int arr[], int n, int max, int min) {
max = arr[0];
min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
} else if (arr[i] < min) {
min = arr[i];
解释:
1. 函数参数包括数组 arr、数组大小 n、指向最大值的指针 max 和指向最小值的指针 min。
2. 初始化 max 和 min 指向的值为数组第一个元素的值。
3. 循环遍历数组,比较每个元素的值与 max 和 min 指向的值,更新 max 和 min 指向的值。
这题就相当于在一个房间里寻找最贵的宝物和最便宜的商品。通过指针,你可以方便地找到最大值和最小值,就像拿着一个指南针,迅速找到房间里最值钱和最便宜的东西。
第四题:删除数组中的重复元素
这题要求你编写一个函数,删除数组中的重复元素,并返回删除后的数组长度。
代码示例:
c
int removeDuplicates(int arr[], int n) {
if (n == 0) {
return 0;
int j = 0;
for (int i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
j++;
arr[j] = arr[i];
return j + 1;
解释:
1. 函数参数包括数组 arr 和数组大小 n。
2. 使用 j 指针指向数组中第一个元素。
3. 循环遍历数组,如果当前元素与 j 指向的元素不同,则将当前元素的值赋给 j+1 指向的元素,并将 j 指针向后移动。
4. 返回 j+1,即删除重复元素后的数组长度。
这题就相当于在房间里整理货物,把相同的东西放在一起,然后把重复的东西扔掉。通过指针,你可以方便地遍历数组,找到重复元素并将其删除,就像是一个整理房间的机器人,把房间整理得井井有条。
第五题:数组排序
这题要求你编写一个函数,对数组进行排序。
代码示例:
c
void sortArray(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
解释:
1. 函数参数包括数组 arr 和数组大小 n。
2. 使用两层循环遍历数组,比较相邻两个元素的大小,如果前面的元素大于后面的元素,则交换它们的值。
3. 循环结束后,数组就按照从小到大排序了。
这题就相当于给房间里的家具进行整理,按照大小顺序摆放,让房间变得更加整洁。通过指针,你可以方便地比较和交换数组元素的值,就像是一个整理家具的机器人,把房间整理得井井有条。
表格
| 题目 | 题目描述 | 算法 | 总结 |
|---|---|---|---|
| 交换两个变量的值 | 编写一个函数,用指针交换两个变量的值。 | 指针 | 指针就像一个地址牌,可以用来操作内存数据,用指针交换变量值就像是在玩“偷天换日”的游戏,偷偷地把两个变量的值互换。 |
| 字符串逆序 | 编写一个函数,将输入的字符串逆序。 | 指针 | 指针就像一个工具箱,可以用来操作字符串,将字符串倒过来就像是把一串珠子倒着串一样。 |
| 寻找数组中的最大值和最小值 | 编写一个函数,在数组中寻找最大值和最小值。 | 指针 | 指针就像一个指南针,可以迅速找到房间里最值钱和最便宜的东西。 |
| 删除数组中的重复元素 | 编写一个函数,删除数组中的重复元素,并返回删除后的数组长度。 | 指针 | 指针就像一个整理房间的机器人,可以把房间整理得井井有条。 |
| 数组排序 | 编写一个函数,对数组进行排序。 | 指针 | 指针就像一个整理家具的机器人,可以把房间整理得井井有条。 |
老司机想问你:
你最喜欢C语言中的哪个知识点?你认为指针和数组有哪些有趣的应用场景?
欢迎评论区留言,和老司机一起分享你的学习心得!

还没有评论,来说两句吧...