C语言基础(八)

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) {  // 将星期天转换为 7
        dayOfWeek = 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是质数  
}

运行结果如下:

 

 

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值