【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