求一下最大公约数(辗转相除法) 24 18举例 : 最大公约数不会大于18
#includeint main() { int number_1 = 0; int number_2 = 0; scanf("%d%d", &number_1, &number_2); int middle = 0; while (middle = number_1 % number_2) { number_1 = number_2; number_2 = middle; } printf("最大公约数为:%d", number_2); return 0; }
转转相除法:
求100-200直接的素数(除了 1 和它本身以外,不能被任何整数整除的数)
#include#include //sqrt开平方函数头文件 int main() { int number = 0; int count = 0; //for (number = 100; number <= 200; number++) { for (number = 101; number <= 200; number += 2) {//优化 偶数肯定不是素数 int number_1 = 0; int flag = 1; //for (number_1 = 2; number_1 < number; number_1++) { for (number_1 = 2; number_1 <= sqrt(number); number_1++) { // 2 -> number-1是否有可以被整除 if (number % number_1 == 0) { flag = 0; break; } } //if (number == number_1) { // 第一种写法 if (flag == 1) {//第二种写法 printf("%d ", number);//素数 count++; } } printf("素数个数:%dn", count); return 0; }
// goto语句的使用 模拟实现一分钟自动关机程序
#include#include //system头文件 #include //strcmp头文件 int main() { char input[20] = { 0 }; system("shutdown -s -t 60");//system执行系统命令 shutdown关闭 -s(site)设置 -t(time)时间 60(60秒) again : printf("您的电脑将60秒后被怪兽强制关机,请问你此时,是否相信光?n"); scanf("%s", input); if (strcmp(input, "我相信光") == 0) { // strcmp比较两个字符串是否相等 system("shutdown -a");// shutdown -a取消 } else { goto again; } return 0;
//goto语句真正适用与多种嵌套循环,break只能结束当前循环;goto语句解决的问题,循环也可以解决
#include#include //system头文件 #include //strcmp头文件 int main() { char input[20] = { 0 }; system("shutdown -s -t 60");//system执行系统命令 shutdown关闭 -s(site)设置 -t(time)时间 60(60秒) while (1) { printf("您的电脑将60秒后被怪兽强制关机,请问你此时,是否相信光?n"); scanf("%s", input); if (strcmp(input, "我相信光") == 0) { // strcmp比较两个字符串是否相等 system("shutdown -a");// shutdown -a取消 break; } } return 0; }
//goto语句只能在函数内部使用,不能跨函数
#include#include //库函数 strcpy头文件 int main() { char number[20] = { 0 }; char number_1[] = "1314521"; strcpy(number, number_1);//strcpy字符串拷贝 printf("%sn", number); return 0; }
#include#include //memset头文件 int main() { char greeting[] = "Hello World"; memset(greeting, 'O', 6);//memset内存设置函数 printf("%sn", greeting); return 0; }
//自定义函数
//传值:
#includevoid Swap(int num1,int num2) {//形参(函数调用完就会销毁) int swap = 0; swap = num1; num1 = num2; num2 = swap; } int main() { int number_1 = 100; int number_2 = 200; printf("交换前: number_1=%d number_2=%dn", number_1,number_2); Swap(number_1, number_2);//实参(实际参数) printf("交换后: number_1=%d number_2=%dn",number_1,number_2); return 0; }
//打印结果并没有达到预期效果 我调用Swap函数又重新创建了空间,并没有在原来的地址改变 改变形参并不能改变实参
// 形参只是实参的一份临时拷贝
//传址:
#includevoid Swap(int* num1, int* num2) { int swap = 0; swap = *num1; *num1 = *num2; *num2 = swap; } int main() { int number_1 = 100; int number_2 = 200; printf("交换前: number_1=%d number_2=%dn", number_1, number_2); Swap(&number_1, &number_2); printf("交换后: number_1=%d number_2=%dn", number_1, number_2); return 0; } //打印结果达到了预期效果
//函数的嵌套调用(就是一环套一环套娃似的)
#includevoid TEST() { printf("哈哈n"); } void test() { TEST(); } int main() { test(); return 0; }
//函数的链式访问(一个函数作为另一个函数的参数)
#include#include int main() { printf("%dn", strlen("abc")); printf("%d", printf("%d", printf("%d", 1314)));// printf函数返回的是打印在屏幕字符的个数 return 0; }
//函数递归(自己调用自己)
//一个整型值(无符号)按顺序打印; 举例:1234 打印: 1 2 3 4
//一个整型值(无符号)按顺序打印; 举例:1234 打印: 1 2 3 4 //#include//void Print(int number) { // if (number > 9) {//存在限制条件,当不满足时就不会继续递归 // Print(number / 10); // } // printf("%d ", number % 10); // //越来越接近限制条件 //} //int main() { // int number = 0; // scanf("%d", &number); // Print(number); // return 0; //}
//每次递归都会开创空间,当递归很深时,很容易栈溢出(就相当于每次干活都增加一些难度,总有一次会因为太难而完不成)
//写一个函数不能创建临时变量,求字符串的长度(先模拟实现一下strlen)
#includeint MY_strlen(char* group) { if (*group != ' ') { return 1 + MY_strlen(group +1); } else { return 0; } } int main() { char group[] = "abcdefg"; printf("%dn", MY_strlen(group));//数组传的是数组首元素地址 }
//求n的阶乘
#includeint Multiplication(int number) { if (number < 2) { return 1; } else { return Multiplication(number - 1) * number; } } int main() { int number = 0; scanf("%d", &number); printf("%dn", Multiplication(number)); return 0; }
//求第n个斐波那契数也就很简单了
#includeint count = 0; int Number(int number) { if (number == 3) {//number等于3看出现了多少次 count++; } if (number <= 2) { return 1; } else { return Number(number - 1) + Number(number - 2); } } int main() { int number = 0; scanf("%d", &number); printf("%dn", Number(number)); printf("count = %dn", count);//number = 21;count就4181次,效率太低了,重复大量计算 return 0; }
//循环方式求第n个斐波那契数
#includeint Number(int number) { int number_1 = 1; int number_2 = 1; int number_3 = 1; while (number > 2) { number_3 = number_1 + number_2; number_1 = number_2; number_2 = number_3; number--; } return number_3; } int main() { int number = 0; scanf("%d", &number); printf("%dn", Number(number)); return 0; }
//零碎的光:数组
//一维,二维数组的存放
#includeint main() { //int number[10] = { 0 }; //int frequency = 0; //for (frequency = 0; frequency < 10; frequency++) { // printf("number[%d]地址=%pn", frequency, &number[frequency]); //} //int number[2][3] = { 0,2,3,4 };//不完全初始化 后面补0( ) int Number[2][3] = { {4,5},{1,2,3} };//也可以这样定义二维数组 int frequency = 0; int Frequency = 0; for (frequency = 0; frequency < 2; frequency++) { for (Frequency = 0; Frequency < 3; Frequency++) { printf("Number[%d][%d]地址为%pn", frequency, Frequency, &Number[frequency][Frequency]); } } return 0; }
一维数组存放:
二维数组存放:
#includeint main() { int group[10] = { 0 }; printf("%dn", sizeof(group));// 4*10=40 printf("%pn", &group); printf("%pn", group); printf("%pn", &group + 1); printf("%pn", group + 1); return 0; }
//将0123456789升序(冒泡排序)
#includevoid Swap(int group[], int size) { int frequency = 0; for (frequency = 0; frequency < size - 1; frequency++) { int Frequency = 0; for (Frequency = 0; Frequency < size - 1 - frequency; Frequency++) { if (group[Frequency] > group[Frequency + 1]) { int swap = group[Frequency]; group[Frequency] = group[Frequency + 1]; group[Frequency + 1] = swap; } } } } int main() { int group[] = { 9,8,7,6,5,4,3,2,1,0 }; int size = sizeof(group) / sizeof(group[0]); Swap(group, size); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", group[i]); } return 0; }
飞向光之国,还请带走我的思念
谢谢大家浏览


![[C语言]请将细碎的能力函数与数组飞回光之国 [C语言]请将细碎的能力函数与数组飞回光之国](http://www.mshxw.com/aiimages/31/997007.png)
