值交换-及求素数
#include <stdio.h> // 系统环境变量(通常包含的是标准库头文件) #include "header.h" // 当前路径 + 系统环境变量(通常包含的是用户自定义的文件) #include <conio.h> // 使用函数的三个步骤: 声明函数 + 定义函数 + 调用函数 // check 函数的函数声明: 函数声明应该写在函数调用之前 // 当函数的定义位于函数调用之前,就可以省略函数声明 int check(unsigned int number); // 实参(实际参数):[函数调用]时实际传入的参数 // 形参(形式参数):[函数声明\定义]的参数列表中(会是实参的拷贝) // C 语言中函数的传参方式: 值传递 + 址传递(指针传递) // 值传递: 传递的只是实参的拷贝,所以通过 // 形参交换实参对实参没有任何的影响。 void swap1(int a1, int a2) { int temp = a1; a1 = a2; a2 = temp; } // 地址传递: 传递的是想要修改的变量的地址, // 在通过指针交换两个数的时候,实际是 // 根据指针找到指针指向的地址,交换地址 // 上保存的数据。 void swap2(int* a1, int* a2) { // 通过解引用将指针 a1 指向的内存上保存的内容赋值给 temp int temp = *a1; // 将指针 a2 指向的内存上保存的内容放置到指针 a1 指向的位置 *a1 = *a2; // 将 temp 的值放置到指针 a2 指向的位置 *a2 = temp; } // 用于打印形参地址的函数 void print_addr(int a) { // 形参只是实参的拷贝,例如存在函数调用 printf_addr(number) // 编译器会为我们生成类似 int a = number; 的操作 printf("形参地址: %p\n", &a); } int main(void) { int number1 = 10, number2 = 30; // 在函数的外部打印实参的地址 printf("实参地址: %p", &number1); print_addr(number1); // 调用一个值传递函数,传入的就是值 swap1(number1, number2); // 调用一个指针传递函数,传入的就是[具体变量的地址] swap2(&number1, &number2); // 判断 100 以内的素数 for (int i = 3; i < 100; ++i) { if (check(i) == 1) printf("%d 是素数\n", i); } return 0; } /* 函数定义的基本语法 返回值类型 符合命名的函数名(形参列表) { // 函数体: 整个函数的具体逻辑实现 // 如果有返回值类型的指定,需要使用 // return 返回相应类型的值(表达式) return 1 + 1; } */ // 一个函数,用于判断传入的整数是否是素数,如果是就返回 1 否则返回 0 // 根据作用确定名称 + 确定参数是 int + 确定返回值是 int int check(unsigned int number) { // 素数: 自然界大于 1 的整数中,只能被 1 和自身整除的数 for (unsigned int i = 2; i < number / 2; ++i) // 2 <= i < number { // 如果说能够被其中的某一个数整除就直接返回 0 if (number % i == 0) return 0; } // 如果整个循环执行结束,那么就说明没有能够被整除的数 return 1; }