C语言对字符类型视为整数类型,就是字符对应的ASCII码。ASCII码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。ASCII是American Standard Code for Information Interchange缩写,意为美国标准信息交换代码。
实现此案例需要按照如下步骤进行。
步骤一:字符型char的定义和使用
代码如下所示:
#include <stdio.h> int main() { char c = 'a'; printf("%c\n", c); printf("%d\n", c); c = c + 1; printf("%c\n", c); printf("%d\n", c); c = 65; printf("%c\n", c); return 0; }
上述代码中,以下代码:
char c = 'a';
声明字符型变量c,并初始化为字符a的ASCII码,字符a的ASCII码定义为97,所以字符变量c中存放的实际是整形数字97。
上述代码中,以下代码:
printf("%c\n", c);
使用函数printf输出字符型变量c,其中字符型变量所对应的格式控制符为%c。
上述代码中,以下代码:
printf("%d\n", c);
因为字符型变量c中实际保存的是整形数字97,所以字符型变量也可以用整形的格式控制符%d来输出,与格式控制符%c的区别是,%c输出的是字符a,%d输出的是数字97。
上述代码中,以下代码:
c = c + 1;
因为字符型变量c中存放的是数字97,所以字符型变量c可以进行算术运算。
上述代码中,以下代码:
c = 65; printf("%c\n", c);
因为字符型变量c中存放的是数字97,所以字符型变量c中也可以被赋值为其他的整形数字。此时如果用格式控制符%c输出字符变量c,输出的结果将是字符A。因为字符A的ASCII码是65。
本案例的完整代码如下所示:
#include <stdio.h> int main() { char c = 'a'; printf("%c\n", c); printf("%d\n", c); c = c + 1; printf("%c\n", c); printf("%d\n", c); c = 65; printf("%c\n", c); return 0; }
int代表整数,是最常用的类型。整型按照符号分为有符号和无符号两种,有符号整型表示的是正整数、0和负整数;无符号整型表示的是正整数和0。按照所表示的整数大小分为短整型(short int)、整型(int)、长整型(long int)和长长整型(long long int)。
浮点型代表小数,C提供三种浮点类型,float(单精度)、double(双精度)和long double(扩展双精度),它们的区别是表示的小数精度和范围不同。
实现此案例需要按照如下步骤进行。
步骤一:整型int的定义和使用
代码如下所示:
#include <stdio.h> int main() { short int si = 10; int i = 20; long int li = 30L; long long int lli = 40LL; unsigned short int usi = 50; unsigned int ui = 60u; unsigned long int uli = 70UL; unsigned long long int ulli = 80ULL; printf("%hd\n", si); printf("%d\n", i); printf("%ld\n", li); printf("%lld\n", lli); printf("%hu\n", usi); printf("%u\n", ui); printf("%lu\n", uli); printf("%llu\n", ulli); return 0; }
上述代码中,以下代码:
short int si = 10;
声明短整型变量si,并初始化为10。
上述代码中,以下代码:
int i = 20;
声明整型变量i,并初始化为20。
上述代码中,以下代码:
long int li = 30L;
声明长整型变量li,并初始化为30。
上述代码中,以下代码:
long long int lli = 40LL;
声明长长整型变量lli,并初始化为40。
上述代码中,以下代码:
unsigned short int usi = 50;
声明无符号短整型变量usi,并初始化为50。
上述代码中,以下代码:
unsigned int ui = 60u;
声明无符号整型变量ui,并初始化为60。
上述代码中,以下代码:
unsigned long int uli = 70UL;
声明无符号长整型变量uli,并初始化为70。
上述代码中,以下代码:
unsigned long long int ulli = 80ULL;
声明无符号长长整型变量ulli,并初始化为80。
上述代码中,以下代码:
printf("%hd\n", si);
使用函数printf输出短整型变量si,短整型的格式控制符为%hd。
上述代码中,以下代码:
printf("%d\n", i);
使用函数printf输出整型变量i,整型的格式控制符为%d。
上述代码中,以下代码:
printf("%ld\n", li);
使用函数printf输出长整型变量li,长整型的格式控制符为%ld。
上述代码中,以下代码:
printf("%lld\n", lli);
使用函数printf输出长长整型变量lli,长长整型的格式控制符为%lld。
上述代码中,以下代码:
printf("%hu\n", usi);
使用函数printf输出无符号短整型变量usi,无符号短整型的格式控制符为%hu。
上述代码中,以下代码:
printf("%u\n", ui);
使用函数printf输出无符号整型变量ui,无符号整型的格式控制符为%u。
上述代码中,以下代码:
printf("%lu\n", uli);
使用函数printf输出无符号长整型变量uli,无符号长整型的格式控制符为%lu。
上述代码中,以下代码:
printf("%llu\n", ulli);
使用函数printf输出无符号长长整型变量ulli,无符号长长整型的格式控制符为%llu。
步骤二:浮点型double的定义和使用
代码如下所示:
#include <stdio.h> int main() { float f = 5.5f; double d = 6.6; long double ld = 8.8L; printf("%f\n", f); printf("%lf\n", d); printf("%Lf\n", ld); return 0; }
上述代码中,以下代码:
float f = 5.5f;
声明单精度浮点型变量f,并初始化为5.5。注意,单精度浮点型常量5.5后面需要加f。
上述代码中,以下代码:
double d = 6.6;
声明双精度浮点型变量d,并初始化为6.6。
上述代码中,以下代码:
long double ld = 8.8L;
声明扩展双精度浮点型变量ld,并初始化为8.8。注意,扩展双精度浮点型常量8.8后面需要加L。
上述代码中,以下代码:
printf("%f\n", f);
使用函数printf输出单精度浮点型变量f,单精度浮点型的格式控制符为%f。
上述代码中,以下代码:
printf("%lf\n", d);
使用函数printf输出双精度浮点型变量d,双精度浮点型的格式控制符为%lf。
上述代码中,以下代码:
printf("%Lf\n", ld);
使用函数printf输出扩展双精度浮点型变量d,扩展双精度浮点型的格式控制符为%Lf。
本案例的完整代码如下所示:
整型int的定义和使用,代码如下所示:
#include <stdio.h> int main() { short int si = 10; int i = 20; long int li = 30L; long long int lli = 40LL; unsigned short int usi = 50; unsigned int ui = 60u; unsigned long int uli = 70UL; unsigned long long int ulli = 80ULL; printf("%hd\n", si); printf("%d\n", i); printf("%ld\n", li); printf("%lld\n", lli); printf("%hu\n", usi); printf("%u\n", ui); printf("%lu\n", uli); printf("%llu\n", ulli); return 0; }
浮点型double的定义和使用,代码如下所示:
#include <stdio.h> int main() { float f = 5.5f; double d = 6.6; long double ld = 8.8L; printf("%f\n", f); printf("%lf\n", d); printf("%Lf\n", ld); return 0; }
使用函数printf输出变量的值到屏幕。使用函数scanf从键盘输入值到变量中。
本案例要求输入一个圆形的半径,输出圆形的面积。
实现此案例需要按照如下步骤进行。
步骤一:变量的输入和输出
代码如下所示:
#include <stdio.h> int main() { int r; printf("请输入圆的半径:"); scanf("%d", &r); double area; area = 3.1415 * r * r; printf("圆的面积是:%lf\n", area); return 0; }
上述代码中,以下代码:
int r;
声明整型变量r,用于存储圆的半径。
上述代码中,以下代码:
printf("请输入圆的半径:"); scanf("%d", &r);
首先使用函数printf提示用户"请输入圆的半径:",这是输入数据的惯常用法。
然后使用函数scanf从键盘输入圆的半径到整型变量r中。scanf函数有两个参数,第一个参数为格式控制符,与printf类似,对应后面的变量,第二个参数必须为变量的地址。
上述代码中,以下代码:
double area;
声明双精度浮点型变量area,用于存放圆的面积。
上述代码中,以下代码:
area = 3.1415 * r * r; printf("圆的面积是:%lf\n", area);
计算圆的面积并使用函数printf输出圆的面积值。
本案例的完整代码如下所示:
#include <stdio.h> int main() { int r; printf("请输入圆的半径:"); scanf("%d", &r); double area; area = 3.1415 * r * r; printf("圆的面积是:%lf\n", area); return 0; }
输入三个学生的考试成绩,计算总分。
实现此案例需要按照如下步骤进行。
步骤一:变量声明
代码如下所示:
#include <stdio.h> int main() { int zhangSan; int liSi; int wangWu; printf("请输入张三的成绩:"); scanf("%d", &zhangSan); printf("请输入李四的成绩:"); scanf("%d", &liSi); printf("请输入王五的成绩:"); scanf("%d", &wangWu); int sum; sum = zhangSan + liSi + wangWu; printf("三个人的总成绩是:%d\n", sum); return 0; }
上述代码中,以下代码:
int zhangSan; int liSi; int wangWu;
定义三个整型变量,分别用于存储张三、李四、王五这三个学生的成绩。
上述代码中,以下代码:
printf("请输入张三的成绩:"); scanf("%d", &zhangSan);
首先使用函数printf提示输入张三的成绩。
然后,使用函数scanf输入。
上述代码中,以下代码:
printf("请输入李四的成绩:"); scanf("%d", &liSi);
首先使用函数printf提示输入李四的成绩。
然后,使用函数scanf输入。
上述代码中,以下代码:
printf("请输入王五的成绩:"); scanf("%d", &wangWu);
首先使用函数printf提示输入王五的成绩。
然后,使用函数scanf输入。
上述代码中,以下代码:
int sum; sum = zhangSan + liSi + wangWu;
首先定义一个整型变量sum,用于存储三个学生的总成绩。
然后计算张三、李四、王五的总成绩并存入整型变量sum中。
上述代码中,以下代码:
printf("三个人的总成绩是:%d\n", sum);
使用函数printf输出三个学生的总成绩。
本案例的完整代码如下所示:
#include <stdio.h> int main() { int zhangSan; int liSi; int wangWu; printf("请输入张三的成绩:"); scanf("%d", &zhangSan); printf("请输入李四的成绩:"); scanf("%d", &liSi); printf("请输入王五的成绩:"); scanf("%d", &wangWu); int sum; sum = zhangSan + liSi + wangWu; printf("三个人的总成绩是:%d\n", sum); return 0; }
运算符sizeof用于计算类型所占的存储空间。sizeof的使用方法看起来像一个函数,但其实是一个运算符。
实现此案例需要按照如下步骤进行。
步骤一:运算符sizeof()
代码如下所示:
#include <stdio.h> int main() { int i; short int si; long int li; unsigned int ui; unsigned short int usi; unsigned long int uli; float f; double d; long double ld; char c; unsigned char uc; printf("int 型所占的字节数为:%ld\n", sizeof(i)); printf("short int 型所占的字节数为:%ld\n", sizeof(si)); printf("long int 型所占的字节数为:%ld\n", sizeof(li)); printf("unsigned int 型所占的字节数为:%ld\n", sizeof(ui)); printf("unsigned short int 型所占的字节数为:%ld\n", sizeof(usi)); printf("unsigned long int 型所占的字节数为:%ld\n", sizeof(uli)); printf("float 型所占的字节数为:%ld\n", sizeof(f)); printf("double 型所占的字节数为:%ld\n", sizeof(d)); printf("long double 型所占的字节数为:%ld\n", sizeof(ld)); printf("char 型所占的字节数为:%ld\n", sizeof(c)); printf("unsigned char 型所占的字节数为:%ld\n", sizeof(uc)); printf("int 型所占的字节数为:%ld\n", sizeof(int)); i = 5; printf("表达式 i = 10 所占的字节数为:%ld\n", sizeof(i = 10)); printf("i = %d\n", i); return 0; }
上述代码中,以下代码:
int i; short int si; long int li; unsigned int ui; unsigned short int usi; unsigned long int uli; float f; double d; long double ld; char c; unsigned char uc;
声明了C语言提供的各种数据类型的变量。
上述代码中,以下代码:
printf("int 型所占的字节数为:%ld\n", sizeof(i)); printf("short int 型所占的字节数为:%ld\n", sizeof(si)); printf("long int 型所占的字节数为:%ld\n", sizeof(li)); printf("unsigned int 型所占的字节数为:%ld\n", sizeof(ui)); printf("unsigned short int 型所占的字节数为:%ld\n", sizeof(usi)); printf("unsigned long int 型所占的字节数为:%ld\n", sizeof(uli)); printf("float 型所占的字节数为:%ld\n", sizeof(f)); printf("double 型所占的字节数为:%ld\n", sizeof(d)); printf("long double 型所占的字节数为:%ld\n", sizeof(ld)); printf("char 型所占的字节数为:%ld\n", sizeof(c)); printf("unsigned char 型所占的字节数为:%ld\n", sizeof(uc));
使用函数printf输出C语言提供的各种数据类型变量所占的字节数。
注意:sizeof运算符的运算结果对应的格式控制符为%ld。
上述代码中,以下代码:
printf("int 型所占的字节数为:%ld\n", sizeof(int));
运算符sizeof除了可以计算变量所占的字节数,还可以直接计算数据类型所占的字节数。
上述代码中,以下代码:
i = 5; printf("表达式 i = 10 所占的字节数为:%ld\n", sizeof(i = 10));
运算符sizeof也可以计算表达式的运算结果所占的字节数。
注意:sizeof只关心类型,只会分析括号中的类型,不会对括号中的内容进行运算。如下语句:
printf("i = %d\n", i);
输出的变量i的值还为5。
本案例的完整代码如下所示:
#include <stdio.h> int main() { int i; short int si; long int li; unsigned int ui; unsigned short int usi; unsigned long int uli; float f; double d; long double ld; char c; unsigned char uc; printf("int 型所占的字节数为:%ld\n", sizeof(i)); printf("short int 型所占的字节数为:%ld\n", sizeof(si)); printf("long int 型所占的字节数为:%ld\n", sizeof(li)); printf("unsigned int 型所占的字节数为:%ld\n", sizeof(ui)); printf("unsigned short int 型所占的字节数为:%ld\n", sizeof(usi)); printf("unsigned long int 型所占的字节数为:%ld\n", sizeof(uli)); printf("float 型所占的字节数为:%ld\n", sizeof(f)); printf("double 型所占的字节数为:%ld\n", sizeof(d)); printf("long double 型所占的字节数为:%ld\n", sizeof(ld)); printf("char 型所占的字节数为:%ld\n", sizeof(c)); printf("unsigned char 型所占的字节数为:%ld\n", sizeof(uc)); printf("int 型所占的字节数为:%ld\n", sizeof(int)); i = 5; printf("表达式 i = 10 所占的字节数为:%ld\n", sizeof(i = 10)); printf("i = %d\n", i); return 0; }
分别完成二进制和十进制之间的转换,包括正数和负数。
实现此案例需要按照如下步骤进行。
步骤一:从十进制正整数到二进制的转换:
例如:十进制数34转换成二进制数的过程如下
34 ÷ 2 = 17 余数为 0
17 ÷ 2 = 8 余数为 1
8 ÷ 2 = 4 余数为 0
4 ÷ 2 = 2 余数为 0
2 ÷ 2 = 1 余数为 0
1 ÷ 2 = 0 余数为 1
将余数从下向上读出的二进制数即为转换后的二进制数。
即十进制数34转换成的二进制数为 100010。
步骤二:从十进制负整数到二进制的转换:
方法:先将负数对应的正数转换成二进制,然后对二进制数按位取反后加1即可。
例如:十进制数-34转换成二进制数的过程如下:
首先,将34转换成二进制数为100010。
然后,把这个二进制数按位取反为011101。
最后,把取反后的二进制数加1为011110,即得到十进制数-34的二进制格式。
步骤三:从二进制正数到十进制的转换:
例如:二进制数100010转换成十进制数的过程如下:
首先将二进制数100010从最后一位开始算,依次为0、1、2、… 位。
第0位 0 * 20 = 0
第1位 1 * 21 = 2
第2位 0 * 22 = 0
第3位 0 * 23 = 0
第4位 0 * 24 = 0
第5位 1 * 25 = 32
然后把结果加起来 0 + 2 + 0 + 0 + 0 + 32 = 34
即二进制数100010转换成的十进制数为34。
步骤四:从二进制负数到十进制的转换:
方法:按位取反后加1可以得到对应的正数,然后加上负号即可。
例如:二进制数011110转换成十进制数的过程如下:
首先,将二进制数011110按位取反得到100001。
然后,将取反后的二进制数100001加1,得到100010。
最后,使用步骤三的方法,将二进制数100010转换成十进制数34,在加上-号,记得到二进制数011110的十进制格式-34。