本章主要讲解了C语言的基本数据类型,以及它们的输出和数学运算。
1) 如何用 printf() 输出 short、int、long 类型的整数,请举例说明。
2) 如何用 printf() 输出 float、double 类型的小数,请举例说明。
3) 如何用 printf() 输出八进制、十进制和十六进制的 int 类型,请举例说明。
4) int 类型的长度到底是多少?
5) 定义两个 float 类型的变量 f1 和 f2,如下所示:
它们转换为 int 类型后的值分别是多少?
6) 下面数学运算的结果是多少?
7) 下面那几个是C语言的关键字?
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 还未定义,不能使用。