📄 ex5.cpp
字号:
// 第5章 循环控制
// [例5.1] 求小于n的奇数的和(n选定为6)
#include<stdio.h>
void main(void)
{ const int n=6; int sum=0;
int Odd=1; //循环的初值
while (Odd <=n)
{ if (Odd % 2==1) sum+=Odd; // Odd =2*n+1 , Odd%2==1
Odd++; //循环的增量条件不应受if 表达式的影响
}
printf("Odd sum =%d from 0 to %d,Odd =%d\n",sum,n,Odd);
} //输出:Odd sum =9 from 0 to 6,Odd =7
//[例5.2]求不大于 n的偶数的和(n选定为6)
#include<stdio.h>
void main(void)
{ const int n=6; int sum=0;
int Even = 0; //循环的初值
do { if (Even%2 ==0) sum+=Even; // Even =2*n , Even%2==0
Even++; //循环的增量条件不能受上面if 表达式的影响,否则是死循环
} while (Even <=6) ;
printf("Even sum =%d from 0 to %d,Even+1=%d\n",sum,n,Even);
} //输出:Even sum =12 from 0 to 6,Even+1=7
// [例5.3]do~while循环与while循环的比较
#include<stdio.h> #include<stdio.h>
int d(int k)
{ int sum=0;
do sum+=k++;
while(k<101);
return sum;
} //do~while循环求和
int w(int k)
{ int sum=0;
while(k<101) sum+=k++;
return sum;
} //while循环求和
void main(void)
{
printf("%d,%d",d(1),d(101));
printf("%d,%d",w(1),w(101));
} /*输出:5050,101*/ //输出: 5050;0
//[例5.4]弦截法求方程y=f(x)=((x-5)*x+16)*x-80=0的根
# include<stdio.h>
# include<math.h>//fabs函数原型在math.h
float f(float x) { return ((x-5)*x+16)*x-80; }
float root(float a,float b)
{ if(f(a)*f(b)>0) return -8888888.0;
float x;
do{ x=(a*f(b)-b*f(a))/(f(b)-f(a));
if(f(a)*f(x)>0) a=x ;
else b=x;
}while (fabs(f(x))>0.00001 );
return x;
}
void main(void)
{ printf("%f\n ",root(2,6));//输出:5.000000
printf("%f",root(2,4)); //输出:-8888888.000000
}
//[例5.5] 求小于n的奇数的和(n选定为6)
#include<stdio.h>
void main(void)
{ const int n=6 ; int sum=0;
for (int i=1;i <n;i++)
if (i % 2==1) sum+=i;
printf("sum =%d \n",sum);
} /*输出:sum =9*/
//[例5.6] 求上限为n的偶数的和的函数
int f(int n)
{ int sum=0;
for (int i=1;i <=n;i++)
if (i % 2==0) sum+=i;
return sum;
}
// [例5.7]用公式求近似值
#include<stdio.h>
void main(void)
{ int sign=1 ; double pi=1;
for (double n=1;n<1000000;n+=2,pi+=sign/n)
sign=-sign;
printf("pi =%f\n",pi*4); /*输出:pi =3.141595*/
}//表达式sign/n中,sign和n不能都是整数,因为当n>2,1/(int)n的结果为0。
//(常规形式:for (initexpre;conditionexpre;stepexpre){ statement;}
# include<iostream.h> //求自然数的和
void main(void)
{ int sum=0;for(int k=0;k<=100;sum+=k++)
; // 循环体的语句为空语句
cout<<sum <<endl;
} //输出 5050
// (初始化表达式前置: initexpre; for (;conditionexpre;stepexpre) { statement; }
# include<iostream.h>
int sum(int k) //此种形式用于函数体中,初始值直接从形参中获得
{ int s=0;
for(;k<=100;s+=k++) ; // 循环体的语句为空语句
return s;
}
void main(void) { cout<<sum(10) <<endl; } //输出 5005
( 条件表达式内置(目的是灵活控制循环的跳出条件):
for (initexpre;;stepexpr)
{ if(condition1==0) break; //条件1为0跳出循环
statement; //条件1非0继续循环
if(condition2) break; //条件2为非0跳出循环
} //for (initexpre;;stepexpr)等价于 for (initexpre;1;stepexpr)
//[例5.8]输出奇数
# include<iostream.h>
void main(void)
{ for(int k=1;k<10;k++)
{ if(k%2==0) continue;
cout<<k<<",";
}
}/*输出:1,3,5,7,9,*/
//[例5.9]输出偶数
# include<iostream.h>
void main(void)
{ for(int k=1;;k++){
if(k%2==0) {cout<<k<<","; continue; }
if(k>10) break;
}
} //输出:2,4,6,8,10,
//[例5.10]输出奇数
# include<iostream.h>
void main(void)
{ for (int k=0;;)
{ k++;
if(k<10)
{if(k%2){cout<<k; continue;}}
else break;
}
}//输出:13579
//[例5.11]输出偶数
# include<iostream.h>
void main(void)
{ for (int k=0;;)
{ k++;
if(k%2==0) {cout<<k; continue;}
if(k>10) break;
}
}//输出:246810
//(无穷循环for (;;)
# include<iostream.h>
void main(void)
{ int k=0,sum=0; // initexpre;
for(; ;) //for (;;)
{ if( k>100) break; //{ if(condition) break;条件判断为真退出循环
sum+=k; // statement; 条件判断为0执行循环体
k++; // stepexpre; 循环步长增量变动
} //}
cout<<sum <<endl; /*输出 5050*/
}
//[例5.12]for循环与if~goto label 循环比较
//1.for循环实现求和
# include<iostream.h>
void main(void)
{ int k=0,sum=0;
for(; ;)
{ if( k>100) break;
sum+=k++;
}
cout<<sum <<endl;
}
//2. if~goto label 循环求和
# include<iostream.h>
void main(void)
{ int k=0,sum=0;
loop:
if(k>100) goto end;
sum+=k++;
goto loop;
end:cout<<sum <<endl;
}/*输出 5050*/
//3. goto 语句循环求和函数
int sum(int n=100)
{ int k=1,s=0;
loop:
if(k<=n)
{ s+=k++;
goto loop;
}
return s;
}
// [例5.13] 求和,误差小于指定的精度eps
#include<stdio.h>
#include<math.h>
const double e=exp(1);
double expf() //函数名为expf,入口无参,返回double型数据
{ double const eps=1.0e-19;
double sum=1; int n=1;
while(e-sum>eps)
{ double facn=1;
for(int i=1;i<=n;i++) facn*=i; //内层循环求n!阶乘。n!=1*2*...*n
sum+=1.0/facn;
n++;
}
return sum; //函数返回所求结果
} //输出:e=2.718282,es=2.718282
void main()
{
printf("e=%lf,es=%lf\t",e,expf());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -