C语言经典题集(二)

13.企业利润发放问题

企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

#include <stdio.h>
int main()
{
    
    
    unsigned long int i = 0;
    int bonus = 0;
    printf("输入利润:");
    scanf("%ld", &i);
    if (i <= 100000)
        bonus = 100000 * 0.1;
    else if (100000 < i <= 200000)
        bonus = (i - 100000) * 0.075 + 100000 * 0.1;
    else if (200000 < i <= 400000)
        bonus = (i - 200000) * 0.005 + (i - 100000) * 0.075 + 100000 * 0.1;
    else if (400000 < i <= 600000)
        bonus = (i - 400000) * 0.003 + (i - 200000) * 0.005 + (i - 100000) * 0.075 + 100000 * 0.1;
    else if (600000 < i <= 1000000)
        bonus = (i - 600000) * 0.015 + (i - 400000) * 0.003 + (i - 200000) * 0.005 + (i - 100000) * 0.075 + 100000 * 0.1;
    else if(i > 1000000)
        bonus = (i - 600000) * 0.015 + (i - 400000) * 0.003 + (i - 200000) * 0.005 + (i - 100000) * 0.075 + 100000 * 0.1 + (i - 1000000) * 0.001;
    printf("bonus=%d", bonus);

    return 0;
}

14.根据下面的函数关系,输入 X,计算 Y,要求输出结果保留两位小数

(1)当 x 小于 5 时,y=0
(2)当 x 大于 5 且小于等于 10 时,y=sin(x)
(3)当 x 大于 10 时,y=cos(x)+sin(x)

#include <stdio.h>
#include <math.h>
int main() {
    
    
    float X;
    double Y;
    scanf("%f",&X);
    if(X<5)
        Y=0;
    else if(X>5&&X<10)
        Y=sin(X);
    else if(X>10)
        Y=cos(X)+sin(X);
    printf("%.2f",Y);
    return 0;
}


15.找10个数中的最大值

这个题和第一个题类似,不过难度相对第一题大了一点点,具体思路是构建一个存放10个数的数组,再设定一个最大值max。然后构建两个循环,第一个循环输入数据,第二个循环比较两个数,最大的取出来(如果是比较最小值,大小符号改变就好)

#include <stdio.h>

 

int main() {
    
    

    int a[10];

    int Max = 0;

    for (int i = 0; i < 10; i++) {
    
    

        scanf("%d", &a[i]);

    }

    for (int i = 0; i < 10; i++) {
    
    

      if(a[i] > Max) {
    
    

          Max = a[i];

      }

    }

    printf("十个数中最大的是:%d", Max);

    return 0;

}

16.判定该正整数是否为一个回文数

有些题目难度降低了,改成了(输入一个 3 位的正整数,判断回文数),个人觉得如果是三位,方法会很简单,思路是输入三个数,第一个数和第三个数比较,如果不相同,输出否,否则是。
这道题目没有说明输入数的多少,在网上看到一种方法不错

数字法:

#include<stdio.h>
int main()
{
    
    
    int x,newed,t,n;
    while(scanf("%d",&x)!=EOF)
    {
    
    
        newed=0;
        n=x;
        do
        {
    
    
            newed=newed*10+x%10;
            x/=10;
        }while(x>0);
        if(n==newed)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

字符串处理法:

#include<stdio.h>
#include<string.h>
int main()
{
    
    
    int i,length,flag=1;
    char a[100];
    gets(a);
    length=strlen(a);
    for(i=0;i<=length/2;i++) {
    
    
       if(a[i]!=a[length-i-1]) {
    
    
           flag=0;
           break;
       }
    }
    if(flag==1)
      printf("yes");
    else
      printf("no");
    return 0;
}

17.大小写转换

考点:A-Z的ASCII值为 : 65-90
a-z的ASCII值为 : 97-122
两者相差32

#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    
    
 char str[] = "AbCdEf";
 char c;
 int i = 0;
 while (str[i] != '\0')
 {
    
    
  c = str[i];
  if (c >= 'A' && c <= 'Z')
  {
    
    
   c = c + 32;
  }
  else if (c >= 'a' && c <= 'z')
  {
    
    
   c = c - 32;
  }
      printf("%c",c);
  i++;
 }
 printf("\n");
 system("pause");
 return 0;
}

18.计算三位整数的边界

void main()
{
    
    
int x;
int max,min;
printf("请输入三位数 x:");
scanf("%d",&x);
x=x/100;
min=(int)x;
min=min*100;
max=min+99;

19.三角形判断

给定平面上任意三个点的坐标(x​1​​ ,y​1​​ )、(x​2​​ ,y​2​​ )、(x​3​​ ,y​3​​ ),检验它们能否构成三角形。
在这里插入图片描述

#include "stdio.h"
#include "math.h"
int main()
{
    
    
    float x1, x2, x3, y1, y2, y3;
    float a, b, c, s, l, area;  //定义三边,半周长,周长,面积 
    scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3);
    a = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    b = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
    c = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
    if (a + b > c && a + c > b && b + c > a) {
    
    
        s = (a + b + c) / 2;
        area = sqrt(s * (s - a) * (s - b) * (s - c));  //海伦公式求面积 
        l = a + b + c;
        printf("L = %.2f, A = %.2f\n", l, area);
    } else {
    
    
        printf("Impossible\n");
    }
    return 0;
}

20.特殊a串数列求和

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和

#include "stdio.h"
#include "math.h"
int main()
{
    
    
    int a,n;
    int num=0;
    int sum = 0;
    scanf("%d %d",&a,&n);
    for (int i=1;i<=n;i++){
    
       
        num=num+pow(10,i-1)*a;
        sum+=num;
    }
    printf("s = %d",sum);
    return 0;
    
}

21.求奇数和

#include"stdio.h"
int main()
{
    
    
    int num,sum=0;
    for (int i=1; ;i++){
    
    
       scanf("%d",&num);
       if(num<=0){
    
    
            break;
       }
       if(num%2!=0){
    
    
           sum+=num;
       }    
    }
    printf("%d",sum);
    return 0;
}

22.水仙花数

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

#include <stdio.h>
int main()
{
    
    
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
  {
    
    
  i=n/100;
  j=(n-i*100)/10;
  k=n%10;
  if(i*i*i+j*j*j+k*k*k==n)
    printf("%d\n",n);
  }
}

23.时间换算

本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)
(ps:题目还算比较友善)

#include<stdio.h>
int main(void){
    
    
    int a,b,c;
    int k;
    
    scanf("%d:%d:%d\n",&a,&b,&c);
    scanf("%d",&k);
    c=k+c;
    if(c>=60){
    
    
        c=c-60;
        b=b+1;
        if(b>=60){
    
    
            b=b-60;
            a=a+1;
            if(a>=24)
                a=a-24;
        }
    } 
    printf("%02d:%02d:%02d",a,b,c);
    
    return 0;    
}

24.读这段代码的结果

程序源代码:
#include <stdio.h>
#define M 5
int main()
{
    
    
int a[M]={
    
    1,2,3,4,5};
int i,j,t;
i=0;j=M-1;  
while(i<j)
{
    
    t=*(a+i);
*(a+i)=*(a+j);
*(a+j)=t;      //指针相互传参
i++;j--;
}
for(i=0;i<m;i++)
printf("%d",*(a+i));

return 0;
}

input结果为:
54321

猜你喜欢

转载自blog.csdn.net/C214574728/article/details/127183917