版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章C语言概述必不可少C程序的组成和形式必不可少C程序是由函数构成的主函数其他函数一个函数由两部分组成参数说明可以省圆括号不能省参数说明可以省圆括号不能省3中max函数的首部为:intmax(intx,inty)函数类型函数名函数参数类型函数参数名函数参数类型函数参数名函数体声明部分变量声明函数声明执行部分一个C程序总是从main函数开始执行。C程序书写格式自由,一行可以写几个语句,一个语句可以写在多行上。每个语句和数据声明的最后必须有一个分号。C语言的输入输出功能是通过函数完成的。开开始编辑编译连执行有错?结果正确?结束有源程序file.c目标程序file.obj库函数和其他目标程序可执行目标程序file.exe无正确不正确接运行C程序的步骤:第三章数据类型、运算符、与表达式短整型shortC短整型shortC数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union长整型long整型intC语言的数据类型:数据类型决定:数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作§3.2常量与变量常量与符号常量常量:在程序运行过程中,其值不能被改变的量符号常量:用一个标识符代表一个常量的符号使用符号常量的好处:含义清楚能做到“一改全改”变量变量:代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。标识符:在C语言中用来对变量、符号常量、函数、数组、类型等对象命名的有效字符序列标识符的命名规则:只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。大写和小写字母是不同的字符,也就是不同的标识符。标识符的最大长度TuoboC规定为32个字符,一般不超过8个字符。标识符应做到“见名知义”标识符不能是关键字,如果是已经定义标识符,比如函数名,则相当于重新定义。变量必须“先定义,后使用”例例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123§3.3整型数据整型常量十进制整数:正负整数八进制整数:以0开头,08是错误的用法十六进制整数:以0x开头,例:0x2a是合法的整型常量的类型一个整型常数根据数据所在的范围可自动确定它的数据类型一个整常量后面加一个字母u或U,认为是unsignedint型一个整常量后面加一个字母l或L,认为是longint整型变量整型数据在内存中的存放形式:补码正整数:该数的原码负整数:该数的绝对值按位取反再加1例:10的补码为0000000000001010-10的补码为1111111111110110最高位是符号位,该位为0表示正,该位为1表示负。整型变量的分类:六种·有符号基本整型:[signed]int2-32768~32767(-215~215-1)·无符号基本整型:unsignedint20~65535(0~216-1)·有符号短整型:[signed]short[int]2-32768~32767·无符号短整型:unsignedshort[int]20~65535·有符号长整型:[signed]long[int]4-2147483648(-231~231-1)·无符号长整型:unsignedlong[int]40~4294967295(0~232-1)整型数据的溢出例3.3整型数据的溢出#include<stdio.h>voidmain(){inta,b;a=32767;b=a+1;a和b在内存中的形式:011111111111111132767a和b在内存中的形式:0111111111111111327671000000000000000-32768}运行结果为:32767,-32768§3.4浮点型数据错误用法浮点型常量的表示方法错误用法十进制小数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位非零的数字。浮点型变量浮点型数据在内存中的存放形式:分成小数部分和指数部分两部分存放例:3.14159在内存中的形式如下(实际存储的是它的二进制数形式):+3141591+3141591符号小数部分指数部分浮点型变量的分类类型比特数有效数字数值范围float326~7-3.4*10-38~3.4*1038double6415~16-1.7*10-308~1.7*10308lingdouble12818~19-1.2*10-4932~1.2*104932浮点型变量也应先定义后使用§3.5字符型数据字符常量:用单撇号括起来的一个字符转义字符:以一个“\”开头的字符序列:含义转义字符含义转义字符含义转义字符含义转义字符水平制表8\t\n换行水平制表8\t\n换行回车\r退格\b回车\r退格\b反斜线\\换页\f反斜线\\换页\f1~2位16进制数代表的字符\xhh1~3位81~2位16进制数代表的字符\xhh1~3位8进制数代表的字符\ddd双引号\“单引号\‘例:3.5转义字符的使用#include<stdio.h>voidmain()main(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk\n");}实际运行结果为:fgde实际运行结果为:fgdehjk*输出的制表符覆盖了原有字符fabcgdehjik字符变量字符变量的定义及使用形式:charc1,c2;c1=’a’;c2=’b’;字符变量在内存中占一字节。字符数据在内存中的存储形式以字符的ASCII码形式存放可以和整型数据通用,可以互相赋值,可以以%d或c式输出,字符型数据可以参加算术运算,但只能存放0~255(unsignedchar)或-128~127(signedchar)之间的整数。例3.6向字符变量赋予整数#include<stdio.h>voidmain(){charc1;intc2;c1=97;c2=98;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}运行结果:ab9798例3.7大小写字母的转换#include<stdio.h>voidmain(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c",c1,c2);}字符串常量:一对双撇号括起来的字符序列:“abc”‘a’是字符常量,“a”是字符串常量不能将一个字符串常量赋值给字符变量系统自动在字符串常量的末尾加上‘\0’例字符串“hello”在内存中例字符串“hello”在内存中:hello\0\0例\0例空串“”在内存中§3.6变量赋初值变量赋初值:在定义变量的同时使变量初始化正确用法例:inta=3;正确用法floatf=3.56;charc=’a’;错误用法inti,j,k=5;错误用法inta,b,c=5;inta=b=c=5;§3.7各类数值型数据间的混合运算各类数值型数据间的混合运算整型、浮点型、字符型数据间可以混合运算不同类型的数据要先转换成同一类型,再进行运算转换规则:doubledoublefloatlongunsignedintchar,short低高必定转换运算对象类型不同时转换方向inti;floatf;inti;floatf;doubled;longe;1010+‘a’+I*f-d/eintintintdoubledoubledoubledoubledoubledouble§3.8算术运算符和算术表达式C运算符简介算术运算符:(+-*/%++--算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)CC运算符算术运算符和算术表达式基本算术运算符:+,-,*,/,%(取余)结合方向:从左向右优先级:-*/%+-(2)(3)(4) 说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数,遵守“向零取整”的原则例:例:5%2=1-5%2=-11%10=15%1=05.5%2()例:5/2=2-5/2=-2-5/2.0=-2.5算术表达式:用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规则的式子。强制类型转换运算符一般形式:(类型名)(表达式)优先级:2级例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题精度损失问题较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--只能用于变量,不能用于常量和表达式,如5++(),(a+b)++()++--结合方向:自右向左优先级:-,++,--*,/,%+,-(2)(3)(4)j=i++;printf(“%d,%d”,j,i);例:printf(j=i++;printf(“%d,%d”,j,i);运行结果:4,3例j+++k;(j++)+k;例j+++k;(j++)+k;例-i++-(i++)(同一优先级右结合性)i=3;printf(“%d”,-i++);//-3§3.9赋值运算符和赋值表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量赋值时若变量和表达式的类型不一致将自动进行类型转换例1:inti;i=3.56;/*实际i值为3*/例2:floatf;f=23;printf(“%f\n”,f);结果为:23.000000例3:doule赋值给float时,截取其前面7位有效数字,取值范围超出时产生溢出错误。floatf;doubled=123.456789e100;f=d;/*出错*/例4:字符赋给整型时:main(){unsignedcharc,d;inta,b;无符号字符时,将原值存入整型数的低八位,高八位补零。c=’\376’无符号字符时,将原值存入整型数的低八位,高八位补零。a=c;b=d;printf(“%d,%d”,a,b);}运行结果为:254,131main(){charc;有符号字符时,将原值存入整型数的低八位,高八位符号扩展。原值最高位为零则补零,为1则补1inta;有符号字符时,将原值存入整型数的低八位,高八位符号扩展。原值最高位为零则补零,为1则补1c=’\376’a=c;printf(“%d”,a);}运行结果为:-2例5:main()int,short,long赋值给字符型变量时,只将其低八位截取赋值{inti=289;int,short,long赋值给字符型变量时,只将其低八位截取赋值charc;c=i;printf(“%d,%c”,c,c);}运行结果为:33,!例6:将int赋值给longint处理方法同例4将赋值给int时截取低16位main(){longb=65536;inta;a=b;printf(“%d”,a);}运行结果为:0例7:将unsigned赋给一个同字节数的signed型时,将原值保持不变,超范围会产生溢出错误。例:main(){unsignedinta=65535;intb;b=a;printf(“%d”,b);}运行结果为:-1例8:将signed赋给一个同字节数的unsigned型时,将原值保持不变main(){unsignedinta;intb=-1;a=b;printf(“%d”,a);}运行结果为:65535复合赋值运算符种类:+=-=*=/=%=<<=>>=&=^=|=含义:变量op=表达式变量=变量op(表达式)a+=3a+=3a=a+3x*=y+8x*=y+8x=x*(y+8)x%=3x%=3x=x%3赋值表达式一般形式:变量=表达式赋值表达式的值与变量值相等,且可嵌套,但赋值号左边必须为变量正确用法:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)错误用法:3=x-2*y;a+b=3;a=3*5=4*3例:a=12;a+=a-=a*a/*a=-264等价于a=a+(a=a-(a*a))*/例:b=3;printf(“%d”,a=b);§3.10逗号运算符和逗号表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级低于赋值表达式逗号表达式的值:等于表达式n的值例a=3*5,a*4/*a=15,表达式值60*/a=3*5,a*4,a+5/*a=15,表达式值20*/例x=(a=3,6*3)/*赋值表达式,表达式值18,x=18*/x=a=3,6*a/*逗号表达式,表达式值18,x=3*/例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);/*1,2,3*/printf(“%d,%d,%d”,(a,b,c),b,c);/*3,2,3*/课堂练习:分析下面程序的运行结果:main(){floatf1;inta;charc=’a’;f1=32.78;c=c-(int)f1;a=c%15;printf(“%d,%f,%c\n”,a,f1,c);}第一章与第三章练习题1.一个C程序的执行是从_____。A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束2.以下叙述正确的是:A)在C程序中,main函数必须位于程序的最前面B)C程序的每行中只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误3.以下叙述不正确的是。A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面4.C语言规定:在一个源程序中,main函数的位置。A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后5.一个C语言程序是由A)一个主程序和若干子程序组成B)函数组成C)若干过程组成D)若干子程序组成6.若x,i,j和k都是int型变量,则执行下面表达式后x的值为x=(i=4,j=16,k=32)A)4B)16C)327.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是:A)7B)8C8.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符A)必须为字母B)必须为下划线C)必须为字母或下划线D)可以是字母,数字和下划线中任一种字符9.若有代数式3ae/bc,则不正确的C语言表达式是:A)a/b/c*e*3B)3*a*e/b/cC)3*a*e/b*cD)a*e/c/b*310.以下不正确的叙述是A)在C程序中,逗号运算符的优先级最低B)在C程序中,APH和aph是两个不同的变量C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。11.以下正确的叙述是:A)在C程序中,每行中只能写一条语句B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数C)在C程序中,无论是整数还是实数,都能被准确无误地表示D)在C程序中,%是只能用于整数运算的运算符12.以下符合C语言语法的赋值表达式是A)d=9+e+f=d+9B)d=9+e,f=d+9C)d=9+e=e++,d+9D)d=9+e++=d+713.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'十'6'一'3';后,c2中的值为A)DB)68C)不确定的值D)C14.在C语言中,要求运算数必须是整型的运算符是。A)/B)++c)!=D)%15.若以下变量均是整型,且num=sum=7;则执行表达式sUM=num++,sUM++,++num后sum的值为A)7B)8C16.在C语言中,int、char和short种类型数据在内存中所占用的字节数A)由用户自己定义B)均为2个字节C)是任意的D)由所用机器的机器字长决定17.若有说明语句:charc='\72'则变量cA)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法,c的值不确定18.若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是A)2.500000B)2.7500OOc)3.500000D)0.000000。19.sizeof(float)是:A)一个双精度型表达式B)一个整型表达式C)一种函数调用D)一个不合法的表达式20.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为A)intB)floatC)doubleD)不确定21.在C语言中,char型数据在内存中的存储形式是:A)补码B)反码C)原码D)ASCII码22.表达式18/4*sqrt(4.0)/8值的数据类型为:A)intB)floatC)doubleD)不确定23.设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为:A)0~255B)0~32767C)0~6553524.设有说明:charw;intx;f1oaty;doublez;则表达式w*x+z一y值的数据类型为:A)floatB)charC)intD)double25.若有以下定义,则能使值为3的表达式是:intk=7,x=12;A)x%=(k%=5)B)x%=(k一k%5)C)x%=k-k%5D)(x%=k)一(k%=5)26.设以下变量均为int类型,则值不等于7的表达式是A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)C)(x=6,x+1,y=6,x+y)D)(y=6,y+l,x=y,x+1)第四章顺序程序设计§4.1C语句C语句分类程序控制语句(9种):分支if()~else~switch分支if()~else~switchfor()~while()~do~while()continuebreakgotoreturn循环循环辅助控制辅助控制表达式语句:表达式加分号构成。函数调用语句:函数名(实际参数表);赋值语句:赋值表达式加一个分号a=3;i++;其他表达式构成语句:表达式加一个分号x+y;/*合法但无意义*/空语句:;复合语句:用{…}括起来的一组语句一般形式:{[数据说明部分;]执行语句部分;}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套§4.2字符数据的输入输出字符输出函数:格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上#include<stdio.h>main(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}字符输入函数格式:getchar()/*无参函数*/功能:从输入设备得到一个字符作为函数值赋值给一个字符变量例:charc;c=getchar();putchar(getchar());printf(“%c”,getchar());§4.3格式输出printf函数printf函数一般格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%[修饰符]格式字符,用于指定输出格式格式字符:十六进制无符号整数不带符号十进制整数十进制整数格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身d,i5677ffd,i5677fff101567AABC5.677890e+02567.789000567.789%inta=567;printf(“%d”,a);x,Xinta=255;printf(“%x”,a);x,Xinta=255;printf(“%x”,a);ointa=65;printf(“%o”,a);ointa=65;printf(“%o”,a);uinta=567;printf(“%u”,a);uinta=567;printf(“%u”,a);cchara=65;printf(“%c”,a);cchara=65;printf(“%c”,a);sprintf(“%s”,sprintf(“%s”,“ABC”);e,Efloata=567.789;printf(“%e”,a);e,Efloata=567.789;printf(“%e”,a);ffloata=567.789;printf(“%f”,a);ffloata=567.789;printf(“%f”,a);g,Gg,Gfloata=567.789;printf(“%g”,a);printf(“%%”);%%printf(“%%”);%%说明 格式字符要用小写(X,E,G除外)格式字符与输出项个数应相同,按先后顺序一一对应#include<stdio.h>voidmain(){inta;a=12;printf("%d,%d",a,13);}运行结果:12,13修改:printf("%d,%d",a);运行结果:12,0修改:printf("%d",a,13);运行结果:12输出转换:格式字符与输出项类型不一致,自动按指定格式输出(某种情况下可,某种情况不能转换)附加格式说明符(修饰符)功能能功能能修饰符输出数据域宽,数据长度输出数据域宽,数据长度<m,左补空格;否则按实际输出(用于整型、浮点、字符串)m对实数,对实数,指定小数点后位数(四舍五入)对字符串,指定实际从左端截取的字符的个数.n.n-输出数据在域内左对齐(缺省右对齐)-输出数据在域内左对齐(缺省右对齐)在d,o,x,u前,指定输出精度为在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型(double型也可以直接用%f输出)ll课堂练习:分析下列程序的运行结果:例inta=1234;floatf=123.456;charch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);运行结果:1234,1234123.456000,123.456000,123.5,123.46,1.23e+02a例:无符号数据的输出#include<stdio.h>voidmain(){unsignedinta=65535; intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}运行结果为:a=-1,177777,ffff,65535b=-2,177776,fffe,65534例:字符串的输出#include<stdio.h>voidmain(){printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA","CHINA","CHINA");}运行结果:CHINA(#号代表空格)例:输出实数时的有效位数(一般7位有效数字)#include<stdio.h>voidmain(){floatx,y;x=111111.111;y=222222.222;printf("%f",x+y);}运行结果为:333333.328125例:输出双精度数时的有效位数(一般16位有效数字)#include<stdio.h>voidmain(){doublex,y;x=1111111111111.111111111;y=2222222222222.222222222;printf("%f",x+y);}运行结果为:3333333333333.333000§4.4格式输入函数scanf()scanf函数一般格式:scanf(“格式控制串”,地址表列)功能:按指定格式从键盘输入数据地址表列:由若干个地址组成的表列,可以是变量的地址,或字符串的首地址格式字符:d,i;o;x,X;u;c;s;f,e,E,g.,G附加格式说明符(修饰符)ll修饰符功能hm*用于d,o,x前,指定输入为short型整数用于d,o,x,u前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,应为正整数抑制符,指定输入项读入后不赋给变量输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车遇宽度结束遇非法输入#include<stdio.h>voidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);输入时可以空格,回车键,Tab键分隔}输入时可以空格,回车键,Tab键分隔输入数据:345运行结果:3,4,5以下输入方法均正确:①345②345③3(按Tab键)45例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);输入123123123¿输出a=123,b=83,c=291例scanf(“%4d%2d%2d”,&yy,&mm,&dd);输入19991015¿则1999Þyy,10Þmm,15Þ例scanf(“%2d%*3d%2d”,&a,&b);输入1234567¿则12Þa,67Þ例scanf(“%3d%*4d%f”,&k,&f);输入12345678765.43¿则123Þk,8765.43Þ例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);输入a=12,b=24,c=36¿例scanf(“%d%c%f”,&a,&b,&c);若输入1234a123o.26¿则1234Þa,‘a’Þb,123Þc例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%d\n”,x,ch);执行:123¿输出:x=123,ch=10charch;scanf(“%d”,&x);ch=getchar();printf(“x=%d,ch=%d\n”,x,ch);执行:123¿输出:x=123,ch=10例main(){doublef;scanf(“%lf”,f);//l不能省略printf(“%f”,f);}§4.6顺序结构程序设计举例例4.10输入三角形的三个边长,求三角形的面积分析:若假设输入的三个数可以构成一个三角形,则由三条边求三角形面积公式为:))()()()(21csbsassareacbas程序如下:#include<math.h>#include<stdio.h>main(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);输入:3,4,6输入:3,4,6输出:a=3.00,b=4.00,c=6.00s=6.50area=5.33004022acbcbxax方程的根,设例求分析:一元二次方程的根为:aaacbbx242#include<stdio.h>#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);}输入:a=1,b=3,c=2¿输出:x1=-1.00x2=-2.00第五章选择结构程序设计§5.1关系运算符和关系表达式关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:低于算术运算符,高于赋值运算符(算术-关系-赋值-逗号)<<=<<=>>===!==优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示//表达式值1//表达式值1//表达式值1//表达式值0//d=1//f=0,合法,但不要理解错含义a>b(a>b)==cb+c<ad=a>bf=a>b>c例inti=1,j=7,a;a=i+(j%4!=0);结果:a=2例‘a’>0结果为1‘A’>100结果为0例5>2>7>8在C中是允许的,值为0例注意区分“=”与“==”inta=0,b=1;if(a=b)//改为if(a==b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应避免对实数作相等或不等的判断(有些系统可以)如1.0/3.0*3.0==1.0有的系统结果为0,有的系统结果为1可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6§5.2逻辑运算符和逻辑表达式逻辑运算符和表达式逻辑运算符种类:&&(与)||(或)!(非)逻辑运算规则:&&:两个操作数同时为真,其值为真,否则为假||:两个操作数有一者为真则其值为真,全为假则为假!:若操作数为真,则其值为假,若操作数为假,则其值为真。优先级:!算术运算符关系运算符&&和||赋值逗号高低结合性:!:从右向左&&:从左向右||:从左向右说明:当逻辑运算的操作数为数值型值时,若该值为0则为假,非0则为真例a<=x&&x<=b//(a<=x)&&(x<=b)a>b&&x>y//(a>b)&&(x>y)a==b||x==y//(a==b)||(x==y)!a||a>b//(!a)||(a>b)例a=4;b=5;!a值为0a&&b值为1a||b值为1!a||b值为14&&0||2值为15>3&&2||8<4-!0//(5>3)&&2||(8<(4-(!0)))值为1‘c’&&‘d’值为1短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1§5.3if语句if语句的三种形式形式一:格式:if(expression)statement执行过程:条件表达式条件表达式语句非0=0例:if(x>y)printf(“%d”,x);形式二:格式:if(expression)statement1elsestatement2执行过程:表达式表达式语句1语句2非0=0例:if(x>y)max=x;elsemax=y;形式三:格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…...[else语句n]表达式表达式1语句1非0=0表达式2表达式3语句4语句3语句2非0非0=0=0例:if(number>500)cost=0.15;elseif(number>300)cost=0.1;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;说明:if后面的表达式类型任意,按表达式值为0还是非0区分真假,一般为逻辑或关系表达式语句可以是复合语句if(x)Ûif(x!=0)例:if(3)为真;if(‘a’)为真if(!x)Ûif(x==0)例:5.1输入两个实数,按代数值由小到大的顺序输出这两个数程序如下:#include<stdio.h>voidmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;} printf("%5.2f,%5.2f\n",a,b);}例:5.2输入3个数a,b,c,要求按由小到大的顺序输出程序如下:#include<stdio.h>voidmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);}if语句嵌套:一般形式:(else总是与离它最近的if配对)if(expr1)if(expr2)statement1内嵌ifelsestatement2if(expr1)if(expr1){if(expr2)statement1}elsestatement2内嵌ifif(expr1)statement1elseif(expr3)statement3内嵌ifelsestatement4if(expr1)if(expr2)statement1内嵌ifelsestatement2elseif(expr3)statement3内嵌ifelsestatement4例:5.3有一函数-1(x<0)编一程序,输入一个x值,输出y值y=0(x=0)1(x>0)程序如下:#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);if(x<0)y=-1; elseif(x==0)y=0; elsey=1; printf("x=%d,y=%d\n",x,y);}§5.3.3条件运算符条件运算符一般形式:表达式1?表达式2:表达式3表达式1表达表表达式1表达表达值为表达式2值为表达式3非0=0功能:相当于条件语句,但不能取代一般if语句优先级:13(低于逻辑运算符,高于赋值运算符)结合方向:自右向左如a>b?a:c>d?c:dÛa>b?a:(c>d?c:d)表达式类型的说明表达式1与表达式2和表达式3类型可不同表达式2和表达式3还可以是赋值表达式或函数调用表达式如:a<b?(a=100):(b=100)a>b?printf(“%d”,a):printf(“%d”,b)当表达式2与表达式3类型不同时,值取较高的类型例x?‘a’:‘b’//x=0,表达式值为‘b’;x≠0,表达式值为‘a’x>y?1:1.5//x>y,值为1.0;x<y,值为1.5例5.4输入一个字符,判断它是否大定字母,如果是,将它转换成小写字母,如果不是,不转换,然后输出最后得到的字母。程序如下:#include<stdio.h>voidmain(){charch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c\n",ch); }§5.4switch语句一般形式:switch(表达式){case常量表达式1:语句组1;[break;]case常量表达式2:语句组2;[break;]…….case常量表达式n:语句组n;[break;][default:语句组n+1;]}switchswitch表达式语句组1语句组2语句组n语句组n+1…...常量表达式1常量表达式2常量表达式ndefaultcase(等于)说明:常量表达式的值必须互不相同case后可包含多个可执行语句,且不必加{}执行完一个case后的语句组后,续继执行下一个case后的语句组直到结束。若只想执行一个必须用break跳出,多个case可共用一个语句组。如:switch(grade){case’A’:printf(“85-100\n”);break;case’B’:printf(“70-84\n”);break;case’C’:printf(“60-69\n”);break;case’D’:printf(“<60\n”);break;default:printf(“error\n”);}如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..各个case和default的顺序不影响执行结果(有break的情况下)§5.5程序举例例:5.5写程序,判断某一年是否为闰年Year被4整除真假Year被100整除真假Year被400整除真假Leap=1leap=0leap=1leap=0leap真假输出“闰年”输出“非闰年”程序如下:#include<stdio.h>voidmain(){intyear,leap;scanf("%d",&year);if(year%4==0) {if(year%100==0) {if(year%400==0) leap=1; elseleap=0;} else leap=1;}else leap=0;if(leap) printf("%dis",year);else printf("%disnot",year);printf("aleapyear.\n");}程序2:#include<stdio.h>voidmain(){intyear,leap;scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap) printf("%dis",year);else printf("%disnot",year);printf("aleapyear.\n");}例5.7运输公司对用户计算运费,路程(skm)越远,每吨·千米运费越低。标准如下:S<250没有折扣250<=s<5002%折扣500<=s<10005%折扣1000<=s<20008%折扣2000<=s<300010%折扣3000<=s15%折扣设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为:f=p*w*s*(1-d)程序如下:#include<stdio.h>voidmain(){ intc,s; floatp,w,d,f; scanf("%f,%f,%d",&p,&w,&s); if(s>=3000)c=12; elsec=s/250; switch(c) { case0:d=0;break; case1:d=2;break; case2: case3:d=5;break; case4: case5: case6: case7:d=8;break; case8: case9: case10: case11:d=10;break; case12:d=15;break;} f=p*w*s*(1-d/100.0); printf("freight=%15.4f\n",f); }第四、五章复习题27.putchar函数可以向终端输出一个:A)整型变量表达式值B)实型变量值C)字符串D)字符或字符型变量值28.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按:A)从左起输出该字串,右补空格B)按原字符长从左向右全部输出C)右对齐输出该字串,左补空格D)输出错误信息29.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度小于5,则输出按方式。A)从左起输出该字串,右补空格B)按原字符长从左向右全部输出C)右对齐输出该字串,左补空格
D)输出错误信息30.若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是:A)scanf("%d%lx,%le",&x,&y,&z);B)scanf("%2d*%d%lf"&x,&y,&z);C)scanf("%x%*d%o",&x,&y);D)scanf("%x%o%6.2f",&x,&y,&z);31.已有如下定义和输入语句,若要求a1,a2,c1,c2值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是inta1,a2;charc1,c2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);A)10A20B<CR>B)10A20B<CR>C)10A20<CR>D)10A20B<cR>。32.已有定义intx;f1oaty;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345678(回车),则x的值为A)12345B)123C33.已有定义intx;f1oaty;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345678(回车),则y的值为:A)无定值B)45.0000C34.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是:inta1,a2;charc1,c2;scanf("%d%d",&a1,&a2);scanf("%c%c",&c1,&c2);A)1020AB<CR>B)1020<CR>AB<CR>C)1020AB<CR>D)1020AB<CR>35.已有程序段和输入数据的形式如下,程序中输入语句的正确形式应当为main(){inta;floatf;printf("\nInputnumber:");输入语句printf("\nf=%f,a=%d\n,f,a);}Inputnumber:4.52<CR>A)scanf("%d,%f",&a,&f);B)scanf("%f,%d",&f,&a)C)scanf("%d%f",&a,&f);D)scanf("%f%d",&f,&a);36.根据定义和数据的输入方式,输入语句的正确形式为:已有定义:floatfl,f2;数据的输入方式:4.523.5A)scanf("%f,%f",&f1,&f2);B)scanf("%f%f",&f1,&f2);C)scanf("%3.2f%2.1f",&f1,&f);D)scanf("%3.2f%2.1f",&f1,&f2);37.阅读以下程序,当输入数据的形式为25,13,10<CR>正确的输出结果为:main(){intx,y,z;scanf("%d%d%d",&x,&y,&z);printf("x+y+z=%d\n”,x+y+z);。}A)x+y+z=48B)x+y+z=35C)x+z=35D)不确定值38.阅读以下程序,若运行结果为如下形式,输入输出语句的正确内容是:main(){intx;floaty;printf("enterx,y:")输入语句;输出语句;}输入形式enterx,y:23.4输出形式x+y=5.40A)scanf("%d,%f",&x,&y);printf("\nx+y=%4.2f",x+y);B)scanf("%d%f",&x,&y);printf("\nx+y=%4.2f",x+y);C)scanf("%d%f",&x,&y);printf("\nx+y=%6.lf",x+y);D)scanf("%d%3.1f",&x,&y);printf("\nx十y=%4.2f",x+y);39以下说法正确的是:A)输入项可以为一实型常量,如scanf("%f",3.5);B)只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f);D)当输入数据时,必须指明变量的地址,如scanf("%f",&f);40.根据下面的程序及数据的输入方式和输出形式,程序中输入语句的正确形式应该为:main(){charch1,ch2,ch3;输入语句printf("%c%c%c",ch1,ch2,ch3);}输入形式:ABC输出形式:ABA)scanf("%c%c%c",&ch1,&ch2,&ch3);
B)scanf("%c,%c,%c",&ch1,&ch2,&ch3);C)scanf("%c%c%c",&ch1,&ch2,&ch3);D)scanf("%c%c",&ch1,&ch2,&ch3);41.有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是A)132(回车)B)1,3,2(回车)C)a=1b=3c=2(回车)D)a=1,b=3,c=2(回车)42.以下能正确地定义整型变量a,b和c并为其赋初值5的语句是A)inta=5,b=5,c=5;B)inta,b,c=5;C)a=5,b=5,c=5;D)a=b=c=5;43.已知ch是字符型变量,下面不正确的赋值语句是A)ch='a+b';B)ch='\0';C)ch='7'+'9';D)ch=5+9;44.若有以下定义,则正确的赋值语句是:
inta,b;floatx;A)a=1,b=2,B)b++;C)a=b=5D)b=int(x);45.设x、y均为f1oat型变量,则以下不合法的赋值语句是A)++x;B)y=(x%2)/10;C)x*=y+8;D)x=y=0;46.x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后,x、y和z的值是:A)x=10B)x=10C)x=10D)x=10y=15y=10y=10y=5z=10z=10z=15z=1047.逻辑运算符两侧运算对象的数据类型。A)只能是0或1B)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据48.以下关于运算符优先顺序的描述中正确的是:A)关系运算符<算术运算符<赋值运算符<逻辑与运算符B)逻辑运算符<关系运算符<算术运算符<赋值运算符C)赋值运算符<逻辑与运算符<关系运算符<算术运算符D)算术运算符<关系运算符<赋值运算符<逻辑与运算符49.下列运算符中优先级最高的是:A)<B)十C50.能正确表示"当x的取值在[1,10]和[200,210]范围内为真,否则为假"的表达式是一一一。A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)B)(x>=1)||(x<=10)||(x>=200)||(x<=210)c)(x>=1)&&(x<=10)||(x>=200)&&(x<=210)D)(x>=1)||(x<=10)&&(x>=200)||(x<=210)51.判断char型变量ch是否为大写字母的正确表达式是一一一。A)'A'<=ch<='z'B)(ch>='A')&(ch<='z')C)(ch>='A')&&(ch<='Z')D)('A'<=ch)AND('z'>=ch)52.设x,y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是A)'y'&&'y'B)x<=yC)x||y+z&&y-zD)!((x<y)&&!z||1)53.已知x=43,ch='A',y=0则表达式(x>=y&&ch<'B'&&!Y)的值是A)0B)语法错C)1D)"假"54.若希望当A的值为奇数时,表达式的值为"真",A的值为偶数表达式的值为"假"。则以下不能满足要求的表达式是:A)A%2==1B)!(A%2==0)C)!(A%2)D)A%255.设有inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为:A)1B)2C56.判断char型变量c1是否为小写字母正确表达式为:A)'a'<=cl<='z'B)(cl>=a)&&(cl<=z)C)('a'>=cl)||('z'<=cl)D)(c1>='a')&&(cl<='z')57.以下程序的运行结果是:#include"stdio.h"main(){inta,b,d=241;a=d/100%9b=(-1)&&(-1);printf("%d,%d",a,b);}A)6,1B)2,1C58.执行以下语句后a的值为:inta,b,c;a=b=c=1;++a||++b&&++cA)错误B)0C)259.执行以下语句后b的值为:inta=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);A)6B)0C)1D)460.以下不正确的if语句形式是:A)if(x>y&&x!=y);B)if(x==y)x+=y;C)if(x!=y)scanf("%d",&x)elsescanf("%d",&y);D)if(X<Y){X++;Y++;}61.下列运算符中优先级最低的是:A)?:B)&&c)+D)!=62.以下if语句语法正确的是:A)if(x>0)printf("%f",x)elseprintf("%f",--x);B)if(x>0){x=x+y;printf("%f",x);}elseprintf("%f",-x);C)if(x>0){x=x+y;prinrf("%f",x);};elseprintf("%f",-x);D)if(x>0){x=x+y;printf("%f",x)}elseprintf("%f",-x);63.请阅读以下程序:main(){inta=5,b=0,c=0;if(a=b+c)printf("***\n");elseprintf("$$$\n");以上程序:A)有语法错不能通过编译B)可以通过编译但不能通过连接C)输出***D)输出$$$64.以下程序的运行结果是:main(){intm=5;if(m++>5)printf("%d\n",m);e1seprintf("%d\n",m--);}A)4B)5C)665.当a=1,b=3,c=5,d=4,执行完下面一段程序后x的值是:if(a<b)if(c<d)x=1;else
if(a<c) if(b<d)x=2; elsex=3; elsex=6;elsex=7;A)18B)2C66.以下程序的输出结果是:main(){inta=100,x=10,y=20,okl=5,ok2=0;if(x<y)if(y!=10)if(!okl)a=1;else
if(ok2)a=10;a=-1:printf("%d\n",a)}A)1B)0C)-167.以下程序的输出结果是:main(){intx=2,y=-1,z=2;if(x<y)
if(y<0)z=0;elsez+=1;prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度城市供水供电供气合同3篇
- 2024年度房屋买卖合同:购房人与开发商就房屋买卖所签订的合同3篇
- 2024年企业贷款合同模板一
- 2024全新运输快递合同下载
- 2024年新能源汽车电池技术转让合同
- 2024年国际物流运输服务协议版
- 石家庄医学院新校区建设合同三篇
- 2024企业融资合同
- 2024专业猎头服务招聘合作合同版
- 2024年度人工智能语音助手技术开发与授权合同3篇
- 2023年江苏宿迁市中考英语试卷试题及答案详解(精校版)
- 英国留学文书申请范文(6篇)
- 临沂球迷协会筹备申请书
- 部编版六年级道德与法治上册第5课《国家机构有哪些》优秀课件
- 公司设计师合作合同
- 卫生管理统计及软件应用-贺佳-课后习题答案
- 铁路工程定额电子版(Excel版)
- 全过程工程咨询服务大纲
- q gw2sjss.65金风风力发电机组防腐技术rna部分归档版
- 高中英语新课标新增词汇汇总1
- GB/T 20197-2006降解塑料的定义、分类、标志和降解性能要求
评论
0/150
提交评论