【程序16】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
辗转相除法设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q……r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q……r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。
例如:a=25,b=15,a/b=1……10,b/10=1……5,10/5=2…….0,最后一个为被除数余数的除数就是5,5就是所求最大公约数。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int num1,num2,flag,temp;
printf("请输入两个数\n");
scanf("%d%d",&num1,&num2);
printf("最大公约数为:");
int a ,b ;
a = num1>num2?num1: num2;
// flag = a;
b = num1<=num2?num1: num2;
while(b != 0){
if(a%b == 0){
printf("%d\n",b);
flag = b;
b = 0;
}
else{
temp = a;
a = b;
b = temp%b;
}
}
printf("最小公倍数:%d",num1*num2/flag);
printf("\n");
system("pause");
return 0;
}
【程序17】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为’\n’.
#include<stdio.h>
#include<stdlib.h>
int main(){
char c;
printf("请输入一串字符\n");
scanf("%c",&c);
int letters = 0,space = 0 ,digit = 0,others = 0;
while((c= getchar())!='\n'){
if(c>='a'&&c<='z'||c>='A'&&c<='Z'){
letters++;
}
else if(c ==' '){
space++;
}else if(c>='0'&&c<='9'){
digit++;
}else{
others++;
}
}
printf("结果输出letters为%d个,space为%d个,digit为%d个,others为%d个",letters,space,digit,others);
printf("\n");
system("pause");
return 0;
}
为什么结果总是会少算一个
初学的我掉到一个坑里
更改之后
#include<stdio.h>
#include<stdlib.h>
int main(){
char c;
char sr;
printf("请输入一串字符\n");
// scanf("%c",&c);
// sr = gets(c);
int letters = 0,space = 0 ,digit = 0,others = 0;
while((c = getchar())!='\n'){
if(c>='a'&&c<='z'||c>='A'&&c<='Z'){
letters++;
}
else if(c ==' '){
space++;
}else if(c>='0'&&c<='9'){
digit++;
}else{
others++;
}
}
printf("结果输出letters为%d个,space为%d个,digit为%d个,others为%d个",letters,space,digit,others);
printf("\n");
system("pause");
return 0;
}
对于other是7可能不能理解,因为,。;值中文字符/算一个
函数名: getchar
功 能: 从stdin流中读字符
用 法: int getchar(void);
程序例:
#include <stdio.h>
int main(void)
{
int c;
/* Note that getchar reads from stdin and
is line buffered; this means it will
not return until you press ENTER. */
while ((c = getchar()) != '\n')
printf("%c", c);
return 0;
}
【程序18】
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
#include<stdio.h>
#include<stdlib.h>
int main(){
int c;
printf("请输入一个数字\n");
scanf("%d",&c);
printf("请输入需要几个数相加\n");
int num;
scanf("%d",&num);
int i,sum = 0;
for(i= num;i>0;i--){
printf("-----");
sum = i*c+sum;
c = c*10;
}
printf("结果输出为%d个",sum);
printf("\n");
system("pause");
return 0;
}
【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。
先找它的所有因子
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int i,number,sum = 0;
printf("分解质因数\n");
int j;
//1000以内的数
for(j = 2;j<1000;j++){
sum = 1;
//求所有因子
for(i = 2;i<j;i++){
if(j%i==0){
sum = sum+i;
}
}
if(sum == j){
printf("完全数为%d\t",sum);
}
}
printf("\n");
system("pause");
return 0;
}
【程序20】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int i,number,sum = 100,flag = 100;
printf("球落地次数输入\n");
scanf("%d",&number);
int j;
if(number == 1){
printf("球总共经过了%d米\t",sum);
printf("\n");
system("pause");
return 0;
}
for(i = 2;i<=number;i++){
sum = sum+flag/(i-1);
}
printf("球总共经过了%d米\t",sum);
printf("\n");
system("pause");
return 0;
}