重温c语言之,7天开整,就是随便的写写,第五天
一:库函数---printf()
这个函数printf()的返回值是int,这个函数竟然有返回值,值的多少是取决于输出的内容有多少个字符
二:循环
1、for循环
这个循环中,如果判断的地方省略的话,这个循环就是永远成立(恒成立),
1 for(;;)
这样的话,就会无线循环下去--------(弊端1)
其中初始化省略的话也会有一些问题,例如下面的代码:
1 int i=0; 2 int j=0; 3 for(;i<3;i++){ 4 for(;j<3;j++){ 5 printf("hello world! "); 6 }
prtintf("\n"); 7 }
这个代码就是会发生错误,原本要打印3X3的hello world的,但是结果就打印了一行的hello world,为什么?是因为这个初始化没有写,
当第一次运行完外层循环的时候,内层循环会执行完(3次都执行,也就是j=3),然而外层循环开始第二次的时候,j没有初始化,也就是说,j=3,没有改变值,
所以,内层循环会直接不执行,最后结果就是:hello world! hello world! hello world! ,与一开始想要整出矩阵不一样,那怎么解决这个问题呢,初始化就可以了
1 #include <stdio.h> 2 3 int main() { 4 int i = 0; 5 int j = 0; 6 7 for (; i < 3; i++) { 8 for (j=0; j < 3; j++) { 9 printf("hello world"); 10 } 11 printf("\n"); 12 } 13 14 return 0; 15 }
结果:
hello worldhello worldhello world
hello worldhello worldhello world
hello worldhello worldhello world
还有就是当判断变成赋值的时候,这个循环可能不会执行,例如下面的代码:
1 #include <stdio.h> 2 int main() 3 { 4 for (int i = 0; i = 0; i++) 5 { 6 printf("hello!"); 7 } 8 9 return 0; 10 }
这个判断的条件就是假,所以,不会执行循环,
但如果是其他的等式呢,直接就是变成了死循环,因为其他的条件都为true
1 #include <stdio.h> 2 int main() 3 { 4 for (int i = 0; i = 1; i++) 5 { 6 printf("hello!"); 7 } 8 9 return 0; 10 }
所以在这段代码里面,程序会一直输出:hello!
2、while
当需要在数组中查找某一个数据的时候,可以用到----二分查找,注意:需要数组是有序数组,例如以下的代码:
1 // 在一个有序的数组中查找某个具体的数字。(二分查找) 2 // 前提:有序 3 #include <stdio.h> 4 int main() 5 { 6 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 7 int n = 0; 8 scanf("%d", &n); 9 int length = sizeof(arr) / sizeof(arr[0]); 10 int left = 0; 11 int right = length - 1; 12 int middle = (left + right) / 2; 13 while (left <= right)//前提是数组里面需要左边的坐标要小于右边的坐标 14 { 15 if (n < middle) 16 { 17 right = length - 1;//这里是把目光放到了数组左边的地方 18 } 19 else if (n > middle) 20 { 21 left = length + 1;//这里是把目光放到了数组右边的地方 22 } 23 else 24 { 25 printf("找到了!\n"); 26 break; 27 } 28 } 29 if (left > right) 30 { 31 printf("没找到!\n"); 32 } 33 34 return 0; 35 }
我这里写错了,,,需要修改的地方是:middle这个变量,需要放在循环里面-----抱歉,求放过,重新上代码
1 // 写一个函数,实现一个整形有序数组的二分查找 2 #include <stdio.h> 3 4 int Binary_sarch(int *arr, int n, int num) 5 { 6 int left = 0; 7 int right = n - 1; 8 int middle = 0; 9 while (left <= right) 10 { 11 middle = left + (right - left) / 2; 12 if (num > arr[middle]) 13 { 14 left = middle + 1; 15 } 16 else if (num < arr[middle]) 17 { 18 right = middle - 1; 19 } 20 else 21 { 22 return middle; 23 } 24 } 25 return -1; 26 } 27 int main() 28 { 29 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 30 int num = 0; 31 scanf("%d", &num); 32 int ret = Binary_sarch(arr, sizeof(arr) / sizeof(arr[0]), num); 33 if (ret == -1) 34 { 35 printf("没有找到."); 36 } 37 else 38 { 39 printf("找到了,下标是%d\n", ret); 40 } 41 42 return 0; 43 }
我这里更新了一下,运用了函数来完成的