循环语句
这一次主要来简单介绍一下关于循环语句的一些知识点使用及部分注意问题。
一、循环语句知识点:
C语言提供for、while、do-while三种循环语句来实现循环结构。当给定循环条件为真时,重复执行一个语句序列,即循环体。
其中while语句属于当型循环,其一般形式为:
while(循环控制表达式)
{
语句序列
}
花括号内表示循环体,用于计算循环控制表达式的值。
for语句也属于当型循环语句,它的使用方式很灵活,使用频率也最高,一般解题用到循环语句时基本都可以使用for循环语句解决。当然,这几种循环语句都是互通的,使用任何一种都可以,看题型要求与个人情况来确定使用哪种循环语句。
for语句一般形式为:
for(初始化表达式;循环控制表达式;增值表达式)
{
语句序列
}
初始化表达式一般为初始化循环控制变量,对其赋初值,循环控制表达式即循环条件,另外每次执行循环时都要执行一次增值表达式。
这三点在循环语句中都是可以省略的,变成空语句,死循环,但是一个for循环语句中必须有两个分号,不可省略。
当循环语句变为死循环时,这时可能需要break语句来跳出循环。
do-while语句属于直到型循环,其一般形式为:
do
{
循环语句
}while(循环控制表达式);
该循环语句与while、for、语句不同之处就是先执行循环,再判断是否符合循环条件继续循环,所以do-while循环至少执行循环一次。
当使用一个循环语句无法解决时,可以使用多个循环进行嵌套。下面的简单程序可用于演示嵌套循环执行过程:
#include<stdio.h>
main()
{
int i,j;
for(i = 0;i<3;i++)
{
printf("i = %d:",i);
for(j = 0;j<4;j++)
{
printf("j=%d",j);
}
printf("\n");
}
循环语句的特性,我们可以加一些条件构成条件控制的循环,该类循环的次数一般都是未知的,也一般使用while 或 do-while 循环语句,因为这两类循环语句附加条件更加简便。经典的猜数字游戏方式有很多种,都使用了条件循环控制的语句,例如猜错了会怎么样,是否继续或结束,猜大了猜小了是否会给出提示等。这些条件控制下的循环很容易让人联想到break语句,continue语句等,先来简单介绍一下这些特殊的语句。
break语句用于退出switch或一层循环结构,而continue语句用于结束本次循环,继续执行下一次循环。另外还有其他语句,例如goto语句,表示无条件转移到标号所标识的语句处去执行,此语句在退出多重循环时比break语句更直接方便,但是goto语句不能滥用。这些语句都用于流程控制,当然也有终止整个程序执行的标准函数,exit(),即exit(code);当code的值为0时,表示程序正常退出,当code的值非0时,表示程序出现某种错误后而退出。可用exit(0);这个标准库函数来强制性结束运行程序。
猜数字这个程序具体如下:
#include<time.h>//将函数time()所需要的头文件time.h包含到程序中
#include<stdlib.h>
#include<stdio.h>
int main()
{
int magic,guess,counter = 0,ret;
char reply;//保存用户的回答
srand(time(NULL));//为函数rand设置随机数种子
do
{
counter = 0;//猜下一个数之前,将计数器清零
magic = rand()%100+1;//生成一个1-100之间的随机数
do
{
printf("Please guess a magic
number:");
ret =
scanf("%d",&guess);
while(ret!=1)//若存在输入错误,则重新输入
{
while(getchar()!='\n');//清除出缓冲区内非法字符
printf("Please guess a
magic number:");
ret =
scanf("%d,&guess");
}
counter++;
if(guess>magic)
printf("Wrong!Too
big!\n");
else if(guess<magic)
printf("Wrong!Too
small!\n");
else
printf("Right!\n");
}while(guess!=magic&&counter<10);
printf("counter =
%d\n",counter);//表示用了几次答对
printf("Do you want to continue(Y/N
or y/n)?");//提示是否继续
scanf(" %c",&reply);//%c前有一个空格,否则程序无法继续
}while(reply=='Y'||reply=='y');//输入'y'或'Y'程序继续
}
与循环语句特点来写。
另外注意通过数学方法来套用公式以及规律来解决问题,例如:
金币问题
描述:
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
输入
一个整数(范围1到10000),表示天数。
输出
骑士获得的金币数。
具体程序如下:
#include<iostream>
#include<cstdio>
using namespace
std;
int main()
{
int a,b = 0,c = 0;
cin>>a;
for(int i=1;i<=a;i++) //a=3
i=1 j=1 c=1 b=0+1
{
// i=2 j=1 b=1+2 c=2 j=2 b=1+2+2 c=3
for(int j = 1;j<=i;++j) //
i=3 j=1 =2 =3 b=1+2+2+3+3+3+4+4+4+4
{ // 1 2 3 4 5 6 7 8 9 10
if(c>=a)
break;
b+=i;
c++;
}
}
cout<<b;
return 0;
通过数学分析来进行循环嵌套。
- 金中的蛋糕裱花
描述
金中食堂做的蛋糕总是做成菱形,琪琪希望蛋糕上能裱上一圈小花,她想请你再帮个忙,用电脑画出用“*”号组成的裱花形状,这将是个空心的菱形。
输入
一个整数,n>0。
输出
由n2-1层“”号组成的空心菱形。
具体程序如下:
#include<iostream>
#include<cstdio>
using namespace
std;
int main()
{
int n;
cin>>n;
for(int i = 1;i<=2*n-1;i++)
{
for(int j = 1;j<=2*n-1;j++)
if(i+j==n+1||i+n==j+1||i==n+j-1||i+j==3*n-1)
cout<<'*';
else
cout<<" ";
cout<<endl;
}
return 0;
}
这种题要先分析出方法,找到规律之后再进行写程序,就像解决数学问题一样,也从此类题目中知道了数学的重要性,明白了为什么老师说学计算机学到最后就只是在学数学。
另外循环这里需要注意的还有循环之前的定义,不要让结果溢出。
循环语句的花括号作用范围。
另外内外循环的控制变量不要重名,否则也会导致运行错误。
以及注意循环语句的格式不要出错,否则造成编译错误或者运行错误,造成死循环或循环无效等。
三、学习循环语句之后的感悟:
学习了循环语句之后,开始发现编程语言对逻辑思维及数学思维的要求,体会到了其重要性,原来学长学姐们说的对,一定要学好高数,培养起独立思考的能力和逻辑思维能力。
在今后的日子里,加强对数学的学习,培养起逻辑思维能力。