循环语句的三种类型
1.while语句
while(表达式)
循环体;
表达式为真时执行循环体语句
2.do…while语句
do
循环体;
while(表达式);
先执行一次do后面的循环体,判断while语句中圆括号的表达式,当表达式的值为真时,继续执行循环体,当表达式为假时,结束循环
3.for语句
for(表达式1;表达式2;表达式3)
循环体
一般情况下,表达式1给出循环变量的初值,表达式2给出循环条件,表达式3修改循环变量的值
设计性实验
1.用do-while循环语句编程以计算Π的近似值
#include <stdio.h>
#include <math.h>
int main()
{
double i=0;
double s=0;
double Pi;
do
{
i=i+1;
s=s+1/(i*i);
}
while(1/(i*i)>=1e-10);
Pi=sqrt(s*6);
printf("Pi=%lf",Pi);
return 0;
}
我一开始打的int i=0输出的答案Pi=2.449490,就换成了double
先执行i=i+1,再执行s=s+1/(i+i)
2.计算并输出100-600满足以下条件的数:每个数位上数字的积为45且和为15,同时统计并输出满足以上条件的数的个数
#include <stdio.h>
int main()
{
int i,a=0,sum=0,product=0;
for(i=100;i<=600;i=i+1)
{
sum=i%10+i/10%10+i/10/10;
product=(i%10)*(i/10%10)*(i/10/10);
if(sum==15&&product==45)
printf("%d\n",i),a=a+1;
}
printf("共有以上%d个数满足条件\n",a);
return 0;
}
我一开始不会用计数器计数,(就是输出共有几个数满足条件)想了很久都不对
某人还嫌我写的慢,真令我生气~
3.函数y=(5sin(x)+x-3.6cos(x))^2的最小值,其中自变量的取值为闭区间【-50,50】中的所有整数,要求输出取最小值时x和y的值
实验提示
1.令xMin为-50,根据函数定义计算yMin值作为当前最小的函数值
2.使用for循环语句控制变量x的值从-49依次以1递增到50
3.使用if语句来判断当前的yMin值是否大于新计算的y值,若大于则令yMin=y,xMin=x记录当前的函数最小值及对应的值
#include <stdio.h>
#include <math.h>
int main()
{
double y,yMin,x,xMin;
yMin=(5*sin(-50)-50-3.6*cos(-50))*(5*sin(-50)-50-3.6*cos(-50));
for(x=-49;x<=50;x=x+1)
{
y=(5*sin(x)+x-3.6*cos(x))*(5*sin(x)+x-3.6*cos(x));
if(yMin>y)
{
yMin=y;
xMin=x;
}
}
printf("在x=%lf处取最小值:%lf\n",xMin,yMin);
return 0;
}
这个代码for前面写的感觉有点不太对,但结果是对的,之后再修改一下吧~
4.输入两个不同的正整数(设为a,b),计算并输出它们的最大公约数和最小公倍数
实验提示
整个过程可利用辗转相除法
1.通过ta=a,tb=b对两个原始的正整数进行备份
2.根据c=ta%tb计算c的值
3.若c=0,则转到步骤5,否则执行步骤4
4.执行ta=tb,tb=c,再转到步骤2
5.返回tb为a和b的最大公约数,a*b/tb为a和b的最小公倍数
#include <stdio.h>
int main()
{
int ta,tb,a,b,c,d;
printf("请输入两个正整数(以逗号隔开):\n");
scanf("%d,%d",&a,&b);
ta=a;
tb=b;
c=ta%tb;
while(c!=0)
{
ta=tb;
tb=c;
c=ta%tb;
}
d=a*b/tb;
printf("%d和%d的最大公约数为%d\n",a,b,tb);
printf("%d和%d的最大公约数为%d\n",a,b,d);
return 0;
}
ta=tb,不是等于,赋值运算符,把右边表达式的值赋给左边的变量
提高性实验
1.算桃子
#include <stdio.h>
int main()
{
int a=1,i=1;
while(i<6)
{
a=(a+1)*2;
i=i+1;
}
printf("最初的筐里有%d个桃子\n",a);
return 0;
}
2.整数逆序输出
#include <stdio.h>
int main()
{
int a,result;
printf("请输入一个正整数:\n");
scanf("%d",&a);
while(a>0)
{
result=a%10;
a=a/10;
printf("%d",result);
}
return 0;
}
这个代码有点小缺陷,输入5000时会输出0005,而不是5
心得
是谁这么棒呀~写完了一篇笔记
当然是我啦