函数的定义

int add(int a, int b) {
return a + b;
}
  1. 函数名: add

  2. 参数: ab

  3. 返回值: int

  4. 函数体: return a + b;

函数的调用

int main() {
int x = 10, y = 20;
int z = add(x, y);
printf("The sum is: %d", z);
return 0;
}
  1. 函数名: main

  2. 参数: 无

  3. 返回值: int

  4. 函数体: 调用 add 函数并将 xy 作为参数,将结果赋值给 z,然后输出 z 的值。

数组作为函数参数

void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}

int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printArray(arr, size);
return 0;
}
  1. 函数名: printArray

  2. 参数: arrsize

  3. 返回值: void

  4. 函数体: 打印数组 arr 中的元素。

全局变量和局部变量的比较

从两方面分析两者的差异:

  1. 作用域: 全局变量的作用域是整个程序,而局部变量的作用域是函数内部。

  2. 生命周期: 全局变量的生命周期是整个程序的运行期间,而局部变量的生命周期则是函数的执行期间。

课后习题第9题

编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果

代码呈现:

// 禁用安全警告,允许使用不安全的字符串函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> // 包含标准输入输出库

// 全局变量,分别记录数字、空格、字母、其他字符的个数
int letter, digit, space, other;

// 主函数
int main()
{
// 声明count函数,该函数将用于统计字符串中各类字符的数量
void count(char[]);

// 定义一个字符数组text,大小为80,用于存储用户输入的字符串
char text[80];

// 提示用户输入一个字符串
printf("请输入一个字符串:\n");
// 使用gets函数读取用户输入的字符串(注意:gets函数存在安全隐患,推荐使用fgets代替)
gets(text);

// 输出用户输入的字符串
printf("string:\n");
puts(text);

// 初始化各类字符计数器
letter = 0;
digit = 0;
space = 0;
other = 0;

// 调用count函数,传入用户输入的字符串,进行字符类型统计
count(text);

// 输出统计结果
printf("该字符串中有,数字:%d个,空格%d个,字母%d个,其他字符%d个", digit, space, letter, other);

return 0; // 程序正常结束
}

// count函数,用于统计字符串中各类字符的数量
void count(char str[])
{
int i;
// 遍历字符串中的每一个字符,直到遇到字符串结束标志'\0'
for (i = 0; str[i] != '\0'; i++)
{
// 判断当前字符是否为数字(ASCII码在'0'到'9'之间)
if (str[i] >= '0' && str[i] <= '9')
{
digit++; // 数字计数加一
}
// 判断当前字符是否为空格
else if (str[i] == ' ')
{
space++; // 空格计数加一
}
// 判断当前字符是否为字母(小写字母'a'到'z'或大写字母'A'到'Z')
else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
{
letter++; // 字母计数加一
}
// 如果上述条件都不满足,则认为是其他字符
else
{
other++; // 其他字符计数加一
}
}
}