C语言经典习题100例(四)16-20
Python基础特训 12节课从0起步掌握Python
给大家介绍一堂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。
代码如下:
#include <stdio.h>
int main(){
int m, n, gcd, mcm, mid;
printf("Please input 2 numbers:n");
scanf("%d %d", &m, &n);
mid = m % n;
mcm = m * n;
while(mid != 0){
m = n;
n = mid;
mid = m % n;
}
gcd = n;
mcm /= gcd;
printf("Greatest common divisor is %dnMinimum common multiple is %dn", gcd, mcm);
return 0;
}
打印:
Please input 2 numbers:
12 45
Greatest common divisor is 3
Minimum common multiple is 180
方式二——辗转相减法: 思路: (1)如果a>b ,a = a - b; (2)如果b>a ,b = b - a; (3)假如a = b ,则 a或b 是最大公约数; (4)如果a != b,则继续相减,直至a = b。
代码如下:
#include <stdio.h>
int main(){
int m, n, gcd, mcm;
printf("Please input 2 numbers:n");
scanf("%d %d", &m, &n);
mcm = m * n;
while(m != n){
if(m > n){
m -= n;
}
else if(m < n){
n -= m;
}
}
gcd = m;
mcm /= gcd;
printf("Greatest common divisor is %dnMinimum common multiple is %dn", gcd, mcm);
return 0;
}
打印:
Please input 2 numbers:
18 56
Greatest common divisor is 2
Minimum common multiple is 504
方式三——枚举法: 思路: (1)min为a、b中最小的一个数; (2)分别用a、b对i求余数,即看是否能被整除; (3)直到a、b同时都能被i整除; (4)如不能整除,i加1、继续开始执行,直到i等于min。
代码如下:
#include <stdio.h>
int main(){
int m, n, gcd, mcm, min, i;
printf("Please input 2 numbers:n");
scanf("%d %d", &m, &n);
mcm = m * n;
min = m > n ? n : m;
for(i = 1; i <= min; ){
if(m % i == 0 && n % i == 0){
gcd = i;
}
i++;
}
mcm /= gcd;
printf("Greatest common divisor is %dnMinimum common multiple is %dn", gcd, mcm);
return 0;
}
打印:
Please input 2 numbers:
28 70
Greatest common divisor is 14
Minimum common multiple is 140
习题17
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
实现思路: 使用循环和条件判断。 代码如下:
#include <stdio.h>
int main(){
int digit = 0, space = 0, chara = 0, other = 0;
char inchar;
while((inchar = getchar()) != 'n'){
if(inchar >= 'a' && inchar <= 'z' || inchar >= 'A' && inchar <= 'Z'){
chara++;
}
else if(inchar >= '0' && inchar <= '9'){
digit++;
}
else if(inchar == ' '){
space++;
}
else{
other++;
}
}
printf("char = %d, digit = %d, space = %d, other = %dn", chara, digit, space, other);
return 0;
}
打印:
zxcvb 123 #$% ASDFG!@ #$%
char = 10, digit = 3, space = 4, other = 8
习题18
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
实现思路: 先计算出每一项的值,再相加。
代码如下:
#include <stdio.h>
#include <math.h>
int main(){
int gen_num(int a, int i);
int a, n, sum, i;
printf("Please input a and n: ");
scanf("%d %d", &a, &n);
for(i = 1; i <= n; i++){
sum += gen_num(a, i);
}
printf("sum = %dn", sum);
return 0;
}
int gen_num(int a, int i){
int j, num = 0;
for(j = 1; j <= i; j++){
num += a * pow(10, j - 1);
}
return num;
}
打印:
Please input a and n: 3 7
sum = 3703701
习题19
一个数如果恰好等于它的因子之和,这个数就称为完数。 例如6=1 + 2 + 3,所以6是完数。 编程找出1000以内的所有完数。
实现思路: 循环和判断相结合。
代码如下:
#include<stdio.h>
#define N 1000
int main(){
int i,j,k,n,sum;
int a[256];
for(i=2;i<=N;i++){
sum=a[0]=1;
k=0;
for(j=2;j<=(i/2);j++){
if(i%j==0){
sum+=j;
a[++k]=j;
}
}
if(i==sum){
printf("%d=%d",i,a[0]);
for(n=1;n<=k;n++)
printf("+%d",a[n]);
printf("n");
}
}
return 0;
}
打印:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
习题20
一球从100米高度自由落下,每次落地后反跳回原高度的一半、再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?
实现思路: 简单循环实现。
代码如下:
#include<stdio.h>
#define N 1000
int main(){
float sum = 100, height = 100, i;
for(i = 1; i < 10; i++){
height /= 2.0;
sum += (height * 2);
}
printf("Sum = %10.6fnHeight = %10.6f", sum, height / 2.0);
return 0;
}
打印:
Sum = 299.609375
Height = 0.097656
- 程序运算性能测量
- 2018年比特币的真正瓶颈在这里
- 玩转 React 服务器端渲染
- WCF版的PetShop之二:模块中的层次划分[提供源代码下载]
- 我的WCF之旅(3):在WCF中实现双工通信
- 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯
- 更新弹幕系统的心得体会
- 我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案
- 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯
- 我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案
- 扩展mysql - 手把手教你写udf
- scrapy初体验 - 安装遇到的坑及第一个范例
- Linux性能监控 - CPU、Memory、IO、Network
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法