Linux C 编程一站式学习 第6章循环语句习题答案

6.1while循环习题(66页)

1.1用while循环的方法求最大公约数

  1 #include <stdio.h>
  2 int Euclid(int a,int b)
  3 {   
  4     int c = (a%b);
  5     while(c != 0)
  6         {
  7             a = b;
  8             b = c;
  9             c = a%b;
 10         }
 11     return b;
 12 }
 13 
 14 int main(int argc, char *argv[])
 15 {
 16     int a,b;
 17     printf("please input two postive numbers:");
 18     scanf("%d %d",&a,&b);
 19     printf("GCD is %d\n",Euclid(a,b));
 20     
 21     return 0;
 22 }

1.2求Fibonacci数列的第N项

  1 #include <stdio.h>
  2 
  3 int fib(int x)
  4 {
  5     int n=1,num1=1,num2=1,result;
  6     if(x==0 || x==1)
  7         return 1;
  8     else
  9     {   while(n != x)
 10         {
 11             result=num1+num2;
 12             num1=num2;
 13             num2=result;
 14             n++;
 15         }
 16     }
 17     return result;
 18 }
 19 
 20 int main(int argc, char *argv[])
 21 {
 22     int x;
 23     printf("please input a postive number:");
 24     scanf("%d",&x);
 25     printf("%d\n",fib(x));
 26     return 0;
 27 }

2.编写一个程序计算一下1到100的所有整数中出现多少次数字9。

  1 #include <stdio.h>
  2 int count()
  3 {
  4     int sum=0,i=1,first,second;
  5     while(i <= 100)
  6     {
  7         first=i%10;
  8         second=(i/10)%10;
  9         if (first==9 ||second==9)
 10             sum=sum+1;
 11         i++;
 12     }
 13     return sum;
 14 }
 15 
 16 int main(int argc, char *argv[])
 17 {
 18     printf("There are %d numbers contain '9' between 1--100\n",count());
 19     return 0;
 20 }

每次循环打印的i值不会加1,因为每次循环时都执行了int i=0;所以一直在打印0,经过测试确实如此。

测试代码:

  1 #include <stdio.h>
  2 int main(int argc, char *argv[])
  3 {
  4     while(1)
  5     {
  6         int i =0;
  7         printf("%d",i);
  8         i=i+1;
  9     }
 10 
 11 
 12     return 0;
 13 }

测试结果:一直打印0

        

6.4 break和continue语句(70页)

1.求素数这个程序只是为了说明breakcontinue的用法才这么写的其实完全可以不用breakcontinue请读者修改一下循环的结构去掉breakcontinue而保持功能不变。

  1 #include <stdio.h>
  2 int is_prime(int n)
  3 {
  4     int i,sum=0;
  5     for(i=2;i<n;i++)
  6         if(n % i == 0)
  7             sum++;
  8     if(!sum)
  9         return 1;
 10     else
 11         return 0;
 12 
 13 }
 14 
 15 int main(int argc, char *argv[])
 16 {
 17     int i;
 18     for(i=2;i <= 100;i++)
 19     {
 20         if(is_prime(i))
 21         printf("%d\n",i);
 22     }
 23     return 0;
 24 }

思路:引入一个量sum来计数,因为质数只能被它本身和1整除,i是从2开始增加,剔除了1的这种情况,i<n也剔除了它本身的情况,所以当n能被2~n-1任一个数整除的话,他就不是质数,sum+1,只有当是质数的话sum=0,才能return 1;

2. 在上一节中讲过怎样把for语句写成等价的while语句,但也提到如果循环体中有continue语句,这两种形式就不等价了,想一想为什么不等价了?

因为对于while循环,执行continue语句之后测试控制表达式,如果值为真则继续执行下一次循环;对于for循环,执行continue语句之后首先计算控制表达式3,然后测试控制表达式2,如果值为真则继续执行下一次循环。

6.5嵌套循环(71页)

1. 上面打印的小九九有一半数据是重复的,因为8*9和9*8的结果一样。请修改程序打印这样的小九九:

主要就是第二层循环条件改一下就可以了

  1 #include <stdio.h>
  2 int main(int argc, char *argv[])
  3 {
  4     int i,j;
  5     for(i=1;i<=9;i++){
  6         for(j=1;j<=i;j++)
  7             printf("%d\t",i*j);
  8         printf("\n");
  9     }
 10     return 0;
 11 }

这道题还没想明白该怎么做,感觉有点没思路啊,明天再考虑考虑,今天先到这把。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值