C语言9条基本控制语句——课后练习

 1. 已知 a, b, c 都是 1 位整数,求当三位数 abc+cba 的和为 1333 时 a,b,c 的值.

#include <stdio.h>

int main()
{    
    int a,b,c,num1,num2;
    
    for(a=1;a<=9;a++)//a=1
    {
        for(b=0;b<=9;b++)
        {
            for(c=1;c<=9;c++)//c=1
            {    
                num1=100*a+10*b+c;
                num2=100*c+10*b+a;
                if(num1+num2==1333)
                    printf("a=%d,b=%d,c=%d\n",a,b,c);
            }
        }
    }
}
/*
a=4,b=1,c=9
a=5,b=1,c=8
a=6,b=1,c=7
a=7,b=1,c=6
a=8,b=1,c=5
a=9,b=1,c=4
*/

2. 计算并输出 200—400 之间不能被 3 整除的整数的和。
#include <stdio.h>

int main()
{    
    int i,sum=0;
    for(i=200;i<=400;i++)
    {
        if(i%3!=0)
            sum+=i;
    }
    printf("整数和为:%d\n",sum);
}
/*
整数和为:40200
*/
3. 编程计算1*2*3+3*4*5+5*6*7+7*8*9+9*10*11....+99*100*101的值。
#include <stdio.h>

int main()
{    
    int a,b,c,sum=0;
    for(a=1,b=2,c=3;a<=99;a+=2,b+=2,c+=2)
        sum+=a*b*c;
    printf("方程的和为:%d\n",sum);
}
/*
方程的和为:13002450
*/   
/*

代码优化
for(i=1;i<=99;i+=2)
sum+=i*(i+1)*(i+2)
*/

 4. 输出所有200-400以内能被3整除且个位数字为7的整数。
#include <stdio.h>

int main()
{    
    int i;
    for(i=200;i<=400;i++)
    {
        if(i%3==0 && i%10==7)//i%10==0
            printf("目标整数为:%d\n",i);
    }
}
/*
目标整数为:207
目标整数为:237
目标整数为:267
目标整数为:297
目标整数为:327
目标整数为:357
目标整数为:387
*/
 5. 打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。例:153=1*1*1+5*5*5+3*3*3=1+125+27 
#include <stdio.h>

int main()
{    
    int i;
    for(i=100;i<=999;i++)
    {
        int a,b,c;
        a=i/100;
        b=i%100/10;
        c=i%10;
        if(a*a*a+b*b*b+c*c*c==i)
            printf("水仙花数为:%d\n",i);
    }
}
/*
水仙花数为:153
水仙花数为:370
水仙花数为:371
水仙花数为:407
*/
6. 编程计算1/1-1/2+1/3-1/4+1/5-1/6+1/7-1/8.....+1/99-1/100的值。   1
#include <stdio.h>

int main()
{    
    int i;
    float sum=0;
    for(i=1;i<=100;i++)
    {
        if(i%2==1)
            sum+=1.0/i;
        else
            sum-=1.0/i;
    }
    printf("方程的值为:%f\n",sum);
}
/*
方程的值为:。。。。。
*/
 7. 用1元人民币兑换5分,2分,1分的硬币共50枚,每种硬币至少1枚,问共有多少种兑换方案,输出每一种方案三种硬币的数量。
#include <stdio.h>

int main()
{    
    int a,b,c,num=0;
    for(a=1;a<=48;a++)//1-18
        for(b=1;b<=48;b++)//1-48
            for(c=1;c<=48;c++)//1-48
            {
                if(a+b+c!=50)
                    continue;
                else if(a*5+b*2+c!=100)
                    continue;
                else
                    {
                    printf("5分的个数为:%d,2分的个数为:%d,1分的个数为:%d\n",a,b,c);    
                    num++;
                    }        
            }
            printf("一共%d种方法",num);
}
/*
5分的个数为:1,2分的个数为:46,1分的个数为:3
5分的个数为:2,2分的个数为:42,1分的个数为:6
5分的个数为:3,2分的个数为:38,1分的个数为:9
5分的个数为:4,2分的个数为:34,1分的个数为:12
5分的个数为:5,2分的个数为:30,1分的个数为:15
5分的个数为:6,2分的个数为:26,1分的个数为:18
5分的个数为:7,2分的个数为:22,1分的个数为:21
5分的个数为:8,2分的个数为:18,1分的个数为:24
5分的个数为:9,2分的个数为:14,1分的个数为:27
5分的个数为:10,2分的个数为:10,1分的个数为:30
5分的个数为:11,2分的个数为:6,1分的个数为:33
5分的个数为:12,2分的个数为:2,1分的个数为:36
一共12种方法
*/
8. 输入正整数,将正整数分解质因数。质因数要满足两个条件
1) 是这个数的因数;  
2) 是质数(素数)如:6=2*3 12=2*2*3。
#include <stdio.h>

int main()
{    
    int i,j=0,num,num1;
    int a[j];
    printf("输入一个正整数:");
    scanf("%d",&num);
    num1=num;
    again:
    for(i=2;i<num;i++)//i<num
    {
        if(num%i==0)
            {
                a[j++]=i;
                if(num/i==1)    break;
                num=num/i;
                goto again;
            }
    }
    printf("结果为:%d=",num1);
    for(i=0;i<j;i++)
        printf("%d*",a[i]);
    printf("1\n");
}
/*

更优代码
int main()
{
    int num;
    scanf("%d",&num);
    printf("%d=",num);
    for(i=2;i<num;i++)
    {
        if(num%i==0)
        {
            printf("%d*",i);
            num/=i;
        }
        i=1;        
    }
    printf("%d",num)
}
*/

/*
输入一个正整数:12
结果为:
12=2*2*3*1
*/
9. 输出10000以内的所有完全数,若一个数的所有因子(不包括该数本身)相加等于这个数本身,则称其为完全数。
   6 = 1 + 2 + 3  
因数:能整除的数
#include <stdio.h>

int main()
{    
    int i,num,sum;
    for(num=6;num<10000;num++)
    {    
        sum=0;
        for(i=1;i<num;i++)
            if(num%i==0)
                sum+=i;
        if(sum==num)
            printf("%d为完全数\n",num);    
    }    
}
/*
6为完全数
28为完全数
496为完全数
8128为完全数
*/
 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值