第1关:数值与字符的通用性实验
任务描述
本关任务:了解C语言中字符型和整型的通用性
相关知识
为了完成本关任务,你需要掌握了解和掌握以下知识
ASCII表
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
大小规则
常见ASCII码的大小规则:09<AZ<a~z。 数字比字母要小。如 “7”<“F”; 数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ; 字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ; 同个字母的大写字母比小写字母要小32。如“A”<“a” 。 几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48 。
汉字编码
目前的文字编码标准主要有 ASCII、GB2312、GBK、Unicode等。ASCII 编码是最简单的西文编码方案。GB2312、GBK、GB18030 是汉字字符编码方案的国家标准。ISO/IEC 10646 和 Unicode 都是全球字符编码的国际标准。 ######GB2312-80 标准 GB2312-80 是 1980 年制定的中国汉字编码国家标准。共收录 7445 个字符,其中汉字 6763 个。GB2312 兼容标准 ASCII码,采用扩展 ASCII 码的编码空间进行编码,一个汉字占用两个字节,每个字节的最高位为 1。具体办法是:收集了 7445 个字符组成 94*94 的方阵,每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为“区位码”。区位输入法就是通过输入区位码实现汉字输入的。将区号和位号分别加上 20H,得到的 4 位十六进制整数称为国标码,编码范围为 0x2121~0x7E7E。为了兼容标准 ASCII 码,给国标码的每个字节加 80H,形成的编码称为机内码,简称内码,是汉字在机器中实际的存储代码GB2312-80 标准的内码范围是 0xA1A1~0xFEFE。 ######GBK 编码标准 《汉字内码扩展规范》(GBK) 于1995年制定,兼容GB2312、GB13000-1、BIG5 编码中的所有汉字,使用双字节编码,编码空间为 0x8140~0xFEFE,共有 23940 个码位,其中 GBK1 区和 GBK2 区也是 GB2312 的编码范围。收录了 21003 个汉字。GBK向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,是前者向后者过渡过程中的一个承上启下的产物。ISO 10646 是国际标准化组织ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与 Unicode 组织的Unicode编码完全兼容。ISO 10646.1 是该标准的第一部分《体系结构与基本多文种平面》。我国 1993 年以 GB 13000.1 国家标准的形式予以认可(即 GB 13000.1 等同于 ISO 10646.1)。
换行符
格式化输出语句,代码"\n"(new line),输出时将切换一行。
编程要求
根据提示,在右侧编辑器补充代码,输出字母p-Q的数值大小,理解英文姓名排序方法。
测试说明
输出结果,并换行,使光标移动至下一行。
代码如下:
/**
2020年2月9日
这里是文档注释,你可以添加程序相关的功能、编者、时间等信息
*/
// 程序需要借用的标准头文件
#include <stdio.h>//插入标准化输入输出头文件
//主程序
int main()
{
//请在此输入需要执行的代码
char a='p',b='Q';
a=a-b;
printf("%d\n",a);// C11 即2011版标准要求所有的函数均需要返回
return 0;
}
第2关:转义字符实验
任务描述
本关任务:了解并掌握转义字符的使用
相关知识
为了完成本关任务,你需要掌握了解和掌握以下知识
ASCII表
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
大小规则
常见ASCII码的大小规则:09<AZ<a~z。 数字比字母要小。如 “7”<“F”; 数字0比数字9要小,并按0到9顺序递增。如 “3”<“8” ; 字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z” ; 同个字母的大写字母比小写字母要小32。如“A”<“a” 。 几个常见字母的ASCII码大小: “A”为65;“a”为97;“0”为 48 。
转义字符
字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字符的方式称为转义字符(Escape Character)。
转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。
字符 1、2、3、a、b、c 对应的 ASCII 码的八进制形式分别是 61、62、63、141、142、143,十六进制形式分别是 31、32、33、61、62、63。下面的例子演示了转义字符的用法: '''java char a = '\61'; //字符1 char b = '\141'; //字符a char c = '\x31'; //字符1 char d = '\x61'; //字符a char *str1 = "\x31\x32\x33\x61\x62\x63"; //字符串"123abc" char *str2 = "\61\62\63\141\142\143"; //字符串"123abc" char *str3 = "The string is: \61\62\63\x61\x62\x63" //混用八进制和十六进制形式 ''' 转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。 转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限: 八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177; 十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\7f。 超出范围的转义字符的行为是未定义的,有的编译器会将编码值直接输出,有的编译器会报错。
对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,甚至无法从键盘输入,只能用转义字符的形式来表示。不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以,针对常用的控制字符,C语言又定义了简写方式,完整的列表如下:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) | 009 |
\v | 垂直制表(VT) | 011 |
' | 单引号 | 039 |
" | 双引号 | 034 |
\ | 反斜杠 | 092 |
编程要求
根据提示,在右侧编辑器补充代码,将字母和数字结果间隔一个TAB位分行显示出来,注意换行。
测试说明
输出结果,并换行,使光标移动至下一行。
代码如下
/**
2020年2月9日
这里是文档注释,你可以添加程序相关的功能、编者、时间等信息
*/
// 程序需要借用的标准头文件
#include <stdio.h>//插入标准化输入输出头文件
//主程序
int main()
{
//请在此输入需要执行的代码
char a='X',b='Y',c='Z';
int x=3,y=4,z=5;
printf("%c\t%c\t%c\n",a,b,c);
printf("%d\t%d\t%d",x,y,z); // C11 即2011版标准要求所有的函数均需要返回
return 0;
}
第3关:浮点数实验
任务描述
本关任务:理解并掌握浮点数的使用。
相关知识
为了完成本关任务,你需要掌握了解和掌握以下知识
格式化输入
C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为字符串处理。 #####参数详解 |格式化符号|参数详解| |---|---| |%a| 浮点数、十六进制数字和p-记数法(C99)| |%A| 浮点数、十六进制数字和p-记法(C99)| |%c| 一个字符(char)| |%C| 一个ISO宽字符| |%d| 有符号十进制整数(int)(%e 浮点数、e-记数法| |%E| 浮点数、E-记数法| |%f| 单精度浮点数(默认float)、十进制记数法(%.nf 这里n表示精确到小数位后n位.十进制计数)| |%g| 根据数值不同自动选择%f或%e.| |%G| 根据数值不同自动选择%f或%e.| |%i| 有符号十进制数(与%d相同)| |%o| 无符号八进制整数| |%p| 指针| |%s| 对应字符串char(%S对应宽字符串WCAHR(%u无符号十进制整数(unsigned int)| |%x| 使用十六进制数字0f的无符号十六进制整数 | |%X| 使用十六进制数字0f的无符号十六进制整数| |%%| 打印一个百分号|
实例解析
'''java float a,b,c; scanf("%d%d%d",&a,&b,&c); ''' 然后输入3 4 5(注意:默认情况下,中间允许以回车键,空格或TAB键间隔),则分别将3,4,5赋值给a,b,c,即:a=3,b=4,c=5,注意&符号表示取地址,是Scanf中必须注意的使用技巧。
浮点数的输出
编程要求
根据提示,在右侧编辑器补充代码,完成美国标准华氏度与国际标准摄氏度之间的转换:c=5(f-32)/9,并保留小数点后两位数字。
测试说明
输出结果,并换行,使光标移动至下一行。
代码如下
/**
2020年2月9日
这里是文档注释,你可以添加程序相关的功能、编者、时间等信息
*/
// 程序需要借用的标准头文件
#include <stdio.h>//插入标准化输入输出头文件
//主程序
int main(){
//请在此输入需要执行的代码
float Fahrenheit,Celsius;
scanf("%f",&Fahrenheit);
Celsius=5.0*(Fahrenheit-32)/9.0;
printf("%.2f\n",Celsius);// C11 即2011版标准要求所有的函数均需要返回
return 0;
}
第4关:数值类型综合实验
任务描述
本关任务:理解并掌握整数、浮点数的使用。
相关知识
为了完成本关任务,你需要掌握了解和掌握以下知识
格式化输入
C语言有多个函数可以从键盘获得用户输入,
它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
getchar()、getche()、getch():这三个函数都用于输入单个字符。
gets():获取一行数据,并作为字符串处理。
#####参数详解 |格式化符号|参数详解|
|---|---|
|%a| 浮点数、十六进制数字和p-记数法(C99)|
|%A| 浮点数、十六进制数字和p-记法(C99)|
|%c| 一个字符(char)| |%C| 一个ISO宽字符|
|%d| 有符号十进制整数(int)(%e浮点数、e-记数法|
|%E| 浮点数、E-记数法|
|%f| 单精度浮点数(默认float)、十进制记数法(%.nf这里n表示精确到小数位后n位.十进制计数)|
|%g| 根据数值不同自动选择%f或%e.|
|%G| 根据数值不同自动选择%f或%e.|
|%i| 有符号十进制数(与%d相同)|
|%o| 无符号八进制整数|
|%p| 指针|
|%s| 对应字符串char(%S对应宽字符串WCAHR(%u无符号十进制整数(unsigned int)| |%x| 使用十六进制数字0f的无符号十六进制整数 |
|%X| 使用十六进制数字0f的无符号十六进制整数|
|%%| 打印一个百分号|
实例解析
'''java float a,b,c; scanf("%d%d%d",&a,&b,&c); ''' 然后输入3 4 5(注意:默认情况下,中间允许以回车键,空格或TAB键间隔),则分别将3,4,5赋值给a,b,c,即:a=3,b=4,c=5,注意&符号表示取地址,是Scanf中必须注意的使用技巧。
浮点数的输出
编程要求
根据提示,在右侧编辑器补充代码,要求输入学生的数学、英语和计算机课程的成绩(整数型)后,能够计算并给出该生3门课程的平均分(精确到小数点后1位)。
测试说明
输出结果“当数学成绩是87分,英语成绩是72分,计算机成绩是93分时,平均成绩为84.0分。”,并换行,使光标移动至下一行。
代码如下
/**
2020年2月9日
这里是文档注释,你可以添加程序相关的功能、编者、时间等信息
*/
// 程序需要借用的标准头文件
#include <stdio.h>//插入标准化输入输出头文件
//主程序
int main()
{
//请在此输入需要执行的代码
int mathScore,englishScore,computerScore;
float average;
printf("请输入数学、英语、计算机课程成绩:\n");
scanf("%d%d%d",&mathScore,&englishScore,&computerScore);
average=(mathScore+englishScore+computerScore)/3.0;
printf("当数学成绩是%d分,英语成绩是%d分,计算机成绩是%d分时,平均成绩为%4.1f分。\n",mathScore,englishScore,computerScore,average);
// C11 即2011版标准要求所有的函数均需要返回
return 0;
}