简单了解分支和循环

分支和循环

分支

if else

易错

悬空else

当你写了这个代码︰

#include <stdio.h>

int main()

{

int a = 0;

int b = 2;

if(a == 1)

    if(b == 2)

        printf("hehe \n");

    else

        printf("haha\n");

return 0;

}

很容*易认为结果是hehe,实际应该是haha,

这样的代码可读性非常低,我们编写代码应该要避免出现这样的代码

平常要注意一下几点

1.分清独立的部分,用空行将相关性强的划分再一起,

2.适当添加{ } 将一些部分分在一起

3.适当使用assert (断言),这是一个对程序员很友好的函数

4.推荐书《高质量的C--C++编程》

switch case语句

这个语句其实页没什么重要说的,使用起来比较简单

注意一下几点就好

1.switch对应的()内只能放整形,或者整形表达式(char类型也可以,char又被称作短整型)

循环Continue

总结: continue在while循环中的作用就是∶

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

//代码什么意思?

//代码1

#include <stdio.h>

int main()

{

int ch = 0;

    while ((ch = getchar()) != EOF)
     //getchar获取字符,EOF意思是文件结束标志 ctrl+z 输出停止
       { 
        putchar(ch);
        }

return 0;

}

打印从键盘上获得的字符

gerchar()和putchar都只能获取/输出一个字符,对于多个字符可以考虑gets ,puts

或者直接printf 和scanf

break和continue.区别

注意

continue在while,do while循环跳出后来到判断部分
在for中找到变量改变部分,再判断
判断部分写成前闭后开形式,少用浮点数
方便计算循环次数

goto语句(灵活度极好,可以随意跳转容易错乱)

有的公司编码禁止用goto,但是goto可以出奇效喔
注意goto不能跨代码块和文件
goto去的地方以便签为标志,和函数调用不一样哟

void没有返回值,原因

void在内存中的空间开辟的空间为0(vs)
在不同编译器中大小不一样
void在内存中的空间开辟的空间为1 (linux)

根本原因

void本身就被编译为空类型,强制不允许定义变量

For循环

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>


int main()

{

int i = 0; //初始化判断调整

for(i=1; i<=10; i++)

    {

        if (i == 5)

            continue;
        else

            printf("%d ", i);

    }

    return 0;

}

#define _CRT_SECURE_NO_WARNINGS、

#include<stdio.h>

#include<string.h>

#include<stdlib.h>



int main()

{

int i = 0;//初始化判断调整

for(i=1; i<=10; i++)

    {

        if (i == 5)

                break;
        else

            printf("%d ", i);

    }

return 0;

}

for语句的循环控制变量—些建议∶

1.不可在for循环体内修改循环变量,防止for 循环失去控制。

2.建议for语句的循环控制变量的取值采用′前闭后开区间"写法。

省略会产生问题

外层可以省,内层不能

练习题

1 计算n!

2 计算n!的总和

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define max 4


int main()

{

int i = 0, n = 0, ret = 1;

int sum = 0;



for (n = 1;n < max;n++)

    {

        ret *= n;

        sum += ret;

    }

printf("sum=%d\n", sum);

return 0;
}

遍历,查找

案例

二分法查找

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()

{

//二分法查找(针对有序数组)

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };

int sz = sizeof(arr) / sizeof(arr[0]);

    int left = 0;

    int right = sz - 1;

    int k = 7;

    int mid = (left + right) / 2;

while (left <= right)

    {

    int mid = (left + right) / 2;

        if (arr[mid] > k)

            {

            right = mid - 1;

             }

    else if (arr[mid] < k)

            {

                left = mid + 1;

            }

        else

            {

                printf("找到了,下标是:%d\n", mid);
        
                break;

            }

}



if (left > right)

        {

            printf("找不到 \n");

            return 0;

            }

}

//普通方法

int arr[] = {1,2,3,4,5,6,7,8,9,10} ;

int k = 7;

//写一个代码,在arr数组(有序的)中找到7

int i = 0 ;

int sz = sizeof(arr) i sizeof(arr[0]) ;

for (i=0; i<sz;k+)

    {

        if (k == arr[i])

        {

            printf("找到了;下标是:%d \n", i);

            break;

        }

}

if (i==sz)

     printf(“找不到 \n“);

return 0;

}

案例2 stremp

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    char password[20] = { 0 };

for (i = 0; i < 3; i++)
    {
        printf("请输入密码:>");
        scanf("%s", password);
    if (stremp(password,"123456") ) 
        //= = 不熊用来比较字符符患是否相等,应该用一个库函数 - stremp
        {
            printf("登录成功\n");
            break;
        }

        if (i == 3)
                printf("三次密码均错误,退出程度\n");
   } 
return 0;
}

作业

辗转相除法(求最大公约数)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
int m=24;
int n=18;
int r=9;
    while(m%n)
        {
            r= m%n;
            m=n;
            n =r;
        }
    printf("%d\n",n);

return 0;
}

打印闰年

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>


int main()
{

int i = 0,count=0;

for (i = 1000; i <= 2000; i++)

    {

        if (i % 4 == 0 && i % 100 != 0)

            {

                printf("%d  ", i); count++;

            }

        else if(i % 400 == 0)

            {
        
            printf("%d  ", i);
             count++;
            }

     }

    printf("\n%d  ", count);

return 0;

}

打印九九乘法表

打印九九乘法表

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int main()

{

int i = 0;

int j = 0;

    for (i = 1; i <= 9; i++)
        {

            for (j = 1; j <= i; j++)

                {

                    printf("%d*%d=%-2d  ", i, j, i * j);

                }

        printf("\n");

        }

return 0;

}

 拓展知识 时间戳

当前计算机的时间-计算机的起始时间(1970.1.1.0:0:0 ) =( xxxx)秒

Goto语句 一般不要用

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。

设置关机

// shutdown -s -t 60 意思是60s后关机

// shutdown –a 意思是取消关机

/ / system()-执行系统命令的

system(" shutdown-s -t 60") ;  //执行60s后关机

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值