您的位置:首页 > 编程语言 > C语言/C++

C/C++之习题16-20

2016-09-01 15:41 281 查看
【程序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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: