控制结构(二)

    前面我们已经了解到了,控制结构中的判断结构,当然switch语句也是判断语句。不过如果if...else...语句你会了,我相信switch语句你也一定会的,它们的功能都是差不多的,只是switch语句在某些时候会让程序更简洁一点,此语法请看书自学。

下面进入正题。

2.循环语句。

在c语言中,循环语句一共有两种,分别是           1):while循环.                     2):for循环

基本语法格式:

1):while循环

 //第一种:
while() //括号内是判断语句,如为假,则不在执行大括号内的内容
{
printf("......");
}
 //第二种:
do//先执行下面的语句
{
printf("......");
} while(); //注意有一个分号,括号内是判断语句,如为假,则不再上面执行大括号内的内容

第一种与第二种有什么区别吗?肯定是有的。先记着,第一种至少会运行0次大括号内的类容,第二种至少会运行一次大括号内的类容。下面会解释的。

2):for循环

for(     ;    ;    )
{ }

由于for循环比while循环复杂一点,所以有必要仔细把它讲一下。首先明确此语法在程序中的运行顺序

1->2->4->3->2->4->3->2......   如果不结束的话,就会如此循环往复的运行下去,什么时候结束呢?当3中的判断语句为假的时候,for循环就会结束。可能现在讲着有点抽象,下面我会用实际的样例来讲清楚循环结构的用法。

此时的你旁边有一台开着编译器的电脑吗?

如果有的话,那么开始吧.

很简单的一道题,在键盘中输入一百的数,然后输出从1到100之间所有数的和。

当然,做了两个数相加(如果你认真看过前面的)的你肯定能想到一种笨办法,它的程序如下

#include<stdio.h>
int main()
{
int a;
//从键盘中输入100
scanf("%d",&a);
//省略的内容能补上去吧?我可不想做这么累的事
printf("%d",++++...+);
}

如果你独立写出了上面我没完成的程序,那么我只能给你说,你太傻太天真。那么有什么方法可以简化这个操作呢?机器的优点,机器擅长做很多重复性的操作,当然计算机也是这样。而重复性的操作,既是循环。好好理解下面的代码,看看是如何转化为循环性的问题的。

#include<stdio.h>
int main()
{
int a,i,sum=;
//从键盘中输入100
scanf("%d",&a);
/*i的初始值为1,每次i都加一,i++与++i的区别自己看看书
位于中间的i<=a是一个类似if()括号中的判断,如果i<=a就执行
大括号中的操作,不然就跳出循环*/
for(i=;i<=a;i++)
{
sum=sum+i;
//sum每次加上一个i的值,i每次都自加一
//于是就实现了前i个正整数的和
}
printf("%d\n",sum); //"\n"为换行符,以前没提到过
}

如果理解了上面的程序,那么继续往下看吧.

对于每一个for()循环,都可以转换为while()循环,对于每一个while()循环,都可以转换为for()循环.下面用while()循环实现上面的程序的功能

#include<stdio.h>
int main()
{
int a,i,sum=;
//从键盘中输入100
scanf("%d",&a);
i=; //i的值从一开始
while(i<=a)//如果i<=a的时候执行大括号内的操作
{
sum=sum+i;
i++;//i自加一
}
printf("%d\n",sum); //"\n"为换行符,以前没提到过
}

当然,for() 和while()中可以有很多实现它的办法,不过原理总是不会变化的,都是实现一个"累加器"的过程,例如:

//for()循环中的内容可以放在适当的内容
//来实现同样的功能
i=
for(; ; )
{
sum=sum+i;
i++;
if(i==a+) break;
}
//同样while()循环也可以
i=
while()
//1在计算机中代表真,即while循环一直
//为真,即一直会循环下去,
{
sum=sum+i;
i++;
//当i的值等于a+1时,需要打破这个循环
if(i==a+) break;
}

在上面的程序中,出现了 break; 这一语句,它的意思是 跳出/打破 这个循环.在c语言中,还有 contiue; 语句,它的意思是不再执行下面的语句,继续运行这个循环语句中的下一个循环.上面两个都需要在循环中使用.   还有  goto 语句可以了解一下,比较实用.

运行结果:

当然,前面提到的do  ...  while ; 和  while  循环的区别此时你肯定已经能理解了,如不能理解,结合文字,或者自己写写代码试试。

上面的程序能理解的话,循环对你应该没过大的问题了.虽然这很基础,但是万变不离其宗.

那好,下面算算前n个正整数,其中的所有的偶数的和吧.

很简单,就是让i从0开始,在i不大于a的情况下,让i每次都自加2,这样得到的结果即为所有偶数的和了.

最新文章

  1. 用IntelliJ IDEA创建Gradle项目简单入门
  2. c#:如何处理对对象进行深度拷贝
  3. Java集合框架(常用类) JCF
  4. log4j写入数据库
  5. this.name=name;和this.setName(name);的区别
  6. UML类图常见关系总结
  7. 随机抽样一致性算法(RANSAC)
  8. 捆绑(Bundle)
  9. Java基础知识二次学习--第八章 流
  10. MySQL二进制日志格式对复制的影响
  11. 自实现PC端jQuery版轮播图
  12. 计算机网络之动态主机配置协议DHCP
  13. springboot线程池任务调度类 -- ThreadPoolTaskScheduler介绍
  14. rocketmq的name server启动时的jvm参数配置
  15. js篇-解析url链接里面的参数名和参数值
  16. struts实现邮件发送功能
  17. tomcat 性能调优
  18. np.random.normal()正态分布
  19. Oracle与SQLSERVER 批处理执行 DDL 语句
  20. Mysql学习笔记—时间计算、年份差、月份差、天数差(转载)

热门文章

  1. Azure 上通过 SendGrid 发送邮件
  2. mac个人设置
  3. MongoDB学习笔记八:复制
  4. 【转】CSS Sprites教程大全(使用方法、工具介绍)
  5. virtualbox 中的linux 共享文件 发生文件系统类型错误的解决办法
  6. 网页首页制作总结(div+css+javascript)
  7. PHP随笔
  8. C++及数据结构笔试面试常见知识点总结
  9. javascript异步延时载入及推断是否已载入js/css文件
  10. php-Mysql示例1
  11. mac上的键盘生活——quicksliver
  12. [置顶] Android开发之ProcessState和IPCThreadState类分析
  13. elasticsearh 中每个节点中需要有相同的插件
  14. Dorado7与@ManyToMany的矛盾分析
  15. 版本控制之五:SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤(转)
  16. C#图解教程 第二十四章 反射和特性
  17. Struts2之配置文件中Action的详细配置
  18. GLSL ES 3.0 和 2.0 的区别
  19. remote connect to ubuntu unity
  20. SpringMVC(三十) 实例:SpringMVC_RESTRUL_CRUD_显示所有员工信息