第4章(第四版)C语言程序设计练习

一、例题

1.求ax2+bx+c=0方程的根

#include<stdio.h>
#include<math.h>
int main()
{
    double a, b, c;
    double x1, x2, x;
    printf("请输入a,b,c:\n");
    scanf_s("%lf %lf %lf", &a, &b, &c);
    if (b * b - 4 * a * c > 0)
    {
        x1 = (-b + sqrt(b * b - 4 * a * c)) / (2.0 * a);
        x2 = (-b - sqrt(b * b - 4 * a * c)) / (2.0 * a);
        printf("x1=%lfx2=%lf", x1, x2);
    }
    else if (b * b - 4 * a * c == 0)
    {
        x = -b / (2.0 * a);
        printf("x=%lf", x);
    }
    else
    {
        printf("不存在根");
    }
    return 0;
}

2.输入两个实数,由小到大输出

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    float a = 0;
    float b = 0;
    scanf("%f%f", &a, &b);
    if (a > b)
        printf("%f%f\n", b, a);
    else
        printf("%f%f\n", a, b);
    return 0;
}

3.输入三个数,由小到大输出

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    float a, b, c;
    float t;
    scanf("%f,%f,%f", &a, &b, &c);
    if (a > b)
    {
        t = a;
        a = b;
        b = t;
    }
    if (a > c)
    {
        t = a;
        a = c;
        c = t;
    }
    if(b > c)
    {
        t = b;
        b = c;
        c = t;
    }
    printf("%f%f%f", a, b, c);
    return 0;
}

4.输入字符,判断是否为大写字符,大写字符转小写字符

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    char ch = 0;
    scanf("%c", &ch);
    if (ch >= 'A' && ch <= 'Z')
    //ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
    {
        ch = ch + 32;
        printf("%c", ch);
    }
    else
        printf("%c", ch);
    return 0;
}

5.输入x,输出y

  • y = - 1 ( x < 0 )
  • y =  0  ( x = 0 )
  • y =  1  ( x > 0 )
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int x, y;
    scanf("%d", &x);
    if (x < 0)
        y = -1;
    else if (0 == x)
        y = 0;
    else
        y = 1;
    printf("y=%d\n",y);
    return 0;
}

6.输入成绩等级,键盘输出成绩

  • A:85分以上
  • B:70~84分
  • C:60~69分
  • D:60分以下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    char ch;
    scanf("%c", &ch);
    switch (ch)
    {
    case 'A':
        printf("85分以上\n");
        break;
    case 'B':
        printf("70~84分\n");
        break;
    case 'C':
        printf("60~69分\n");
        break;
    case 'D':
        printf("60分以下\n");
        break;
    default:
        printf("输入错误,请重新输入。");
        break;
    }
    return 0;
}

7.判断某一年是否为闰年

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>int main()
{
    int year;
    scanf("%d", &year);
    if ((year % 4 == 0 && year % 100!=0) || (year % 400 == 0))
        printf("是闰年");
    else
        printf("不是闰年");
    return 0;
}

9.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int  s;
    float p, w, d;
    scanf("%f,%f,%d", &p, &w, &s);//价格、重量、距离
    if (s < 250)
        d = 0;
    else if (s >= 250 && s < 500)
        d = 0.02;
    else if (s >= 500 && s < 1000)
        d = 0.05;
    else if (s >= 1000 && s < 2000)
        d = 0.08;
    else if (s >= 2000 && s < 3000)
        d = 0.10;
    else 
        d = 0.15;
    printf("%f", p * w * s * (1 - d));
    return 0;
}

二、习题

 4.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a, b, c;
    printf("请输入三个整数:");
    scanf("%d,%d,%d", &a, &b, &c);
    if (a < b)
        if (b < c)
            printf("max=%d\n", c);
        else
            printf("max=%d\n", b);
    else if (a < c)
        printf("max=%d\n", c);
    else
        printf("max=%d\n", a);
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a, b, c, temp, max;
    printf("请输入三个整数:");
    scanf("%d,%d,%d", &a, &b, &c);
    temp = (a > b) ? a : b;                    
    max = (temp > c) ? temp : c;             
    printf("三个整数的最大数是%d\n", max);
    return 0;
}

5.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define M 1000
int main()
{
    int i, k;
    printf("请输入一个小于%d的整数i:", M);
    scanf("%d", &i);
    if (i > M)
    {
        printf("输入的数不符合要求,请重新输入一个小于%d的整数i:", M);
        scanf("%d", &i);
    }
    k = sqrt(i);
    printf("%d的平方根的整数部分是:%d\n", i, k);
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define M 1000
int main()
{
    int i, k;
    printf("请输入一个小于%d的整数i:", M);
    scanf("%d", &i);
    while (i > M)
    {
        printf("输入的数不符合要求,请重新输入一个小于%d的整数i:", M);
        scanf("%d", &i);
    }
    k = sqrt(i);
    printf("%d的平方根的整数部分是:%d\n", i, k);
    return 0;
}

6.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int x, y;
    printf("输入x:");
    scanf("%d", &x);
    if (x < 1)             
    {
        y = x;
        printf("x=%3d,   y=x=%d\n", x, y);
    }
    else  if (x < 10)       
    {
        y = 2 * x - 1;
        printf("x=%d,  y=2*x-1=%d\n", x, y);
    }
    else           
    {
        y = 3 * x - 11;
        printf("x=%d,  y=3*x-11=%d\n", x, y);
    }
    return 0;
}

8.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    float score;
    char grade;
    printf("请输入学生成绩:");
    scanf("%f", &score);
    while (score > 100 || score < 0)
    {
        printf("\n 输入有误,请重输");
        scanf("%f", &score);
    }
    switch ((int)(score / 10))
    {
    case 10:
    case 9: 
        grade = 'A'; 
        break;
    case 8: 
        grade = 'B'; 
        break;
    case 7: 
        grade = 'C'; 
        break;
    case 6: 
        grade = 'D'; 
        break;
    case 5:
    case 4:
    case 3:
    case 2:
    case 1:
    case 0: 
        grade = 'E';
        break;
    }
    printf("成绩是 %5.1f,相应的等级是%c\n ", score, grade);
    return 0;
}

9.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int i, j;     //定义全局变量,因为在逆序和顺序函数中也要使用变量i,j,这样可以减少定义的次数 
int main()
{
    void nixu(int p, int k);        //声明求逆序的函数 
    void shunxu(int m, int p, int k);  //声明求顺序的函数 
    int m = 1, p = 0 , n, k;
    scanf("%d", &n);        //输入要操作的整数 
    k = n;
    for (i = 0; n != 0; i++)        //计算位数的循环 
    {
        n = n / 10;
    }
    printf("位数:%d\n", i);
    for (j = 1; j <= i; j++)       //进行10的n次方的计算,也可以用pow(10,i) ,但是在只用时要用<math.h>库函数。
    {
        m = m * 10;
    }
    printf("顺序输出:\n");
    shunxu(m, p, k);
    printf("逆序输出:\n");
    nixu(p, k);
    return 0;
}
void nixu(int p, int k)
{
    for (j = 1; j < i; j++)
    {
        p = k % 10;          //求余来找到输入数中靠右边的数 
        printf("%d ", p);     //依次输出求出来的数 
        k = k / 10;           //k除10为下一次循环做准备 
    }
    printf("%d", k);      //输出最后一个要输出的数 
}
void shunxu(int m, int p, int k)
{
    for (j = 1; j < i; j++, m = m / 10)  //除以10是因为要满足每一次循环时除数在一次小10倍 
    {
        p = k / (m / 10);
        printf("%d ", p);      //依次输出求出来的数 
        k = k % (m / 10);          //k求余为下一次循环做准备 
    }
    printf("%d\n", k);      //输出最后一个要输出的数 
}

10.

(1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int i;
    double bonus, bon1, bon2, bon4, bon6, bon10;
    bon1 = 100000 * 0.1;
    bon2 = bon1 + 100000 * 0.075;
    bon4 = bon2 + 100000 * 0.05;
    bon6 = bon4 + 100000 * 0.03;
    bon10 = bon6 + 400000 * 0.015;
    printf("请输入利润i:");
    scanf("%d", &i);
    if (i <= 100000)
        bonus = i * 0.1;
    else if (i <= 200000)
        bonus = bon1 + (i - 100000) * 0.075;
    else if (i <= 400000)
        bonus = bon2 + (i - 200000) * 0.05;
    else if (i <= 600000)
        bonus = bon4 + (i - 400000) * 0.03;
    else if (i <= 1000000)
        bonus = bon6 + (i - 600000) * 0.015;
    else
        bonus = bon10 + (i - 1000000) * 0.01;
    printf("奖金是: %10.2f\n", bonus);
    return 0;
}

(2)

#include <stdio.h>
int main()
{
  int i;
  double  bonus,bon1,bon2,bon4,bon6,bon10;
  int  branch;
  bon1=100000*0.1;
  bon2=bon1+100000*0.075;
  bon4=bon2+200000*0.05;
  bon6=bon4+200000*0.03;
  bon10=bon6+400000*0.015;
  printf("请输入利润i:");
  scanf("%d",&i);
  branch=i/100000;
  if (branch>10)  branch=10;
  switch(branch)
  {  case 0:bonus=i*0.1;break;
     case 1:bonus=bon1+(i-100000)*0.075;break;
     case 2:
     case 3: bonus=bon2+(i-200000)*0.05;break;
     case 4:
     case 5: bonus=bon4+(i-400000)*0.03;break;
     case 6:
     case 7:
     case 8:
     case 9: bonus=bon6+(i-600000)*0.015;break;
     case 10: bonus=bon10+(i-1000000)*0.01;
  }
   printf("奖金是 %10.2f\n",bonus);
   return 0;
 }

11.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int  t, a, b, c, d;
    printf("请输入四个数:");
    scanf("%d,%d,%d,%d", &a, &b, &c, &d);
    printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
    if (a > b)
    {
        t = a; 
        a = b; 
        b = t;
    }
    if (a > c)
    {
        t = a; 
        a = c; 
        c = t;
    }
    if (a > d)
    {
        t = a; 
        a = d; 
        d = t;
    }
    if (b > c)
    {
        t = b; 
        b = c; 
        c = t;
    }
    if (b > d)
    {
        t = b; 
        b = d; 
        d = t;
    }
    if (c > d)
    {
        t = c; 
        c = d; 
        d = t;
    }
    printf("排序结果如下: \n");
    printf("%d  %d  %d  %d  \n", a, b, c, d);
    return 0;
}

12

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int  h = 10;
    float x1 = 2, y1 = 2, x2 = -2, y2 = 2, x3 = -2, y3 = -2, x4 = 2, y4 = -2, x, y, d1, d2, d3, d4;
    printf("请输入一个点(x,y):");
    scanf("%f,%f", &x, &y);
    d1 = (x - x4) * (x - x4) + (y - y4) * (y - y4);           
    d2 = (x - x1) * (x - x1) + (y - y1) * (y - y1);
    d3 = (x - x2) * (x - x2) + (y - y2) * (y - y2);
    d4 = (x - x3) * (x - x3) + (y - y3) * (y - y3);
    if (d1 > 1 && d2 > 1 && d3 > 1 && d4 > 1)   
        h = 0;  
    printf("该点高度为 %d\n", h);
    return 0;
}

 

posted @ 2021-11-17 20:42  mljrm  阅读(253)  评论(0)    收藏  举报