1、标准库函数:
测试代码1:
#include <stdio.h> // 标准库函数头文件导入
// 自定义函数
int add(int a, int b) { return a + b;
} // 声明回调函数类型
typedef void (*Callback)(int); // 调用回调函数的函数
void process(Callback cb, int data) { cb(data);
} // 具体的回调函数实现
void printData(int data) { printf("Data: %d\n", data);
} // 内联函数
inline int max(int a, int b) { return a > b ? a : b;
} // 静态函数
static void privateFunction() { printf("This is a private function.\n");
} // 递归函数
int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); }
} int main() { // 调用用户自定义函数 int sum = add(5, 3); printf("The sum is: %d\n", sum); // 调用回调函数 process(printData, 10); // 调用内联函数 int maxVal = max(7, 9); printf("The max is: %d\n", maxVal); // 调用静态函数privateFunction(); // 调用递归函数 int fact = factorial(5); printf("Factorial of 5 is: %d\n", fact); return 0;
}
运行结果如下:
测试代码2:
#include <stdio.h>//标准库头文件
#include <time.h>//标准库头文件
//获取系统时间并计算是第几周第几天。
int main() {//定义time_t类型的变量rawtime,存储当前的时间戳。time_t rawtime;//定义指向struct tm类型的指针timeinfo,存储时间的详细信息。struct tm *timeinfo;//定义一个大小为80的字符数组buffer,存储格式化后的时间字符串。char buffer[80];//time()函数获取当前的时间戳,并将其保存在rawtime变量中。time(&rawtime);//localtime()函数将时间戳转换为本地时间,并将结果存储在timeinfo指针所指向的结构体中。timeinfo = localtime(&rawtime);//strftime()函数将时间信息按指定的格式写入buffer数组中。strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);//输出当前时间。printf("当前时间: %s\n", buffer);//计算今天是一年中的第几天,并将结果存储在dayOfYear变量中。int dayOfYear = timeinfo->tm_yday + 1; // 将0-based的天数转换为1-based//获取今天是星期几的信息,并存储在dayOfWeek变量中。int dayOfWeek = timeinfo->tm_wday;//如果dayOfWeek为0(星期日),则将其转换为7(ISO 8601标准中星期一为一周的起始)。if (dayOfWeek == 0) { // 将星期天转换为 7dayOfWeek = 7;}//计算今天是当年的第几周,通过 (dayOfYear + 6 - dayOfWeek) / 7 这个公式计算。int week = (dayOfYear + 6 - dayOfWeek) / 7;//输出今天是当年的第几周的第几天。 printf("今天是第 %d 周的第 %d 天\n", week, dayOfWeek);//return 0;: 返回值0,表示程序正常结束。return 0;
}
运行结果如下:
2、自定义函数:
测试代码:
#include <stdio.h> // 无参无返回值的函数
void printMessage() { printf("Hello, this is a function with no parameters and no return value.\n");
} // 无参有返回值的函数
int getNumber() { // 返回一个整数 return 42;
} // 有参无返回值的函数
void displayNumber(int num) { printf("The number is: %d\n", num);
} // 有参有返回值的函数
int addNumbers(int a, int b) { // 返回两个整数的和 return a + b;
} int main() { // 调用无参无返回值的函数 printMessage(); // 调用无参有返回值的函数,并打印返回值 int result1 = getNumber(); printf("The result of getNumber() is: %d\n", result1); // 调用有参无返回值的函数 displayNumber(10); // 调用有参有返回值的函数,并打印返回值 int result2 = addNumbers(5, 7); printf("The result of addNumbers(5, 7) is: %d\n", result2); return 0;
}
运行结果如下:
3、函数的几种调用方式:
测试代码:
#include <stdio.h>
// 函数的4种调用方式: 基本调用、递归调用、通过指针调用、作为另一个函数的参数
// 定义一个函数
int add(int a, int b) { return a + b;
}
// 使用递归计算阶乘
int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); // 在函数中调用函数自身称为递归调用。}
} // 声明一个函数指针 void (*funcPtr)();
// 定义一个函数
void sayHello() { printf("Hello, World!\n");
} // 一个简单的函数
void func1() { printf("Function 1 called\n");
} // 另一个简单的函数
void func2() { printf("Function 2 called\n");
} // 接收函数指针作为参数的函数
void callFunction(void (*func)()) { func();
} int main() { // 基本调用直接使用函数名和括号包围的参数列表(如果有参数的话)来调用函数。// 如果函数有返回值,将该返回值赋给一个变量,或者直接在表达式中使用它。// 调用函数并打印结果 int sum = add(5, 3); // 将函数的返回值赋给变量sum printf("The sum is: %d\n", sum); // 也可以在调用时直接使用函数的返回值 printf("Direct use: %d\n", add(2, 4)); //调用递归函数 printf("5! = %d\n", factorial(5)); // 将函数地址赋给函数指针 funcPtr = sayHello; // 通过函数指针调用函数 // 函数指针指向函数的地址,可以像调用普通函数一样通过它们调用函数。 (*funcPtr)(); // 或者 funcPtr(); // 函数指针作为参数传递给其他函数,这里传递给func1 // 调用callFunction,传递func1的地址 callFunction(func1); // 函数指针作为参数传递给其他函数,这里传递给func2 // 调用callFunction,传递func2的地址 callFunction(func2); return 0;
}
运行结果如下:
4、函数的嵌套调用:
测试代码:
// 函数声明
double power(double base, int exponent);
double multiply(double a, double b);
double add(double a, double b);
void printResult(double result); int main() { // 调用最外层的函数 printResult(add(multiply(2.0, 3.0), power(2.0, 3))); return 0;
} // 幂运算函数
double power(double base, int exponent) { double result = 1.0; for (int i = 0; i < exponent; i++) { result *= base; } return result;
} // 乘法函数
double multiply(double a, double b) { return a * b;
} // 加法函数
double add(double a, double b) { return a + b;
} // 输出结果函数
void printResult(double result) { printf("Result: %f\n", result);
}
运行结果如下:
5、 求合数和
测试代码:
#include <stdio.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdbool.h> // 函数声明,用于检查一个数是否为合数
bool isComposite(int num); int main() { int n, sum = 0; printf("请输入一个整数n: "); scanf("%d", &n); // 遍历从2到n的所有数(注意:1不是合数) for (int i = 2; i <= n; i++) { if (isComposite(i)) { printf("%d ", i); // 如果是合数,则打印出来 } } printf("\n"); // 打印换行符以美化输出// 遍历从2到n的所有数(注意:1不是合数) for (int i = 2; i <= n; i++) { if (isComposite(i)) { sum += i; // 如果是合数,则加到总和中 } } printf("小于等于%d的全部合数的和是: %d\n", n, sum); return 0;
} // 函数定义,检查一个数是否为合数
bool isComposite(int num) { if (num <= 1) return false; // 1和负数、0都不是合数 if (num == 2 || num == 3) return false; // 2和3是质数,不是合数 if (num % 2 == 0) return true; // 偶数(除了2)都是合数 // 只需检查到sqrt(num)即可 for (int i = 3; i * i <= num; i += 2) { if (num % i == 0) return true; // 如果找到一个因子,则num是合数 } return false; // 如果没有找到因子,则num是质数
}
运行结果如下: