xdoj流程控制


工资计算


  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资为S元,则他应交的个人所得税按如下公式计算:

  1) 个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;

  2) A中不超过1500元的部分,税率3%;

  3) A中超过1500元未超过4500元的部分,税率10%;

  4) A中超过4500元未超过9000元的部分,税率20%;

  5) A中超过9000元未超过35000元的部分,税率25%;

  6) A中超过35000元的部分,税率30%;
例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,
超过4500元部分应缴税(6500-4500)×20%=400元。总共缴税745元,税后所得为9255元。
已知小明这个月税前所得为S元,请问他的税后工资T是多少元。
输入格式
  输入为一个整数S,表示小明的税前工资。所有评测数据保证小明的税前工资为一个整百的数。
输出格式
  输出一个整数T,表示小明的税后工资。
样例输入
10000
样例输出
9255
评测用例规模与约定
对于所有评测用例,1 ≤ T ≤ 100000。

#include <stdio.h>
int main()
{
    //输入 
    int S = 0;
    int T = 0; 
    scanf("%d",&S);
    int A = S - 3500;
    
    //计算 
    if(A<=0)
    {
        T = S;
    }
    else if(A<=1500)
    {
        T = 3500+A*0.97;
    }
    else if(A<=4500)
    {
        T = 4955+(A-1500)*0.9;
    }
    else if(A<=9000)
    {
        T = 7655+(A-4500)*0.8;
    }
    else if(A<=35000)
    {
        T = 11255+(A-9000)*0.75;
    }
    else if(A>35000)
    {
        T = 30755+(A-35000)*0.7;
    }
    
    //输出
    printf("%d",T);
     
    return 0;
 } 
 

迭代法求根

#include <stdio.h>
#include <math.h>
int main()
{
    
    double a,x0,x1;
    scanf("%lf",&a);
    x0=a/2.0;//设置一个x0初始值,再慢慢通过公式递归迭代出误差较小的结果
    x1=(x0+(a/x0))/2;//套用公式 
    while(fabs(x1-x0)>=(1E-5))//fabs是绝对值函数,返回括号里的绝对值 1E-5=1*10的-5次方
    {
      x0=x1;
      x1=(x0+(a/x0))/2;
    }
    printf("%.5lf",x1);
    return 0;
}
 


最大公约数和最小公倍数的计算


问题描述:
输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
输入说明:
输入两个正整数 m 和 n。
输出说明:
输出 m 和 n 的最大公约数和最小公倍数。
输入样例:
8 12
输出样例:
4 24

#include <stdio.h>
int main()
{
    //初始化数据,获取输入 
    int m = 0;
    int n = 0;
    scanf("%d%d",&m,&n);
    int m1 = m;
    int n1 = n;//辗转相除法会改变数值所以需要一个替身 
    int t2 = 1;
    
    //排序
    if(m1>n1)
    {
        int t1 = n1;
        m1 = n1;
        n1 = t1;
     } 
     
    //辗转相除法求出最大公约数
    while(n1)
    {
        int t2 = m1 % n1;
        m1 = n1;
        n1 = t2;//m1就是最大公约数 
    }
    //m*n/m1就是最小公倍数 
    
    printf("%d %d",m1,m*n/m1);
        
    return 0;
}

整数分析

#include <stdio.h>
void bubble_sort(int num[],int len)
{
    int i = 0;
    for(i=0;i<len-1;i++)
    {
        int sign = 1;//假设这一趟已经有序 
        int j = 0;
        for(j;j<len-1-i;j++)
        {
            if(num[j]>num[j+1])
            {
                int exchange = num[j];
                num[j] = num[j+1];
                num[j+1] = exchange;
                sign = 0;//说明本趟排序已经进行,数组并不有序 
            }
        }
        if(sign == 1)
        {
            break;//本趟没有进行,说明数组已经有序,直接跳出循环,不需要进行下一趟 
        }
    }
}
int main()
{
    int n = 0;
    scanf("%d",&n);
    int m = n;
    int i = 0;
    
    //计算位数
    int digit = 1;
    for(i=0;n>=10;i++)
    {
        n /= 10;
        digit++;
    }
    
    //将每一位存入数组,并冒泡排序
    int num[9] = {0};
    for(i=0;i<digit;i++)
    {
        num[i] = m%10;
        m /= 10;
    } 
    bubble_sort (num,digit); 
    
    //找到最大最小
    int max = num[0];
    int min = num[0];
    for(i=0;i<digit;i++)
    {
        if(num[i]>max)
        {
            max = num[i];
        }
        if(num[i]<min)
        {
            min = num[i];
        }
    }
    
    
    printf("%d %d %d",digit,max,min);
    
    return 0;


跳一跳


问题描述    
跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一个方块,如果未能成功跳到下一个方块则游戏结束。
计分规则如下:
1. 如果成功跳到下一个方块上,但未跳到方块中心,加1分
2. 如果成功跳到下一个方块上,且刚好跳到方块中心,则第一次加2分,此后连续跳到中心时每次递增2分。也就是说,第一次跳到方块中心加2分,连续第二次跳到方块中心加4分,连续第三次跳到方块中心加6分,…,以此类推。
3. 如果未能成功跳到方块上,加0分,且游戏结束
现在给出玩家一局游戏的每次跳跃情况,请计算玩家最终得分。
输入说明    
输入为若干个非零整数(整数个数小于1000),表示玩家每次的跳跃情况。整数之间用空格分隔,整数取值为0,1,2。
0 表示未能成功跳到下一个方块上,
1 表示成功跳到下一个方块上但未跳到方块中心,
2 表示成功跳到下一个方块上,且刚好跳到方块中心。
输入的数据只有最后一个整数是0,其余均非零。
输出说明    
输出一个整数表示该玩家的最终得分。
输入样例    
1 1 2 1 2 2 2 0
输出样例    
17

#include <stdio.h>
int main()
{
    //初始化,获取数据
    int num[1000] = {0};
    int i = 0;
    int j = 0;
    int judge = 1;
    int grades = 0;
    int g1 = 0;
    do
    {
        scanf("%d",&num[i]);
        judge = num[i];
        i++;
     } while(judge);
    
    //计算分数 
    for(j;j<i-1;j++)
    {
        if(num[j] == 1)
        {
            grades++;
            g1 = 0;
        }
        else if(num[j] == 2)
        {
            g1+=2;
            grades = g1 + grades;
        }
     } 
     
    
    //输出 
    printf("%d",grades);
    
    
    return 0;
}
 

完数

#include <stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    int i = 0;

    int j = 0;
    
    for(i=a;i<b;i++)
    {
        int sum = 0;
        for(j=1;j<i;j++)
        {    
            if(i%j == 0)
            {
                sum = sum+j;
            }
        }
        if(sum == i)
        {
            printf("%d\n",i);
        }
    }
    
    
    
    
    
    return 0;
}


自然数分解


问题描述
任何一个自然数 m 的立方均可写成 m 个连续奇数之和。例如:
1
3
=1
2
3
=3+5
3
3
=7+9+11
4
3
=13+15+17+19
编程实现:输入一自然数 n,求组成 n
3 的 n 个连续奇数。
输入说明
一个正整数 n,0<n<30。
输出说明
输出 n 个连续奇数,数据之间用空格隔开,并换行
输入样例
4
输出样例
13 15 17 19

#include <stdio.h>
int main()
{
    //输入
    int m = 0;
    scanf("%d",&m);
    int m3 = m*m*m;
    int m2 = m*m;
    int i = 0;
    int j = 0;
    int n1 = 0;
    int n2 = 0;
    int k = 0;
    
    //计算,如果m是奇数中间项一定是它的平方,如果是偶数中间两项平均数是它的平方 
    if(m%2 == 1)
    {
        i = (m2 - 1)/2;
        j = (m - 1)/2; 
        n1 = i+j;
        n2 = i-j;
        for(k=n2;k<=n1;k++)
        {
            printf("%d ",2*k+1);
        }
    }
    else if(m%2 == 0)
    {
        i = (m2 - 2)/2;
        j = m/2;
        n1 = i+j;
        n2 = i-j+1;
        for(k=n2;k<=n1;k++)
        {
            printf("%d ",2*k+1);
        }
    }
    
     
     
    return 0;
 } 

  
日期计算


问题描述    
给定一个年份y和一个整数d,问这一年的第d天是几月几日?   
注意闰年的2月有29天,且满足下面条件之一的是闰年:   
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍

输入说明    
输入包含两个整数y和d,y表示年份,年份在1900到2018之间(包含1900和2018)。 d表示这一年的第几天,d在1至365之间。

输出说明    
在一行输出两个整数,分别表示答案的月份和日期。

输入样例    
2015 80

输出样例    
3  21

#include <stdio.h>
int is_leap(int x)
{
    if((x%4 == 0 && x%100!=0) || x%400 == 0)
    return 1;
    else
    return 0;
}
int main()
{
    //初始
    int year = 0;
    int day = 0;
    scanf("%d%d",&year,&day);
    int ret = 0;
    
    //判断是不是闰年,是返回1,不是返回0 
    ret = is_leap(year); 
    
    if(ret == 0)
    {
            //输出具体日期(平年)
        if(day<=31)
        {
            printf("1 %d",day);
        }
        else if(day<=59)
        {
            printf("2 %d",day-31);
        }
        else if(day<=90)
        {
            printf("3 %d",day-59);
        }
        else if(day<=120)
        {
            printf("4 %d",day-90);
        }
        else if(day<=151)
        {
            printf("5 %d",day-120);
        }
        else if(day<=181)
        {
            printf("6 %d",day-151);
        }
        else if(day<=212)
        {
            printf("7 %d",day-181);
        }
        else if(day<=243)
        {
            printf("8 %d",day-212);
        }
        else if(day<=273)
        {
            printf("9 %d",day-243);
        }
        else if(day<=304)
        {
            printf("10 %d",day-273);
        }
        else if(day<=334)
        {
            printf("11 %d",day-304);
        }
        else if(day<=365)
        {
            printf("12 %d",day-334);
        }
    }
    else if(ret == 1)
    {
            //输出具体日期(闰年)
        if(day<=31)
        {
            printf("1 %d",day);
        }
        else if(day<=60)
        {
            printf("2 %d",day-31);
        }
        else if(day<=91)
        {
            printf("3 %d",day-60);
        }
        else if(day<=121)
        {
            printf("4 %d",day-91);
        }
        else if(day<=152)
        {
            printf("5 %d",day-121);
        }
        else if(day<=182)
        {
            printf("6 %d",day-152);
        }
        else if(day<=213)
        {
            printf("7 %d",day-182);
        }
        else if(day<=244)
        {
            printf("8 %d",day-213);
        }
        else if(day<=274)
        {
            printf("9 %d",day-244);
        }
        else if(day<=304)
        {
            printf("10 %d",day-274);
        }
        else if(day<=335)
        {
            printf("11 %d",day-304);
        }
        else if(day<=366)
        {
            printf("12 %d",day-335);
        }
    }
    
    
    
    
    return 0;
 } 


整数比较1


描述:
编写程序,对于从键盘输入的2个整数,先输出较大者的个位数字,然后输出较小者的平方值。
输入说明:
输入的两个整数之间以一个空格分隔。
输出说明:
在一行上输出两个整数,整数之间以一个空格分隔,最后换行。
输入样例
样例1输入
29989  372
输出样例
样例1输出 
9 138384
#include <stdio.h>
int main()
{
    //初始
    int m = 0;
    int n = 0; 
    scanf("%d %d",&m,&n);
    int max = m;
    int min = n;
    if(max<min)
    {
        int t1 = min;
        min = max;
        max = t1; 
    }
    
    //输出
    printf("%d %d",max%10,min*min); 
    
    
    
    return 0;
 } 


整数比较2


从键盘输入四个整数,要求按由小到大的顺序输出。
输入说明:
输入四个整数,以空格间隔。
输出说明:
输出排序后的整数,以空格间隔。
输入样例
样例1输入
-99 9 99 -9
输出样例
样例1输出
-99 -9 9 99

#include <stdio.h>
void bubble_sort(int num[],int len)
{
    int i = 0;
    for(i=0;i<len-1;i++)
    {
        int j = 0;
        for(j=0;j<len-i-1;j++)
        {
            if(num[j]>num[j+1])
            {
                int tmp = num[j];
                num[j] = num[j+1];
                num[j+1] = tmp;
            }
        }
    }
    
    
}
int main()
{
    //初始 
    int num[4] = {0};
    int i = 0;
    for(i=0;i<4;i++)
    {
        scanf("%d",&num[i]);
    }
    
    //冒泡排序
    bubble_sort(num,4);
    
    //输出
    for(i=0;i<4;i++)
    {
        printf("%d ",num[i]);
    }
     
    return 0;
 } 
 


分段函数1 


#include <stdio.h>
#include <math.h>
int main()
{
    double x = 0;
    double fx = 0;
    scanf("%lf",&x);
    
    if(x>=0)
    {
        fx = sqrt(x);
    }
    else if(x<0)
    {
        fx = (x+1)*(x+1)+2*x+1/x;
    }
    
    printf("%.2f",fx);
    
    return 0;
 } 


分段函数2 



#include <stdio.h>
int main()
{
    int x = 0;
    int fx = 0;
    scanf("%d",&x);
    
    if(x<1)
    {
        fx = x;
    }
    else if(1<=x && x<10)
    {
        fx = 2*x-1;
    }
    else if(x>=10)
    {
        fx = 3*x-11;
    }
    
    printf("%d",fx);
    
    return 0;
 } 


输出金字塔


  
请输入一个大写字母作为字母金字塔的最大字母

示例:
输入:C
输出:  A
       ABA     
      ABCBA  (最后一行开头无空格)

#include <stdio.h>
int main()
{
    //初始化 
    char in,k;
    scanf("%c",&in);
    int i = 0;
    int j = 0;
    
    //打印金字塔,每行分成三个部分,空格,左边字母,右边字母 
    for(i=65;i<=in;i++)//记录行数 
    {
        for(j=0;j<in-i;j++)
        {
            printf(" ");
        }//空格 
        for(k=65;k<=i;k++)
        {
            printf("%c",k);
        }//左边字母
        for(k=i-1;k>=65;k--)
        {
            printf("%c",k);
        }//右边字母 
        printf("\n");
     } 
    
    
     
    return 0;
 } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北の风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值