赞
踩
#include<stdlib.h > #include<time.h>//时间函数需要 void menu() { printf("**************************************\n"); printf("*****1.玩游戏 **********2.exit********\n"); printf("**************************************\n"); }//设计函数 void game() { int guess = 0; //printf("猜数字:"); int ret = 0; ///生成随机数 //srand(1);//srand写完之后发现是一个固定不动的值 //srand这括号里的数字也需要随机怎么办 //srand((unsigned int)time(NULL));//用电脑自己带的时间戳的概念(当前计算机的时间减去计算机的起始时间1970 1.1.0:0:0) //时间戳的结果是多少秒 //时间戳设置随机数strand((unsigned int) time(NULL)) ; ret = rand() % 100 + 1; //生成1-100之间的 //printf("%d\n", ret);///发现并不真随机 //在调用rand之前要先设计一个srand while (1) { printf("请猜数字:"); scanf("%d", &guess); if (guess > ret) { printf("猜大了\n"); } else if (guess < ret) { printf("猜小了"); } else { printf("恭喜你猜对了"); break; } } } ///游戏开始 int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 1: game(); break;//游戏过程 case 0: printf("退出游戏\n"); break; default: printf("选择错误\n"); break; } } while (input);这里的判断是当你正好这次做完了,因为上面输入是1.然后到这里满足条件,开始重新进行menu(), 等等循环 return 0; } ///要学习
//整活程序 #include<stdio.h> #include<string.h> #include<stdlib.h > int main() { //关机程序 shutdown-s-t-60 //system() 用来执行系统命令 char input[20] = { 0 }; system("shutdown -s -t 60"); again : printf("请注意你的电脑将在60s后关机,如果输入我是猪就取消关机\n"); scanf("%s", input); if (strcmp(input, "我是猪") == 0)/判断字符串必须用strcmp { system("shutdown -a"); } else { goto again; } return 0; }
void jiaohuan(int x, int y) /void代表没有返回值 { int temp = 0; temp = x; x = y; y = temp; //return 0; } int main() { int a = 10; int b = 20; jiaohuan(a, b); printf("%d", a ); return 0; }
//
为什么最后结果还是a为10 b 为20 .因为 x y 其实与a b 的地址并不相同,我们通过
通过temp只是交换了x y并没有交换 a b
因为 x y 也都创建了空间交换完成之后并没有将结果传回
换一种方法设计
/
void jiaohuan(int x, int y) /void代表没有返回值 { int temp = 0; temp = x; x = y; y = temp; //return 0; } int main() { int a = 10; int b = 20; jiaohuan(a, b); printf("%d,%d", a,b ); return 0; }
//
/*int main()
{
int a = 0;
int* pa = &a;*/ //pa是a的地址,类型是int*
///而 *pa的单独使用是相当于a的值
}
void jiaohuan(int* pa, int* pb)指针变量 { int temp = 0; temp = *pa; *pa = *pb; *pb = temp; } int main() { int a = 10; int b = 20; printf("%d,%d\n", a, b); jiaohuan(&a, &b); printf("%d,%d", a, b); return 0; }
什么意思呢,就是说我用地址传过去
///那么我上面接收到的pa pb 就是 a b 地址 也可以说就是a b 既然是同一个东西
//我再用*pa 解引用操作,将值交换,那么a b自然就会交换
/实际参数和形式参数
当实际参数传递给形式参数时,形式参数其实是实参的临时拷贝
//此时对形参的修改不会改变实参
//调用函数有传值和传地址调用
/
//
之前的求两个数的较大值,并没有传地址。因为传过去之后,返回一个值
//我们只想知道这两者之间的最大值是谁,并不需要知道谁是谁{我们想得到结果}
//但是对于另一个我们需要的改变{当我们想要通过外部改变内部效果,就需要把地址传过去}
/我们想要改变结果就要传地址
int su(int x) { int i = 0; for (i = 2; i < x ; i++) { if (x %i == 0) { return 0; } } return 1; } int main() { int a = 0; printf("请输入:"); scanf("%d", &a); int con = su(a); if (con == 1) { printf("是素数"); } else { printf("不是素数"); } return 0; }
写完一个函数 来查找数组指定位置
///二分查找
/在一个有序数组查找,找到了返回下标。找不到返回-1
int chazhao(int arr[], int a,int sz) { int left = 0; //int sz = sizeof(arr) / sizeof(arr[0]); int right = sz - 1; while (left <= right) { int mid = (left + right) / 2; if (a > arr[mid]) { left = mid+1; } else if(a<arr[mid]) { right = mid-1; } else { return mid; } } if (left < right) { return -1; } } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int a = 7; int sz = sizeof(arr) / sizeof(arr[0]);/先提前写好sz int con = chazhao(arr, a,sz); if (con == -1) { printf("meizhaodao"); } else { printf("这个数字位于第%d位\n", con); } return 0; }
//上述代码有问题,定义有问题
/形参是实参的临时拷贝,所以数组在传参的时候仅仅是数组首元素地址(本质上是一个指针)
/在数组的传输过程中
/题目 编写函数不允许创建临时变量,求字符串长度
#include <string.h>
int main()
{
char arr[] = "bit";
int a = strlen(arr);
printf("%d", a);
return 0;
}
不许用stelen
int qiuchangdu(char* str)///str是一个指针变量 //计算字符串长度 { int i = 0; while (str[i] != '\0') { i++; } return i; } int main() { char arr[] = "biaaaaaaattt"; int a = qiuchangdu(arr);///arr是数组,数组传参,传过去的不是整个 //不是整个数组,而是第一个元素的地址 printf("%d", a); return 0; }
自己做正确
。。。。。。。。。。。。。。。。。。。。。。。。他的做法
int qiuchangdu(char* str)///str是一个指针变量 //计算字符串长度 { int i = 0; while (*str!= '\0')//我的做法因为char 型其实自带指针系的操作 //不知道你在前面的scanf感受到没有,为什么scanf char不需要取地址呢 //因为char他就是地址 //我现在把char型换成str其实是同一个东西,但是函数调用只能是char型的首字符 //所以我用的str[i]我觉得我还真没问题 //而他这里面为什么是str++ ,因为str是地址啊,而且是首位地址我加一下不就向后移动了 //这里i++单纯是为了计算第几位,无关紧要 { i++; str++; } return i; } int main() { char arr[] = "bt"; int a = qiuchangdu(arr);///arr是数组,数组传参,传过去的不是整个 //不是整个数组,而是第一个元素的地址 printf("%d", a); return 0; }
/不用 i 出现创建变量
/用递归的方法
///其实我觉得他的说话有问题,只是说最好用递归去完成这项工作
int qiuchangdu(char* str)///str是一个指针变量 //计算字符串长度 { if (*str != '\0') { return 1+ qiuchangdu(str+1); } else { return i; } } int main() { char arr[] = "bittaaaaa"; int a=qiuchangdu(arr); printf("%d", a); return 0; }
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我还是用的static 加法
int qiuchangdu(char* str)///str是一个指针变量 //计算字符串长度 { static i = 0; if (str[i] != '\0') { i++; qiuchangdu(str); } else { return i; } } int main() { char arr[] = "bittaaaaa"; int a=qiuchangdu(arr); printf("%d", a); return 0; } 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 递归的做法是将复杂问题化解 求1234 我们从前拆 (123) 4 求数组个数 找到它们之间联系的共性 比如说位数,主要是位数 最与数组或者字符相关
void dayin(int a) { scanf("%d", &a); printf("结果是:%d",a); return 0; } int main() { int a = 0; printf("输入一个数:"); dayin(a); return 0; }
更加优化的做法 ///1234%10 余4 接下来继续模10 就会得到 其他余数 3 2 1 //这里的做法好但是又不是特别好 //用递归的思路把一个复杂问题先简单化处理 //我们设计一个函数 命名print //假设需要打印的数为1234 我们先拆成(123)4 || (12) 3 4 || (1) 2 3 4 void print(int n) { if (n > 9) { print(n / 10); } printf("%d\n", n%10); } //举个例子就2位 ,递归的意思就是不停的用自身完成简化目的 //我先输入19 第一次进入大于9 ,那么先取一个高位1,再对1 进行操作, ///1进行了一个完整的print操作,最后输出了一个1 .而做完这次之后。下面还 //留有一个printf用来打印9 所以这个方法好 int main() { unsigned int num = 0; scanf("%d", &num); print(num); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。