目录
1.冒泡排序
#include <stdio.h>
void bubble_sort(int arr[], int sz)//形参arr本质是指针
{
//确定趟数
int i =0;
for (i = 0; i < sz-1; i++)
{
//一趟冒泡排序的过程
int j = 0;
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
//交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//计算数组元素个数,必须放在排序函数前!!!
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);//数组传参的时候,传递的其实是数组元素的首地址
int i = 0;
for (i = 0; i < 10; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
2.数组反转
给定一个整型数组,将数组中的元素进行反转,并重新写入原数组中,例如:
反转前:
1, 2, 3, 4, 5
反转后:
5, 4, 3, 2, 1
#include <stdio.h>
#define ARR_LEN 5
void print(int a[],int len)
{
int i;
for (i = 0; i <= len - 1; i++) {
printf("%d\t", a[i]);
}
}
int main()
{
int a[ARR_LEN] = { 1,2,3,4,5 };
int temp,i;
print(a, ARR_LEN);
for (i = 0; i != ARR_LEN / 2; i++) {
temp = a[i];
a[i] = a[ARR_LEN - i - 1];
a[ARR_LEN - i - 1] = temp;
}
printf("\n");
print(a, ARR_LEN);
return 0;
}
3.矩阵转置
基于二维数组实现矩阵转置
#include <stdio.h>
#define LEN 101
void print(int a[][LEN], int row,int col)
{
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf("%d\t", a[i][j]);
}
printf("\n");
}
}
int main() {
int i, j,row,col,num,a[LEN][LEN],b[LEN][LEN];
printf("请输入行数:\n");
scanf_s("%d", &row);
printf("请输入列数:\n");
scanf_s("%d", &col);
num = row * col;
printf("请输入%d元素:\n",num);
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
scanf_s("%d", &a[i][j]);
}
}
printf("转置前:\n");
print(a, row,col);
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
b[j][i]=a[i][j];
printf("转置后:\n");
print(b, col, row);
}
4.变长数组:求整型数组和
定义并初始化整型的二维数组,求二维数组中所有元素的和。
- 变长数组不能在定义的时候进行初始化;
- 变长数组必须是自动存储类别,即不能使用extern或static存储类别说明符
#include <stdio.h>
#define ROWS 3
#define COLS 4
int sum_2d_array(int row, int col, int a[row][col]) {
int i, j, sum;
sum = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
sum += a[i][j];
}
}
return sum;
}
int main() {
int i, j, row, col, sum;
row = 2; col = 5;
int a1[ROWS][COLS];
int a2[row][col];
for (i = 0; i < ROWS; ++i)
for (j = 0; j < COLS; ++j)
a1[i][j] = i * COLS + j + 1;
for (i = 0; i < row; ++i)
for (j = 0; j < col; ++j)
a2[i][j] = i * col + j + 1;
sum = sum_2d_array(ROWS, COLS, a1[ROWS][COLS]);
printf("a1的元素和为%d", sum);
sum = sum_2d_array(row, col, a1[row][col]);
printf("a2的元素和为%d", sum);
return 0;
}