当前位置: 首页 > news >正文

厦门seo网站优化番禺人才市场

厦门seo网站优化,番禺人才市场,摄影网站排行榜前十名,er图关于网站建设文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system(cls)清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 … 文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system(cls)清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 七、关机程序八、修改字符串memset()的使用 九、使用函数实现质数的判断sqrt()的使用 十、利用函数打印1000 - 2000年之间的闰年十一、函数实现整形有序数组的二分查找十二、将三个整数按从大到小输出十三、求两个数的最大公约数辗转相除法 十四、求1-100的整数之间出现了多少个数字9十五、打印99乘法表十六、递归实现字符串逆序十七、模拟实现strlen()十八、三子棋十九、扫雷二十、求一个整数存储在内存中二进制1的个数二十一、青蛙跳台阶问题斐波那契数列二十二、序列中删除指定数字二十三、模拟实现strcpyassert断言的使用const的使用 二十四、菱形打印 练习题 一、计算n的阶乘 //计算n的阶乘 #includestdio.h int main() {while (1){printf(阶乘);int i 0;int n 0;scanf(%d, n);int T 1;i n;if (i 0){for (i n; i 0; i--){T T * i;}printf(%d!%d\n, n, T);}elseprintf(输入错误\n);}return 0; } 输出 阶乘55!120阶乘66!720//导入 stdbool.h 来使用布尔类型 #include stdbool.h #include stdio.h//计算n!,n的值在main中定义 int main(void) {int n 0;scanf(%d, n);int sum 1; //用来存放阶乘的结果bool flag false; //阶乘标记int num n; //循环次数while (!flag){sum sum * (num--);//当num1时结束循环if (num 1){flag true;}}printf(%d的阶乘值为 %d \n, n, sum);return 0; }输出 5 5的阶乘值为 120bool类型 C 语言标准(C99)解决了布尔类型的问题 C99 提供了 Bool 型 Bool 依然仍是整数类型但与一般整型不同的是Bool 变量只能赋值为 0 或 1非 0 的值都会被存储为 1 C99还提供了一个头文件 stdbool.h 定义了 bool 代表 _Booltrue 代表 1false 代表 0 二、计算1!2!3!…10! //计算1!2!3!...10! #includestdio.h int main() {int i 1;int n 0;int Temp 1;int sum 0;for (i 1; i 10; i){for (n i; n 0; n--){Temp Temp * n;}sum sum Temp;Temp 1;}printf(%d, sum);return 0; }输出 4037913//计算1!2!3!...10!函数调用 #includestdio.h int main() {int i 1;int sum 0;for (i 1; i 10; i){sum sum Get(i);}printf(%d\n, sum);return 0; }int Get(int n)//返回n的阶乘 {int a 0;for (a1; n 0; n--){a a * n;}return a; }输出 4037913三、计算数组arr中的元素个数 //计算数组arr中的元素个数 #includestdio.h int main() {int arr[] { 1,2,3,4,5,6 };int sz sizeof(arr) / sizeof(arr[0]);printf(%d\n, sz);return 0; }输出 6二分法查找 //二分法查找 #includestdio.h int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };int a 0;int sz sizeof(arr) / sizeof(arr[0]);int left 0;//最左侧元素下标int right sz - 1;//最右侧元素下标while (1){int left 0;//最左侧元素下标int right sz - 1;//最右侧元素下标scanf(%d, a);while(left right){ int mid left (right - left) / 2;//中间元素下标防止运算数值过大导致越界if (a arr[mid])left mid 1;else if (a arr[mid]){right mid - 1;}else if (a arr[mid]){printf(%d的下标是%d\n, a, mid);break;}}if (left right)printf(数组里没有这个数\n);}return 0; }输出 1212的下标是1133的下标是2四、动态打印字符 //动态打印字符 #includestdio.h #includeWindows.h #includestdlib.h int main() {char arr1[] Hello World!!!;char arr2[] ##############;int Left 0;int Right strlen(arr1)-1;// sizeof(arr1) / sizeof(arr1[0]) - 1;while (Left Right){arr2[Left] arr1[Left];arr2[Right] arr1[Right];printf(%s\n, arr2);Sleep(1000);//包含于Windows.h中延时函数ms//清屏system(cls);//system是一个库函数可执行系统文件包含于stdlib.h中Left;Right--;}printf(%s\n, arr2);return 0; }Sleep()ms延时函数 包含于Windows.h头文件中 system(“cls”)清屏函数 包含于stdlib.h头文件中system是一个库函数可执行系统文件 五、模拟用户登录 //编写代码实现模拟用户登录并且只能登录三次 //只允许登录三次密码如果密码正确则提示登录成功如果三次均输入错误则退出程序 #includestdio.h #includestring.h int main() {int i 0;int pass[20] { 0 };for (i 0; i 3; i){printf(请输入密码);scanf(%s, pass);if (strcmp(pass, abc123) 0){printf(登录成功\n);break;}elseprintf(密码错误\n);}if (i 3){printf(三次输入错误退出程序);}return 0; }输出 请输入密码132密码错误请输入密码asc密码错误请输入密码abc123登录成功strcmp()函数 包含于string.h头文件中 用于判断两个字符串字符数组 是否相等 使用方法 若strcmp(字符串1,字符串2) 0则字符串1与字符串2相等反之则不相等 六、猜数字小游戏 #include stdio.h #include stdlib.h #include time.h #includeWindows.h //猜数字小游戏 void star() {printf(**************************\n);printf(******** 1.Play ********\n);printf(******** 2.Exit ********\n);printf(**************************\n); } void game() {system(cls);//清屏//猜数字游戏int guess 0;//1、生成一个1-100的随机数利用时间戳int number rand()%1001;//如此guess的范围就被限制在了1-100之间//2、猜数字while (1){printf(你猜的数是);scanf(%d, guess);if (guess number){printf(猜大了\n);}else if (guess number){printf(猜小了\n);}else{printf(恭喜你猜对了\n);break;}} } int main() {srand((unsigned int)time(NULL));int mode 0;do{star();printf(输入游戏模式1/2);scanf(%d, mode);switch (mode){case 1:game();case 2:{printf(退出游戏\n);break;}default:printf(输入错误\n);}} while (2-mode);return 0; }产生一个随机数 rand 定义于头文件 stdlib.hrand(); 返回 0 与【RAND_MAX】之间的伪随机整数值包含 0 与 RAND_MAX 参数返回值无0 与 RAND_MAX间包含边界的伪随机整数值。 srand 在使用前需要使用srand()“播种” srand 定义于头文件 stdlib.hvoid srand( unsigned seed ); 以值 seed为种子 “播种” rand() 所用的随机数生成器 注若在 srand() 的调用前使用 rand() 则 rand() 表现为如同它被以 srand(1) 播种 以相同的 seed(srand(seed))播种 rand() 时它会产生相同的值数列 参数返回值seed--种子值无 注意 每次使用rand()产生伪随机数时都只需用srand()播种一次不应重复播种 通常使用时间戳来充当srand()的种子值种子值的不断变化以保证产生的伪随机数值列不同 RAND_MAX 展开成等于函数rand()最大返回值的整数常量表达式。此值为实现定义。标准保证此值至少为 32767 时间戳time() 返回自纪元 Epoch1970-01-01 00:00:00 UTC起经过的时间以秒为单位。如果 seconds 不为空则返回值也存储在变量 seconds 中 头文件以及函数声明 time.h time_t time( time_t *arg );参数返回值arg—指向将存储时间的 time_t 对象的指针或空指针成功时返回编码成time_t对象的当前日历时间。错误时返回 (time_t)(-1) 。若arg不是空指针则返回值也会存储于 arg 所指向的对象 返回编码成time_t对象的当前日历时间并将其存储于 arg 指向的time_t对象除非 arg 为空指针 示例 #include stdio.h #include time.hint main () {time_t seconds;seconds time(NULL);printf(自 1970-01-01 起的小时数 %ld\n, seconds/3600);return(0); }运行上面的程序产生以下结果 自 1970-01-01 起的小时数 373711示例 #include stdio.h #include stdlib.h #include time.hint main(void) {srand(time(NULL)); // 以当前时间为随机生成器的种子int random_variable rand();printf(Random value on [0,%d]: %d\n, RAND_MAX, random_variable);// 扔 6 面色子 20 次for (int n 0; n ! 20; n) {int x 7;while(x 6) x 1 rand() / ((RAND_MAX 1u) / 6); // 注意 1 rand() % 6 有偏差printf(%d , x); } }可能的输出 Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1七、关机程序 //关机程序 //运行程序后电脑60s后自动关机 //如果输入你好 则取消关机 #include stdio.h #include time.h #includeWindows.h int main() {char input[20] { 0 };printf(电脑将在60s后关机输入“你好”后取消关机\n);int time0 (unsigned int)time(NULL);system(shutdown -s -t 60); again:scanf(%s, input);if (strcmp(input, 你好) 0){system(shutdown -a);printf(成功取消关机\n);}else{int time1 60-(((unsigned int)time(NULL))-time0);printf(电脑将在%d后关机输入“你好”后取消关机\n,time1);goto again;}return 0; }运行结果 电脑将在60s后关机输入“你好”后取消关机 a 电脑将在55后关机输入“你好”后取消关机 b 电脑将在51后关机输入“你好”后取消关机 c 电脑将在48后关机输入“你好”后取消关机 你好 成功取消关机控制电脑关机 shutdown -s -t 60 取消电脑关机 shutdown -a Windows 10 shutdown 命令详解 八、修改字符串 memset()的使用 #include stdio.h int main() {char str[] Hello World!;printf(%s\n, str);memset(str, A, 5);printf(%s\n, str);return 0; }输出结果 Hello World!AAAAA World!#include stdio.h int main() {char str[] Hello World!;printf(%s\n, str);memset(str4, A, 1);printf(%s\n, str);return 0; }输出结果 Hello World!HellA World!九、使用函数实现质数的判断 质数又称素数。一个大于1的自然数除了1和它自身外不能被其他自然数整除的数叫做质数否则称为合数规定1既不是质数也不是合数 #include stdio.h //使用函数判断一个数是不是素数质数 #include math.h //sqrt()开平方返回值为double类型 int Prime(int A) {int i 0;for (i 2; i (int)sqrt(A); i){if (A % i 0){return 0;//不是质数}}return 1;//是质数 } int main() {int a 0;while (1){scanf(%d, a);if (Prime(a) 1)printf(%d-是质数\n, a);else printf(%d-不是质数\n, a);}return 0; }输出 3 3-是质数 4 4-不是质数 5 5-是质数 6 6-不是质数sqrt()的使用 doubel sqrt(double A) 包含在头文件include math.h中 返回值是其中参数的开平方double类型 十、利用函数打印1000 - 2000年之间的闰年 #include stdio.h //打印1000-2000年之间的闰年 //闰年1、能被四整除且不能被100整除2、能被100整除 int main() {int i 0;for (i 1000; i 2000; i){if (((i % 4 0) (i % 100 ! 0)) || (i % 400 0)){printf(%d , i);}}return 0; }输出 1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000使用函数 #include stdio.h //利用函数打印1000 - 2000年之间的闰年 int Get_Leap_Year(int year) {//是闰年返回1//不是闰年返回0if (((year % 4 0) (year % 100 ! 0)) || (year % 400 0))return 1;else return 0; } int main() {int i 0;for (i 1000; i 2000; i){if(Get_Leap_Year(i))printf(%d , i); }return 0; }输出 1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000十一、函数实现整形有序数组的二分查找 #include stdio.h //函数实现整形有序数组的二分查找 int Search_Array(int *arr, int a, int sz) {int left 0;int right sz - 1;//找到了返回下标//找不到返回-1数组第一个元素下标为0while (left right){int mid left (right - left) / 2;if (arr[mid] a)right mid - 1;else if (arr[mid] a)left mid 1;elsereturn mid;}return -1; } int main() {int arr[] { 1,3,4,6,7,8,9,10,11,12,13,15,16,17,19,20 };int a 6;int sz sizeof(arr) / sizeof(arr[0]);int Sub Search_Array(arr, a, sz);if (Sub -1)printf(数组中没有这个数\n);elseprintf(%d在数组中的下标是%d\n, a, Sub);return 0; }输出 6在数组中的下标是3十二、将三个整数按从大到小输出 //将三个整数按从大到小输出 void swap(int* x, int* y) {int temp 0;temp *x;*x *y;*y temp; } int main() {int a 0;int b 0;int c 0;while (1){//输入scanf(%d %d %d, a, b, c);//交换if (a b)swap(a, b);if (a c)swap(a, c);if (b c)swap(b, c);//输出printf(%d %d %d\n, a, b, c);}return 0; }输出 6 8 38 6 3十三、求两个数的最大公约数 //求两个数的最大公约数 int main() {int a 0;int b 0;while (1){scanf(%d %d, a, b);int min (a b ? a : b);while (1){if (a % min 0 b % min 0)break;min--;}printf(%d和%d的最大公约数是%d\n, a, b, min);}return 0; }输出 18 2418和24的最大公约数是6辗转相除法 欧几里得算法是用来求两个正整数最大公约数的算法 古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法所以被命名为欧几里得算法。扩展欧几里得算法可用于RSA加密等领域 假如需要求 1997 和 615 两个正整数的最大公约数用欧几里得算法是这样进行的 ​ 至此最大公约数为1以除数和余数反复做除法运算当余数为 0 时取当前算式除数为最大公约数所以就得出了 1997 和 615 的最大公约数 1 //辗转相除法 int main() {int a 0;int b 0;int c 0;while(1){scanf(%d %d, a, b);while (c a % b){a b;b c;}printf(最大公约数是%d\n, b);}return 0; }输出 18 24最大公约数是6十四、求1-100的整数之间出现了多少个数字9 //求1-100的整数之间出现了多少个数字9 int main() {int i 1;int count 0;for (i 1; i 100; i)//不用计算100{if (i % 10 9)//判断个位是不是9count;if (i / 10 9)//判断十位是不是9count;}printf(%d个9\n, count);return 0; }输出 20个9十五、打印99乘法表 //打印99乘法表 int main() {int i 0;int j 0;for (i 1; i 9; i)//9行{for (j 1; j i; j){printf(%d*%d%2d , j, i, i * j);//%-2d打印两位整数左对齐// %2d打印两位整数右对齐}printf(\n);}return 0; }输出 1*111*22 2*241*33 2*36 3*391*44 2*48 3*412 4*4161*55 2*510 3*515 4*520 5*5251*66 2*612 3*618 4*624 5*630 6*6361*77 2*714 3*721 4*728 5*735 6*742 7*7491*88 2*816 3*824 4*832 5*840 6*848 7*856 8*8641*99 2*918 3*927 4*936 5*945 6*954 7*963 8*972 9*981十六、递归实现字符串逆序 #include stdio.h #include string.hvoid change(char* str, int left, int right) {char temp 0;if (left right){temp str[left];str[left] str[right];str[right] temp;change(str, left 1, right - 1);} }int main() {char str[] abcdefg;int left 0;int right strlen(str) - 1;change(str, left, right);printf(%s, str);return 0; }输出 gfedcba十七、模拟实现strlen() 使用临时变量 //模拟实现strlen()返回字符串个数//int my_strlen(char str[])//参数部分写成指针的形式 int my_strlen(char str[]) //参数部分写成数组的形式 {int count 0;//计数使用临时变量while (*str ! \0){count;str;//找下一个字符}return count; } int main() {char str[] abcd;//[a b c d \0]printf(%d, my_strlen(str));return 0; }输出 4使用递归不创建临时变量 //不创建临时变量使用递归 int my_strlen(char* str) {if (*str ! \0)return 1 my_strlen(str 1);elsereturn 0; } int main() {char str[] abcd;//[a b c d \0]printf(%d, my_strlen(str));return 0; }输出 4十八、三子棋 test.c测试游戏的逻辑 game.c游戏代码的实现 game.h游戏代码的声明函数定义符号定义 test.c #define _CRT_SECURE_NO_WARNINGS#include game.h//***************************************************************//游戏菜单void menu(){printf(\n);printf(-----------1.Play-----------\n);printf(-----------2.Exit-----------\n);printf(\n);}//***************************************************************void game(){char board[ROW][COL] { 0 };char ret 0;//输赢判断标志位Init_Board(board);//棋盘初始化while (1){ Print_Board(board);//打印棋盘Player_Chess(board);//玩家回合ret IsWin(board);//判断输赢if (ret ! C)break;Print_Board(board);//打印棋盘Computer_Chess(board);//电脑回合ret IsWin(board);//判断输赢if (ret ! C)break;}if (ret *)printf(你赢得了游戏\n);else if (ret #)printf(你输了。。。\n);else if (ret P)printf(平局\n);Print_Board(board);//打印棋盘printf(------------------------------\n);printf(----------$回合结束$----------\n);printf(------------------------------\n);printf(\n\n);}//***************************************************************void test(){int mode 0;do{menu();printf(输入游戏模式);scanf(%d, mode);switch (mode){case 1:game();break;case 2:break;default:printf(输入错误\n);break;}} while (mode ! 2);}//***************************************************************int main(){srand((unsigned int)time(NULL));//设置随机数的生成起点test();return 0;}game.c #define _CRT_SECURE_NO_WARNINGS#include game.h//***************************************************************//棋盘初始化函数void Init_Board(char board[ROW][COL]){int i 0;for (i 0; i ROW; i){int j 0;for (j 0; j COL; j)board[i][j] ;}}//***************************************************************//打印棋盘void Print_Board(char board[ROW][COL]){int i 0;for (i 0; i ROW; i){int j 0;//数据打印for (j 0; j COL; j){printf( %c , board[i][j]);if (j COL - 1)printf(|);elseprintf(\n);}//分割信息打印if (i ROW - 1){int j 0;for (j 0; j COL; j){printf(---);if (j COL - 1)printf(|);elseprintf(\n);}}}}//***************************************************************//玩家下棋void Player_Chess(char board[ROW][COL]){printf(玩家回合\n);int x 0;int y 0;while (1){scanf(%d %d, x, y);if (1 x x ROW 1 y y COL)//数据验证{if (board[x - 1][y - 1] ){board[x - 1][y - 1] *;break;}elseprintf(此处已被占用\n请重新输入);}elseprintf(超出棋盘范围\n请重新输入);}}//***************************************************************//电脑下棋void Computer_Chess(char board[ROW][COL]){printf(电脑回合\n);Sleep(1000);//延时一秒int x 0;int y 0;while (1){x rand() % ROW;//产生0~(ROW-1)之间的随机数y rand() % COL;//0~2if (board[x][y] ){board[x][y] #;break;}}}//***************************************************************//判断棋盘是否满了int Board_Full(char board[ROW][COL]){int i 0;for (i 0; i ROW; i){int j 0;for (j 0; j COL; j){if (board[i][j] )return 0;//棋盘没满时返回0}}return 1;//棋盘满了返回1}//***************************************************************//继续----C//玩家赢--*//电脑赢--#//平局----Pchar IsWin(char board[ROW][COL]){//行rowint i 0;for (i 0; i ROW; i){if (board[i][0] board[i][1] board[i][1] board[i][2] board[i][1] ! )return board[i][1];}//列columnint j 0;for (j 0; j COL; j){if (board[0][j] board[1][j] board[1][j] board[2][j] board[1][j] ! )return board[1][j];}//对角线if (board[0][0] board[1][1] board[1][1] board[2][2] board[1][1] ! )return board[1][1];if (board[0][2] board[1][1] board[1][1] board[2][0] board[1][1] ! )return board[1][1];//平局if (Board_Full(board))//返回1--满了此时为平局return P;//继续return C;}game.h #pragma once#include stdio.h#include stdlib.h#include time.h#include Windows.h#define ROW 3#define COL 3//棋盘初始化void Init_Board();//打印棋盘void Print_Board(char board[ROW][COL]);//玩家回合void Player_Chess(char board[ROW][COL]);//电脑回合void Computer_Chess(char board[ROW][COL]);//输赢判断char IsWin(char board[ROW][COL]);结果 -----------1.Play----------------------2.Exit-----------输入游戏模式3输入错误-----------1.Play----------------------2.Exit-----------输入游戏模式1| |---|---|---| |---|---|---| |玩家回合2 2| |---|---|---| * |---|---|---| |电脑回合| |---|---|---| * |---|---|---| # |玩家回合1 1* | |---|---|---| * |---|---|---| # |电脑回合* | |---|---|---| * |---|---|---# | # |玩家回合3 3你赢得了游戏* | |---|---|---| * |---|---|---# | # | *----------------------------------------$回合结束$---------------------------------------------------1.Play----------- -----------2.Exit-----------输入游戏模式2D:\文档\新建文件夹 (2)\C语言程序设计\源码\C_Code_1\game_1\Debug\game_1.exe (进程 9740)已退出代码为 0。 按任意键关闭此窗口. . .十九、扫雷 test.c测试游戏的逻辑 game.c游戏代码的实现 game.h游戏代码的声明函数定义符号定义 test.c #include game.hvoid game(){//创建数组布置雷的信息初始化时放入0char mine[ROWS][COLS] { 0 };//创建数组排查雷的信息初始化时放入*char show[ROWS][COLS] { 0 };//数组初始化InitBoard(mine, ROWS, COLS, Kong);InitBoard(show, ROWS, COLS, View);//随机放置雷Place_Mine(mine, ROW, COL);//打印棋盘//PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL); Game_Run(mine, show, ROW, COL);}int main(){//设置产生随机数的初始值srand((unsigned int)time(NULL));int mode 0;do{menu();//初始化游戏菜单printf(输入游戏模式);//游戏模式选择scanf(%d, mode);switch (mode){case 1:printf(开始游戏\n);game();break;case 2:printf(退出游戏\n);break;default :printf(输入错误\n);break;}} while (mode ! 2);return 0;}game.c #define _CRT_SECURE_NO_WARNINGS#include game.hvoid menu(){//游戏菜单printf(--------------------------\n);printf(--------- 1.Play ---------\n);printf(--------- 2.Exit ---------\n);printf(--------------------------\n);}//初始化雷盘void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set){int i 0;int j 0;for (i 0; i rows; i){for (j 0; j cols; j){arr[i][j] set;}}}//打印雷盘void PrintBoard(char arr[ROWS][COLS], int row, int col){int i 1;int j 1;printf(------扫-雷------\n);//显示出列号(|)for (j 0; j col; j){printf(%d , j);}printf(\n);for (i 1; i row; i){printf(%d , i);//显示出行号(—)for (j 1; j col; j){printf(%c , arr[i][j]);}printf(\n);}}//放置雷void Place_Mine(char arr[ROWS][COLS], int row, int col){int count 0;while (count Set_of_Mine){ //产生1~9之间的随机数int x rand() % row 1;int y rand() % col 1;if (arr[x][y] Kong){arr[x][y] Lei;count;}} }//扫雷主逻辑void Game_Run(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){int count 0;while (count row * col - Set_of_Mine){int x 0;int y 0;printf(请选择位置排雷);scanf(%d %d, x, y);if (x 0 x row y 0 y col){if (mine[x][y] ! Lei){show[x][y] Count_of_Mine(mine, x, y);//计算出(x,y)周围雷的数量if (show[x][y] 0){Find_Zero_Mine(mine, show, row, col, x, y);}system(cls);//清屏PrintBoard(show, ROW, COL);Mark_Mine(show);count;}else if (mine[x][y] Lei){system(cls);//清屏printf(你碰到了雷游戏结束\n);PrintBoard(mine, ROW, COL);printf(--------------------------\n);printf(--------Game Over--------\n);printf(--------------------------\n\n);break;} }else{printf(非法坐标请重新输入\n\n);}}if (count row * col - Set_of_Mine){printf(恭喜你排雷成功\n\n);PrintBoard(mine, ROW, COL);}}//计算周围雷的数量char Count_of_Mine(char arr[ROWS][COLS], int x, int y){char count 0;int i 0;int j 0;for (i -1; i 2; i){for (j -1; j 2; j){if (arr[x i][y j] Lei)count;elsecontinue;}}return count 0;//数字0可将其转换成字符串//字符串-0可将其转换成数字}//如果检测到该坐标周围雷的数量为0就显示出该坐标/*条件1.该坐标不是雷2.该坐标周围没有雷3.不能重复排查*///展开一片没有雷的区域函数递归void Find_Zero_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y){if (Count_of_Mine(mine, x, y) 0){show[x][y] ;int i 0;int j 0;for (i -1; i 2; i){for (j -1; j 2; j){if (x i 0 x i row y j 0 y j col show[x i][y j] View){Find_Zero_Mine(mine, show, row, col, x i, y j);}}}}//显示区域边缘雷的数量elseshow[x][y] Count_of_Mine(mine, x, y);}void Mark_Mine(char show[ROWS][COLS]){int Flag 1;int x 0;int y 0;while (Flag){printf(是否需要标记1/0);scanf(%d, Flag); if (Flag 1){printf(请输入要标记的位置);scanf(%d %d, x, y);if (x 0 x ROW y 0 y COL){show[x][y] Sign;PrintBoard(show, ROW, COL);}else{printf(非法坐标\n);continue;}}elsebreak;}system(cls);//清屏PrintBoard(show, ROW, COL);}game.h #pragma once#define _CRT_SECURE_NO_WARNINGS#include stdio.h#include time.h#include stdlib.h#include Windows.h//设置扫雷棋盘界面的大小#define ROW 9#define COL 9//为了方便棋盘边缘的计算#define ROWS ROW2#define COLS COL2//设置样式#define Lei 1 //雷#define Kong 0 //Mine数组中没有雷的部分#define View * //Show数组中显示部分#define Sign # //Show数组中用于标记雷//设置雷的数量#define Set_of_Mine 10void menu();void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set);void PrintBoard(char arr[ROWS][COLS], int row, int col);void Place_Mine(char arr[ROWS][COLS], int row, int col);void Game_Run(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);char Count_of_Mine(char arr[ROWS][COLS], int x, int y);void Find_Zero_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y);void Mark_Mine(char show[ROWS][COLS]);结果 ----------------------------------- 1.Play ------------------ 2.Exit -----------------------------------输入游戏模式1开始游戏------扫-雷------0 1 2 3 4 5 6 7 8 91 * * * * * * * * *2 * * * * * * * * *3 * * * * * * * * *4 * * * * * * * * *5 * * * * * * * * *6 * * * * * * * * *7 * * * * * * * * *8 * * * * * * * * *9 * * * * * * * * *请选择位置排雷6 8------扫-雷------0 1 2 3 4 5 6 7 8 91 * * * * * * * * *2 * * * * * * * * *3 * * * * * * * * *4 * * * * * * * * *5 * * * * * * * * *6 * * * * * * * 1 *7 * * * * * * * * *8 * * * * * * * * *9 * * * * * * * * *是否需要标记1/00------扫-雷------0 1 2 3 4 5 6 7 8 91 * * * * * * * * *2 * * * * * * * * *3 * * * * * * * * *4 * * * * * * * * *5 * * * * * * * * *6 * * * * * * * 1 *7 * * * * * * * * *8 * * * * * * * * *9 * * * * * * * * *请选择位置排雷2 4------扫-雷------0 1 2 3 4 5 6 7 8 91 * * 1 1 *2 * * 1 1 2 3 *3 * * 2 1 1 * * *4 * * * 2 1 2 2 15 * * * 26 * * 1 1 1 17 * * 1 1 1 1 1 *8 * * 1 1 * * * *9 * * 1 1 * * * *是否需要标记1/01请输入要标记的位置1 9------扫-雷------0 1 2 3 4 5 6 7 8 91 * * 1 1 #2 * * 1 1 2 3 *3 * * 2 1 1 * * *4 * * * 2 1 2 2 15 * * * 26 * * 1 1 1 17 * * 1 1 1 1 1 *8 * * 1 1 * * * *9 * * 1 1 * * * *是否需要标记1/00请输入要标记的位置3 7你碰到了雷游戏结束------扫-雷------0 1 2 3 4 5 6 7 8 91 0 0 0 0 0 0 0 0 12 0 1 0 0 0 0 0 0 03 0 0 0 0 0 0 1 1 04 0 0 1 0 0 0 0 0 05 0 0 1 0 0 0 0 0 06 0 0 0 0 0 0 0 0 07 0 0 0 0 0 0 0 0 18 1 1 0 0 0 1 0 0 09 0 0 0 0 0 0 0 0 0----------------------------------Game Over----------------------------------二十、求一个整数存储在内存中二进制1的个数 //编写代码实现求一个整数存储在内存中二进制1的个数 //求补码的二进制1的个数 int main() {int a 7;//0000 0000 0000 0000 0000 0000 0000 0111//0000 0000 0000 0000 0000 0000 0000 0001 // 0000 0000 0000 0000 0000 0000 0000 0001int i 0;int count 0;for (i 0; i 32; i) {if ((a (1 i)) (1 i))count;}printf(%d\n, count);return 0; }二十一、青蛙跳台阶问题斐波那契数列 n阶台阶每次可走1阶或两阶问有多少种走法 //n阶台阶每次可走1阶或两阶有多少种走法 int Fib(int n) {if (n 1)return 1;else if (n 2)return 2;elsereturn Fib(n - 1) Fib(n - 2); } int main() {int n 0;scanf(%d, n);int count 0;count Fib(n);printf(%d, count);return 0; }1089F i b ( n ) { 1 , n1 1 , n2 F i b ( n − 1 ) F i b ( n − 2 ) , n2 Fib(n) \begin{cases} 1, \text{n1} \\\\ 1, \text{n2} \\\\ Fib(n-1)Fib(n-2), \text{n2} \end{cases} Fib(n)⎩ ⎨ ⎧​1,1,Fib(n−1)Fib(n−2),​n1n2n2​ 二十二、序列中删除指定数字 int main() {int arr[20] { 0 };int n 0;int i 0;printf(输入数字的个数);scanf(%d, n);for (i 0; i n; i) {scanf(%d , arr[i]);}//删除int del 0;int j 0;scanf(%d, del);for (j 0; j n; j) {if (del ! arr[j])printf(%d , arr[j]);}return 0; }输入数字的个数51 2 3 4 521 3 4 5二十三、模拟实现strcpy //模拟实现strcpy #include assert.h//将字符数组Source的内容复制到Goal中 char* my_strcpy(char* Goal, const char* Source) {//之所以返回char*是为了实现链式访问//const可确保Source不会被改变char* ret Goal;//断言assert(Source ! NULL);//如果不满足条件程序将直接中断运行并抛出异常assert(Goal ! NULL);while (*Goal *Source);return ret;//返回目标数据的首地址 }int main() {char arr1[20] { 0 };char arr2[] For YOU!;my_strcpy(arr1, arr2);printf(arr1%s\n, arr1);printf(arr1%s\n, my_strcpy(arr1, arr2));printf(arr2%s\n, arr2); return 0; }arr1For YOU!//arr1arr1For YOU!//my_strcpy(arr1, arr2)arr2For YOU!//arr2assert断言的使用 在 C 语言中assert 是一个宏定义它定义在 assert.h 头文件中。assert 宏用于在程序执行期间测试某个条件是否为真。如果条件为假即表达式计算结果为0则 assert 宏会终止程序的执行并输出一个错误消息 使用 assert 宏可以帮助开发者在开发和测试阶段发现错误但它通常不用于生产环境因为可以通过定义 NDEBUG 宏来禁用所有的 assert 检查 如何使用 assert 包含头文件首先需要包含 assert.h 头文件 使用 assert 宏在代码中使用 assert 宏来检查条件 定义 NDEBUG如果定义了 NDEBUG 宏则所有的 assert 检查都会被禁用 示例代码 #include stdio.h #include assert.hint main() {int a 10;int b 0;// 检查除数是否为0assert(b ! 0); // 如果 b 为0程序将终止并输出错误信息printf(结果是: %d\n, a / b);return 0; }禁用 assert 如果你想要禁用 assert 检查可以在编译时定义 NDEBUG 宏。这可以通过编译器的命令行选项来实现 gcc -DNDEBUG program.c或者在代码中定义 #define NDEBUG #include stdio.h #include assert.hint main() {int a 10;int b 0;// 这个 assert 检查将被禁用assert(b ! 0);printf(结果是: %d\n, a / b);return 0; }使用 assert 宏时应该谨慎选择要检查的条件避免在性能敏感的代码路径中使用因为即使条件总是为真assert 宏也会进行计算。此外assert 宏不应该用于检查程序的正常运行逻辑而应该用于捕获不可能发生的情况 const的使用 在 C 语言中const 关键字用于定义常量值即值在程序执行过程中不能被修改的变量。使用 const 可以提高代码的可读性和可维护性同时帮助编译器进行优化 基本用法 定义常量使用 const 关键字可以定义一个常量这意味着一旦初始化后其值不能被改变 const int MAX_USERS 100;定义常量指针你可以定义指向常量的指针这有两种情况 指针本身是常量不能改变指向指针指向的值是常量不能通过这个指针改变值 const int *ptr; // 指针本身是常量 int *const ptr2 someInt; // 指针指向的地址是常量 const int *const ptr3 someInt; // 指针本身和指向的值都是常量常量数组 你可以定义一个数组为常量这意味着数组中的元素不能被修改 const int days[] {1, 2, 3, 4, 5};函数参数 使用 const 修饰函数参数可以保证函数内部不会修改这些参数 void printArray(const int arr[], int size) {for (int i 0; i size; i) {printf(%d , arr[i]);}printf(\n); }在这个例子中printArray 函数接收一个整数数组和数组的大小。由于数组被声明为 const函数内部不能修改数组的元素 常量成员函数 在 C 中C 语言的超集你可以定义一个成员函数为常量成员函数这意味着该函数不会修改对象的任何成员变量 class Counter { public:int value;void increment() {value;}int getValue() const { // 常量成员函数return value;} };在这个例子中getValue 函数被声明为常量成员函数这意味着它不会修改对象的任何成员变量 注意事项 使用 const 可以提高代码的安全性防止意外修改变量在数组或结构体中使用 const 时需要小心处理因为 const 只保护直接访问不保护间接访问在使用指针时明确 const 的位置非常重要因为它影响指针的行为 二十四、菱形打印 //4____*____1 1 //3___***___2 3 //2__*****__3 5 //1_*******_4 7 //0*********5 9 //1_*******_1 7 //2__*****__2 5 //3___***___3 3 //4____*____4 1void print_star(int line) {int i 0;for (i 0; i line; i) {//上部分lineint j 0;for (j 0; j (line - 1 - i); j) {//空格printf( );}for (j 0; j 2 * i 1; j) {//*printf(*);}printf(\n);}for (i 0; i (line - 1); i) {//下部分line-1int j 0;for (j 0; j i; j) {//空格printf( );}for (j 0; j 2 * (line - 1 - i) - 1; j) {//*printf(*);}printf(\n);}} int main() {int n 0;while (1) {scanf(%d, n);print_star(n);}return 0; }5*****************************************9*************************************************************************************************************************************************
http://www.pierceye.com/news/188695/

相关文章:

  • 做DJ网站违法吗汕头seo网站推广
  • 上海网站建设网站宁波网站模板哪家性价比高
  • 珠海专业做网站制作做网站网站的代理算网站罪吗
  • 建设局网站简介通信建设网站
  • php做网站用什么开发工具大专软件技术工资一般多少
  • 网站建设服务承诺wordpress 博客园
  • seo综合查询站长工具关键词全网营销案例
  • 深圳专业做网站设计政务服务网站建设性建议
  • 做暧免费观看网站哪个网站可以给图片做链接
  • wordpress最好的主题东莞债务优化
  • 全国网站建设大赛网店网站设计
  • 学网站建设需要学多久wordpress火车头插件
  • wordpress 网站实例中国纪检监察报app下载
  • 网站链接dw怎么做营销推广方法
  • 觅知网 大而全的高质量素材站开发手机网站用什么好
  • 建设一个广告联盟的网站医院网站设计与实现
  • 公司网站备案必须是企业信息么网站搭建好有什么内容可以修改
  • 弄网站赚钱吗电影网站怎么做要多少钱
  • 做优化网站能以量取胜么好素材网站
  • wordpress主题网站江苏建设工程教育网
  • 网站制作 客户刁难做宠物网站赚钱吗
  • 网站突然不收录了如何形容一个网站做的好
  • 怎么建网站教程视频做网站跟推广哪家公司好
  • 怎么做网站报告四平网站公司
  • 飞扬动力网站建设支付网站建设要求
  • 达美网站建设廊坊seo扣费
  • 好享购物官方网站购物网页制作与网站开发从入门到精通
  • 坪山网站建设哪家便宜系部网站建设研究方案
  • 如何备份网站上海的招聘网站有哪些
  • 企业门户网站建设流程蝶恋花直播app下载安装