目录
习题一
从键盘输入十个整数,要求用冒泡法实现从大到小的排列输出
#include<stdio.h>
int main()
{
int num[10];
int i = 0, j = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &num[i]);
}
for(i=0;i<9;i++)
{
for (j = 0; j < 9 - i; j++)
{
if (num[j] > num[j + 1])
{
int t = 0;
t = num[j];
num[j] = num[j + 1];
num[j + 1] = t;
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", num[i]);
}
return 0;
}
以上为冒泡排序(简易版)
解析:
题目要求从键盘输入十个整数,要求用冒泡法实现从大到小的排列输出
1. 代码采用了四个for循环来实现上述要求;
2. 第一个for循环和第四个for循环分别为输入排序前的集合和输出后的集合;
3. 第三个for循环:
集合为十个数,则只需要进行九次循环;
4.第四个for循环:
第三个for循环中每循环一次,则把每次比较出来的最大的数放到后面去;
如图下图所示(以六个数为例):
习题二
将指针作为函数参数:一个数组有 10 个元素{1,8,10,2,-5,0,7,15,4,-5}, 利用指针作为函数参数编程,输出数组中最大和最小的元素值。
#include <stdio.h>
void Question(int* arr)
{
int i, j;
int max = arr[0];
int min = arr[0];
for (i = 0; i < 10; i++)
{
if (max < arr[i])
{
max = arr[i];
}
if (min > arr[i])
{
min = arr[i];
}
}
printf("max=%d min=%d\n", max, min);
}
int main()
{
int arr[10] = {1, 8, 10, 2, -5, 0, 7, 15, 4, -5};
Question(arr);
return 0;
}
利用指针作为函数参数编程,输出数组中最大和最小的元素值。
习题三
练习数组指针作为函数参数:
求 3×4 的二维数组{1,3,5,7,9,11,13,17,19,21,23,25}中的所有元素之和
#include<stdio.h>
//函数指针做参数
int Sum(int (*p)[4],int r,int c)
{
int i = 0, j = 0, sum = 0;
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
sum += *(*(p + i) + j);
}
}
return sum;
}
int main()
{
int num[3][4] = { 1,3,5,7,9,11,13,17,19,21,23,25 };
int (*p)[4] = num;
int t = Sum(p,3,4);
printf("和为:%d\n", t);
return 0;
}
- `int (*p)[4] = a;` 定义一个指向数组的指针 `p`,并将其指向数组 `a`。
- `int Sum(int (*p)[4], int r, int c)` 定义一个函数 `Sum`,它的第一个参数是一个指向数组的指针 `p`,第二个参数是数组的行数 `r`,第三个参数是数组的列数 `c`。
- `sum += *(*(p + i) + j);` 访问二维数组中的元素,可以使用 `*(*(p + i) + j)` 或者 `p[i][j]`,这里使用了前者。
- `int t = Sum(p, 3, 4);` 调用函数 `sum`,将数组指针 `p`、行数 `3`、列数 `4` 作为参数传入,得到数组所有元素之和 `s`。
本章完