全国二级C语言复习资料.docx
实验一认识c语言程序1. C语言是一种高级语言(但更多的接触机器硬件,较其他语言低级,也可称为中级语言), 本身没有输入输出语句,输入操作由库函数scanf完成,输出操作由库函数printf完成。用 高级语言编写的程序叫“源程序”,用机器语言编写的程序叫“目标程序”。2. C语言的主要特点。(1) 语言简洁、紧凑,使用方便、灵活。(2) 运算符和数据类型丰富。(3)程序设计结构化、模块化。(4) 语法限制不太严格,程序设计自由度大。(5) 可直接访问物理地址、进行位操作、直接对硬件操作。(6) 生成目标代码质量高。(7) 可移植性好。3. C语言产生的目的:为描述和实现UNIX操作系统提供一种工作语言而设计的。4. C语言中共有32个关键字、34种运算符(课本365页),9种控制语句(课本370页)。5. C语言的风格。a) 严格区分大小写。b)用“;”作为语句分隔符。c)一行内可写几个语句,一个语句也可写在几行上。d)注释部分以“/*”开始,以“*/”结束,允许出现在程序任何位置(不可插在标识符 中间),不可嵌套,编译程序时不做任何处理(也无法发现注释中的拼写错误)。e) 花括号配对使用标识一个语句组,即构成一个复合语句。6 C语言的构成。(1) C程序由一个或多个函数组成(至少要有一个主函数,即main函数,位置可以任意), 每个函数完成相对独立的功能。函数是C程序的基本单位.(2) 函数由函数的首部和函数体(包括声明部分和执行部分)组成。C程序总是从main 函数开始执行,在main函数中结束,其他通过嵌套调用执行.(3) 一般形式为:函数类型函数名(形参)形参说明(内部变量说明; 执行语句部分; )7 .优秀程序员的素质。(1)使用Tab键缩进代码而不是按空格。(2)花括号对齐.(3)有足够的注释。(4)有合适的空行.& 道序的开发过程。(1) 编辑。源程序文件扩展名“.cpp”;(2) 编译。(快捷键CE+F7)生成目标程序,文件扩展名“.obj”;(3) 连接。生成可执行程序,文件扩展名“.exe”;(4) 执行。(快捷键Ctrl+F5)9.目前程序设计采用的基本方法有面向过程的程序设计和面向对象的程序设计.习题部分1.以下不是C语言特点的是()。A.运算符丰富B.数据结构丰富2.C.可以直接访问物理地址 以卜对C语言叙述正确的是(A.比其他语言高级D. C函数包含的语句数R没有限制)0B.可以不用编译就能被计算机识别执行C.以接近英语国家的自然语言和数学语言作为语言的表达形式D.出现最晚,具有其他语言的一切优点3.下面程序格式错误的是()«A. main() B. int a,b,z;C. a=2:b=3;4 . C语言的程序一行写不下,可以用( )oA.逗号换行B.分号换行 C.在任意一分隔符或空格处换行D.回车符换行5 .卜.面把一条语句写在两行时错误的是( )oA. int a, B. int a C. intD. int a,bb;,b;6.程序段中,错误的注释是(A. # in/*包含 */ clued<stdio.h> void main() IC. # include<stdio.h>a,b;;)oB. # include<stdio.h>void main /*/(/*主函数*/) ( D. # include<stdio.h>void main() int x/*初始化=10;/* 打印 */primf("d”,x);7. 一个C程序的执行是从()ovoid main()int x=10;printf("d''.x); /*打印 x 的值 *"*=10*/ )A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第个函数开始,到本程序main函数结束8. 判断叙述的正确性。(1) 个好程序要有详尽注释;C程序中的# include和# define均不是C语句。(2) C程序书写程序比较自由,一行内必须写一个语句,并要有行号。(3) 个C程序只有在编译、连接成exe程序才能执行。)括起来;C语言的函数体由()部分,其后是()部分。)程序。9. C语言中,当复合语句多于一条时,要用一对(开始,用符号()结束;函数体的前面是(10. C程序编译后生成()程序,连接后生成(11. C编译程序的功能是什么?习题参考答案.1. Do参考知识点2。2. C3. C。语句间用应用“;”隔开。4. C5. Do分号作为语句的结束标志,同一行里前面要有内容。6. Ao不允许在预编译命令中插入注释。7. A8 .(1)正确(2)错误。一个语句可写在多行,一行内也可写多个语句(3)正确9 .花括号 ;: 变量说明;执行语句。10 .目标(或.obj);可执行(或.exe)o11 .答:功能:将C源程序进行语法检查,无语法错误再翻译成目标代码,最后通过和标准库链 接后形成可执行文件。若没有C编译程序,编写的C程序是无法执行的。实验二简单的C语言程序设计运行结果:HellolWorld!例1输出一行信息。/*第一个简单的C语言程序*/# include <stdio. h>void main( )printf( MHeilo!World!nw );/*注释*/编译预处理*/*主函数*/)/*语句*/说明:(1) void表示此函数是“空类型”,即执行此函数后不产生一个函数值。(2)函数体由花括号括起来。“n”是换行符。(3)放在C程序开头的头文件也称包含文件或标题文件,用#include "文件名”或者include 文 件名)的格式,其中文件名为头文件名,一般用h作扩展名。习题 编写一个C程序,输出以下信息:*Good!求两数之积。# include <stdio. h>void main( )int a,b, sum;/*声明部分,定义变量a、b、sum为整型数据*/a=10; b=20;/*为 a, b 赋值*/sum=a*b;运行结果:printf( "sum is %dnn , sum):sum is 200说明:“d”是输入输出的“格式字符串”,表示“以十进制整数类型”。习题编写一个程序并运用加减乘除中的3种运算使1-15内的4个数的运算结果为24;例3求2个数中的较大者。# include <stdio.h> void mainO int max(int x, int y); int a, b, c ;scanf ( w%d, %d ", &a, &b) c=max (a, b);printf( Mmax=%dnw , c);/*对被调用函数max的声明*/*定义整型变量a,b,c*/*输入变量a, b的值*/*调用max函数。将得到的值赋予c*/*输出c的值*/int max(int x, int y) int z ;if (x>y) z=x;else z=y;return(z);/*定义函数max,函数值为整型,形式参数x,y为整型*/*max函数中的声明部分,定义本函数中用到的变量z为整型*/*将z的值返回,通过max带会到调用函数的位置*/说明:“&”的含义是“取地址”。习题编写一个C程序,要求能输入a,b,c 3个值,输出其中的最大者。习题参考答案:1. # include <stdio. h>void mainO ( printf( w*nM );printf( “n” );printf( u Good! nw );printf ( unff ):printf( a*nn );2. # include <stdio. h>void mainO int ay b, c, d, sum;a=2; b=4; c=8; d=10;sum=(d-c/a)*b:printf( Msum is %dnn , sum):3. 解法h# include <stdio.h>void mainO Iint max(int x, int y, int z);int a, b, c, d ;scanf( "%d,%d,%d”,&a,&b,&c); d=max (a, b, c);printf( "max=%dn",d) ;/*对被调用函数max的声明*/*定义整型变量a, b, c, d*/*输入变量a, b,c的值*/*调用max函数。将得到的值赋予d*/*输出d的值*/int max (int x, int y, int z) /*定义函数max,函数值为整型,形式参数x, y, z为整型*/int p ;/*max函数中的声明部分,定义本函数中用到的变量p为整型*/if(x>y) p=x ;elsep=y;if (y>z) p=y;elsep=z;if(x>z) p=x;elsep=z;return(p);/*将P的值返回,通过max带会到调用函数的位置*/解法2#include<stdio. h>void main( ) 运行结果:please input a,b,c:6,5, 1/The largest number is 6int a, b, c, max;printf ( M pl ease input a, b, c: nw );scanf( u%d,%d,%dM ,&a,&b,&c);max二a:if(max<b)max=b;i f(max<c)max=c;printf( "The largest number is %d” , max);实验三程序的灵魂一算法程序的内容1 .对数据的描述。在程序中制定数据的类型和数据的组织形式,即数据结构。2 .对操作的描述。即操作步骤,也就是算法.二.算法1 .含义:为解决一个问题而采取的方法和步骤。2 .分类:a.数值运算算法。目的是求数值解,如求方程的根等:b.非数值运算算法.如图书检索、人事管理、行车调度管理等。3 .特点:有穷性。一个算法应包含有限的操作步骤:确定性。算法中的每个步骤都应该是确定的;有零个或多个输入。输入是指执行算法时需从外界获得必要信息: 有一个或多个输出。算法是为了求解,“解”就是输出。 有效性。算法中的每个步骤都应能有效地执行,并得到确定的结果。三. 算法的表示1 .表示方法:自然语言、传统流程图、结构流程图、伪代码、PAD图等.2 .流程图表示算法的优点:流程图是用一些图框表示各种操作。用图形表示算法, 直观形象,易于理解。3 .常用的流程图符号:起止框输入输出框判断框处理框连接点注释框4 .流程图的内容:表示相应操作的框、带箭头的流程线、框内外必要的文字说明。四.三种基本结构1 .顺序结构。当型(while)循环结构在执行完A框所指定的操作后,必然接着执行B框所指定的操作。 顺序结构是最简单的一种基本结构。2 .选择结构。又称为选取结构或分支结构。该结构中必包含一个判断框。根据给定的条件p是否成 立而选择执行A框或B框(允许有一个框为空)。3 .循环结构。又称为重复结构,即反复执行某一部分的操作。有“当''型和“直到''型两种结构。a.当给定条件pl成立时,执行A框操作,执行完A后,再判断条件pl是否成立,如果仍然成 立,再执行A框,当某一次pl条件不成立,此时不执行A框,而从b点脱离循环结构.b.直到型(until)循环结构:相当于dowhile():先执行A框,然后判断条件p2是否成立,如 果p2不成立,则再执行A框,然后再对p2条件作判断,如果p2仍然不成立,又执行A,如 此反复执行A,直到给定的条件p2成立为止,此时不再执行A,从b点脱离本循环结构。4 .以上三种结构的共同点:1 .只有一个入口。2.只有一个出口. 3.内部的每一部分都有机会被执行到。4 .结构内不存在“死循环”(无终止的循环)。5 .一个结构化算法由一些基本结构顺序组成;基本结构间不存在向前或向后跳转,流程的跳转只存 在了一个基本结构范围内(如循环中流程的跳转);一个非结构化的算法可用等价的结构化算法代 替,其功不变.五.结构化程序1 .定义:用高级语言表示的结构化算法。2 .方法:(1)自顶向下:(2)逐步细化:(3)模块化设计:(4)结构化编码。实验四标识符和常量- 标识符(1) 定义:用来标识变最、常量、函数等的字符序列。(2) 命名规则:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线。(3) 特点:大小写敏感(如sum与Sum不一样);不能使用关键字(如int)。(4) 长度:最长32个字符,建议不要超过8个字符。(5) 类型: 关键字:又称保留字,特定的标识符,不允许用大写字母: 预定义标识符:主要用于系统提示的库函数名(如printf)和预编译处理命令(如define); 用户标识符:用户根据需要定义的标识符,允许使用预定义标识符(如scanf)但失去原特 定意义。习题 1.合法的C语言关键字是()。A. VAR B. cher C. integer D. default E. Float F. signed G Char2.以下属于合法的用户标识符的分别是()。(1) A. Pad 和 p#dB. scanf 和 alOC. void 和 maxD. a*和 for(2) A. INT 和 JswB. keep%和<fr>C. 023 和一amD. abc.c 和 file二. 常量1. 定义:在程序运行过程中,其值不能改变的量,分为数值常量和符号常量。2. 类型: (1)符号常量(用一个标识符代表的一个常量)定义格式:#define 常量名 常量值(如:#define PI 3.14 )说明:a.“#define”是定义符号常量的关键字,是必须的:b.符号常量名一般用大写字母表示;符号常量值在其作用域内不能改变或赋值: c.使用好处:含义清楚,在需要改变一个常量时能“一改全改”。(2)数值常量a.整型常量。(即整常数,3种形式)十进制整数;八进制整数(形式为0d , d取值。7之间)91A如:0123= (123 8= IX 8 + 2X 8 + 3X 8 = 83-011= (-11) = 一 (lx 8 +1x8 ) = -9十六进制整数(以Oxd , d取值09或从“a""f"的字母)。如:0x123= Q23 ,6 = lx 16 2 + 2x 161 + 3X 160 = 291-0x12= (-12 |6 = - Qx ld + 2x 16°) = -18b.实型常量.(即浮点型常量,是用一个十进制表示的符号实数)十进制小数形式:由数字和小数点组成;指数形式:由数字、小数点和e(或E)组成,且e(或E)之前必须有数字,e(或E) 之后的指数必须为整数。(“规范化的指数形式":字母e(或E)前的小数部分中小数点左边只有一位非零数字,如1.23e5) c.字符常量.定义:用单撇号('')括起来的一个字符。如:言,W, ,? J等。特殊的字符常量一转义字符,以反斜杠()开头,并将反斜杠()后面的字符转换 为另外的意义。如:字符型式含义字符型式含义n回车换行t水平制表制表区占8列)b退格V回车不换行f换页反斜杠字符7单撇号字符双撇号字符ddd 1到3位8进制所代表的字符每个d代表1位8进制)xhh 1到2位16进制所代表的字符每个h代表1位16进制,x是必须的) d.字符串常量.定义:用双撇号("")引起来的字符序列称为字符串常量。如:"How do you do. " , "#12345”等。(只能够把字符常量赋给一个字符变量,而不能把字符串常量赋给一个字符变量。如:charc='A' 是正确的,而char c="A"则是错误的。)字符常量与字符串常量的区别:字符串常量存储时,在字符串的结尾加一个“字符串结束标志''(即'0')。如:对丁字符串"CHINA”在内 存中存放的形式如下:C H I N A 0它占6个字节而不是5个字节。(书写字符串的时候 不要写VT)在程序设计中一般用字符是否等于V)来判断字符串是否结束。3. 整型数据在内存中的存储形式 存在形式:二进制方式。(最高位是符号位,0为正,1为负) 十进制整数转化为补码。(一个整数占16位) 对于正数,其补码表示与原码相同。 对于负数,其补码为它的绝对值的:进制形式,按位取反加1。4. 字符数据在内存中的存储形式 将一个字符常量放到一个字符变量中,实际是将该字符的相应的ASCH代码放到存储单元 中.如'a' , 'A' , 'O'的 ASCII 码分别是97, 65, 48。 字符数据的存储方式与整数相似,因此字符数据可以和整型数据相通用,一个字符数据既可 以以字符形式(c)输出,也可以以整数形式(%d)输出。 字符数据只占一个字节,只能存放0-255范围的整数。5. 浮点型数据在内存中的存储形式一个浮点型数据在内存中占4个字节(32位),按照指数形式进行存放,分为小数部分和指数 部分进行存储。 不少系统以24位表示小数位(包括符号),以8位表示指数部分(包括指数符号)。小数部分占 位数越多,发示有效数字越多。指数部分占的位数越多,则能表示的数越大。习题 3.字符型常量在内存中存放的是(C.内部码D.十进制码C. 68D. DA. ASCII 码 B. BCD 码4 . -8在内存中的存储形式是(5 .合法的字符常量是().A. "B"B. ' 010'6 .错误的字符串常量是().0',D.A. ' abc' B. ' ' 12' 12' ' C.7 .数值029是一个().C.非法数D.十六进制数);字符串常量"BBn' r”在内存中所占C. ' ' D. ,483,C. ' '037' D. " " “ ab6" OeO“nabt" '07''a, b, c表示各位的数,则从左到右各个数字是bac的A.八进制数B.十进制数8 .字符串常量“22a,0n”的长度是( 字节数为(),长度是(9 .不合法的常量是().A.''2B." "10 .非法的C语言转义字符是( A.'b'B. '0xf'11 .将下面的常量归类。 0x7a 57L,m'(6) 1E0 0.012e00312 .假设m是一个三位数,从左到右用 三位数的表达式为()«习题参考答案:3. A6. A10. B浮点型常量有:12. (m/10)%10*100+m/100*10+m%101. D F2. B A4. 11111111 111110005. B7. C 8. 6 : 7; 6o 9. D11.整型常量有:字符型常量有:©实验五常量的简单程序应用例一符号常量的使用#include <stdio. h>define PRICE 40/*定义常量 PRICE,其值为 40*/void main() int num 1, num 2,total 1,total 2;num 1=10; num 2=20;运行结果:total l=num 1*PRICE;total 2=num 2*PRICE;total 2=800printf (*total l=%dn*, total 1);printf(*total 2=%dn*, total 2);例二转义字符的使用程序一:#include <stdio. h> main( ) char ch= '124';定义字符变量ch,其值为转义字符124printf ( a%cnw , ch);运行结果:T解析:转义字符124,为八进制数,需转换成十进制数得到其对应的ASCII码。91n即(124) 8=1X8 +2X8 +4X8 =84。程序二:ftinclude <stdio. h>void main( )printf(* ab_ct derftgn*);printf(*htibbj k*);解析: 第一个printf函数: 先在第一行左端输出“ ab_c”,遇到“t”(“跳格”经8列的“制表区”到下一个“制表位置”, 即第9列)。 第911列输出“ de”,遇到“r”(不换行“回车”返回本行最左端第一列位置),再输出“f”, 得 “f ab c de”。 再遇到“t”,移到第9行输出“g”,得"fa b _ c _ _ gde 第二个printf函数: 现在第一行左端输出“h”,遇到“t”跳至第9行输出“i”,得“h iwo (此时当前输出位置在第10列) 遇到“b"(退一格)2次,即退到第8列,输出“j_ k”,得“hj _k”。在屏幕输出的结果是:在打印机输出的结果:fab c gdefgdehj khj i k不同结果的原因说明:使用“r”和“b”后所输出的字符(包括空格和跳格所经过位置)在屏幕显示时将取代原 来屏幕上该位置原显示的字符。其实,扉幕上完全按程序要求输出了全部的字符,只是因为在输出前面的字符后很快又输 出后面的字符,还未看清楚就被新的字符取代旧的字符。习题 1.定义一个符号常量TIME和一个整型常量num,其值为12和20在主函数中将它们的乘积输出。2.利用转义字符编写一个C程序,要求运行结果为ASCII码值为014对应的“音符图形”。习题参考答案:/*定义符号常量TIME,其值为12*/*定义整型常量TIME,其值为20*/ printf(*total =%dn”, total);1. include <stdio. h> define PRICE 12 void main( ) int total;int num =20; total =num * TIME;2. 根据题意,必须先求出ASCII码值为014的八进制数,进而转换成转义字符。而(16) 8=1X8、6X8°=14,故题意所指的转义字符为'16'。#include <stdio. h>void main() char a= '016;定义字符变量a,其值为转义字符'016'printf ( a%cnw , a) ;实验六变量一. 变量1 .定义:其值可以改变的量。(变量代表内存中具特定属性的一个存储单元,即地址,用来存放数据)2 .类型:整型变量(int)、浮点型变量(float)、字符型变量(char)。3 .格式:数据类型变量1,变量2,,变量n;例: int a=3;(a是变量名,3是变量值)4 .数据类型(int、float、char)决定分配字节数和数的表示范围。一般整型占2个字节,浮点型占4 个字节,字符型占1个字节。5 .赋值方式。a、定义时赋值。如:int a=l, b =-3, c: b、以语句的形式赋值。如:float x; x=10. 5;二. 要求变量先“定义后使用”a、凡未被事先定义的不作为变量名,保证程序中变量名使用正确。如:int student;而在程序执行中错写为:stadent即stadent = 40;这时就会出现:'statent': undeclared identifier (不明确定义)的错误提示。b、每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。c、指定每一变量属于某一个类型,这就便于在编译时,据此检杳该变量所进行的运算是否合法。如:只能对整型变量a和b可以进行求余运算a%b( “%”为求余运算符),而对浮点型变量a和b 就不可以进行求余运算。三. 整型变量的分类1 .定义格式:int变量名1,变量名2,,变量名n:整型变量的基本类型符为into可根据数值范围定义三种整型变量。(1)基本整型:以int表示。如:int a;(2)短整型:以 short int 或 short 表示。如:short b;(3)长整型:以 long int 或 long 表示。如:long c: 4321; 0L;数值的范围:short<int<long2 .为充分利用变量的表示范围,将变量定义为“无符号”类型,即加上unsigned修饰符。如果不指 定为unsigned则默认为有符号的。(1)有符号基本整型:signed into如:int a, b;(2)无符号基本整型:unsigned int , 如:unsigned a, b:(3)有符号短整型:signed short int0 如:short a, b;(4)无符号短整型:unsigned short int0 如:unsigned short a, b;(5)有符号长整型:signed long int o 如:long a, b;(6)无符号长整型:unsigned long into 如:unsigned long a, b;3.标准定义的整形数据(方括号部分可以省略不写,尤其是signed 股不写)类型比特数取值范围输出格式signed int16(2字节)-3276832767%dunsigned int16(2字节)065535%usigned shortint16(2字节)-3276832767%dunsigned shortint16(2字节)0-65535%ulong int32(4字节)-2147483648 2147483647%1unsignedlongint32(4字节)0 4294967295%lu四. 浮点型变量的分类1. 定义格式:float变量名1,变量名2, %变量名n;浮点型变量的基本类型符为float。float和double的输出格式都是f。2. 分为:单精度型(float)、双精度型(double)和长双精度型(long double).类型比特数有效数字数值范围float3267-3.4X10" (-38) "3. 4X1038double6415 '16-1.7 X107-308)"1.7 X10-308long double1281819-1. 2X10- (一4932).2X 10(932五. 字符变量1 .字符变量用来存放字符常量,一个字符变量只能放一个字符常量。字符变量占一个字节(8位)。2 .定义格式:char变量名1,变量名2, ,变量名n;3 . char是定义字符变量的关键字。字符变量用%c作为输出格式。六. 不同类型数据间的转换和运算不同类型的数据要转换为同一类型,然后才进行运算。转换规则如图: double - float高t横向向左的箭头是必须转换的运算;tlong向上的箭头只表示数据类型级别的高低,低 t转换时是直接转换的。如:int转换为unsignedlong是直接转换为long. «t int - char、 short习题 1.可以作为C语言程序中的变量名是(A. 1 B. al C. int D. *P2 .下面程序的输出为( )oA. 0 B. 1 C. -1 D.变量无定义3 .有定义char s=' '092',则该语句()。A.使s的值包含一个字符B.使s的值包含4个字符C.使s的值包含4个字符I).定义不合法,s的值不确定4 .的字符数分别为(5 .设int类型数据长度为()和(6 .如下程序的输出为( nclude<stdio. h>main( ) printf( M%dw .null);若有说明:char sl=> 067' ; char s2:''1' ' ; char s3=, 2' ; si, s2, s3 所包含),(),()o2个字节,则int和unsigned ),long类型数据占()oA. 0C. 1int类型数据的取值范围分别为 )个字节。B.变量无定义D. -17 . C语言中,int. char, short三种类型数据所占的内存由()决定。比如在16位机和32位机中,int型数据所占字节数分别是2和4。8 .不属于C语言类型的是()«1 . signed short int B. unsigned long int C. unsigned int D. long short9 .错误的int类型常量是( )oA. 32768 B. 0 C. 037 D. OxAF10 .为了求出s=10!,则变量s的类型应该为()。长整型long数据在内存中存储形式为( )O "犷求余运算的运算数必须都是()型。11*若x为int或nsigned int型变量,则执行下面语句的输出值为(x=65535;printf(, x);12若a为整型变量,则下面语句的输出值为( )oa= -2L;printf ( M%dnw , a);13.下述语句的输出为()。int x= - 1; printf ( 4<%d, %u,%ow , x, x, x);A. -1, -1, -1B. -1, 32767, -177777C. -1, 32768, 177777D. 一 1, 65535, 17777714. 若有说明语句char w; int x; float y; double z;则表达式 w * x + z -y的结果为()类型。A. float B. char C. int D. double15. C语言中定义了一个变量,代表内存中的一个().16. 若变量a是int类型,并执行语句:a=' A' +1.6,则a的值为().A.字符CB.不允许字符型和浮点型相加C.浮点型D.字符'A'的ASCII码值加上1习题参考答案:1-3 B D D 4. 1;无定值,说明不合法:15. -3276832767 ; 065535; 46. B 7.所用机器的机器字长 8. A9. A 10. long ;补码;整11. 112. -213. D 14. D15.地址 16. D解析:11.变量x占用2个字节,当它为int型,其表示范围是一3276832767;当它为unsigned型, 其表示范围为。65535,两者都无法正确表示65535。但65535=32767+32767+1,在计算机内部将二进制补码相加:01111111 11111111+ oiiinn niinn11111111 11111110+ 00000000 0000000111111111 H111U1最后结果为iinnn iiniin (补码),原码等于其反码加1,即:-00000000 00000000+00000000 000000012= -00000000 000000012 = -112. 一个常整埴,若其值在一3276832767范围内,可赋给一个int或long int型变量,若超出 上述范围而在一21474836482147483647范围内,其值应赋给long int型变量。-2L为long int 型,但值为一2,可由类型转换把长整型换为短整型再赋给int型变最a,按%d格式输出。13. 提示:-1在内存中以补码形式存储:niinn 11111111.实验七变量的简单程序应用例一整型数据的溢出#include<stdio. h>void mainO (运行结果:short int a, b;32767» 32768a = 32767:b = a+1;printf(*a=%d, b=%dn*, a, b);分析:b输出的值不为32768的原因:数值32767在内存的表示方式为01111111 1111111,加1得10000000 0000000 (即一32768).理论值32768超出int型变量的取值范围,导致“溢出解决办法:将a> b定义为long型,并按%ld进行输出就可以得到正确的结果。(将变量b改成long类型并将a+1改成a+lL,并用%ld格式输出) 例二浮点型数据的舍入误差浮点型变量用有限的存储单元存储,能提供的有效数字有限(如门oat型提供6至7位,double型提供 15至16位),有效位外的数字将被舍去而赋予随机值,会产生“不正确”的结果。#include<stdio. h>void mainO float a, b;运行结果:a = 12345678848. 000000b = 12345678848. 000000a=123456. 789e5;b = a +20;printf(*a=%fn*, a);printf(*b=%fn*, b);解决办法:将a、b定义为double型。例三字符变量与整数的通用#include<stdio. h>void mainO (运行结果:char cl,c2;a , bcl=97; c2=98