c语言循环语句,c语言第五章循环结构

  c语言循环语句,c语言第五章循环结构

  【前言】:循环语句增加的知识点很重要。铁汁要和零食一起记。

  I. while语句while语句

  While(表情)

  {

  循环语句;

  }

  【敲黑板】:条件表达式的执行次数比循环体多1次。

  循环中的Break语句和continue语句:

  break语句在循环中的作用:break是永久终止循环;

  continue语句在循环中的作用:continue用于终止这个循环,也就是说continue之后的代码不会在这个循环中执行,而是直接跳转到while语句的判断部分。

  1: Getchar()函数原型:

  Getchar (void)函数:

  读取标准输入缓冲区中的字符,并返回所读取字符的ASCII码值。如果读取失败,返回EOF(-1)

  问:getchar()为什么返回字符的ASCII码值?为什么函数的返回值要放在int类型的变量里?不应该放在char类型的变量里吗?

  比如:

  int ch=0;

  ch=getchar();答:

  Getchar()返回字符的ASCII码值。ASCII码值是整数,存储在整数变量中没有问题;这也是最重要的一点。getchar()在读取失败时返回EOF。e of的本质是-1(#定义EOF -1),是一个整数值。在char类型中,它不能被存储;结合getchat()函数的原型,将getchar()的返回类型定义为int,那么返回的数据应该存储在int变量中。

  Getchar():获取/输入一个字符;

  Putchar():输出字符

  注意,这两个函数一次只能操作一个字符。没有scanf(),printf()功能齐全。

  2.补充:输入缓冲区介绍:

  #包含stdio.h

  int main()

  {

  char input[20]={ 0 };

  Printf(请输入密码:);

  scanf(%s ,输入);//输入abcdef,后跟一个\n

  Printf(请确认密码:(Y/N):);

  int ch=getchar();

  if (ch==Y )

  {

  Printf(确认成功\ n );

  }

  其他

  {

  Printf(确认失败\ n );

  }

  返回0;

  }此时abcdef放入输入缓冲区\n,scan f()函数将ABCDEF读走,留下一个\n,所以\n直接由getchar()读取,所以此时放入ch中\ n,然后我们不会等到确认密码直接输出确认失败。

  存在的问题:在这个问题中输入abcdef,然后回车。在我们输入字符(Y/N)之前,直接输出“确认失败”。怎么才能把它变成我们想要的样子?

  在scanf()下添加一条语句:getchar();目的只有一个,拿回车键( \n ),

  存在的问题:这个改动只能保证输入“abcdef”时的正常执行,但如果输入“abcdef呵呵”,会直接输出“确认失败”。不要相信我。

  我输了,什么鬼,怎么又错了!

  注意:

  scanf(%s ,);//scanf()在读取字符串时遇到空格就停止读取。

  分析前面的代码:

  #包含stdio.h

  int main()

  {

  char input[20]={ 0 };

  Printf(请输入密码:);

  scanf(%s ,输入);//scanf()只读“abcdef”

  getchar();//getchar()读取一个空格,所以这里有问题。这里的Getchar()只能接受一个字符。我们想要的是它能缓冲

  //去掉所有剩余的字符,直到 \n

  Printf(请确认密码:(Y/N):);

  int ch=getchar();

  if (ch==Y )

  {

  Printf(确认成功\ n );

  }

  其他

  {

  Printf(确认失败\ n );

  }

  返回0;

  }是的,这里的getchar()只能取一个字符。我们想要的是它可以占用缓冲区的所有剩余部分,直到它占用 \n 。怎么改?

  #包含stdio.h

  int main()

  {

  char input[20]={ 0 };

  Printf(请输入密码:);

  scanf(%s ,输入);//scanf()只读“abcdef”

  //清理缓冲区

  int tmp=0;

  while ((tmp=getchar())!=\n )

  {

  ;//空语句,什么都不做,只取字符

  }

  Printf(请确认密码:(Y/N):);

  int ch=getchar();

  if (ch==Y )

  {

  Printf(确认成功\ n );

  }

  其他

  {

  Printf(确认失败\ n );

  }

  返回0;

  }

  就是这样。注意上面的清缓冲功能。

  二、对于流通注意事项:

  for循环的风格更好,使用频率最高。

  建议:

  不能在for循环内部修改循环变量,以防止for循环失去控制。建议将for语句中循环控制变量的值写成“先关后开”

  比如:

  for(I=10;i 10I) //关闭前打开。

  for(I=10;i=10I) //Close before和close after(不建议这样写,但也可以用来更好的解释)for循环的一些变体:

  可以省略for的初始化、判断和调整;如果省略了中间判断部分,就意味着判断始终为真,构成了一个无限循环。所以如果条件允许,不建议省略。

  笔测试问题:

  //问:你打印了几次呵呵?

  #包含stdio.h

  int main()

  {

  int I=0;

  int j=0;

  for(;i3;我)

  {

  for(;j 3;j)

  {

  printf(呵呵\ n );

  }

  }

  返回0;

  }嘿嘿,想必铁汁心里已经有了自己的答案。来看看和正确答案一样吗?

  哈哈,说实话,第一次做这道题,我想了九遍,为什么是三遍呢?

  看,所以尽量不要省略for循环中的表达式。

  添加另一个测试问题:

  int I=0;

  int k=0;

  for(i=0,k=0;k=0;I,k) //k=0赋值,0为假,判断表达式始终为假,循环执行0次。

  {

  k;

  }三。做.while()循环do.while循环与前两个循环的不同之处在于,它的循环体至少执行一次!

  做

  循环语句;

  While(表情);注意:do.while语句使用的场景有限,因此不会经常使用。

  四。练习练习1:计算n的阶乘伪码:

  int ret=1;

  int I=0;

  for(I=1;I=n;我)

  {

  ret=ret * I;

  }练习二:计算1!2!3!n!在练习1中,我们知道如何计算n的阶乘,所以计算1!2!3!n!简单多了。

  来,先看一个错误演示:

  //为了测试方便,我这里简单算到1!2!3!

  #包含stdio.h

  int main()

  {

  int I=0;

  int ret=1;

  int sum=0;

  int n=0;

  for(n=1;n=3;n)

  {

  for(I=1;I=n;我)

  {

  ret=ret * I;

  }

  sum=sum ret

  }

  printf(%d\n ,sum);

  返回0;

  }其实1!2!3!=9,但实际上结果是.

  结果是15。为什么?

  因为第二个循环中的ret是上一次剩下的值,而我们想在计算完某个数的阶乘一次后,将ret重置为1,然后再计算下一个数的阶乘。

  因此,按如下方式重写代码:

  //为了测试方便,我这里简单算到1!2!3!

  #包含stdio.h

  int main()

  {

  int I=0;

  int ret=1;

  int sum=0;

  int n=0;

  for(n=1;n=3;n)

  {

  ret=1;//注意

  for(I=1;I=n;我)

  {

  ret=ret * I;

  }

  sum=sum ret

  }

  printf(%d\n ,sum);

  返回0;

  }虽然上面的代码是正确的,但是仍然不够高效,其时间复杂度为O (n 2)。仅仅一层循环就能解决吗?其实是有可能的,因为上面的计算已经重复过很多次了。

  如上计算,1!2!3!反复计算了很多次。

  //ret * 1

  //ret * 1 * 2

  //ret * 1 * 2 * 3因此将其重写为高效的代码,如下所示:

  for(n=1;n=3;n)

  {

  //n*(n-1)!=n!

  ret=ret * n;

  sum=sum ret

  }

  【敲黑板】:我们写算法的时候,不要骄傲。想想怎么更精,所以多学多练!

  加油!

  ,安全有保障。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: