前言:感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。
一. 主干知识的学习
1. while语句
除了for语句以外,while语句也用于实现循环,而且它的适用面更广,其一般形式为:
while(表达式)
循环体语句
while语句的执行流程:当表达式的值为‘真’时,循环执行,直到表达式的值为‘假’,循环中止并继续执行while的下一条语句。
下面是while语句和for语句的流程对比图:
注意:for语句和while语句均能实现循环。但一般情况下,如果题目中指定了循环的次数,使用for语句更加清晰,循环的4个组成部分一目了然;其他情况一般使用while语句。
2.do-while语句
do-while语句与上述两种循环语句略有不同,它先执行循环体,后判断循环条件。所以无论循环条件的值如何,至少会执行一次。其一般形式为:
do{
循环体语句
}while(表达式);
执行流程:第一次进入循环时,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为‘真’,继续循环,直到表达式的值为‘假’,循环结束,执行下一条语句。
do-while语句的流程图:
3.break语句
break语句强制循环结束,for循环中的break语句的执行流程如下图,一旦执行了break语句,循环提前结束,不再执行循环体中位于其后的其他语句。
for结构中break的作用:
4.continue语句
continue语句的作用是跳出循环体中continue后面的语句,继续下一次循环,其工作流程如图:
注意:continue语句与break语句的区别在于,break结束循环,而continue只是跳过后面语句继续循环。break除了可以中止循环外,还用于switch语句,而continue只能用于循环。
二. 具体问题中的应用
问题1:用格雷戈里公式求给定度的“值。使用格雷戈里公式求 的近似值,要求精确到最后一项的绝对值小于给定精度 eps。
丌/4=1-1/3+1/5-1/7+·····
源程序:
#include <stdio.h>
#include <math.h> //用于调用绝对值函数fabs()
int main()
{
int denominator,flag,i;
double eps,item,pi; //pi用于存放累加和
printf("Enter eps:"); //输入所需精度
scanf("%lf", &eps);
i=1; //i表示项数
flag=1; //flag用于改变符号
denominator=1; //denominator表示第i项分母
item=1.0; //item为第i项的值
pi=0;
while(fabs(item)>=eps) //循环条件
{
pi=pi+item; //逐项累加
i++;
flag=-flag;
denominator=denominator+2;
item=flag*1.0/denominator;
}
pi=pi+item; //加上最后一项的值
pi=pi*4; //最终结果
printf("pi=%.6f\n", pi); //保留6位小数
printf("i=%d\n", i); //输出项数
return 0;
}
注意:这里第i项用变量item表示,一旦某一项的绝对值小于eps,就达到了所给的精度,由于最后一项的绝对值小于eps,所以最后还需要加上最后一项的值。
问题2:统计一个整数的位数。从键盘读入一个整数,统计该数的位数。例如,输入12534,输出5;输入-99,输出2;输入0,输出1。
源程序:
#include <stdio.h>
int main()
{
int count,number,t_number; //count记录整数number的位数
count=0;
printf("Enter a number:");
scanf("%d", &number);
t_number=number; //保护输入数据不被改变
if (number<0)
{
t_number=-t_number; //将输入的负数转换为正数
}
do
{
count++;
t_number=t_number/10; //整除后减少一个个位数,组成一个新数
}
while(t_number!=0); //循环条件,控制循环的结束
printf("It contains %d digits.\n", count);
return 0;
}
问题3:判断一个整数是否为素数。输人一个正整数 m,判断它是否为素数。素数就是只能被 1和自身整除的正整数,1 不是素数,2 是素数。
源程序:
#include <stdio.h>
#include <math.h>
int main()
{
int i,limit,m;
printf("Enter a number:");
scanf("%d", &m);
if (m<=1) //小于等于1的不是素数
{
printf("No!\n");
}
else if (m==2) //2是素数
{
printf("%d is a prime number!\n", m);
}
else
{
limit=sqrt(m)+1;
for (i=2; i<=limit; i++)
{
if (m%i==0) //若m能被某个i整除,则m不是素数
{
break;
}
}
if (i>limit) //循环结束,说明m不能被任何一个i整除
{
printf("%d is a prime number!\n", m);
}
else
{
printf("No!\n");
}
}
return 0;
}
感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。