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 }
这道题还没想明白该怎么做,感觉有点没思路啊,明天再考虑考虑,今天先到这把。