题目11-20
- 11、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 12、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- 13、三输入两个正整数m和n,求其最大公约数和最小公倍数。(辗除法)
- 14、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 15、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
- 16、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- 17、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
- 18、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- 19、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
- 20、求1+2!+3!+...+20!的和。
11、将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int number;
printf("打印一个正整数:");
scanf("%d",&number);//可以个判断是否是正整数
printf("%d=",number);
for (int i=2; i<=number; i++){
while (number!=1) {
if(number%i==0){
number=number/i;
printf("%d*",i);
}
else {
break;
}
}
}
//\b 是C语言的转义字符之一,其含义为退格(BS),ascii码值为8。 当输出\b时,其显示效果为光标退后一格,需要注意的是,只是光标退后,并不会删除字符,所以要达到真正的删除效果,还需要再输出一个字符。如果在后退后系统不再输出其它字符,那么需要手动输出一个空白字符来达到删除的作用。
printf("\b ");
return 0;
}
运行结果:
12、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int score;
char grade;
printf("输入分数:");
scanf("%d",&score);
grade=score>90?'A':(score>=60?'B':'C');//:(a>b)?a:b
printf("%d的等级为:%c。",score,grade);
return 0;
}
运行结果:
13、三输入两个正整数m和n,求其最大公约数和最小公倍数。(辗除法)
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int number1,number2,temp,a,b;
printf("输入两个数:");
scanf("%d%d",&number1,&number2);
if(number1<number2) {
temp=number1;
number1=number2;
number2=temp;
}
a=number1;b=number2;
printf("%d和%d",number1,number2);
while (b!=0) {
temp=a%b;
a=b;
b=temp;
}
printf("最小公倍数为为:%d。\n",a);
printf("最大公约数为为:%d。",number1*number2/a);
return 0;
}
运行结果:
14、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int letters=0,space=0,digit=0,others=0,i=0;
printf("输入字符:");
char c;
//不能用scanf函数,统计不了空格
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("字母字符有%d个,空格有%d个,数字有%d个,其他字符有%d个。",letters,space,digit,others);
return 0;
}
运行结果:
15、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int i, j, sum; /* i表示要判断的数,j表示因子,sum表示因子之和*/
for (i = 2; i <= 1000; i++)
{
sum = 1;
for (j = 2; j <= i / 2; j++)
if (i%j == 0)
sum += j;
if (sum == i)
{
printf("%d its factors are 1, ", i);
for (j = 2; j <= i / 2; j++)
if (i%j == 0)
printf("%d, ", j);
printf("\n");
}
}
return 0;
}
运行结果:
16、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char i,j,k; /*i是a的对手,j是b的对手,k是c的对手*/
for(i='x';i<='z';i++){
for(j='x';j<='z';j++){
if(i!=j){
for(k='x';k<='z';k++){
if(i!=k&&j!=k){
if(i!='x'&&k!='x'&&k!='z'){
printf("名单: a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
}
}
}
运行结果:
17、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
int a,n,count=1;
long int sn=0,tn=0;
printf("输入a,和n:");
scanf("%d%d",&a,&n);
printf("a=%d,n=%d\n",a,n);
while (count<=n) {
tn=tn+a;
sn=sn+tn;
a=a*10;
count++;
}
printf("a+aa+...=%ld\n",sn);
return 0;
}
运行结果:
18、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include<stdio.h>
int main(){
float sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;/*第n次落地时共经过的米数*/
hn=hn/2; /*第n次反跳高度*/
}
printf("第10次落地时,共经过%f米,第10次反弹%f高",sn,hn);
return 0;
}
运行结果:
19、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
int day,x1,x2;
day=9;
x2=1;
while(day>0){
x1=(x2+1)*2; /*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("桃子数%d\n",x1);
}
运行结果:
20、求1+2!+3!+…+20!的和。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
float sum,tum=1;
for (int i=1; i<=20; i++) {
tum=tum*i;
sum+=tum;
}
printf("1+2!+3!+...+20!=%lf\n",sum);
}
运行结果: