【引例】 输出一行10个“*”

#include<cstdio>
int main(){
printf("**********\n");
return ;
}

思考:

(1)输出一行100个“*”

(2)输出一行1000个“*”

(3)输出……

引入for

#include<cstdio>
int main(){
for (int i=;i<=;i++)
printf("*");
return ;
}

要求:单步执行,观察循环控制变量i的变化。

【例1】输出1,2,3…,10,每个数字一行。

for的格式1:

for (控制变量初始化;条件表达式;增量表达式)

<一条语句>;

for的格式2:

for (控制变量初始化;条件表达式;增量表达式)

{

语句1;

语句2;

……

}

for语句执行过程:

(1)执行“控制变量初始化”语句,使控制变量获得一个初值。

(2)判断控制变量是否满足“条件表达式”,若满足条件则执行一遍循环体,否则跳到步骤5。

(3)根据增量表达式,计算出控制变量所得到的新值

(4)自动转到第(2)步。

(5)循环结束,执行for循环后面的语句。

【例2】键入一个自然数n,求s=1+2+...+n的值

如:

输入:

100

输出:

5050

#include<cstdio>
int main(){
int s=, n;
scanf("%d",&n);
for (int i=;i<=n;i++)
s=s+i;
printf("%d\n",s);
return ;
}

【例2拓展】 键入一个自然数n(<10000),求这个自然数的所有约数之和S (n的约数不包含1和n)。

如:

输入:

6

输出:

5

#include<cstdio>
int main(){
int s=,n;
scanf("%d",&n);
for (int i=; i<=n-;i++)
if (n%i==) s=s+i;
printf("%d ",s);
return ;
}

【例3】输入正整数n(<1000000),判断它是否为素数。是素数输出”yes”,不是素数输出”no”.素数也称为质数。

程序1(例二的延伸)

#include<cstdio>
int main(){
int s=,n;
scanf("%d",&n);
for (int i=; i<=n-;i++)
if (n%i==) s=s+i;
if (s==) printf("yes");
else printf("no");
return ;
}

程序2(使用标志变量,添加break):

#include<cstdio>
int main(){
int n,f=;
scanf("%d",&n);
for (int i=; i<=n-;i++)
if (n%i==) {
f=; }
if (f==) printf("yes");
else printf("no");
return ;
}

尝试:n=1000000007

程序3(提高程序效率)

#include<cstdio>

#include<cmath>

int main(){

  int n,m,f=;

  scanf("%d",&n);

  m= floor(sqrt(n)+0.5);

  for (int i=; i<=m;i++)

     if (n%i==) {

       f=;

       break;

  }

  if (f==) printf("yes");

  else printf("no");  

  return ;

}

知识补充:floor(x)返回不超过x的最大整数

思考:循环结束时变量i的值是多少,输出结果验证和你的猜测。

程序4(灵活利用for循环)

#include<cstdio>
#include<cmath>
int main(){
int i,n,m;
scanf("%d",&n);
m=floor(sqrt(n)+0.5);
for (i=; i<=m&&n%i!=;i++);
if (i==m+) printf("yes");
else printf("no");
return ;
}

注意:

在for循环“控制变量初始化语句”中声明的变量,这些变量只在for循环结构中有效,离开了该for结构,变量就无效了。

练习1. 编一个程序,从键盘输入一个分数的分子a和分母b(a<b),输出它的小数形式,精确到小数点后n位。a,b,n<1000,不考虑四舍五入。

练习2.

数列的前两项分别是1、1,从第三项开始,每个数均为前面两项的和,即: 1,1,2,3,5,8,…。

输入:n

输出:数列第n项的值,n<=90

如:

输入:6

输出:8

for循环进阶的更多相关文章

  1. 大数据之路day04_1--数组 and for循环进阶

    Java数组 在开始之前,提一个十分重要的一点:注意:在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小.创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小.在jav ...

  2. 【Python】学习笔记十四:循环进阶

    range() 在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标. 我们继续开发range的功能,以实现下标对循环的控制: s = 'abcdefghj' ...

  3. 事件循环进阶:macrotask与microtask

    这段参考了参考来源中的第2篇文章(英文版的),(加了下自己的理解重新描述了下), 这里没法给大家演示代码,我就简单说下我的理解吧. promise和settimeout 在一起的时候执行顺序是个有意思 ...

  4. Python之while循环

    1.While循环基础 2.While循环进阶 3.其他

  5. JavaScript的for循环

    1.循环的目的 什么是循环?循环的目的是什么?循环能做什么? 举一个小例子:武汉疫情,学了JavaScript,必须拿JavaScript干点有意义的事情.我们想告诉武汉:“武汉加油,武汉挺住啊!”. ...

  6. 从浏览器多进程到JS单线程,JS运行机制的一次系统梳理

    前言 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会及时修正. ----------超长文+多图预警,需要花费不少时间.---------- 如果看完本文后,还对进程线程傻傻分不清,不清楚浏 ...

  7. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

    前言 来源:https://dailc.github.io/2018/01/21/js_singlethread_eventloop.html 见解有限,如有描述不当之处,请帮忙及时指出,如有错误,会 ...

  8. ansible-play中for,if的使用

    #迭代循环的使用 #实现同时新建三个文件,同时部署三个服务 --- - host: websrvs remote_user: root task: - name: create some files ...

  9. 使用C#开发数据库应用程序

    第一章 用Hello ACCP.NET快速热身(一) 1-1.进入C#世界 a.第一个C#程序 (1)新建项目[项目:project] (2)生成解决方案[生成:build,解决方案:solution ...

随机推荐

  1. The Daligner Overlap Library

    /************************************************************************************\ * * * Copyrig ...

  2. APMServ本地搭建网站最好用的软件

    APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9.PHP 5.2.6.MySQL 5.1.28&4.0.26.Nginx 0.7.19.Memcached 1. ...

  3. electron小例子

    说明:该例子主要实现把输入框中的文字保存到本地的文本文档中. 在main中添加几句代码 const ipcMain = electron.ipcMain; const dialog = electro ...

  4. SqlServer关闭与启用标识(自增长)列

    1 --添加新列 2 ALTER TABLE TABLENAME ADD ID int 3 --赋值 4 UPDATE TABLENAME SET ID = IDENTITY_ID 5 --删除标识列 ...

  5. 使用DD_belatedPNG让IE6支持PNG透明图片

    使用DD_belatedPNG让IE6支持PNG透明图片 众所周知IE6不支持透明的PNG图片,而PNG图片在Web设计方面表现力上,具有其它图形格式所达不到的效果,IE6这一致命缺陷极大地限制了We ...

  6. SQL 创建索引的作用以及如何创建索引

    SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一.使用索引的优点: 1.通过唯一性索引(unique)可确保数据的唯一性 2.加快数据的检索速度 3.加快表之间的连接 4.减少分组和 ...

  7. 盘点:崛起中的九大HTML5开发工具

    HTML5被看做是Web开发者创建流行Web应用的利器,增加了对视频和Canvas 2D的支持.HTML5的诞生还让人们重新审视浏览器专用多媒体插件的未来,如Adobe的Flash和微软的Silver ...

  8. Servlet容器如何同时来处理多个请求

    工作者线程Work Thread:执行代码的一组线程调度线程Dispatcher Thread:每个线程都具有分配给它的线程优先级,线程是根据优先级调度执行的Servlet采用多线程来处理多个请求同时 ...

  9. CSS从今以后不用发愁

    Bootstrap 简洁.直观.强悍的前端开发框架,让web开发更迅速.简单. Bootstrap3中文文档 Bootstrap2中文文档 http://www.bootcss.com/

  10. ASP.NET MVC的Ajax.ActionLink 的HttpMethod="Get" 一个重复请求的BUG

    这段时间使用BootStrap+Asp.net Mvc5开发项目,Ajax.ActionLink遇到一个重复提交的BUG,代码如下: @model IList<WFModel.WF_Temp&g ...