我的个人主页
我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤
目录
- 引言
- 数组基础
2.1 数组的定义与初始化
2.2 一维数组的基本操作
2.3 二维数组及其应用
2.4 数组与指针的关系 - 函数基础
3.1 函数的定义与调用
3.2 函数参数传递(值传递与指针传递)
3.3 函数与数组的结合 - 高级应用
4.1 数组排序与查找
4.2 数组作为函数返回值
4.3 字符数组与字符串操作 - 项目实践:学生成绩管理系统
1. 引言
数组,作为一种能够集中存储多个相同类型数据元素的容器,赋予了我们处理批量数据的强大能力。想象一下,在处理一系列学生成绩、员工工资或者传感器采集到的大量数据时,数组就像一个整齐有序的仓库,让数据的组织与管理变得井井有条。通过简洁的下标索引,我们可以快速定位和访问其中的任意元素,如同在仓库中精准找到特定的货物一般便捷。
而函数,则是 C 语言的灵魂所在。它犹如一位技艺精湛的工匠,将一段具有特定功能的代码封装起来,使其可以在程序的不同角落被反复调用。函数不仅提高了代码的复用性,避免了重复代码的冗余书写,还极大地增强了程序的可读性与可维护性。当我们需要执行某个特定任务,如计算数学公式、处理文件读写或者实现某种复杂的算法逻辑时,函数就会挺身而出,以其模块化的特性让程序的结构更加清晰明了,就像将一个庞大的机器分解成一个个独立运作且功能明确的部件。
当数组与函数携手共进时,它们所释放出的能量更是超乎想象。函数可以接收数组作为参数,对数组中的数据进行加工处理,从而实现各种复杂的数据操作与业务逻辑。这种协同合作的模式,让 C 语言能够轻松应对从简单数据处理到大型系统开发的各类挑战。在接下来的探索之旅中,我们将深入 C语言数组与函数的神秘世界,揭开它们的层层奥秘,领略其在编程艺术中的无穷魅力与巨大潜力,逐步掌握构建高效、健壮程序的精髓所在。
本文将通过详尽的解释和代码示例,帮助你全面掌握数组和函数,并学习如何结合两者实现复杂功能。
2. 数组基础
2.1 数组的定义与初始化
数组是同类型数据的集合,可以使用以下语法定义和初始化数组:
type array_name[size];
示例代码
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5}; // 初始化
printf("First element: %d\n", arr[0]); // 访问第一个元素
return 0;
}
注意
- 数组下标从
0
开始。 - 如果未完全初始化,未赋值的元素默认为0。
2.2 一维数组的基本操作
遍历数组
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
数组求和
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += arr[i];
}
printf("Sum = %d\n", sum);
return 0;
}
2.3 二维数组及其应用
二维数组用于存储表格或矩阵数据,定义方式如下:
type array_name[rows][columns];
示例代码
#include <stdio.h>
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
}
}
return 0;
}
2.4 数组与指针的关系
数组名本质上是指向第一个元素的指针。
示例代码
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
int *ptr = arr;
printf("First element: %d\n", *ptr);
printf("Second element: %d\n", *(ptr + 1));
return 0;
}
3. 函数基础
3.1 函数的定义与调用
函数是实现代码复用的关键工具。
示例代码
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 10);
printf("Sum = %d\n", result);
return 0;
}
3.2 函数参数传递
值传递
函数接收的是实参的副本,原值不会改变。
#include <stdio.h>
void modify(int x) {
x = 100;
}
int main() {
int num = 10;
modify(num);
printf("num = %d\n", num); // 输出 10
return 0;
}
指针传递
函数接收的是指针,能修改原值。
#include <stdio.h>
void modify(int *x) {
*x = 100;
}
int main() {
int num = 10;
modify(&num);
printf("num = %d\n", num); // 输出 100
return 0;
}
3.3 函数与数组的结合
数组作为函数参数
#include <stdio.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printArray(arr, 5);
return 0;
}
4. 高级应用
4.1 数组排序与查找
冒泡排序
#include <stdio.h>
void bubbleSort(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 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[5] = {5, 2, 9, 1, 5};
bubbleSort(arr, 5);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
线性查找
#include <stdio.h>
int linearSearch(int arr[], int size, int key) {
for (int i = 0; i < size; i++) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int key = 3;
int index = linearSearch(arr, 5, key);
if (index != -1) {
printf("Element found at index %d\n", index);
} else {
printf("Element not found\n");
}
return 0;
}
4.2 数组作为函数返回值
C语言中,数组不能直接作为函数返回值,但可以通过指针或动态分配实现。
动态分配数组
#include <stdio.h>
#include <stdlib.h>
int* createArray(int size) {
int *arr = (int *)malloc(size * sizeof(int));
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
return arr;
}
int main() {
int *arr = createArray(5);
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
free(arr); // 释放内存
return 0;
}
4.3 字符数组与字符串操作
字符串反转
#include <stdio.h>
#include <string.h>
void reverseString(char str[]) {
int n = strlen(str);
for (int i = 0; i < n / 2; i++) {
char temp = str[i];
str[i] = str[n - i - 1];
str[n - i - 1] = temp;
}
}
int main() {
char str[] = "hello";
reverseString(str);
printf("Reversed: %s\n", str);
return 0;
}
5. 项目实践:学生成绩管理系统
该项目结合数组和函数实现一个简单的成绩管理系统,包括录入、显示和计算平均成绩。
完整代码
#include <stdio.h>
void inputScores(int scores[], int size) {
for (int i = 0; i < size; i++) {
printf("Enter score for student %d: ", i + 1);
scanf("%d", &scores[i]);
}
}
void displayScores(int scores[], int size) {
printf("Scores:\n");
for (int i = 0; i < size; i++) {
printf("Student %d: %d\n", i + 1, scores[i]);
}
}
float calculateAverage(int scores[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += scores[i];
}
return (float)sum / size;
}
int main() {
int scores[5];
inputScores(scores, 5);
displayScores(scores, 5);
float avg = calculateAverage(scores, 5);
printf("Average score: %.2f\n", avg);
return 0;
}