您当前的位置:首页 > 计算机 > 编程开发 > C语言

第3章经典习题(附答案)

时间:01-03来源:作者:点击数:

本章主要讲解了C语言的基本数据类型,以及它们的输出和数学运算。

一. 问答题

1) 如何用 printf() 输出 short、int、long 类型的整数,请举例说明。

2) 如何用 printf() 输出 float、double 类型的小数,请举例说明。

3) 如何用 printf() 输出八进制、十进制和十六进制的 int 类型,请举例说明。

4) int 类型的长度到底是多少?

5) 定义两个 float 类型的变量 f1 和 f2,如下所示:

float f1 = 3.3;
float f2 = 3.8;

它们转换为 int 类型后的值分别是多少?

6) 下面数学运算的结果是多少?

int a = 10 + 8 - 4 * 3 + 24 / 4 * 6 + 3;

7) 下面那几个是C语言的关键字?

int    main    function    char    =

二. 编程题

1) 一年大概有 3.156×107秒,要求输入你的年龄,然后显示该年龄合多少秒。

2) 输入一个 ASCII 码值,输出它后面的字符。

三. 找错题

下面的代码有错吗?如果有,有几个,分别是什么错误?

#include <stdio.h>
main(){
    float r, pi = 3.14;
    scanf("%f\n", &r);
    area = pi * r * r;
    printf("area = %.2f\n", area);
}

一. 问答题


1) 如何用 printf() 输出 short、int、long 类型的整数,请举例说明。

short、int、long 对应的控制字符分别为 %hd、%d、%ld,请看下面的代码:

#include <stdio.h>

int main(){

    short a = 10;

    int b = 20;

    long c = 30;

    printf("a=%hd, b=%d, c=%ld\n", a, b, c);

    return 0;

}

2) 如何用 printf() 输出 float、double 类型的小数,请举例说明。

float、double 对应的控制符分别为 %f、%lf,请看下面的例子:

#include <stdio.h>

int main(){

    float a = 4.6;

    double b = 123.86;

    // .2表示保留两位小数

    printf("a=%.2f, b=%.2lf\n", a, b);

    return 0;

}

3) 如何用 printf() 输出八进制、十进制和十六进制的数据,请举例说明。

八进制、十进制、十六进制对应的控制字符分别为 %o、%d、%x,如果希望带上前缀,在控制符前面加 # 即可。请看下面的例子:

#include <stdio.h>

int main(){

    int a = 110;

    //十进制

    printf("%d\n", a);

    //八进制

    printf("%o, %#o\n", a, a);

    //十六进制

    printf("%x, %X, %#x, %#X\n", a, a, a, a);

    return 0;

}

运行结果:

110

156, 0156

6e, 6E, 0x6e, 0X6E

十进制没有前缀,不能加#;十进制不包含字符,没有大小写问题,所以也不能写作 %D。也就是说,输出十进制只有 %d 一种写法。

八进制有前缀,但是没有大小写问题(不包含字符),所以只能写作 %o 或者 %#o,而不能写作 %O 或者 %#O。

十六进制既有前缀也有大小写问题(包含字符 a~f 六个字符),可以写作 %x、%X、%#x、%#X。

如果写作 %D、%#d、%#D、%O、%#O,那么它的行为是未定义的,有的编译器兼容性好,能够正常输出,而有的编译器不能识别,只能原样输出,或者输出结果很奇怪。它们的行为在C语言中本来就是未定义的。

4) int 类型的长度到底是多少?

在16位环境下,int 的长度为 2(以字节计),在32位和64位环境下,int 的长度为 4。

这里所说的“环境”既包括CPU、数据总线等硬件,也包括操作系统、编译器等软件,它们都必须支持64位才叫64位环境。

5) 定义两个 float 类型的变量 f1 和 f2,如下所示:

float f1 = 3.3;
float f2 = 3.8;

它们转换为 int 类型后的值分别是多少?

浮点数转换成整数时,不是按照“四舍五入”的原则,而是直接将小数部分舍去,不管它是不是大于 0.5,所以 f1、f2 转换成 int 类型后的值都是 3。

6) 下面数学运算的结果是多少?

int a = 10 + 8 - 4 * 3 + 24 / 4 * 6 + 3;

这个题目主要考察运算符的优先级和结合性,对于加减乘除运算,运算符的优先级和结合行跟数学里面一样,也就是从左往右计算,先计算乘除,再计算加减,所以结果为 45。


7) 下面那几个是C语言的关键字?

int    main    function    char    =

int 和 char 是C语言中的关键字。main 是主函数的名字,= 是运算符,function 是一个普通的标识符。


二. 编程题


1) 一年大概有 3.156×107秒,要求输入你的年龄,然后显示该年龄合多少秒。

#include<stdio.h>

int main(){

    float age;

    printf("Please input your age: ");

    scanf("%f",&age);

    // %e表示以指数形式输出

    printf("Yourage is %e seconds.\n", age * 3.156E7);

    return 0;

}

运行结果:

Please input your age: 25

Yourage is 7.890000e+08 seconds.

2) 输入一个 ASCII 码值,输出它后面的字符。

#include<stdio.h>

int main(){

    int n;

    scanf("%d", &n);

    n++;

    printf("This character is %c.\n", n);

    return 0;

}

运行结果:

60

This character is =.


三. 找错题


下面的代码有错吗?如果有,有几个,分别是什么错误?

#include <stdio.h>

main(){

    float r, pi = 3.14;

    scanf("%f\n", &r);

    area = pi * r * r;

    printf("area = %.2f\n", area);

}

这段代码的错误分别是:

1) main() 函数的写法不标准。标准的 main() 函数的写法为:

int main(){

    //TODO:

    return 0;

}

2) scanf() 里面的字符串最后不能加 \n。scanf() 在读取数据时会忽略 \n、空格、缩进等空白符,遇到非空白符才开始读取,在 scanf() 的字符串最后添加空白符会导致奇怪的行为。

3) area 还未定义,不能使用。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门