查看: 131|回复: 0

谭浩强C语言课后习题答案

[复制链接]

4

主题

9

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2022-12-31 16:51:19 | 显示全部楼层 |阅读模式
第一章

1.1 程序与程序设计

程序是一组计算机能识别和执行的指令集合,每一条指令使计算机执行特定的操作
程序设计是指从确定任务到得到结果最后写出文档的全过程
1.2 为什么需要计算机语言?高级语言有哪些特点?

计算机语言解决了人与计算机交流的语言问题
C,java,C++,Python,Go 等高级语言更加接近自然语言人更能理解和掌握。高级语言需要编译才能成为语言。高级语言和计算机结构关系不大而机器语言和计算机结构关系较大。
1.3 正确理解以下名词及其含义:

(1)源程序,目标程序,可执行程序。
#include <stdio.h>
int main()
{
printf("halo!");
return 0;
}//这段代码就是源程序源程序通过编译器编译,形成一个文件里面包含机器码集合,可以进行机器直接执行,该文件以.obj作为扩展名,这就是目标程序
可执行程序是将所有得到的目标程序模块连接起来再与函数库连接为一个整体,生成一个可供计算机执行的总的目标程序,成为可执行程序
(2)程序编辑,程序编译,程序连接。
程序编辑:上机输入或者编辑源程序。
程序编译∶先用C提供的“预处理器”,对程序中的预处理指令进行编译预处理。对源程序进行语法检查,判断是否有语法错误,直到没有语法错误未知,编译程序自动把源程序转换为二进制形式的目标程序
程序链接∶将所有编译后得到的目标模块连接装配起来,在与函数库相连接成为一个整体的过程称之为程序连接
(3)程序模块,程序文件。
程序模块∶可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令程序文件:程序的文件称为程序文件,程序文件存储的是程序,包括源程序和可执行程序
(4)函数,主函数,被调用函数,库函数。
函数∶将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,来完成一定功能主函数︰又称main函数,是程序执行的起点
被调用函数︰由一个函数调用另一个函数,则称第二个函数为被调用函数
库函数︰一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数
(5)程序调试,程序测试。
程序调试∶是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程程序测试︰是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行
1.4 编写一个C程序,运行时输出Hello World

创建项目 在源文件创建源程序 编写代码 编译结果
#include <stdio.h>
int main()
{
printf("%s\n", "Hello World");
return 0;
}1.5 编写一个C程序,运行是输出以下图形:

*****
    *****
        *****
            *****
#include <stdio.h>
int main()
{
printf("*****\n    *****\n        *****\n            *****\n");
return 0;
}1.6 编写一个C程序,运行时输出a,b,c三个值,输出其中值最大者。

#define _CRT_SECERE_NO_WARNINGS
#include <stdio.h>
int main()
{
        int a, b, c;
        //从三个标准输入中获取三个值
        scanf("%d%d%d", &a, &b, &c);
        int max = -1;
        if (a < b)
        {
                max = b;
        }
        else
        {
                max = a;
        }
        if (c > max)
        {
                max = c;
        }
        //输出
        printf("max = %d\n", max);
        return 0;
}1.7 看懂C程序设计(第五版)学习辅导》第16章中介绍的用Visual Studio 2010对C程序进行编辑﹑编译、连接和运行的方法,并进行以下操作:

(1)建立一个新项目,定名为projectl。
(2)建立一个新文件,定名为test1。
(3)向test1文件输入源程序(此源程序为读者自己编写的程序)。
(4)编译该源程序,如发现程序有错,请修改之,直到不出现“编译出错”为止(5)连接并运行,得到结果。分析结果。
打开VisualStudio2022 创建新项目 选择c++空项目 命名为project1 进入项目后在源文件添加新建项 修改后缀为.c 编辑源程序  完成编辑后项目生成编译程序 连接运行得到结果


<hr/>第二章

2.1 什么是算法?试从日常生活中找3个例子,描述它们的算法。

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。包括五个特性:有穷性、确定性、输入、输出、可行性。重要算法思想或策略有枚举、递归、贪心、递推、分支限界、分治、动态规划、回溯(了解,深入参见算法导论)。常见的十大排序算法。生活中处处都是算法,生活中每个问题的解决过程和方法都可以归纳为一个算法,但要满足有穷性和可行性。表示算法可以用(1)自然语言(2)流程图(3)伪代码(4)计算机语言 表示
2.2 什么是结构化算法?为什么要提倡结构化算法?

结构化算法是由一些顺序、选择、循环(while和until)等基本结构按照顺序组成,在基本机构之间在向前或向后跳转,流程的控制只存在与一个基本的范围之内。结构化算法更加清晰,可读性和可维护性更高所以提倡。
2.3 试试3种基本结构的特点,请另外设计两种基本结构。

顺序结构:线性、有序
选择结构:根据条件判断结果进行不同处理单元
循环结构:重复一个或多个模块,满足则跳出循环(有穷性)
设计思路基于基本机构的四种结构进行组合加入串并联结合,注意符合算法五大特性。一般输入输出和可行性基本成立,主要是判断算法的有穷性,不要陷入无限循环即可。比如:(1)基本结构嵌入结构体(2)多分支选择结构体(3)while 和 until结构结构形成的复合循环结构体
2.4 用传统的流程图表示求解以下问题的算法。

(1)有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换。
(2)依次将10个数输入,要求输出其中最大的数。
(3)有3个数a,b,c,要求按照大小顺序把它们输出。
(4)求1+2+3+...+100。
(5)判断一个数n能否同时被3和5整除。
(6)将100~200之间的素数输出。
(7)求两个数m和n的最大公约数。
(8)求方程 ax^{2}+bx+c=0 的根。分别考虑:(1)有两个不等的实根(2)有两个相等的实根
解析
(1)



有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换

(2)



依次将10个数输入,要求输出其中最大的数

(3)



按照从小到大顺序输出abc

(4)



sum(1+2+...+100)

(5)



判断n能否被3和5整除

(6)



输出100~200素数

(7)



辗转相处求最大公约数

(8)



求二次方程根

2.5 用N-S图表示第4题的算法







2.6 用伪代码表示第4题的算法

(1)
begin
    醋 => A
    酱油 => B
    A => temp
    B => A
    temp => B
end(2)
begin
    input 10个数据 => array
    array[0] => max
    1 => i
    while i<10
    {
        array => temp
        if temp > max
        {
            temp => max
        }
    }
end(3)
begin
    input a
    input b
    input c
    if a>b
    {
         a => temp
         b => a
         temp => b
     }
     if a>c
     {
         a => temp
         b => a
         temp => b
      }
     if b>c
     {
          b => temp
          c => b
          temp => c
      }
end(4)
begin
    1 => i
    0 => sum
    while i<100
    {
        sum +=i
        i+=1
    }
    print sum
end(5)
begin
input n
if n%3==0
{
    if n%5==0
    {
        print n能被5和3整除
    }
    slse
    {
        n不能3和5整除
    }
}
else
{
    n不能被3和5整除
}
end
(6)
begin
    100 => i
    200 => N
    while i<=N
    {
        2=>k
        while k <i
        {
             if i%k==0
             break;
             k+=1
         }
         if k==i
         {
              print i
         }
    }//输出100-200素数
end(7)
begin
    input m
    input n
    if m<n
    {
        m => temp
        n => m
        temp => n
    }
    while n!=0
    {
        m%n => r
        n => m
        r => n
    }
    print m
end
//辗转相除求最大公约数(8)
begin
    input a
    input b
    input c
    b^2-4a*c => p
    if p<0
    {
        print 方程没有实数根
    }
    if p==0
    {
        print 方程有一个实数根 -b/2a
    }
    if p >0
    {
        print 方程有两个实数根 :
        x1 = {-b+sqrt(b^2-4a*c)/2a}
        x2 = {-b-sqrt(b^2-4a*c)/2a}
    }
end2.7 什么叫结构化程序设计?它的主要内容是什么?

2.8 用自顶向上、逐步细化的方法进行以下算法的设计:

(1)输出1900-2000年中闰年的年份,符合下面两个条件之一的年份是闰年。
能被4整除但不能被100整除;
能被100整除且能被400整除。
(2)求 ax^2+bx+c=0 的根。分别考虑 d=b^2-4ac 大于0等于0和小于0的情况。
(3)输入10个数,输出最大的数。

(1)

  • 循环取1900到2000的每一个年份
  • 对于每个年份判断其是否是闰年
  • 是闰年则输出对应年份
对于2.

  • 如果该年份内被4整除但不能被100整除是闰年,否则不是闰年
  • 如果年份能被400整除则是闰年,否则不是闰年
(2)

  • 获取abc的值
  • 计算d
  • 对d分类讨论
对3.
进行大于等于小于0的讨论分别输出相应情况
(3)

  • 给一个值给max
  • 分别对十个数与max比较,如果大于max则将该值付给max
  • 输出max
<hr/>第三章

3.1 假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比,计算公式为

p= (1+r)^n
r为年增长率,n为年数,p为与现在相比的倍数。
两种思路
(1)借用for循环计算
#include<stdio.h>

int main()
{
        float p = 1.0f;
        float r = 0.07;
        int n = 10;
        for (int i = 0; i < n; ++i)
        {
                p = p*(1 + r);
        }
        printf("%f\n", p);
        return 0;
}(2)借用math库函数pow(底数,指数)
#include<stdio.h>
#include<math.h>

int main()
{
        float p = 1.0f;
        float r = 0.07;
        int n = 10;
        p = pow(1 + r, n);
        printf("%f\n", p);
        return 0;
}3.2 存款利息的计算。有1000元,想存5年,可按照以下5种办法存:

(1)一次性存5年。
(2)现存2年期,到期后将本息再存3年期。
(3)先存3年期,到期后将本息再存2年期。
(4)存1年期,到期后将本息再存1年期,连续存5次。
(5)存活期存款。活期利息每一季度结算一次。
2017年的银行存款利息如下:
1年期定期存款利息为1.5%;
2年期定期存款利息为2.1%;
3年期定期存款利息为2.7%;
5年期定期存款利息为3%;
活期存款利息为0.35%(活期存款每一个季度结算一次利息)。
如果r为年利率,n为存款年数,则计算本息和的公式如下:
1年期本息和: p=1000\times(1+r) ;
n年期本息和: p = 1000\times(1+n\times r) ;
存n次1年期的本息和: p = 1000\times(1+r)^n ;
活期存款本息和: p  = 1000\times(1+\frac{r}{4})^{4n} ;
说明: p  = 1000\times(1+\frac{r}{4}) 是一个季度的本息和。
#include<stdio.h>
#include<math.h>//pow(底数,指数)


int main()
{
        int p = 1000;
        int n = 5;
        float r1 = 0.015, r2 = 0.021, r3 = 0.0275, r5 = 0.03, r0 = 0.0035;
        float p1 = p * (1 + n * r5);//一次存5年
        float p2 = p * (1 + 2 * r2) * (1 + 3 * r3);//先存两年再三年
        float p3 = p * (1 + 3 * r3) * (1 + 2 * r2);//先存三年在两年
        float p4 = p * pow(1 + r1, n);//存一年,连续存5次
        float p5 = p * pow(1 + r0 / 4, 4 * n);//存5年活期

        printf("一次存5年:%f\n先存两年再三年:%f\n先存三年在两年:%f\n存一年,连续存5次:%f\n存5年活期:%f\n", p1, p2, p3, p4, p5);
        return 0;
}


运行结果

结果表明,一次存5年收益最多,第二三种方式相近,存活期收益最少。
3.3 购房从银行贷了一笔款d,准备每月还款p,月利率为r,计算多少个月能还清。设d为30万,p为6000,r为1%。对求得的月份取小数点后一位,对第2位按照四舍五入处理。

提示:计算还清月数m的公式如下:



每月还款公式

c的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。
#include<stdio.h>
#include<math.h>//log(p) -> logp

int main()
{
        int d = 300000, p = 6000;
        float r = 0.01;
        float m = (log(p/(p-d*r))) / log(1 + r);//log(a)-log(b) = log(a/b) 两个对数底数相同的比值和底无关,但需同一底数
        printf("%.1f\n", m);//%.nf -> 四舍五入保留小数点后n位
        return 0;
}结果为69.7,即70月(5.83年)还完。第6年的第10个月还完。
3.4 分析下面的程序:

#include<stdio.h>

int main()
{
    char c1, c2;
    c1 = 97;
    c2 = 98;
    printf("c1=%c, c2=%c\n", c1, c2);
    printf("c1=%d, c2=%d\n", c1, c2);

    return 0;
}(1) 运行时会输出什么信息?为什么?



(1)运行结果

输出该结果是因为97 是 a 的 ascII 码,98 是 b 的 ascll 码。
(2)如果将程序第4,5行改为c1=197;c2=198;运行时会输出什么信息?为什么?



(2)运行结果

输出该结果是因为char 范围是-128~127。当超过该范围的话,197-256=-59, 198-256=-58。
(3)如果将程序第3行改为int c1, c2; 运行会输出什么信息?为什么?



(3)运行结果

输出该结果是因为以字符显示的时候,其值为-57和-58,不能以字符显示。
该题说明不同类型的取值范围是不同的。
3.5 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‘A’,c2=‘a’。在键盘上应如何输入?

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
    int a, b;//3 7
    float x, y;//8.5 71.82
    char c1, c2;//"A" "a"
    scanf("a=%db=%d", &a, &b);
    scanf("%f%e", &x, &y);//%e 科学计数法显示
    scanf("%c%c", &c1, &c2);
    return 0;
}输入 a=3b=7 8.5 7.182e+1Aa
注意不同类型需要空格,严格按照scanf函数格式。
3.6 请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为‘C’,‘h’,‘i’,‘n’,‘a’,经过c1,c2,c3,c4,c5,分别变为‘G’‘l’‘m’‘r’‘e’。分别用putchar函数和printf函数输出这5个字符。

铺贴尺寸putchar输出
#include<stdio.h>

int main()
{
    char c1='C', c2='h', c3='i', c4='n', c5='a';
    c1 = c1 + 4;//<=>c1+=4
    c2 = c2 + 4;
    c3 = c3 + 4;
    c4 = c4 + 4;
    c5 = c5 + 4;
    putchar(c1);
    putchar(c2);
    putchar(c3);
    putchar(c4);
    putchar(c5);
    return 0;
}printf输出
#include<stdio.h>

int main()
{
    char c1='C', c2='h', c3='i', c4='n', c5='a';
    c1 = c1 + 4;//<=>c1+=4
    c2 = c2 + 4;
    c3 = c3 + 4;
    c4 = c4 + 4;
    c5 = c5 + 4;
    printf("%c%c%c%c%c", c1, c2, c3, c4, c5);
    return 0;
}
3.7 编程。设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。

单精度浮点数
#include<stdio.h>

int main()
{
    float pi = 3.14;
    float r, h;
    printf("请输入半径和高度:");
    scanf_s("%f %f", &r, &h);
    float Circumference = 2 * pi * r;//圆周长
    float CircleArea = pi * r * r;//圆面积
    float Surface_area_of_sphere = 4 * pi * r * r;//圆球表面积
    float  SphereVolue = (4 / 3) * pi * r * r * r;//圆球体积
    float CylinderVolume = pi * r * r * h;//圆柱体积

    printf("圆周长:%.2f\n圆面积:%.2f\n圆球表面积:%.2f\n圆球体积:%.2f\n圆柱体积:%.2f\n", Circumference, CircleArea, Surface_area_of_sphere, SphereVolue, CylinderVolume);

   
    return 0;
}


(1) 运行结果

双精度浮点数
#include<stdio.h>

int main()
{
    double pi = 3.14;
    double r, h;
    printf("请输入半径和高度:");
    scanf_s("%lf %lf", &r, &h);
    double Circumference = 2 * pi * r;//圆周长
    double CircleArea = pi * r * r;//圆面积
    double Surface_area_of_sphere = 4 * pi * r * r;//圆球表面积
    double  SphereVolue = (4 / 3) * pi * r * r * r;//圆球体积
    double CylinderVolume = pi * r * r * h;//圆柱体积

    printf("圆周长:%.2lf\n圆面积:%.2lf\n圆球表面积:%.2lf\n圆球体积:%.2lf\n圆柱体积:%.2lf\n", Circumference, CircleArea, Surface_area_of_sphere, SphereVolue, CylinderVolume);

   
    return 0;
}


(2)

单精度和双精度区别
3. 8 编程。用getchar函数读入两个字符给c1和c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:

(1)变量c1和c2应定义为字符型、整型还是二者皆可?
(2)要求输出c1和c2值得ASCll码,应如何处理?用putchar函数还是printf函数?
(3)整型变量与字符型变量是否在任何情况下都可以互相替换?如:
char c1,c2;

int c1,c2;
是否无条件等价?
(1)当用char c1,c2;和int c1,c2;替换时效果一样。都输出相应的字符型。因为int能表示char的ASCll码范围。
#include<stdio.h>

int main()
{
    char c1, c2;//int c1, c2;
    c1 = getchar();
    c2 = getchar();

    printf("使用putchar函数输出:");
    putchar(c1);
    putchar(c2);
    printf("\n");

    printf("使用printf函数输出:");
    printf("%c%c\n", c1, c2);
    return 0;
}(2)获取c1,c2的ASCII码值,以整数型打印对应字符即可,但只能使用printf函数而不能使用putchar函数。
#include<stdio.h>

int main()
{
    char c1, c2;
    c1 = getchar();
    c2 = getchar();

    printf("使用printf函数输出:");
    printf("%d %d\n", c1, c2);
    return 0;
}
(3)字符型的ASCii码值在-128~127。所以在0~127范围内的字符型和整型是可以等价的,既可以用字符型赋值也可以用整数型赋值,表示类型可以一致。
#include<stdio.h>

int main()
{
    int c1, c2;
    c1 = getchar();
    c2 = getchar();

    printf("使用printf函数输出:");
    printf("%c%c\n", c1, c2);
    return 0;
}输入任意两个字符,其中该字符是用int定义的,但可以用char类型显示。如输出ab 输出 ab。
#include<stdio.h>

int main()
{
    char c1=155, c2=188;
    c1 = getchar();
    c2 = getchar();

    printf("使用printf函数输出:");
    printf("%c%c\n", c1, c2);
    return 0;
}第四章

4.1 什么是算术运算?什么是关系运算?什么是逻辑运算?

算数运算是指能够完成算术运算功能的运算符 如+-*/ &% ++ --
关系运算是比较两个值的大小关系 C语言的结果包括中 就是0和1 也就是假和真 运算符有如: > < <= >= == !=
逻辑运算执行结果与关系表达式执行结果相同 成立1 不成立0 且(&&) 或(||) 非(!)
三者优先级为: 算术>关系>逻辑
4.2 C语言中如何表示“真”“假”?如何判断一个量的“真”“假”?

在C语言中,若其值为“真”,则以“1”表示。若其值为“假”,则以“0”表示。
4.3 写出下面各个逻辑表达式的值。设a=3,b=4,c=5。

(1)a+b>c && b==c
(2)a||b+c && b-c
(3)!(a>b) && !c||1
(4)!(x=a) && (y=b) && 0
(5)!(a+b)+c-1 && b+c/2
(1) 1&&0   ==>  0
(2) 3||9&&-1  ==>  1   //“与&&”大于“或||”优先级
(3) 1&&0||1  ==> 1  //“与&&”大于“或||”优先级
(4) ...&&0 ==> 0
(5) !(7)+5-1 && 4+2 ==> 4 && 6 ==> 1
4.4 有三个整数a,b,c,由键盘输入,输出最大的数。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c1 , c2, c3;
    printf("请输入三个整数:");
    scanf("%d %d %d", &c1, &c2, &c3);
    int max = c1;//定义一个整数型用来保存最大值
    if (max < c2) {
        max = c2;
    }
    if (c3 > max){
        max = c3;
    }
    printf("最大数为:%d\n", max);
    system("pause");
    return 0;
}4.5 从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>//double sqrt(double x) 求x的平方根

int main()
{
    float a, b;//正数包括正小数
    printf("请输入一个小于1000的正数:");
    while (1)
    {
        scanf("%f", &a);
        if (a > 0 && a < 1000)
        {
            b = sqrt(a);
            printf("该数平方根为:%.0f\n", b);//小数点后0位,即四舍五入取整数,忽略小数部分
            system("pause");
        }
        else
        {
            printf("输入的数应为小于1000的正数,请重新输入:");
        }
    }
    return 0;
}4.6 有一个函数:

y= \begin{cases} x& (x<1)\\ 2x-1& {(1\leq x<10)}\\ 3x-11 & (x\geq10)  \end{cases}  
写程序,输入x的值,输出y相应的值。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    float a, b;
    printf("请输入数据:");
    while (1)
    {
        scanf("%f", &a);
        if (a<1)
        {
            b = a;
            printf("y=%.0f\n", b);
        }
        if (a >= 1 & a < 10)
        {
            b = 2*a - 1;
            printf("y=%.0f\n", b);
        }
        else
        {
            b = 3 * a - 11;
            printf("y=%.0f\n", b);
        }
    }
    return 0;
}4.7 有一函数:

y = \begin{cases}  -1&(x<0)\\ 0 & (x=0)\\ 1&(x>0) \end{cases}
有人编写以下两个程序,请分析它们是否能实现题目要求。不要急于上机运行程序,线分析两个程序的逻辑,画出它们的流程图,分析它们的运行情况。然后上级运行程序,观察和分析结果。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int x, y;
    printf("enter x:");
    scanf("%d", &x);
    y = -1;//没用
    if (x != 0)
        if (x > 0)
            y = 1;
    else
        y = 0;
    printf("x=%d, y=%d\n", x, y);
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int x, y;
    printf("enter x:");
    scanf("%d", &x);
    y = 0;//没用
    if (x >= 0)
        if (x > 0)
            y = 1;
    else
        y = -1;
    printf("x=%d, y=%d\n", x, y);
    return 0;
}4.8 给出一百分制成绩,要求输出成绩等级ABCDE。90分以上为A,80~89分为B,70~79为C,60~69为D,60以下为E。

注意以下代码的输入的分数为字符型会一直陷入循环。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    float x;
    while (1)
    {
        printf("请输入成绩:");
        scanf("%f", &x);
        if (x >= 90 && x <= 100)
        {
            printf("成绩等级为:A\n");
        }
        else if (x >= 80 && x < 89)
        {
            printf("成绩等级为:B\n");
        }
        else if (x >= 70 && x < 79)
        {
            printf("成绩等级为:C\n");
        }
        else if (x >= 60 && x < 69)
        {
            printf("成绩等级为:D\n");
        }
        else if (x >= 0 && x < 60)
        {
            printf("成绩等级为:E\n");
        }
        else
        {
            printf("输入错误!请输入0~100的分值:\n");
        }
    }
    return 0;
}4.9 求一个不多于5位的正整数,要求:

(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字,例如原本为321,应输出123。
分析:
不多于5位数的正整数==> 10000<=int num<=99999
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//求出它是几位数
int main()
{
    int num;
    printf("请输入一个不大于5位的正整数:");
    scanf("%d\n", &num);
    if (!(num >= 0 && num <= 99999))
    {
        printf("请重新输入一个不大于5位的正整数\n");
        return -1;
    }
    if (num >= 10000)
    {
        printf("输入的数为5位数\n");
    }
    else if (num >= 1000 && num <= 9999)
    {
        printf("输入的数为4位数\n");
    }
    else if (num >= 100 && num <= 999)
    {
        printf("输入的数为3位数\n");
    }
    else if (num >= 10 && num <= 99)
    {
        printf("输入的数为2位数\n");
    }
    else
    {
        printf("输入的数为1位数\n");
    }
    system("pause");
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表