C语言经典例题100(17~21)

十七、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include<stdio.h>

int main()
{
    char mychar;
    int c_num,sp_num,num_num,oc_num,all_num;
    c_num=sp_num=num_num=oc_num=all_num=0;
    printf("请输入一串字符,以换行符结尾
");
    mychar=getchar();
    while(mychar!='
')
    {
        if(mychar>='0'&&mychar<='9')
            num_num++;
        else
        {
            if(((mychar>='A')&&(mychar<='Z'))||((mychar>='a')&&(mychar<='z')))
                c_num++;
            else
            {
                if(mychar==' ')
                    sp_num++;
                else
                    oc_num++;
            }
        }
        all_num++;
        mychar=getchar();
    }         
    printf("总共有%d个字符
",all_num);
    printf("其中字母有%d个;数字有%d个;空格有%d个;其他字符有%d个。
",c_num,num_num,sp_num,oc_num);

    getch();
    return 0;
}

十八、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

 程序分析:

第一次为a;第二次为aa;第三次为aaa...

可推出,第(n+1)次比n次新增项设为(n+1)个a连续组成的数,设第n次新增数为M,运算结果为N,则第(n+1)次新增数为M*10+a;(n+1)次运算结果为N+M*10+a;

当n=1时,结果为a;

当n>1时,以第二次为基础,第二次新增数为aa,结果为(a+aa);

长整型数据表示范围为4294967296,因此当次数输入超过10次或者:次数为10次且a>3时会发生溢出。

#include<stdio.h>

int main()
{
    int a,n,i,M;
    long sum;
    printf("请输入一个个位数和运算的次数:
");
    scanf("%d%d",&a,&n);
    if((n>10)||((n==10)&&(a>3)))
    {    
        printf("error!
");
        getch();
        return 0;
    }
    if(n==1)
        sum=a;
    else
    {
        M=a*10+a;
        sum=a+M;
        for(i=1;i<(n-1);i++)
        {
            M=M*10+a;
            sum=sum+M;
        }
    }
    printf("结果为:%ld
",sum);

    getch();
    return 0;

}

十九、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include<stdio.h>

int main()
{
    int n,i,sum;
    for(n=1;n<1001;n++)
    {
        sum=0;
        for(i=1;i<n;i++)
            if(n%i==0)
                sum+=i;
        if(sum==n)
            printf("	%d",n);
    }
    getch();
    return 0;
}

        

二十、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在10次落地时,共经过多少米?第10次反弹多高?

#include<stdio.h>

int main()
{
    int i;
    float h0,s,hx;
    h0=100.0;
    hx=100.0;
    s=100.0;
    for(i=2;i<11;i++)
    {
        hx=hx/2.0;
        s+=hx*2;
    }
    printf("总共行程为%f米,最后一次高度为%f米。
",s,hx);
    getch();
    return 0;
}

二十一、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

#include<stdio.h>

int main()
{
    int n,p=1;
    for(n=9;n>0;n--)
    {
        p=(p+1)*2;
    }
    printf("摘了%d个桃子.
",p);
    getch();
    return 0;
}
原文地址:https://www.cnblogs.com/tsembrace/p/3250692.html