C语言练习——Day02

题目11-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);
}

运行结果:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来根肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值