第二章 循环结构程序设计 例题

2.1 for循环

1、尽管for循环反复执行相同的语句,但这些语句每次执行效果往往不同
2、建议尽量缩短变量的定义范围。例如,在for循环的初始化部分定义循环变量

  • 例题 2-1 aabb

输出所有形如aabb的4位完全平方数。
伪代码:
for(int a=1;a<9;a++)
for(int b=0;b<9;b++)
if(aabb是完全平方数)printf("%d\n",aabb)

int main()
{
  for(int a=1;a<=9;a++)
  for(int b=0;b<=9;b++)
  {
  int n=a*1100+b*11;
  int m=floor(sqrt(n)+0.5);
  if(m*m==n)printf("%d\n",n);
  //一般改成四舍五入,即floor(x+0.5),因为在大量计算后由于误差整数1变成了0.999999999,floor的结果会是0而不是1
}

//用枚举思路平方根x从而避免开平方的操作
int main()
{ for(int x=1;;x++)
  { int n=x*x;
    if(n<1000) continue;
    if(n>9999)break;
    int hi=n/100;
    int lo=n%100;
    if(hi/10==hi%10&&lo/10==lo%10)printf("%d\n",n);
  }
}

3、不拘一格的使用伪代码来思考和描述算法是一种值得推荐得到做法
4、把伪代码改写成代码时,一般先选择较为容易的任务来完成
5、浮点运算可能会有误差。在进行浮点数比较时,应考虑到浮点误差

2.2 while循环和do-while循环
  • 例题 2-2 3n+1问题

猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换一定会使n变为1。例如,3-10-5-16-8-4-2-1。

//有bug版本:乘法溢出了int整数的范围即-2^31~2^31-1,可以通过Long long解决问题但要把%d改%lld
int main()
{  int n,count=0;
scanf("%d",&n);
while(n>1)
  {  if(n%2==1)n=n*3+1;
     else n/=2;
     count++;  
  }
 printf("%d\n",count);
 rerurn 0;
}

1、当需要统计某种事物的个数时可以用一个变量来充当计数器
2、不要忘记测试。一个看上去正确的程序可能隐含错误
3、在观察无法找出错误时可以用”输出中间结果“的方法查错
4、C99并没有规定Int类型的确切大小但在当前流行的竞赛平台中int都是32位整数
5、long long 在linux下输入输出格式符为%lld,但windows有时为%164d。为保险起见可用c++

  • 例题2-3近似计算

计算π/4=1-1/3+1/5-1/7+…,直到最后一项小于10^-6

int main()
{  double sum=0;
    for(int i=0;;i++)
    { double term=1.0/(i*2+1);
    if(i%2==0)  sum+=term;
    else sum-=term
    if(term<le-6)break;
    }
    printf("%.6f\n",sum);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值