【学习轨迹】C语言学习(4)

【C语言学习轨迹】

Part2.2

1、循环的一些实例

猜数游戏

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
int main()
{
  srand(time(0));
  int number=rand();
  int x;
  int count=0;
  number=number%100;
  printf("我想好了一个数,你来猜猜看");
  do{
    printf("你猜的数是\n")scanf_s("%d",&x);
    count++;
    if(x>number)
    {
      printf("你输入的数大了\n");
    }
    else if(x<number)
    {
      printf("你输入的数小了\n");
    }
    
  }while(x!=number);
    return 0;
}
需要注意的部分

1、循环体中需要输出“你猜的数是:”和读入每次输入的数。

2、循环的条件是读入的数和计算机给定的数不同。

3、在定义次数变量count时需要给定一个初始值。

求平均数
#include<stdio.h>
int main()
{
  int n=0;
  int x;
  int sum=0;
  printf("这个是一个求平均值的计算器,若计算完成请以-1结束\n");
  printf("请输入需要计算的数");
  do{
    scanf_s("%d",&x);
    sum=sum+x;
    n++;
  }while(x!=-1);
  printf("这些数的平均值为%d",(sum+1)/(n-1));
}
整数逆序

要求:

输入任意的数输出它的逆序数。

思路

1、需要一个变量来存放输入的值(a),一个变量来存放取余后的值(x),一个变量来存放计算后的值(rec);

2、对于输入的数进行对十取余的计算,依次得到每一位的数字;

3、同时对a进行除以10的运算,来消去已经被记录过的数字;

4、难点在对每一位数进行计算得到逆序数;通过计算三位数345,我们可以定义一个变量rec=0;

rec=rec*10+x,这样可以将数字进行逆序排列;

5、循环的条件是当a>0,若a<=0,则循环停止。

include<stdio.h>
  int main()
{
  int a;
  int x;
  int rec=0;
  printf("请输入一个数");
  sc_s("%d",&a);
  do{
    x=a%10;
    a=a/10;
    rec=rec*10+x;
  }while(a>0);
  printf("这个数的逆序数是%d",rec);
  return 0;
}
计算阶乘

用while循环计算阶乘

#include<stdio.h>
int main()
{
  int n;
  printf("请输入需要计算阶乘的这个数");
  scanf_s("%d",&n);
  int i=0;
  int sum=1;
  while(i<n){
    i++;
    sum=sum*i;
  }
  printf("这个数的阶乘为%d",sum);
  return 0;
  
}
思路

1、确定变量个数:首先是需要计算阶乘的数(记做n),其次是计算结果(记做sum),最后是控制循环的变量(记做i)。

2、需要循环的部分:用前一次乘积的结果乘以增加了1的i,直到乘到i=n的时候结束。

循环控制之判断一个数是否是素数
#include<stdio.h>
int main()
{
  int x;
  printf("请输入一个需要判断是否为素数的数");
  scanf_s("%d",&x);
  int i=2;
  int isPrime=1;
  for(i=2;i<x;i++)
  {
    if(x%i==0)
    {
      isPrime=0;
    }
  }
  if(isPrime==0)
  {
    printf("这个数不是素数");
  }
  else{
    printf("这个数是素数");
  }
  return 0;
}
思路

1、变量个数:一个变量存储输入的数(记做X),一个变量存储控制循环的数(记做i),一个判断是否是素数的指标(记做isPrime)

2、如何判断一个数是否是素数:

​ 素数是除了1和它本身以外不能整除其他自然数的数。

3、需要循环的部分:

​ 对i这个不断递增的数不断取余,当i=x-1时停止

4、若出现除了1和它本身外可以被整除的数,则指标数isPrime改变,输出结果。

循环嵌套之输出五十个素数
#include<stdio.h>
int main()
{
  int i=2;
  int cnt=0;
  int x=2;
  for(x=2;cnt<50;x++)
  {
    int isPrime=1;
    for(i=2;i<x;i++)
    {
      if(x%i==0)
      {
        isPrime=0;
      }
    }
    if(isPrime==1)
    {
      printf("%d\t",x);
      cnt++;
      if(cnt%5==0)
      {
        printf("\n");
      }
    }
  }
return 0;
}
思路

1、确定变量的个数,首先是准备判断是否是素数的递增变量(记做x),其次是准备用来判断素数的递增指标数(记做i),之后是用来输出结果的变量(记做isPrime),最后是用来计数的变量(记做cnt)。

2、循环过程:

需要不断增加X,即一个一个判断是否是素数

需要不断增加i,即通过x是否能整除i来判断x是否有其他因数。

需要输出被判断为素数的数。

3、如何刚好输出50个:

当判断x为素数后输出x同时时cnt技术指标加一,当cnt<50时循环执行这个程序。

我犯的错误

在开头声明了isPrime变量,而不是在循环里声明isPrime变量,这使经过一次循环后isPrmie永远变成了0而不能执行以下的步骤。

从循环中跳出之如何凑钱

问题:如何用若干张一角两角和五角凑出x元?

#include<stdio.h>
int main()
{
  int x;
  int a,b,c;
  printf("请输入你需要凑成的金额");
  scanf_s("%d",&x);
  for(a=0;a<=x*10;a++)
  {
    for(b=0;b<=x*5;b++)
    {
      for(c=0;c<=x*2;c++)
      {
        if(a+b*2+c*5==x*10)
        {
          printf("这个金额是由%d张一角,%d张两角,%d张五角凑成的",a,b,c);
          goto out;
        }
      }
    }
  }
  out:
  return 0;
}

我们注意到第十七行是一段goto out;的代码

而在return 0前有一个out,当循环进行到goto时会跳出循环进入out的行为,即return送回一个0.s

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值