习题11
有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
实现思路:
从第1个月起,兔子对数分别为1、1、2、3、5、8、13、21…,显然是斐波拉契数列。
代码如下:
#include<stdio.h> int main(){ int i, f1 = 1, f2 = 1; for(i = 1; i < 21; i++){ printf("%10d%10d", f1, f2); f1 += f2; f2 += f1; if(i % 2 == 0){ printf("\n"); } } return 0; }
打印:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155
习题12
. 判断101-200之间有多少个素数,并输出所有素数。
实现思路:
可以用一个函数来判断一个数是否是素数,是则输出。
代码如下:
#include <stdio.h> #include <math.h> int main(){ int isPrime(int n); int i, count = 0; for(i = 100; i < 201; i++){ if(isPrime(i)){ printf("%6d", i); count++; if(count % 5 == 0){ printf("\n"); } } } return 0; } int isPrime(int n){ int i, prime = 1; for(i = 2; i <= sqrt(n); i++){ if(n % i == 0){ prime = 0; break; } } return prime; }
打印:
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
习题13
打印出所有的水仙花数。
水仙花数是指一个三位数,其各位数字立方和等于该数本身。
例如: 153是一个水仙花数,因为 153=13 + 5 3 + 33。
实现思路:
通过函数来判断一个数是否是水仙花数,并通过循环来判断所有的数。
代码如下:
#include<stdio.h> #include <math.h> int main(){ int isNarci(int n); int i, count = 0; for(i = 100; i < 1000; i++){ if(isNarci(i)){ printf("%6d", i); count++; if(count % 5 == 0){ printf("\n"); } } } return 0; } int isNarci(int n){ int i, j, k, temp, narci = 0; i = n / 100; temp = n % 100; j = temp / 10; k = temp % 10; if(n == (pow(i, 3) + pow(j, 3) + pow(k, 3))){ narci = 1; } return narci; }
打印:
153 370 371 407
练习14
将一个正整数分解质因数。
例如:输入90,打印出 90=2*3*3*5。
实现思路:
使用嵌套循环,逐步分解。
代码如下:
#include<stdio.h> int main(){ static int i, num; printf("Please input a integer:\n"); scanf("%d", &num); printf("%d=", num); while(num){ for(i = 2; i <= num; i++){ if(num % i == 0){ printf("%d", i); num /= i; if(num != 1){ printf("*"); } break; } } if(num == 1){ break; } } return 0; }
打印:
Please input a integer: 120 120=2*2*2*3*5
外层还可以使用for循环,如下:
#include <stdio.h> int main(){ int n,i; printf("Please input a integer:\n"); scanf("%d",&n); printf("%d=",n); for(i=2; i <= n; i++){ while(n % i == 0){ printf("%d", i); n /= i; if(n!=1){ printf("*"); } } } printf("\n"); return 0; }
习题15
利用条件运算符的嵌套来完成此题:
学习成绩 >=90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示。
实现思路:
条件判断嵌套实现。
代码如下:
#include <stdio.h> int main(){ int score, i; char level; printf("Please input your scoore:\n"); scanf("%d", &score); level = (score >= 90) ? 'A' : (score >= 60 ? 'B' : 'C'); printf("Your level is %c", level); return 0; }
打印:
Please input your scoore: 65 Your level is B
除了条件运算符,还可以如下:
#include <stdio.h> int main(){ int score, i; char level; printf("Please input your scoore:\n"); scanf("%d", &score); if(score >= 60){ if(score >= 90){ level = 'A'; } else{ level = 'B'; } } else{ level = 'C'; } printf("Your level is %c", level); return 0; }