版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章〓基本数据类型及顺序结构程序设计2.1〓知识要点回顾 本章主要介绍C语言的基本概念,只有扎实撑握了C的基础语法知识,才能对学习好后面章节。本章要掌握的内容主要有:数据类型及其定义方法、13种C语言常用的运算符号,优先级及结合方向,不同数据类型间的转换与运算,算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式以及顺序结构的程序设计方法。2.1.1〓数据类型、标识符、常量、变量1.数据的类型字符串C言提供了丰富的数据类型,这些数据类型可以分为三大类,即基本类型、构造类型和其他类型。C语言中的数据类型及各类型所占的宽度如表2-1所示。字符串字符字符型枚举类型基本型字符字符型枚举类型基本型短整整形基本类型短整整形长整数值型长整数值型无符号整单精度无符号整单精度双单度实型双单度实型数组类型长双单精度数据类型数组类型长双单精度构造类型共用体型结构体型构造类型共用体型结构体型指针类型指针类型空类型(void)其他类型空类型(void)表2-1〓VC/TC环境下数据类型所占宽度与数据范围类型占字节最小取值范围Int4/2-2147483648~2147483647即-231~(231-1)-32768~32767即-215~(215-1)Unsiginedint(无符号)4/20~21474836470~65535Shortint2-32768~32767即-215~(215-1)Unsiginedshortint(无符号)20~65535Longint4-2147483648~2147483647即-231~(231-1)Unsiginedlongint(无符号)40~4294967295Float4-2147483648~2147483647即-231~(231-1)double810-307~10308Longdouble1610-4931~1049322.标识符(1)标识符在C语言中用作变量名、函数名、数组名、指针名等。(2)由字母、数字、下划线组成。(3)第一个必须是字母或下划线。(4)关键字标识符不能作为其他标识符,但关键字大写可作标识符。(5)预定义标识符(如scanf)允许作其他用,但最好不要另作他用。C语言中的关键字如表2-2所示。表2-2〓C语言中的关键字(32个)breakcasecharconstdefaultdodoubleelseexternfloatforgotointlongregisterreturnsignedsizeofstaticstructtypedefunionunsignedvoidwhileautoifshortcontinueenumswitch3.常量常量是在程序运行过程中其值不能被改变的量。常量的基本类型有整型常量、实型常量、字符常量和字符串常量。(1)整型常量。可以用十进制、八进制、十六进制形式表示,整型常量只有数字,不带小数(12,-1,0)。八进制以数字0
开头,如010、011、017等,十六进制以0x或0X开头,如0x1、0Xde、0xf等。(2)实型常量。有小数形式(3.14、-3.56、0.0等)和指数形式(如0.326可以表示为0.326e0,3.26e-1)。C语言的语法规定,e之前必须要有数字,且e后面的指数必须为整数。例如,e3,.5e3.6.e3等都是不合法的指数形式。(3)字符常量。一个字符常量代表ASCII字符集中的一个字符,在程序中有单引号括起来的字符作为字符常量,如‘a’,‘A’,‘?’,‘’(单引号里有一个空格),字符常量只能包含一个字符,因此‘abc’是非法的。字符常量中的转义字符常量,又称反斜线字符,这些字符常量总是以一个反斜线开头,后跟一个特定的字符,代表一个特定的ASCII字符,这些字符必须在一对单引号内。’\n’代表换行,’\ddd’为一到三位八进制所代表的字符。例如,八进制‘\101’=(101)8=(65)10代表的字符为‘A’,八进制‘\141’所代表的字符为‘a’;‘\xhh’为一到两位十六进制所表示的字符,十六进制‘\x41’代表的字符为‘A’,‘\0’表示空等。C语言中常用的转义字符常量的含义如表2-3所示表2-3〓常用的转义字符常量的含义字符形式意义\a响铃\n换行回车\b退格\t横向跳格\r回车\f换页\0空字符\\反斜杠\’\”单引号双引号\xhh1到2位16进制所表示的字符\ddd1到3位8进制所表示的字符转义字符常量只代表一个字符(4)字符串常量。用双引号括号,如“STRI”,“ABD\n”,“”(表示空)等。字符串常量末尾必自动补\0,如字符串“STRI”,“ABD\n”实际为“STRI\0”和“ABD\n\0”。(5)还可以用定义一个标识符名的方法来代表一个常量。例如:#definex3.2//x为常量,其值用3.2来替换#definepi3.14159//pi为常量,其值用3.14159来替换4.变量变量是指在程序运行过程中其值能被改变的量。(1)变量的命名规则要符合标识符。(2)先定义,再使用。(3)C语言中定义的变量代表内存中的一个地址。(4)变量的赋值符为=,赋值表达式为:变量=表达式例如:t=x+5,p=q=r=9,x=x+1,x=(y=1)-(z=2)等都是合法的。赋值表达式左边不能是常量和表达式,如x=6=y,a+b=c等非法。(5)赋值表达式加分号就变成赋值语句。2.1.2〓C语言运算符1.算术运算符(+、-、*、/、%)(1)算术运算符均为双目运符。(2)求余运算%对象只能是整数,如6%2的结果是0,5%2的结果是1。(3)对于a%b,若a或b有负数,则对a与b的绝对值取余,余数符号与a的符号相同。例如,-7%5余数为-2,7%-5余数为2(4)双目运算符两数的类型必须一致才能进行。例如:1.0/2.0=0.5,1/2=0如果不一致则自动按以下规则转换:char(short)intunsignedlongfloatdouble(5)利用强制类型转换运算符,可以将表达式的值转换成指定的类型,强制类型转换表达式的形式为:(类型名)(表达式)例如(int)3.234,(double)(10%3)2.复合赋值运算符(=,+=,-=,*=,/=,%=)x+=y+h;等价于x=x+(y+h);x=y+h;等价于x=x-(y+h);x*=y+h;等价于x=x*(y+h);x/=y+h;等价于x=x/(y+h);x%=y+h;等价于x=x%(y+h);3.自增运算(++)和自减运算符(--)(1)运算对象是字符型、整型或实型变量,不能是常量和表达式,如++3,(i+j)++。(2)++和--运算符的结合方向是“自右至左”。(3)有四种形式++n,--n;n++,n--,其运算规则如下:如有intn=7,y;执行y=++n;则y=8,n=8;++在前,n先自加1再把结果给表达式y执行y=n++;则y=7,n=8;++在后,先把n的值给表达式y,n再自加1执行y=--n;则y=6,n=6;--在前,n先自减1再把结果给表达式y执行y=n--;则y=7,n=6;--在后,先把n的值给表达式y,n再自减1不管++或--在前还是在后,最后n的值是一样,只表达式的结果不同。4.逗号运算符和逗号表达式(1)其表形式为:y=(表达式1,表达式2,……表达n)(2)运算规则为:先求表达式1的值,再求表达式2的值,……,再求表达式n的值,y的值为表达式n的值。(3)其运算结合方向为从左向右。5.关系运算符(<,>,==,<=,>=,!=)关系运算的结果得一个整数值:0(假)或1(真)。例如,a=10,b=6;则a>=b表达式的值为1(真)。关系运算符是双目运算符,结合方向左至右。<,>,<=,>=优先级相同,==、!=优先级相同,前四个级别于高后两种。关系表达式(a=3)>(b=4),a>c==c,a!=c+d等都是合法的关系表达式,其结果要么是1,要么是0。6.逻辑运算符逻辑运算符有&&,||,!,前两者为双目运符,!为单目运算符。逻辑运算符的结合方向从左向右。逻辑运算符的优先级:!最高,&&次之,||最低。逻辑表达式:用逻辑运算符连接关系表达式,如(a>0)&&(b>5),其运算结果是1或0。逻辑表达式的运算规划如表2-所示。表2-〓逻辑表达式的运算规则ab!a!ba&&ba||b非0非00011非0001010非01001001100从表2-中可以看出:(1)&&(逻辑与),两个对象全为真才为真。x=5,y=6,则x&&y为T,即为1。(2)||(逻辑或),一个对象为真为真。x=3,y=0,则x||y为T,即为1。(3)!(逻辑非):对一个变量x=9,则!x为假,x=0,则!x为真。(4)在某些情况下,逻辑表达式不一定要全部运算。7.条件运算符表达式1:?表达式2:表达式3(三目运算)(1)当表达式1为真时,取表达式2的值,为假时取表达式3的值。(2)条件运符的结合方向为“自右至左”。(3)条件运符优先于赋值运算符,低于关系、算述、逻辑运算符。8.运算符的之间从高到低的运算优先次序在一个由多个运算组成的表达式中,先运算最高级别,最后运算最低级别。C语言中的运算符优先级如表2-所示。从表中可以看出括号的运算级别最高,逗号为最低级别。表2-〓运算符的优先级优先级运算符结合性1()[]->从左往右2++--sizeof&*+(正号)-(负号)从右往左3(强制性转换类型)从右往左4*(乘)/%从左往右5+(加)-(减)从左往右6<<(左移)>>(右移)从左往右7<><=>=从左往右8==!=从左往右9&(按位与)从左往右10^(按位异或)从左往右11|(按位或)从左往右12&&从左往右13||从左往右14?:(条件运算符)从右往左15=*=/=+=-=%=<<=>>=|=从右往左16,从左往右2.1.3〓常见错误举例1.两个关系表达式连用误以为C语言表达式a>b>c的含义是b大于c小于a。实际上,a>b>c的实际含义是(a>b)>c,要想表示b大于c小于a,关系表达式应这样写:(a>b)&&(b>c)。2.将&&,||误输入为&,|在C语言中,&&,||是逻辑运算符,而&,|是位运算符,其中&也可以是地址运算符。如果将&&,||误输入为&,|编译的时候不会有语法错误,但隐含着逻辑错误。3.用!>表示不大于误以为a!>b表示“a不大于b”,“a不大于b”应这样表示:!(a>b)。4.对算术表达式使用++和--运算符++和—本质上是赋值操作,因此不能作用于表达式。下面的做法是错误的:printf(“%d”,(a+b)++);5.在用printf打印单引号、双引号、反斜杠时,没有在这些字符前利用反斜杠构成转移字符printf(“youshouldsay“hello”!”);应该为:printf(“youshouldsay\“hello\”!”);会在屏幕上输出:youshouldsay“hello”!6.利用scanf函数输入变量时多了\n下面的程序在执行时,会出现问题:inta,b;scanf(“%d%d\n”,&a,&b);//应该为scanf(“%d%d”,&a,&b);7.执行程序时,没有按照scanf函数指定的形式输入scanf函数要求必须按照固定的形式从键盘输入,例如(假设为a和b赋值2和3,<CR>代表回车):若scanf(“%d%d\n”,&a,&b);应从键盘输入:2空格3<CR>若scanf(“%d,%d”,&a,&b);应从键盘输入:2,3<CR>若scanf(“a=%d,b=%d”,&a,&b);应从键盘输入:a=2,b=3<CR>因此,初学者要养成一个良好的编程习惯,不要编写程序时有的用scanf(“%d%d\n”,a,b);有的用scanf(“%d,%d”,a,b);。最好直截了当使用scanf(“%d%d”,a,b);输入时用空格分隔。8.printf函数或scanf函数调用时,格式控制与表达式类型不一致或数量不相等下面的程序是错误的:inta,b;floetf;scanf(“%d”,&a,&b);//格式控制符少了一个%df=a*1.0/b;printf(“a=%d,b=%d,f=%d”,a,b,f);//第3个%d应该为%f9.调用scanf函数输入浮点数时规定了精度下面的scanf函数的调用时错误的:floatf;scanf(“%4.2f”,&f);//应该为scanf(“%f”,&f);10.对算术表达式取地址取地址运算符&只能用于变量,下面的语句是错误的:scanf(“%d”,&(a+b));11.输入字符常量时漏掉了单引号,认为A、B就是‘A’、‘B’charch=A;//应该是:charch=‘A’;charc;c=B;//应该是:charch=‘B’;12.“=”的左边使用表达式C语言规定不能对表达式赋值,因为表达式不对应内存单元。下面的语句是错误的:inta,b;a+b=10;13.对于float类型变量使用%(求余)运算符inta;a=9.3%3;//应该为:a=9%3;14.语序颠倒初学者会误以为下面的程序输出a=31main(){〓inta,b;〓a=b+1;〓b=30;〓printf(“a=%d”,a);}由于在对a赋值时,b的值是未知的,因此a的值也不可预料。后面的赋值语句对b赋值30,但这并未影响a的值。也就是说a的值不会自动变成31。要想输出a=31,应将“a=b+1;”放到“b=30;”的后面。15.混淆了字符零和数值零有些初学者认为‘0’的值是0,但实际上‘0’是字符零,不是数值零,‘0’的ASCII码值是48。
2.2〓实训内容实验一〓验证性实验一、实验目的(1)熟悉各数据类型的定义方法及表示的数据范围。(2)熟练表达式的表示方法。(3)熟悉各运算符的优先级。(4)了解表达式的运行结果。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容(一)调试程序11.实验要求验证各种数据类型的定义方法及变量在存储空间所占字节数。有a1,a2,a3,a4,a5,a6,a7,a8八个变量,数据类型分别定义为:chara1;a1在内存中所占的字节为_____________inta2;a2在内存中所占的字节为_____________shorta3;a3在内存中所占的字节为_____________unsigneda4;a4在内存中所占的字节为_____________longa5;a5在内存中所占的字节为_____________floata6;a6在内存中所占的字节为_____________doublea7;a7在内存中所占的字节为_____________longdoublea8;a8在内存中所占的字节为_____________程序prog1.c是验证变量在内存中所占的空间,调试如下程序,查看运行结果是否与填的结果一致。2.程序代码prog1.c#include<stdio.h>main(){〓chara1;〓inta2;〓shorta3;〓unsigneda4;〓longa5;〓floata6;〓doublea7;〓longdoublea8;〓printf("Thelengthofa1=is%d\n",sizeof(a1));〓printf("Thelengthofa2=is%d.\n",sizeof(a2));〓printf("Thelengthofa3=is%d.\n",sizeof(a3));〓printf("Thelengthofa4=is%d.\n",sizeof(a4));〓printf("Thelengthofa5=is%d.\n",sizeof(a5));〓printf("Thelengthofa6=is%d.\n",sizeof(a6));〓printf("Thelengthofa7=is%d.\n",sizeof(a7));〓printf("Thelengthofa8=is%d.\n",sizeof(a8));}3.实验步骤步骤一:在D盘根目录中创建一个以你的学号命名的文件夹,如D:\200710003。步骤二:打开“MicrosoftVisualC++”软件,新建prog1.c文件,并输入程序代码,如图2-1所示。图2-1〓新建文件并输入代码步骤三:选择“编译”菜单命令进行编译,如图2-2所示。图2-2〓编译程序步骤四:若编译有错误需要重新检查;若编译没有错误,可以执行程序,程序输出结果如图2-3所示。图2-3〓程序运行结果按任意键关闭当前窗口,保存后关闭prog1.c文件。(二)调试程序21.实验要求用C语言编程计算各种表达式的值。已知有a=3,x=5,y=6,z=7;则计算下列表达式的值,请把手动计算后把结果填在空白处。(1)x&&y=_____________;(2)(a%b<1)||(a/b>1)=_____________;(3)x+a%3*(int)(x+y)%2/4=_____________;(4)!(x>z)+y!=1&&(y+z)/2=_____________;(5)(i=3,i++,++i,i+5)=_____________;(6)=_____________;调试如下程序,查看运行结果是否与填的结果一致。2.程序代码prog2.c#include<stdio.h>main(){〓inta=3,b=4,x=5,y=6,z=7,i,y1,y2,y3,y4,y5;〓doubley6;〓y1=x&&y;〓y2=(a%b<1)||(a/b>1);〓y3=x+a%3*(int)(x+y)%2/4;〓y4=!(x>z)+y!=1&&(y+z)/2;〓y5=(i=3,i++,++i,i+5);〓y6=a/3.0-6.0*y/(5.0+x);〓printf("表达式x&&y的值=%d\n",y1);〓printf("表达式(a%b<1)||(a/b>1)的值=%d\n",y2);〓printf("表达式x+a%3*(int)(x+y)%2/4的值=%d\n",y3);〓printf("表达式!(x>z)+y!=1&&(y+z)/2的值=%d\n",y4);〓printf("表达式(i=3,i++,++i,i+5)的值=%d\n",y5);〓printf("表达式a/3.0-6.0*y/(5.0+x)的值=%f\n",y6);}3.实验步骤步骤一:打开“MicrosoftVisualC++”软件,新建prog2.c文件,并输入程序代码,如图2-4所示。图2-4〓新建文件并输入程序代码步骤二:选择“编译”菜单命令进行编译,如图2-5所示。图2-5〓编译程序步骤三:若编译有错误,需要重新检查;若编译没有错误,可以执行程序,此时输出结果如图2-6所示。图2-6〓程序运行结果按任意键关闭当前窗口,保存后关闭prog2.c文件。(三)调试程序31.实验要求调试下面的程序,验证格式修饰符的使用。2.程序代码prog3.c#include<stdio.h>main(){〓floatx=1234.567;〓doubley=1234.5678;〓printf("x=%f,y=%f\n",x,y);〓printf("x=%6.3f,y=%10.3f\n",x,y);〓printf("x=%g\n",x);}3.实验步骤步骤一:打开“MicrosoftVisualC++”软件,新建prog3.c文件,并输入程序代码,如图2-7所示。图2-7〓新建程序并输入程序代码步骤二:选择“编译”菜单命令进行编译,如图2-8所示。图2-8〓编译程序步骤三:若编译有错误需要重新检查;若编译没有错误,可以执行程序,程序运行结果如图2-9所示。图2-9〓程序运行结果按任意键关闭当前窗口,保存后关闭prog3.c文件。四、实验报告要求(1)写出程序一的实验原理与程序的结果。(2)写出程序二的实验原理与程序的结果。(3)写出程序三的实验原理与程序的结果。
实验二〓启发性实验一、实验目的(1)掌握程序设计与调试的方法。(2)熟悉各运算符以及表达式的表示方法。(3)掌握表达式的运行结果。(4)掌握程序填空、改错的方法。(5)掌握程序编程方法。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容1.填空题从键盘输入一个三位正整数,把它每一位上的数字取出来,即输出它的个位、十位、百位上的数字。运行结果如下:请输入一个三位正整数:(printf输出提示信息)123<CR>(从键盘输入123,<CR>代表Enter键)个位=3,十位=2,百位=1(输出个位、十位、百位数字)请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h> main(){〓intn,a,b,c;//定义变量〓printf("请输入一个三位正整数:\n");//输入提示〓scanf("%d",&n);//输入语句,为变量n赋值〓a=__1__;//取n个位上的数字〓b=__2__;//取n十位上的数字〓c=__3__;//取n百位上的数字〓printf(“个位=%d,十位=%d,百位=%d”,a,b,c);} 2.改错题从键盘上输入两个整数,输出它们的和。运行结果如下:请输入两个整数:(printf输出提示信息)23<CR>(从键盘输入1空格2,<CR>代表Enter键)c=5(输出和)请改正程序中的五处错误,使程序能输出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h> main(){〓intabc;//定义三个整型变量〓printf("请输入两个整数:\n");//输入提示〓scanf("%d%d",a,b);//输入语句,为变量a和b赋值〓c=a+b//计算a和b的和〓printf(“c=%d\n,c);//输出变量c}3.编程题输入两个整数,编程实现两个数的互换。运行结果如下:pleaseinputa,b:(printf输出提示信息)23<CR>(从键盘输入1空格2,<CR>代表Enter键)交换前a=2,b=3交换后a=3,b=2程序如下:include<stdio.h>main(){〓inta,b,t;〓printf("pleaseinputa,b:\n");〓scanf("%d%d",&a,&b);〓printf(“交换前a=%d,b=%d\n”,a,b);〓/*将下面的代码补充完整*/〓printf(“交换后a=%d,b=%d\n”,a,b);}
实验三〓综合性实验一、实验目的(1)掌握程序设计与调试的方法。(2)熟悉各运算符以及表达式的表示方法。(3)掌握基本的输入输出语句。(4)掌握程序编程能力。二、实验设备和仪器(1)IBMPC或兼容计算机。(2)Windows9x/2000/XP操作系统。(3)VisualC++6.0。三、实验内容1.填空题从键盘输入三个小写字母,输出其ASCII码和对应的大写字母。运行结果如下:请输入三个小写字母a,b,c: (printf输出提示信息)abc<CR> (从键盘输入abc,<CR>代表Enter键)97,98,99 (输出ASCII码)A,B,C (输出对应的大写字母)请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:程序中//是对问题的提示。不得增行或删行,也不得更改程序的结构!程序如下:#include<stdio.h>main(){〓__1__a,b,c;//定义三个字符型变量〓printf("请输入三个小写字母a,b,c:\n");//输入提示〓scanf("%c%c%c",&a,&b,&c);//为三个变量赋值,注意输入的格式!〓printf("__2__,__3__,__4__\n",a,b,c);//输出ASCII码〓printf("%c,%c,%c\n",__5__,__6__,__7__);//输出对应的大写字母}2.改错题从键盘输入为三个不同的变量赋值,输出每个变量的值。运行结果如下:2<CR>(从键盘输入2,<CR>代表Enter键)3.5<CR>(从键盘输入3.5,<CR>代表Enter键)a<CR>(从键盘输入a,<CR>代表Enter键)a=2,x=3.500000,ch=a(输出三个变量的值)请改正程序中的错误,使程序能输出正确的结果。注意:程序中//是对问题的提示。不得增行或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融投资分析技术分析实战指南
- 农产品供应链质量保障及免责条款合同
- 创新之潮青春勇进
- 电子商务平台建设开发协议
- 环保物流与绿色仓储解决方案
- 仓储管理智能系统升级
- 农产品购销合同与免责约定
- 生物质能源利用与开发作业指导书
- 智能员工满意度调查系统合同
- 食品饮料行业食品安全监管与追溯体系方案
- 教练式沟通培训课件
- 2023宣武医院舆情报告
- 医养结合养老院(养老中心)项目可行性报告
- 初三语文总复习全程计划表
- 电子技术基础与技能-机工教案第九章教案555集成定时器介绍
- 污水处理运行质量保证措施
- 国家食源性疾病监测工作标准手册
- 食材供货及质量保障措施方案
- 混凝土搅拌车课件
- 基于单片机的智能充电器设计
- 关于新中国史简介 新中国史简介 最好
评论
0/150
提交评论