for循环进阶

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

#include<cstdio>
int main(){
    printf("**********
");
    return 0;
}
View Code

思考:

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

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

(3)输出……

引入for

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

要求:单步执行,观察循环控制变量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=0, n;
    scanf("%d",&n); 
    for (int i=1;i<=n;i++)
        s=s+i;
    printf("%d
",s);
    return 0;
}
View Code

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

如:

输入:

6

输出:

5

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

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

程序1(例二的延伸)

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

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

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

尝试:n=1000000007

程序3(提高程序效率)

#include<cstdio>

#include<cmath>

int main(){

  int n,m,f=0;

  scanf("%d",&n);

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

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

     if (n%i==0) {

       f=1;

       break;

  }

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

  else printf("no");  

  return 0;

}
View Code

知识补充: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=2; i<=m&&n%i!=0;i++);
    if (i==m+1) printf("yes");
    else printf("no");     
    return 0;
}
View Code

注意:

    在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

原文地址:https://www.cnblogs.com/ssfzmfy/p/5068905.html