第五章 流程控制语句

第五章 流程控制语句
一、大纲
掌握while,do-while,for循环的使用
掌握break和continue语句的使用 
了解两层嵌套循环的使用
二、实验目标:
理解循环语句的特点,掌握何时在程序中需要使用循环。
掌握使用循环完成编码的思路和步骤。
理解while循环的执行流程,要求能够根据需求使用while循环完成实现。
理解什么是死循环,以及死循环出现的环境。
理解do-while循环的执行流程,掌握使用do-while循环进行编码实现。
理解for循环的语句格式以及执行流程,熟练使用for循环进行程序编码。
理解break语句在switch语句中和循环中执行流程以及使用。
理解continue语句在循环中使用的执行流程及其使用。
三、实验方式:
  要求学生自己独立完成
四、上机指导任务
4.1任务1:打印数字(时间:25分钟)
4.1.1 任务描述
编程求一个四位自然数ABCD,它乘以A后变成DCBA。
/*
#include


int main()
{
   int ABCD =0;
    int DCBA = 0;
    int A = 1;
    int B = 0;
    int C = 0;
    int D = 0;


//第一种方法
    /*for(ABCD = 1000; ABCD < 10000; ABCD++)
    {
        A = ABCD / 1000;
        B = ABCD / 100 - A * 10;
        C = ABCD / 10 - A * 100 - B * 10;
        D = ABCD - A * 1000 - B * 100 - C * 10;


        DCBA = D * 1000 + C * 100 + B * 10 + A;


        if ( DCBA == ( ABCD * A ))
        {
            printf("The Number is %d\n",ABCD);
        }
    }
*/
    //第二种方法
    /*while(ABCD<10000){


               ABCD++;
    A = ABCD / 1000;
           B = ABCD / 100 - A * 10;
           C = ABCD / 10 - A * 100 - B * 10;
           D = ABCD - A * 1000 - B * 100 - C * 10;


           DCBA = D * 1000 + C * 100 + B * 10 + A;




           if ( DCBA == ( ABCD * A ))
                                {
                                    printf("The Number is %d\n",ABCD);
                                }


    }*/
    
    //第三种方法


    do {


        ABCD++;
A = ABCD / 1000;
B = ABCD / 100 - A * 10;
C = ABCD / 10 - A * 100 - B * 10;
D = ABCD - A * 1000 - B * 100 - C * 10;


DCBA = D * 1000 + C * 100 + B * 10 + A;




if ( DCBA == ( ABCD * A ))
                      {
                          printf("The Number is %d\n",ABCD);
                      }




    } while (ABCD<= 10000);












    return 0;
}






4.1.2 任务目的
逐渐建立使用循环进行编程的思路:寻找规律;写出循环体中需要重复操作的部分,其中包括改变修改变量值的语句;确定循环判断条件;完善循环结构,定义循环变量;完善整体程序,添加输入输出操作。
掌握while,do-while,for循环的语句结构和执行流程。
复习面向过程编程的编程思路。
4.1.3 任务要求
分别使用while,do-while,for循环完成此任务,
添加适当的注释信息。
给出人性化的输入输出提示信息。
4.1.4 难点提示
注意循环体中语句的顺序,先进行相关条件判断再进行其它操作。
注意循环语句中的循环判断条件应为逻辑或关系表达式。
注意在循环体中应有使循环结束的设置,即有改变循环变量的值的操作。
4.2任务2:查找数字(时间:25分钟)
4.2.1 任务描述
编写一个程序,从键盘上接收一个整数,并且从1-100之间找到能被它整除的整数,并输出找到的整数。
#include


int main() {
int number=0;
printf("请输入一个数:");
fflush(stdout);
scanf("%d",&number);
int i=1;
/*for(;i<100;i++){
if(i%number!=0){
continue;
}
printf("%d \n",i);
}*/
//第二种


/*while(i<100){
i++;
if(i%number!=0){
continue;
}
}*/
return 0;
}
4.2.2 任务目的
复习关系和逻辑表达式的使用。
掌握如何使用while、do-while、for循环完成上面要求。
建立使用循环完成面向过程编程的思路。
4.2.3 任务要求
要求分别使用while和for循环完成此任务。
使用关系、逻辑运算符与if语句结合使用完成查找判断。
4.2.4 难点提示
  注意: 能被整除的意思是:除以从键盘上接收的整数,判断余数是否为0。
4.3任务3:模拟银行输入密码操作(时间:30分钟)
4.3.1 任务描述
  模拟XX银行输入密码的操作,在程序开始时提示用户输入密码,如果密码输入不正确(可以事先自己随意确定一个密码,如果输入不是这个密码,就认为是错误的),则要求用户重新进行输入;如果输入正确,可以直接输出“密码输入正确,请选择其他操作.”即可,然后程序结束。如果用户连续三次输入错误,程序也将结束,可以提示用户“密码输入有误超过3次,您的帐户已经被冻结,请明天再输入.”。
  
4.3.2 任#include
int main(){
int a=123,b=0,n=1;


while(n<=3){
n++;
printf("请输入密码:");
fflush(stdout);
scanf("%d",&b);
if(b==a){
printf("密码输入成功");
}
if(b==a)break;
if(n>3){
printf("密码输入有误超过3次,您的帐户已经被冻结,请明天再输入.");
break;
}
if(b!=a){
printf("密码输入有误");
continue;
}


}


return 0;
}务目的
掌握在循环中使用if语句实现具体功能。
掌握break语句和continue语句在循环中的使用。
4.3.3 任务要求
用户输入正确,则输出“密码输入正确,请选择其他操作.”即可
用户输出错误,则提示用户重新输入。
如果用户连续3次输入错误,则将用户帐号进行冻结,要求用户明天再输入。
4.3.4 难点提示
  提示:可以通过循环的判断条件限定用户的输入次数,如果循环正常结束,说明用户已经连续输入错误三次,则应提示用户帐号已经被冻结。在循环中可以通过设置标志位的方式标识循环是正常结束,还是由于输入正确后而跳出循环。然后再在循环体后面判断标志位来进行判断输出是输入正确还是帐户冻结。
4.4任务4:打印图形(时间:15分钟)
4.4.1 任务描述
使用循环语句实现下面的图形:
*****
****
***
**
*


4.4.2 任务目的
理解二重循环的意义,以及循环的流程。
理解如何使用二重循环完成程序实现。
4.4.3 任务要求
先完成此图形,然后修改程序,使程序可以根据用户输入的数据进行打印,例如:上图是用户输入5时打印的结果。
4.4.4 难点提示
  提示:最外层循环确定的是行数,而内层循环则确定每行有多少个”*”。且内层循环的取值或判断条件一般都取决于最外层循环变化。
#include
int main()
{
int i , j;
for(i = 5; i > 0; i --)
{
for(j = i; j > 0; j --)
printf("*");
printf("\n");
}
return 0;


  }
  
五、课后作业
5.1 作业1 打印图形(时间:30分钟)
5.1.1 作业任务
使用循环语句输出一个以*号组成的菱形。要求行数从键盘接收。
#include
int main(){
int i,j,n;
 scanf("%d",&n);
 for(i=0;i   j = n+i;
   while(j--){
     printf("%s",j>2*i?" ":"*");
   }
   printf("\n");
 }
 for(i=n-1;i>0;i--){
  for(j=0;j      printf("%s",j    }
   printf("\n");
 }
 return 0;
}
5.1.2 任务要求
(1)在输出数据前,应给出用户提示信息。
(2)程序在编写时,注意程序的格式,例如:缩紧、空行、空格的使用。
(3)编程原则:程序应保证结清晰,容易理解,并添加适当的注释说明信息。
5.1.3 难点提示
内层循环和外层循环格子要完成的任务。
5.2 作业2 打印图形(时间:30分钟)
5.2.1 作业任务
编写一个程序,它能够读入一个正方形的边长,然后输出一个由星号和空格组成的边长为刚刚读入的边长的空心正方形。例如,程序读入的边长是5,那么它应输出边长为5的空心正方形。
#include
int main(){
int i,j,a;
printf("输入一个正方形的边长\n");
fflush(stdout);
scanf("%d",&a);
for(i=1;i<=a;i++)printf("*");
printf("\n");
for(i=1;i<=a-2;i++)
{
printf("*");
for(j=1;j<=a-2;j++)printf(" ");
printf("*\n");
}
for(i=1;i<=a;i++)printf("*");
printf("\n");
return 0;
}
5.2.2任务要求
  同作业1
5.2.3 难点提示
同作业1。






5.3 作业3 进制转换(时间:25分钟)
5.3.1 作业任务
  设计一个程序,该程序能将一个十进制整数,输出将其转化为二进制数以后有多少个1.例如3转化为二进制是11,有两个1,就输出2;5转化为二进制是101,也输出2.
  
5#include
int main(){


/*int n=1;
while(!((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0))){


n++;
}
printf("%d",n);*/
int x,count=0;
printf("请输入一个整数:\n");
fflush(stdout);
scanf("%d",&x);
while(x){
x=x&(x-1);
count++;
}
printf("一共有%d个",count);


return 0;
}


1.要求用户从键盘接收该十进制数。
  2.程序在编写时,注意程序的格式,例如:缩紧、空行、空格的使用。
  3.编程原则:程序应保证结清晰,容易理解,并添加适当的注释说明信息
5.3.3难点提示
十进制转换为二进制的方法:
以45为例
47/2=23 余数1
23/2=11 余数1
11/2=5  余数1
5/2=2   余数1 
2/2=1   余数0
1/2=0   余数1 
得到的余数最底层的作为最高位,最顶层的作为最低位 得到的二进制数是:101111.


5.4 作业4 (时间:25分钟)
5.4.1 作业任务
有一条长阶梯,若每步跨2阶最后剩下1阶;若每步跨3阶最后剩下2阶;若每步跨5阶最后剩下4阶;若每步跨6阶最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。编程计算这条阶梯共有多少阶?
#include
int main(){


int n=1;
for(;!((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0));n++);
printf("%d",n);


return 0;
}
-----------------------------------------------------------------------
#include
int main(){


int n=1;
while(!((n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0))){


n++;
}
printf("%d",n);


return 0;
}
5.4.2 任务要求
分别用for循环和while循环编写程序。
5.4.3 难点提示
阶梯数目为n则:(n%2==1)&&(n%3==2)&&(n%5==4)&&(n%6==5)&&(n%7==0)

你可能感兴趣的:(c语言)