分支与循环语句(2)

ps:总结近期所学,供复盘复习使用,有不足请指出,共同进步!

续2023-1-8所学:


getchar/putchar了解

续上篇中所复述的知识点,感觉还不够透彻,故再交代清楚。

分支与循环语句(1)

  • scanf输入

  • printf输出

  • getchar读取一个字符

  • putchar输出/打印一个字符

  • getchar 读取到字符的时候返回的是字符的ASCII码值

如果读取失败,返回的是 EOF ---> -1 ASCII:0~127

关于缓冲区代码的相关理解

分支与循环语句(2)_第1张图片
  • eg1:

分支与循环语句(2)_第2张图片

原因:

分支与循环语句(2)_第3张图片

解决办法:需要清除\n

分支与循环语句(2)_第4张图片

但是!这样的代码换另一个输入方式结果就会不一样,这个代码其实还不够完善,如:

分支与循环语句(2)_第5张图片

分析:

分支与循环语句(2)_第6张图片

才会出现上面的情况。

所以:完善代码如下:

分支与循环语句(2)_第7张图片
  • 此例子引出的一个小问题

Q:scanf为什么不可以读取空格?

其实是可以的:

#define _CRT_SECURE_NO_WARNINGS
#include  
int main()
    
{
    char name[20] = {0};
    scanf("%[^\n]", name);;
    printf("%s\n", name);

            return 0;
}
分支与循环语句(2)_第8张图片

不过,[^\n]实际没啥价值

另外:

//这个代码的作用是:只打印数字字符,跳过其他字符的
#include  
int main()
{
    char ch = '\0';
while ((ch = getchar()) != EOF) 
    {
         if (ch < '0'|| ch > '9') 
            continue;
         putchar(ch); 
    }
return 0; 
}

ok,关于2023-1-8的getchar/putchar相关补充就到这了。

接下来是续上文:循环结构中的for循环以及相关例子的理解。


循环结构【补充】

for循环

语法:

for(表达式1; 表达式2; 表达式3)
    循环语句;
  • 表达式1为初始化部分,用于初始化循环变量的。

  • 表达式1为初始化部分,用于初始化循环变量的。

  • 表达式3为调整部分,用于循环条件的调整。

eg://打印1-10

#include 
int main()
{
    int i = 0;
    //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
    for (i = 1; i <= 10; i++)
    {
        printf("%d ", i);
    }
    return 0;
}

执行流程

分支与循环语句(2)_第9张图片

for循环中的break语句

#include 
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            break;
        printf("%d ", i);
    }
    return 0;
}
//输出结果是:1 2 3 4

作用与while循环中的break语句一致。

for循环中的continue语句

#include 
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            continue;
        printf("%d ", i);
    }
    return 0;
}
//输出结果是:1 2 3 4 6 7 8 9 10

作用与while循环中的continue语句一致。

for循环中一些变式

    • 变1
#include 
int main()
{
    for (; ;) //for循环中的初始化部分,判断部分,调整部分是可以省略的
//但是不建议初学时省略,容易导致问题
    {
        printf("hehe\n");
    }
    return 0;
}
    • 变2
#include 
int main()
{
    int j = 0;
    int i = 0;
//会打印出几个hehe呢?
    for (; i < 3; i++)
    {
        for (; j < 3; j++)
        {
            printf("hehe\n");
        }
    }
    return 0;
}//3个hehe
分支与循环语句(2)_第10张图片

    • 变3
#include 
int main()
{
    int j = 0;
    int i = 0;
//会打印出几个hehe呢?
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("hehe\n");
        }
    }
    return 0;
}//9个hehe
    • 变4
#include 
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
    printf("hehe\n");
}
return 0;
}//2个hehe
  • 小题目

//请问循环要循环多少次?
#include 
int main()
{
 int i = 0;
 int k = 0;
 for(i =0,k=0; k=0; i++,k++)//k = 0,0表示为假,故不循环!!!
        k++;
 return 0;
}
关于for循环的小tips:

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

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

do...while循环

语法:

do
      循环语句;
while(表达式);
分支与循环语句(2)_第11张图片

执行流程

分支与循环语句(2)_第12张图片

do...while循环中的break语句

分支与循环语句(2)_第13张图片

break直接跳出循环体

do...while循环中的continue语句

分支与循环语句(2)_第14张图片

以上就是2023-1-9所学。

接下来还会更新分支与循环语句中的go to语句以及相关一些经典有代表意义的题目。

ps:总结近期所学,供复盘复习使用,有不足请指出,共同进步!

你可能感兴趣的:(C语言,c语言,开发语言)