重温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 }

我这里更新了一下,运用了函数来完成的

posted @ 2024-11-05 14:49  我是一个小笨蛋  阅读(36)  评论(1编辑  收藏  举报