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.求素数这个程序只是为了说明break和continue的用法才这么写的,其实完全可以不用break和continue,请读者修改一下循环的结构,去掉break和continue而保持功能不变。
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 }
这道题还没想明白该怎么做,感觉有点没思路啊,明天再考虑考虑,今天先到这把。