c语言之循环结构学习笔记

循环结构

for (循环变量赋初值;条件;循环变量改变)

{
  语句体;
}
循环变量赋初值可以省略,但是分号不可以省略
可以省略条件,如果省略了条件,表示条件永远成立,分号不能省略(死循环)
循环变量的改变也可以省略,分号不能少。
三部分都可以省略,但分号不能少。(死循环)for(;;)
特别的当for只管一条语句的时候,则可以省略{}
在做关于for的程序时,我们要从整体上来分析程序的功能,而不是一条一条来分析。

while(条件)
{
  语句体
}

执行过程:当条件成立就做语句体,当不成立就退出。




main()
{
   int i,x=0,y=0;
   for(i=1;i<=20;i++)
   {
     x++;                             
     if(i%3==0 || i%2==0)   
     {
       y++=0;               
       continue;
     }
     y++;               
     x++;
     
   }
   printf("x=%d,y=%d",x,y);
}


continue是终止本次循环,不在做本次循环。继续下一次循环。
break是强制终止循环。

在c程序里面几个用到break
1 、switch...case语句  break终止这个语句
2、break终止循环  for while   do... whole 

printf("请输入一个整数:");
int a=0,gw=0,sw=0,bw=0;
scanf("%d",&a);


if(a>=100 && a<1000)
{
   gw = a%10;
   sw = a/10%10;
   bw = a/100;
}else{
  printf("不是三位数");
}
printf("a=%d,gw=%d,sw=%d,bw=%d",a,gw,sw,bw);



int score;
char degree;
printf("请输入分数");

scanf("%d",&score);
if(score<0 || score>100)
{
   printf("输入的数字不合法");
}else{
   switch(score/10)
  {
    case 10:
    case 9 : degree='A'; break;
     case 8 : degree='B'; break;
      case 7 : degree='C'; break;
       case 6 : degree='D'; break;
       default : degree='E'; break;
  };
}
int s=0;
for(int i=0;i<=100;i++)
{
    s+=i;
}
 printf("s=%d",s);



int i,x=0,y=0;
   for(i=1;i<=20;i++)
   {
     x++;                      
     if(i%3==0 || i%2==0)  
     {
       y++;                 
       continue;
     }
     y++;                     
     x++;
     
   }
   printf("x=%d,y=%d",x,y);

printf("dwdd");
int i,gw = 0,sw = 0,bw = 0,sum=0;
for (i=100;i<1000;i++)
{
gw = i%10;
sw = i/10%10;
bw = i/100;
sum = gw*gw*gw+sw*sw*sw+bw*bw*bw;
if(sum == i)
{
   printf("%5d",i);
}
}


      int i,n=0,a1=1,a2=1,a3,sum=0;
  printf("请输入一个整数:");
      scanf("%d",&n);
  if(n==1)
  sum=1;
  if(n==2)
  sum=2;
  if(n>2)
  {
  for (i=1;i<=n-2;i++)
  {
 a3=a1+a2;
 sum+=a3;
 a1=a2;
 a2=a3;
   printf("sum=%d\n",sum);
  }

  }


  double save,a2,a3,sum=0;
  int n=100,fz=1,fm=1, i;
  printf("请输入一个整数:");
  scanf("%d",&n); 
 for (i=1;i<=n;i++)
 {   
   sum+=(double)fz/fm;
   save=fm;//状态保存法
   fm=fz+fm;
   fz=save;
 }
   printf("sum=%.1f\n",sum);

 int count=0,i,j;
  for( i=1;i<100;i++)
  {
  for(j=2;j<i;j++)//状态检查法
{
   if(i%j==0)
   {
   break;
   }
}
if(i==j)
{
   printf("%5d",i);
   count++;
   if(count%5==0)
   {
   printf("\n");
   }
}
  }
  检查数i是否是完数,
  1、要求各个因子的和等于i说明i就是完数
  遍历1到9的每个数,如果发现这个数能被整除,就说明这个数就是i的因子,就把这个数到和里去,
//求完数
 int sum,i,j;
  for( i=1;i<1000;i++)
  {   sum=0;//注意这个sum每次都要重新赋值,要注意放对地方
  for(j=1;j<i;j++)//状态检查法
{
   if(i%j==0)
   {
   sum+=j;
   }
}
if(i==sum)
{
   printf("%5d",i);
}
  }
  

 求 1!+2!+3!+...+n!
 第一步求阶乘,
 第二步求和

 int i=0,n,j,sum=0,result;
  printf("请输入一个整数");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
    result=1;
 for(j=1;j<=i;j++)
 {
result*=j;
 }
 sum+=result;
 }


 输出层数可以变化,n来保存
                      *
    ***
   *****
  *******
  1要输出40个空格
     2... 要输出39个空格
  
       int n,i,j,k;
  printf("请输入一个整数");
 scanf("%d",&n);
 for(j=1;j<=n;j++)
 {
    for(i=1;i<=40-j;i++)//先输出空格
{
printf(" ");
   
}
for(k=1;k<=2*j-1;k++)//再输出*
{
printf("*");
}
printf("\n");
 }

 
 输入一个数n求出所有位上的数字之和
 int n,i=0;
  printf("请输入一个整数");
 scanf("%d",&n);
while(n>0)       //这里可以写成
{
i+=n%10;
n=n/10;
}
printf("%d",i);
system("pause");
return 0;
}
 以后如果条件中有n,就表示你不为零
 if(n)等价于if(n!=0)
 while(n)等价于while(n!=0)
 for(i=1;n;i++)等价于if(i=1;n!=0;i++)
 
 
 让电脑随机来产生两位数的加减法,然后让用户来选择是否继续作答,如果选择是表示可以继续作答
 当用户作答完毕后,要输出答对了几道,答错了几道。
 
 当用户选择是的时候,就循环
 直到用户选择否的时候停止
 如何让电脑随机出题?
 如何在C里面来产生随机数
 rand:能产生随机数,z这个函数必须要加入头文件
 include "windows.h"
 格式:rand()%(大数-小数)+小数
 rand()%90+10    //产生一个10到100的随机数
 如何来确保,每次运行程序所产生的随机数都不一样
 srand((unsigned)time(NULL));
 这个代码只需要执行一次
 srand((unsigned)time(NULL));
for(int i=1;i<20;i++)
{
  int n= rand()%90+10;
  printf("%6d",n);
}
 
 
 
 算法分析:
 1、要产生随机的两个两位数
 int a1,a2,key,answer,right,error,temp;
 srand((unsigned)time(NULL));
 a1=rand()%90+10;
 a2=rand()%90+10;
 
 2、运算符也要随机
 A:首先也产生一个随机数,
 如果是奇数就用+,偶数用—
  temp=rand()%90+10;
  if(temp%2==0) 
  oper=='+';
      key=a1+a2;
  else 
  { 
  oper=='-';
      if(a1<a2)//确保a1大于a2,不要出现负数
      {
  temp=a1;
  a1=a2;
  a2=temp;  
  }
  key=a1-a2;
  } 
  
3、 产生正确答案:
 最好是在运算符产生的时候,就产生正确答案。
 
 4、把题目显示在屏幕上
 printf("%d%c%d=",a1,oper,a2);
 5、让用户来作答
 scanf("%d",&answer);
 6、判断是否正确
 if(key==answer)
 {
 printf("你答对了!");
 right++;
 }else{
 printf("你答错了!");
 error++; 
 }
 
 
 
 
 char answer;
 do{
 printf("*\n");
 printf("要继续吗(y/n):");
 answer=getchar();
 getchar();//消化掉回车键,不然程序执行出错
 
 }while(answer =='y')
 
 
 程序实现:
 
 int a1,a2,temp,key,useranswer,right=0,error=0;
char oper,answer;
do{
srand((unsigned)time(NULL));
  a1= rand()%90+10;
  a2= rand()%90+10;
  temp=rand()%90+10;
  if(temp%2==0)//使用奇偶数来决定加减法
  {
  oper='+';
  key=a1+a2;
  }
  else
  {
  oper='-';
  if(a1<a2)//用交换算法来避免出现负数
  {
     temp=a1;
 a1=a2;
 a2=temp;
  }
  key=a1-a2;
  }
  printf("请输入答案");
  printf("%d%c%d=",a1,oper,a2);
  scanf("%d",&useranswer);
  getchar();//消化掉一个回车
  if(key==useranswer)
  {  
printf("恭喜你答对了!\n");
     right++;
  }
  else
  {
    printf("遗憾你答错了!\n");
 error++;
  }
   printf("要继续吗(y/n):");
 answer=getchar();//消化掉回车键
 getchar();//消化掉回车键,不然程序执行出错
 
 }while(answer =='y');


  printf("你答对了%d道题,答错了%d道题\n",right,error);
 
 让用户输入用户名和密码如果正确的话,就可以使用程序,如果错误,就不断提示,用户名或密码错误请重新输入
 
    int n,i,j,k;
char answer;
 do{
     printf("请输入一个整数");
     scanf("%d",&n);
 getchar();//消化掉回车键,这里很重要。
 for(j=1;j<=n;j++)
 {
for(i=1;i<=40-j;i++)
{
printf(" ");
   
}
for(k=1;k<=2*j-1;k++)
{
printf("*");
}
printf("\n");
 }
 printf("要继续吗(y/n):");
 answer=getchar();//消化掉回车键
 getchar();//消化掉回车键,不然程序执行出错
 
 }while(answer =='y');
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aFakeProgramer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值