给大家介绍一堂Python入门课https://www.bilibili.com/video/BV1RZ4y1n75v,感觉还不错,适合初学者入门。
习题16
输入两个正整数 m 和 n ,求其最大公约数和最小公倍数。
实现思路: 求两个数的最大公约数分别采用辗转相除法、辗转相减法、枚举法得到,最小公倍数用两个数之积除以最大公约数即可获得。
方式一——辗转相除法: 思路: (1)将两整数求余 a%b = x; (2)如果x = 0;则b为最大公约数; (3)如果x != 0,则 a = b、b = x,继续从1开始执行。
该循环是否继续的判断条件是x是否为0。
代码如下:
1#include <stdio.h> 2 3int main(){ 4 int m, n, gcd, mcm, mid; 5 printf("Please input 2 numbers:\n"); 6 scanf("%d %d", &m, &n); 7 mid = m % n; 8 mcm = m * n; 9 while(mid != 0){ 10 m = n; 11 n = mid; 12 mid = m % n; 13 } 14 gcd = n; 15 mcm /= gcd; 16 printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm); 17 18 19 return 0; 20}
打印:
1Please input 2 numbers: 212 45 3Greatest common divisor is 3 4Minimum common multiple is 180 5
方式二——辗转相减法: 思路: (1)如果a>b ,a = a - b; (2)如果b>a ,b = b - a; (3)假如a = b ,则 a或b 是最大公约数; (4)如果a != b,则继续相减,直至a = b。
代码如下:
1#include <stdio.h> 2 3int main(){ 4 int m, n, gcd, mcm; 5 printf("Please input 2 numbers:\n"); 6 scanf("%d %d", &m, &n); 7 mcm = m * n; 8 while(m != n){ 9 if(m > n){ 10 m -= n; 11 } 12 else if(m < n){ 13 n -= m; 14 } 15 } 16 gcd = m; 17 mcm /= gcd; 18 printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm); 19 20 21 return 0; 22}
打印:
1Please input 2 numbers: 218 56 3Greatest common divisor is 2 4Minimum common multiple is 504 5
方式三——枚举法: 思路: (1)min为a、b中最小的一个数; (2)分别用a、b对i求余数,即看是否能被整除; (3)直到a、b同时都能被i整除; (4)如不能整除,i加1、继续开始执行,直到i等于min。
代码如下:
1#include <stdio.h> 2 3int main(){ 4 int m, n, gcd, mcm, min, i; 5 printf("Please input 2 numbers:\n"); 6 scanf("%d %d", &m, &n); 7 mcm = m * n; 8 min = m > n ? n : m; 9 for(i = 1; i <= min; ){ 10 if(m % i == 0 && n % i == 0){ 11 gcd = i; 12 } 13 i++; 14 } 15 mcm /= gcd; 16 printf("Greatest common divisor is %d\nMinimum common multiple is %d\n", gcd, mcm); 17 18 return 0; 19}
打印:
1Please input 2 numbers: 228 70 3Greatest common divisor is 14 4Minimum common multiple is 140 5
习题17
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
实现思路: 使用循环和条件判断。 代码如下:
1#include <stdio.h> 2 3int main(){ 4 int digit = 0, space = 0, chara = 0, other = 0; 5 char inchar; 6 while((inchar = getchar()) != '\n'){ 7 if(inchar >= 'a' && inchar <= 'z' || inchar >= 'A' && inchar <= 'Z'){ 8 chara++; 9 } 10 else if(inchar >= '0' && inchar <= '9'){ 11 digit++; 12 } 13 else if(inchar == ' '){ 14 space++; 15 } 16 else{ 17 other++; 18 } 19 } 20 printf("char = %d, digit = %d, space = %d, other = %d\n", chara, digit, space, other); 21 22 return 0; 23}
打印:
1zxcvb 123 #$% ASDFG!@ #$% 2char = 10, digit = 3, space = 4, other = 8 3
习题18
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
实现思路: 先计算出每一项的值,再相加。
代码如下:
1#include <stdio.h> 2#include <math.h> 3 4int main(){ 5 int gen_num(int a, int i); 6 int a, n, sum, i; 7 printf("Please input a and n: "); 8 scanf("%d %d", &a, &n); 9 for(i = 1; i <= n; i++){ 10 sum += gen_num(a, i); 11 } 12 printf("sum = %d\n", sum); 13 14 return 0; 15} 16 17int gen_num(int a, int i){ 18 int j, num = 0; 19 for(j = 1; j <= i; j++){ 20 num += a * pow(10, j - 1); 21 } 22 return num; 23}
打印:
1Please input a and n: 3 7 2sum = 3703701 3
习题19
一个数如果恰好等于它的因子之和,这个数就称为完数。 例如6=1 + 2 + 3,所以6是完数。 编程找出1000以内的所有完数。
实现思路: 循环和判断相结合。
代码如下:
1#include<stdio.h> 2#define N 1000 3 4int main(){ 5 int i,j,k,n,sum; 6 int a[256]; 7 for(i=2;i<=N;i++){ 8 sum=a[0]=1; 9 k=0; 10 for(j=2;j<=(i/2);j++){ 11 if(i%j==0){ 12 sum+=j; 13 a[++k]=j; 14 } 15 } 16 if(i==sum){ 17 printf("%d=%d",i,a[0]); 18 for(n=1;n<=k;n++) 19 printf("+%d",a[n]); 20 printf("\n"); 21 } 22 } 23 24 return 0; 25}
打印:
16=1+2+3 228=1+2+4+7+14 3496=1+2+4+8+16+31+62+124+248 4
习题20
一球从100米高度自由落下,每次落地后反跳回原高度的一半、再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?
实现思路: 简单循环实现。
代码如下:
1#include<stdio.h> 2#define N 1000 3 4int main(){ 5 float sum = 100, height = 100, i; 6 for(i = 1; i < 10; i++){ 7 height /= 2.0; 8 sum += (height * 2); 9 } 10 printf("Sum = %10.6f\nHeight = %10.6f", sum, height / 2.0); 11 12 return 0; 13}
打印:
1Sum = 299.609375 2Height = 0.097656
本文原文首发来自博客专栏C语言实战,由本人转发至https://www.helloworld.net/p/wyZS57fXKCgb,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/106478490查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。
