控制语句练习题【C语言】——第六天

/*打印出100~999之间的所有水仙花数。水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)*/

#include 

int main()
{
    int i;
    for(i=100;i<=999;i++)
    {
        int a,b,c;
        a=i/100;
        b=i%100/10;//i/10-a*10
        c=i%10;
        if(a*a*a+b*b*b+c*c*c==i)
            printf("%d是水仙花数。\n",i);
    }
}

/*
153是水仙花数。
370是水仙花数。
371是水仙花数。
407是水仙花数。
*/


/*我有1000块钱我想买100只鸡,市场上公鸡50块一只,母鸡30块一只,小鸡10块钱3只,问题我该如何去购买?列出所有购买方案(使用for循环套用的方式)*/


//1000可买公鸡最多20||母鸡:33||小鸡:300

#include 

int main()
{
    int a,b,c;
    for(a=0;a<20;a++)
    {
        for(b=0;b<=33;b++)
        {
            for(c=0;c<=100;c++)
            {
                if(50*a+30*b+10*c==1000 && a+b+3*c == 100)        printf("公鸡买%d只,母鸡买%d只,小鸡买%d只\n",a,b,3*c);
            }
        }
    }
}

/*
公鸡买0只,母鸡买25只,小鸡买75只
公鸡买4只,母鸡买18只,小鸡买78只
公鸡买8只,母鸡买11只,小鸡买81只
公鸡买12只,母鸡买4只,小鸡买84只
*/

//参考答案:

#include
int main()
{
    int a,b,c;
    for(a=1;a<20;a++)
    {
        for(b=1;b<33;b++)
        {
            for(c=0;c<100;c++,c++,c++)//循环套用,遍历所有方案 
            {
                if((a+b+c==100) && (a*50+b*30+c*10/3.0==1000))
                {
                    printf("%d只公鸡%d只母鸡%d只小鸡\n",a,b,c);
                } 
            }
        }
    } 
    return 0;
}

/*输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:等腰、等边、直角、等腰直角、一般。*/

#include 

int main()
{
    int a,b,c;
    printf("输入三角形的边:");
    scanf("%d%d%d",&a,&b,&c);
    if(a+b>c && a+c>b && b+c>a)
    {
        if(a==b || b==c || c==a)
        {
            if(a==b && b==c)
                printf("%d,%d,%d构成等边三角形。\n",a,b,c);
            else if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
                printf("%d,%d,%d构成等腰直角三角形。\n",a,b,c);
            else
                printf("%d,%d,%d构成等腰三角形。\n",a,b,c);
            
        }
        else if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
                printf("%d,%d,%d构成直角三角形。\n",a,b,c);
        else
            printf("%d,%d,%d构成一般三角形。\n",a,b,c);
    }
    else
        printf("%d,%d,%d不构成三角形。\n",a,b,c);
}

//参考答案:

#include
int main()
{
    float a,b,c;
    printf("请输入三角形边长:\n");
    scanf("%f%f%f",&a,&b,&c);
    if((a-b>=c)||(b-c>=a)||(c-a>=b))
    {
        printf("不能够成三角形\n");
    } 
    else if ((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
    {
        if ((a==b)||(b==c)||(c==a))
        {
            printf("等腰直角三角形\n");
        }
        else 
        {
            printf("直角三角形\n");
        }
    }
    else if ((a==b)&&(b==c)) 
    {
        printf("等边三角形\n");
    }
    else if ((a==b)&&(b!=c)||(c==b)&&(b!=a)||(a==c)&&(c!=a)) 
    {
        printf("等腰三角形\n");
    }
    else 
    {
        printf("一般三角形\n");
    }
    return 0;
}

/*编写c语言程序实现税费的计算。输入一个奖金数,求应交税款及实得奖金数奖金税率如下(a代表奖金,r代表税率):
a<500 r=0%
500≤a<1000 r=3%
1000≤a<2000 r=5%
2000≤a<5000 r=8%
a≥5000 r=12%
*/

#include 
#include 
int main()
{    
    float a,b;
    printf("输入奖金数:");
    scanf("%f",&a);
    
        if(a<500)
        {
            b=0;printf("应交税款为%.1f,实得奖金数为%.1f\n",b,a-b);
        }
        else if(a>=500&&a<=1000)
        {
            b=a*0.03;printf("应交税款为%.1f,实得奖金数为%.1f\n",b,a-b);
        }
        else if(a>=1000&&a<=2000)
        {
            b=a*0.05;printf("应交税款为%.1f,实得奖金数为%.1f\n",b,a-b);
        }
        else if(a>=2000&&a<=5000)
        {
            b=a*0.08;printf("应交税款为%.1f,实得奖金数为%.1f\n",b,a-b);
        }
        else
        {
            b=a*0.12;printf("应交税款为%.1f,实得奖金数为%.1f\n",b,a-b);
        }
    
}

/*编译结果:
输入奖金数:1234
应交税款为61.7,实得奖金数为1172.3
*/

//参考答案:

#include
int main()
{
    int a,n;
    float r,t,s;
    printf("请输入奖金数:\n");
    scanf("%d",&a);
    n=a/1000;
    switch(n)
    {
        case 0:
        case 1:
        case 2:r=0.01;break;
        case 3:
        case 4:r=0.02;break;
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:r=0.03;break;
        default:r=0.05;break;
    }
    printf("税率:%7.2f\n",r);
    printf("税款:%7.2f\n",a*r);
    printf("实得奖金:%7.2f\n",a-a*r);
    return 0;
}

/*有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完,请编程。*/

#include 
#include 
int main()
{    
    int i=0,num,temp;
    printf("输入西瓜个数:");
    scanf("%d",&num);
    temp=num;
    while(num!=0)
    {
        num-=num/2+2;
        i++;
        if(num<=0)
            break;
    }
    printf("%d个西瓜要买%d天\n",temp,i);
}

/*编译结果:
输入西瓜个数:1020
1020个西瓜要买8天
*/

//参考答案:

#include 
void main()
{
    int a=1020,c=0;
    do
    {
        a=a/2-2;
        c++;
    }while(a!=0);
    printf("c=%d",c);
}

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

//第十天:1,第九天:4/2-1=1、4=(1+1)*2,第八天:y=(x+1)*2、x=4、y=10

#include 
#include 
int main()
{    
    int i=0,sum=1;
    for(i=0;i<9;i++)
    {
        sum=(sum+1)*2;
    }
    printf(" 猴子第一天一共摘了%d个桃子\n",sum);
}

/*编译结果:
 猴子第一天一共摘了1534个桃子
*/

//参考答案:

#include 
#define uchar unsigned char
#define uint unsigned int
int main()
{
    uchar day,i;
    uint s=0,j=1,k=0;
    printf("请输入第几天剩下一个桃子!回车结束!\n");
    scanf("%d",&day);         //输入第几天剩下一个桃子
    if(day==1)
    {
        printf("第一天共有桃子1个!\n");
    }
    else
    {
        for(i=1;i

/*有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?*/

//第一个月:1`;第二月:1``;第三月:1```+1`;
//第四月:1```+1`+1``;第五月1```+1`+1``+1```+1`;
//第六月:1```+1`+1``+1```+1`+1```+1`+1``
//1  1  2  3  5  8

#include 
#include 
int main()
{    
    int i,n;
    int a[128];
    a[0]=1;
    a[1]=1;
    printf("输入月份:");
    scanf("%d",&n);
    printf("第1月一共有1对兔子\n");
    printf("第2月一共有1对兔子\n");
    for(i=2;i

/*编译结果:
输入月份:6
第1月一共有1对兔子
第2月一共有1对兔子
第2月一共有2对兔子
第3月一共有3对兔子
第4月一共有5对兔子
第5月一共有8对兔子
*/

//参考答案:

#include
#define uchar unsigned char
#define uint unsigned int
int main()
{
    uint i,temp=1,n=1;
    uint mouth,sum;
    printf("请输入月份!回车结束!\n");
    scanf("%d",&mouth);                       //输入月份
    if(mouth<2)
    {
        printf("一共有2只兔子\n");
        return 0;
    }
    for(i=3;i<=mouth;i++)                
    {
        sum=n+temp;            //sum为本个月的总数
        n=temp;                //n为上上个月总数
        temp=sum;              //temp为上个月总数
    }
    printf("一共有%d只兔子\n",sum*2);
    return 0;
}

/*求Sn=a+aa+aaa+…+aa…a之值,n,a由键盘输入。*/

#include 
#include 

long mul(int a,int n)
{
    if(n=1)
        return a;
    else
        return a*mul(a,n-1);
}
int main()
{    
    int i,a,n;
    long Sn=0;
    printf("输入a:");
    scanf("%d",&a);
    printf("输入n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        Sn+=mul(a,i);
    }
    printf("当a=%d n=%d时,Sn=%ld\n",a,n,Sn);
}

/*编译结果:
输入a:2
输入n:2
当a=2 n=2时,Sn=4
*/

//结论:
/*
long数据类型:%ld
*/

//参考答案:

#include
int main()
{
    int a,n,i=1,sn=0,tn=0;
    printf("a,n=:");
    scanf("%d,%d",&a,&n);
    while(i<=n)
    {
        tn=tn+a;
        sn=sn+tn;
        a=a*10;
        ++i;
    }
    printf("a+aa+aaa+…+aa…a=%d\n",sn);
    return 0;
}

/*打印菱形、金字塔图形*/

//金字塔:3;第3层:第3个奇数(5个*),上一次:第2个奇数(3个*,5-3个空格)第n层:2i-1个*
//  *  
// *** 
//*****

#include 
#include 

int main()
{    
    int n,i,j;
    printf("输入金字塔层数:");
    scanf("%d",&n);
    printf("\n");
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        for(j=1;j<=2*i-1;j++)
            printf("*");
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        printf("\n");
    }
    printf("输入菱形(奇数)层数:");
    scanf("%d",&n);
    n=n/2+1;
    printf("\n");
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        for(j=1;j<=2*i-1;j++)
            printf("*");
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        printf("\n");
    }
    for(i=n-1;i>=1;i--)
    {
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        for(j=1;j<=2*i-1;j++)
            printf("*");
        for(j=1;j<=((2*n-1)-(2*i-1))/2;j++)
            printf(" ");
        printf("\n");
    }
}

/*编译结果:
输入金字塔层数:5

    *    
   ***   
  *****  
 ******* 
*********
输入菱形(奇数)层数:5

  *  
 *** 
*****
 *** 
  * 
*/

//参考答案:
打印金字塔图形

#include
int main()
{
    char i,j,k;        
    for(j=0;j<4;j++)
    {
        for(i=0;i<3-j;i++)
        {
            printf(" ");
        }
        for(i=0;i<=j*2;i++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

打印菱形

#include
int main()
{
    char i,j,k;        
    for(j=0;j<4;j++)
    {
        for(i=0;i<4-j;i++)
        {
            printf(" ");
        }
        for(i=0;i<=j*2;i++)
        {
            printf("*");
        }
        printf("\n");
    }
    for(i=0;i<=4*2;i++)
    {
        printf("*"); 
    }
    printf("\n");
    for(j=0;j<4;j++)
    {
        for(i=0;i<=j;i++)
        {
            printf(" ");
        }
        for(i=0;i<(4-j)*2-1;i++)
        {
            printf("*");    
        }        
        printf("\n");
    }
    return 0;
}

/*按以下规律翻译密码:将每一个字母变成它后面的字母,例如,将A变成B,B变成C,…,Z变成A,非字母字符不变,“!”作为电文结束标志。*/

#include 
#include 
void trans(char buff[]);

void trans(char buff[])
{
    int i;
    while(buff[i]!=0)
    {
        
        if(buff[i]>=65&&buff[i]<='Y')
            buff[i]=buff[i]+1;
        if(buff[i]=='Z')
            buff[i]=65;
        if(buff[i]>=97&&buff[i]<='y')
            buff[i]=buff[i]+1;
        if(buff[i]=='z')
            buff[i]=97;    
        i++;    
    }
    buff[i]='!';
    buff[i+1]=0;
    printf("翻译的电文为:%s\n",buff);
}

int main()
{    
    int n,i,j;
    char buff[128];
    printf("输入密码:");
    gets(buff);
    trans(buff);
}

/*编译结果:
输入密码:abcDEF123
翻译的电文为:bcdEFG123!
*/

//参考答案:

#include 
int main()
{
    char ch;
    printf("输入字符串:\n");
    while ((ch=getchar())!='!')
    {
        if ((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
        { 
            if(ch=='z') 
            {
                ch='a';
            } 
            else if(ch=='Z')
            {
                ch='A';
            } 
            else 
            {
                ch=ch+1;
            } 
            printf("%c",ch);
          } 
    }
    printf("\n");
}

/*输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变,请编程。*/

#include 
#include 
void change(char a);

void change(char a)
{
    int i;
    if(a>=65&&a<='Z')
        a=a+32;
    if(a>=97&&a<='z')
        a=a-32;

    printf("字符变成:%c\n",a);
}

int main()
{    
    char a;
    printf("输入一个字符:");
    scanf("%c",&a);
    change(a);
}

/*编译结果:
输入一个字符:r
字符变成:R
输入一个字符:a
字符变成:A
输入一个字符:4
字符变成:4
*/

//参考答案:

#include 
int main()
{
    char ch;     //定义字符ch
    ch=getchar();
    if((ch>=65)&&(ch<=90))
    {
        ch=ch+32;
    } 
    else if ((ch>=97)&&(ch<=122))
    {
        ch=ch-32;
    } 
    printf("%c\n",ch);
}

/*编程实现:计算1到100之间的奇数之和及偶数之和。*/

#include 
#include 
int odd(void);
int even(void);

int odd(void)
{
    int i,sum=0;
    for(i=2;i<100;i++)
        if(i%2==1)
            sum+=i;
    return sum;
}

int even(void)
{
    int i,sum=0;
    for(i=2;i<100;i++)
        if(i%2==0)
            sum+=i;
    return sum;
}


int main()
{    
    printf("奇数和为:%d\n",odd());
    printf("偶数和为:%d\n",even());
}

/*编译结果:
奇数和为:2499
偶数和为:2450
*/

//参考答案:

#include 
void main ()
{
    int n,even=0,odd=0;
    for(n=1;n<=50;n++)
    {
        even+=2*n;    //even=even+2*n
        odd+=2*n-1;
    }
    printf("1到100间的偶数的和为%d:\n",even);
    printf("1到100间的奇数的和为%d:\n",odd);
}

/*有一个两位数XY,X是十位,Y是个位;给出X+Y的值和X*Y的值;编程实现让用户猜测这个两位数十多少?根据猜测给出不同的提示。*/

#include 
#include 
#include 
int LayOut(void);
int judge(int ret,int num);
void hint(int ret);

int LayOut(void)
{    
    int a;
    printf("**********************\n");
    printf("*******猜字游戏*******\n");
    printf("********1.play********\n");
    printf("********2.exit********\n");
    aa:
    scanf("%d",&a);
    if(a==1)
        return 1;
    else if(a==2)
        return 0;
    else
        printf("输入错误,重新输入:\n");
    goto aa;
    
}
int judge(int ret,int num)
{
    if(ret>num)
    {
        printf("数字有点小了。\n再猜一次:\n");
        return 0;
    }
    else if(ret

//参考答案:

#include 
int main()
{
    int a;
    printf ("x+y=2\n");
    printf("x*y=1\n");
    printf("请输入你所猜得数字\n");
    scanf("%d",&a);
    while(a!=11)
    {
        printf("you are not right\n");
        scanf("%d",&a);
    }
    printf ("you are right\n");
}

你可能感兴趣的:(C语言,c语言)