下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言复习小结第三章数据类型、运算符和表达式常量包括直接常量(或称字面常量)和符号常量。直接常量有整型常量,实型常量,字符常量与字符串常量。整型常量有以下三种数制形式表示:十进制:如123; -60; 0ハ进制:以。开始,如0123表示(123)8十六进制:以Ox开始,如0x123表示(123)露实型常量有以下两种形式表示:小数形式:由数字、数符和小数点组成。注意必须有小数点。如123.0 .123 0.0 12.5指数形式:数字部分e指数部分。字母E/e前必须有数字,字母E/e后必须为整数(1-3位)。如123e2 123E2字符常量是用单撇号括起来的一个字符。例如:字符常量的值实际上是ー个数字值。存储的实际值为ASCII值。所以字符常量可以象整数ー样参与运算。(注意:转义字符)字符串常量是用ー对双引号括起来的字符序列。如:“CHINA”,“a”,“X+Y”。字符串常量在内存中的存放:每一个字符均以其ASCI!码存放,且最后添加一个“、0”作为字符串的结束标志。(注:在表达ー个字符串时要时刻记着尾部有个へ〇,字符结束整个字符串。)变量是指在程序运行过程中其值可以改变的量。系统为程序中的每一个变量开辟ー个存储单元。变量有两个要素:1)变量名:每个变量都必须有一个名字,即变量名。变量名由字母、数字和下划线组成,且第一个字符必须是字母或下划线。如果是字母通常使用小写字母,不使用大写字母。如:name,no,x,_k,i,j,stu_name等。变量名中不能含有运算符、括号等C中关键字。命名遵循顾名思义原则,且不宜过长。C区分大小写字母。2)变量值:每个变量都有特定的值,且可以改变。在程序中,通过变量名来引用变量的值。变量的定义所有的变量必须在赋值使用之前定义。定义变量的一般形式是:typevariable-list; (变量定义语句)注:type为C语言中有效类型;variable-list为变量列表,多个变量之间用,隔开。
如:inti,j,k;floata;整型变量数据类型所占位数取值范围int16-32768-32767short16-32768-32767long32-21イ乙一21イムunsignedint160-65535unsignedshort160-65535unsignedlong32〇〜42亿实型变量分类所占位数取值范围float单精度32-3.4*10-38-3.いすdouble双精度 64-1.7*10-308-1.7*1O308longdouble长双精度128-1.2*10-W2-1.2*10,划字符变量1、变量的定义charcl,c2; /・指定cl,c2为字符型变量・/2、字符型数据的存储ー个字符变量在内存中占ー个字节,并以ASCI!码存储,存储形式与整型ー样,可以和整数进行运算。3、字符数据与整型数据可互相赋值C语言中的关键字:(32个)类型说明符:chardoublefloatintlongshortsignedunsignedstruct(结构体)union(共同体)结构化语句中用:ifelseswitchcasebreakdefaultdowhileforcontinuegoto存储类别用:autostaticexternregister函数定义用:voidreturn其他:constsizeoftypedefenumvolatileC运算符C语言中有以下几类运算符:1)算术运算:+,-,/,*,%(模运算)2)关系运算:く,>,==,>=,<=,!=3)逻辑运算:!,&&,||4)位运算:くく,»,一,I,A,&基本算术运算符+(加法运算或正号运算符)-(减法运算或负号运算符)*(乘法运算符)/(除法运算符)%(求余运算符,或称模运算符)运算符的优先级和结合性一(负号)-*/%一+~注:(1)两个整数相除结果为整数,多数机器采用“向零取整”方法。如:5/3=1;-5/3=-1(2)参与+,へ/运算的两个数中有一个为实数,则结果为double型。如:6/2.0的结果为3.0(3)模%运算符(或称求余运算符)两侧的运算量均为整型量。如:55%12(4)三角函数的自变量使用弧度。如sin50。应写成sin(50*3.1415926/180)例:3x2+4xysin560-1x-yIe2'3的表达式为:3*x*x+4*x*y*sin(56*3.14/180)-fabs(x-y)*exp(2.3)在求表达式的值时,要按照优先级的高低依次计算如果运算符两侧优先级相同,则按规定的结合方向(从左到右)进行。自增、自减运算符++i,—i 在使用1前,使i的值加(减)1i++,i—在使用1后,使i的值加(减)1注意:)++,ー运算符只适用于对整型变量操作,而不能作用于常量或表达式,如5++或(a+b)一是错误的。)++,一的结合方向是自右到左。如j=3;printf(w%dw,-j++);则输出ー3,后使j值增为40思考:1、(i++)+(i++)+(i++)结果?2、(++i)+(++i)+(++i)结果?3、1+++>)是6++)+>)还是1+(++力?4、printf( ,i,i++)结果赋值运算符简单的赋值就是把ー个表达式的值赋给ー个变量。复合的赋值运算符在赋值符“ノ之前加上其它运算符,可以构成复合的运算符 く变量〉运算符=く表达式)等价于く变量〉=く变量〉运算符く表达式〉如:m+=n*3等价于m=m+(n*3)赋值表达式对赋值表达式求解的过程是:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值表达式的值就是被赋值的变量的值。设a的值为6,计算a+=a-=a*a先进行a*a的计算,结果为36再进行a-=36的计算,相当于a=a-36=-30最后进行a+=-30的计算,相当于a=a-30=-60问:j=k+=32*k合法吗?什么结果printf(“%d”,i=20);又是如何呢?★赋值时进行的类型转换将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(32位)中。将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以64位存储。字符型数据赋给整型变量时:若系统将字符处理为无符号的量,则将字符的8位放到整型变量的低8位,高8位补〇。若系统将字符处理为带符号的量,如果字符最高位为0,则整型变量高8位补0;如果字符最高位为1,则整型变量高8位补1。将一个int、short、long型数据赋给ー个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。将带符号的整型数据赋给long型变量时,要进行符号扩展,将整型数的16位送到long型变量的低16位中,如果int型数据为正值,则long型变量的高16位补〇;如果int型数据为负值,则long型变量的高16位补1。以保持数值不变。若将一个long型数据赋给ー个int型变量,只将!ong型数据中的低16位原封不动地送到整型变量中(即截断)。将unsignedint型数据赋给!ongint型变量时,不存在符号扩展问题,只需将高位补。。将unsigned类型数据赋给ー个占字节数相同的整型变量时,是将unsigned型变量的内容照原样送到非unsigned型变量中,但如果数据范围超过相应的整型范围,则会出现数据错误。将非unsignedint型数据赋给长度相同的unsigned型变量时,也是原样照赋(连原有的符号位也作为数值ー起传送)。逗号是ー种运算符形式如下: 表达式1,表达式2由逗号隔开的ー对表达式从左向右进行计算,其求解过程为:先求解表达式1,再求表达式2,整个逗号表达式的值是表达式2的值。逗号运算符是所有运算符中级别最低的。注:ー个逗号表达式又可以与另ー个表达式组成一个新的逗号表达式,例如:(a=4*6,a+5),a+6 整个表达式的值为30。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。(转换规则见书)C语言提供ー种“强制类型转换”运算符,将一个类型的变量强制转换为另ー种类型。一般形式为:(类型标识符)(表达式)若x原为实型变量且值为2.6,在执行i=(int)x后得到ー个整数2,并把它赋给整型变量i,但x仍为实型,值为2.6。C运算符的优先顺序:(从上到下依次为由高至リ低,同一级的按各自的结合方向)(从左到右)1.()、[]、f(从左到右)!、++、一ー、ー、・、!、++、一ー、ー、・、也、sizeof、(类型)・、ハ%+、ーく、>、く=、>===、!=&&II?:(条件运算符)=、+=、一=、*=、/=、(单目、从右到左)
(从左到右)(从左到右)(从左到右)(从左到右)(从左到右)(从左到右)(从右到左)%= (从右到左)11.,(逗号运算符) (从左到右)复习作业题:.请编写程序,输入两个整数n和m,计算以下表达式的值:sum=n+mdiff=n-mprod=n*mquot=n/m并上机时调试完成。main(){intm,n,sum,diff,prod;floatquot;scanf("%d,%d",&n,&m);
sum=n+m;diff=n-m;prod=n*m;if(m==O)printf(udataerror**);elsequot=1.0*n/m;printf(**%5d,%5d,%5d,%5f\n",sum,diff,prod,quot);).请编写程序,输入x,计算以下表达式的结果。funl(x)=———+―--main(){floatx,y;printf(**x=*');scanf(**%f,,&x);y=2*x/(x+1.21)+2/(x-1.54);printf(**funl(x)=%f\n,*,y);).请编写程序,输入x,计算以下表达式的结果。y=sin(x)ey=sin(x)e2+1main(){floatx;doubley;printf(Mx=u);scanf(,,%r,,&x);y=x*x/sin(x)+2*x/(exp(2)+l);printf(,'y=%10f\n,,,y);).请编写程序,输入两个自然数,求它们的商和余数。main(){intx,y,a,b;scanf(H%d,%dn,&x,&y);a=x/y;b=x%y;printf(n%5d,%5d\nn,a,b);).请编写程序,输入一个自然数,判断该数是否能够被3和7同时整除。main(){intx;scanf(n%dH,&x);if((x%3==0)&&(x%7==0))printf(H%5dcanbedevideby3and7\nn,x);elseprintf(n%5dcannotbedevideby3and7\nn,x);}第四章顺序程序设计字符输出函数格式:putchar(c)功能:将c值所对应的字符输出到标准输出设备上(一般为显示器)。C可以是整型或字符型。一次只能输出ー个的先也可以输出控制符,如putchar(ハガ)输出ー个换行符,即光标移到下一行。putchar()函数也可以输出转义字符,如:putchar('\10『)即输出字符ク.字符输入函数格式:getchar(ノ»getch0或getche0一功能:从标准设备(一般是键盘)输入ー个字符。字符输入函数浸域"参数,函数值就是从设备输入的字符。三个函数有一些差别:getchar0函数在由键盘键入一个字符后,必须按回车键,而getch()和getche0函数不需要。getche()函数和getchar()会显示出所输入的字符,而getch0函数不响应输入的字符。格式输出函数格式:printf(格式控制,输出表列)功能:printf函数可以将任意类型的多个数据输出到标准输出设备上(一般为显示器)。1.d格式字符 有以下几种格式字符:(1)%d按整型数据的实际长度输出。(2)%mdm为要指定输出字段宽度,若m小于实际长度,则按实际长度输出。%ld输出长整型数据(字母)。格式符 以8进制形式输出整数x格式符 以16进制形式输出整数u格式符用来输出unsigned型数据,即无符号数,以10进制输出。int型可用%u输出,而unsigned型,也可用%d输出。c格式符用来输出ー个字符s格式符用来输出ー个字符串,有几种用法:(1)%s如printf(“%s”,“CHINA”);输出结果CHINA(注意:不包括双引号)(2)%msmく串长,突破;否则按右对齐,左补空格。(3)%-ms山く串长,突破;否则按左对齐,右补空格。(4)%m.ns输出占m个字符,取自左起n个字符,且向右对齐,左补空格。(5)%-m.ns m,n含义同上,不过是左对齐,右补空格。f格式符用来输出实数,以小数形式输出,有以下几种(1)%f 系统指定输出整数部分,小数部分输出6位;单精度实数有效位数一般为7位。双精度数也可用%f格式输出,有效位数一般为16位。(2)%m.nf指定输出占m个字符,小数位占n位,右对齐。(3)%-m.nf指定输出占m个字符,小数位占n位,左对齐。e格式符%e不指定输出数据所占的宽度和数字部分小数的位数,由系统自动指定给出5位小数,指数部分占4位(如e+02),其中,e占1位,指数符号占1位,指数占2位。数值按规范化指数形式输出(即小数点前必须有且只有1位非零数字)。(2)ne和%-m.neg格式符根据数值输出自动选f格式或e格式(选输出时所占字符长度少的ー种)。注意:在使用printf函数时,有以下几点要说明:(1)除X,E,Gタト其他格式字符必须用小写,如不能把%d写成%DO(2)可在格式控制串中用‘转义字符'\n,\b,\377等。(3)连续用两个%,可输出%字符,如: printf( ,1.0/3);输出结果为: 0.333333%格式输入函数-格式:scanf(格式控制,地址表列)-功能:scanf函数可以从标准输入设备输入任意类型的多个数据(一般为显示器)。ー注意:输入数不能规定精度。当输入一串数据时,系统如何区分每个数据:(1)根据格式字符的含义分隔字符(2)系统按格式串指定的长度截取所需的数据⑶用隐含的分隔符:在输入数据中用空格或换行符分隔数据。(4)用%后的“ノ附加说明符来表示跳过它相应的数据(5)使用显示分隔符:在格式说明符中若还可以有其它字符,在输入字符时应输入与这些字符相同的字符。(6)用“肥”格式输入字符时,空格字符和转义字符都作为有效字符输入。注意:(1)输入时不能规定精度如scanf(w%6.If",&a)是不合法的。(2)格式控制之后是地址表列而不是变量表列scanf(券d,%d”,&a,&b);是正确的,而scanf("%d,%*d,%d”,a,b);是错误的。复习作业题:.请编写程序设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果时保留小数点后两位。main()floatpi,r,h,l,s,sq,vq,vz;pi=3.1415926;printf("pleaseinputtherandh:\nn);scanf("%f,%f",&r,&h);l=2*pi*r;s=pi*r*r;sq=4*pi*r*r;vq=4*pi*r*r*r/3.0;vz=pi*r*r*h;printf(nyuanzhouchangis:l=%6.2f\nu,l);printf(Hyuanmianjiis:s=%6.2f\n",s);printf(nyuanqiubiaomianjiis:sq=%6.2f\nu,sq);printf("yuanqiutijiis: vq=%6.2f\n",vq);printf("yuanzhutijiis:vz=%6.2f\n",vz);).请编写程序输入一个华氏温度,要求输出摄氏温度。(保留小数点后两位)。计算公式如下:c=評ー32)main()(floatc,f;printf(npleaseinputahuashiwendu:\nn);scanf(H%fn,&f);c=(5.0/9.0)*(f-32);printf(Hsheshiwenduis:%5.2f\nH,c);).用下面的scanf函数输入数据,问在键盘上应如何输入オ能使a=10,b=20,cl='A',c2='a',x=1.5,y=-3.75,z=67.8scanf(n%5d%5d%c%c%f%f%*f,%fn,&a,&b,&cl,&c2,&x,&y,&z);第五章 选择结构程序设计关系表达式用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式或赋值表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以。代表“假”。若a=5,b=3,c=l,则, a>b>c的计算过程是:先计算a>b,结果为真,值为1
再计算l>c,结果为假,值为〇, f=b>c!=a的计算过程是:先计算b>c,结果为真,值为1再计算1!=a结果为真,值为1最后将1赋值给f逻辑运算符! (逻辑非)&& (逻辑与)II (逻辑或)&&和!I是双元运算符它要求有两个关系表达式做为操作数,如:(a>b)11(x>y)就是ー个逻辑表达式。!是一元运算符只要求有一个关系表达式做为操作数,如:!(a>b)就是ー个逻辑表达式。请思考: 5>3&&2118<4-!0的值。逻辑表达式逻辑表达式的值是ー个逻辑量“真”或“假”。C语言编译系统在给出逻辑结果时,以数值1代表“真”,以。代表“假”;但是在判断ー个量是否为“真”时,以非。代表“真”,以。代表“假”。例如:若x=l。,则!x的值为。。若a=3,b=2,则a&&b的值为1.5&&0I|8的值为1.逻辑运算符特点在逻辑表达式的求解中并不是所有的运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,ォ执行下ー个运算符。当a=5,b=3,c=2,d=l,x=l,y=1则表达式(x=aくb)&&(y=cくd)首先计算“aCb”,结果为0,则x=0,因此,整个表达式的值为0.而“y=cくd”将不被执行,所以y的值仍为1而不是0,条件运算符 ?:条件表达式的形式为:表达式1?表达式2:表达式3先计算表达式1,若其值为非零,则结果为表达式2的值,否则就是表达式3的值。结合性:从右到左例如:设a=2,b=3,c=4J则:计算m=a>b?a:b>c?b:c先计算b>c?b:c,结果为4再计算m=a>b?a:4,结果为4则m的值为4,整个表达式的值也为4.if语句的三种形式:if形式:if(表达式)语句;例如:if(x>y)printf("%d",x);if-else形式:if(表达式)语句1;else语句2;例如:if(x>y)printf("%d”,x);elseprintf(M%dw,y);else-if形式if(表达式1)语句1;elseif(表达式2)语句2;else语句n;例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;if语句中的书写问题:(l)if语句中,在if后面都有“表达式”,一般为逻辑表达式或关系表达式。执行if语句时先对表达式求解,若表达式的值为0,按“假”处理,为非0,按“真”处理。(2)在每一个else前面要有一个分号(;),整个语句结束处也要有一个分号(;)。(3)在if和else后面只能含有一个内嵌的操作语句,如果有多个语句,要用花括号“0”将几个语句括起来成为ー个复合语句。嵌套的if语句-在ー个if语句中又包含了另ー个if语句,称为if语句的嵌套。C语言规定,else总是和它上面离它最近的if配对。因此,最好使内嵌的if语句也包含else部分,如果遇到if和else的数目不匹配,可以通过加花括弧来确定配对关系。例如:if(){if()语句1}else语句2switch语句的基本格式:switch(表达式){case常量表达式1: 语句!;[break;]case常量表达式2: 语句2;[break;]case常量表达式n: 语句n;[break;]default:语句n+1;)注意:・当表达式的值与某ー个case后面的常量表达式的值相等时,就执行该case后面的语句,都不相等时,就执行default后语句。每个case的常量表达式的值必须互不相同。各个case的出现次序不影响执行结果。用break语句可以跳出switch结构。多个case语句可以共用ー组执行语句。复习作业题:.请编写程序,实现从键盘上输入3个整数a,b,c,并输出其中最大的数。方法一:main(){inta,b,c;printf(Hpleaseinputthreeintegers:\n");scanf("%d,%d,%dH,&a,&b,&c);if(a<b)if(b<c)printf(nmax=%d\n1*,c);elseprintf(',max=%d\n,*,b);elseif(a<c)printf(*,max=%d\n*,,c);elseprintf("max=%d\n",a);)方法二:main()(inta,b,c,temp,max;printf(Hpleaseinputthreeintegers:\nu);scanf("%d,%d,%dH,&a,&b,&c);temp=(a>b)?a:b;max=(temp>c)?temp:c;print*“max二%d\n”,max);).请编写程序,实现从键盘上输入4个整数,并按从小到大的顺序输出。main()(intt,a,b,c,d;printf("pleaseinputfourintegers:\n");scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf(Htheorderis:\nn);printf(M%d%d%d%d”,a,b,c,d);).请编写程序,根据函数:, x (x<l)y=v2x-l (1くxV10)ゝ3x-ll (x210) 输入x值,输出y值。main()(intx,y;printf(Hinputx:n);scanf(M%dn,&x);if(x<l){y=x;printf(Mx=%3d,y=x=%d\nn,x,y);)elseif(x<10){y=2*x-l;printf(Hx=%3d,y=2*x-l=%d\nH,x,y);)else{y=3*x-ll;printf(nx=%3d,y=3*x-ll=%d\nn,x,y);)).请编写程序,实现对给出的ー百分制成绩,输出相应的成绩等级。即:90分以上为,A"8〇〜89分为,B,,7〇〜79分为,C,60〜69分为HT,60分以下为,EL方法一:#include"stdio.h"main(){ints;scanf("%d”,&s);if(s>=90)printf(WAW);elseif(s>=80)printf(rtBw);elseif(s>=70)printf();elseif(s>=60)printf();elseprint©“E”);)方法二:main()(floatscore;chargrade;printf(npleaseinputthegradeofstudent:**);scanf(**%f**,&score);while(score>100llscore<0){printf(**\ntheinputiserror,pleaseonceagain.**);scanf(**%f**,&score);)switch((int)(score/l0)){case10:case9:grade=*A*;break;case8:grade=*B*;break;case7:grade=*C*;break;case6:grade=*D*;break;case5:case4:case3:case2:case1:case〇:grade二'E';)printf("scoreis:%5.1f,thegradeis:%c\n",score,grade);).编写程序,输入一个字符,判别它是否是大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include“stdio.h"main()(charch;scanf(“%c'',&ch);ch=(ch>=tA,&&ch<=<Z,)?(ch+32):ch;printf(“%c'',ch);}.输入两个运算量和一个运算符,完成加、减、乘、除运算,输出运算结果。#include''stdio.h''main(){intx,y,z;charch;printf(nEnteranoperator(+,-,*/):\n**);ch=getchar();printf(HEntertwonumbers:**);scanf(**%d,%d**,&x,&y);switch(ch){case*+*:z=x+y;printf(**x+y=%d**,z);break;case*-*:z=x-y;printf(**x-y=%d**,z);break;case***:z=x*y;printf(**x*y=%d**,z);break;case7,:if(y==0)printf(**divisionbyzero\n**);else{z=x/y;printf(**x/y=%d**,z);break;}default:printf(**Theerroroperator**);)).编写程序,判断某一年是否是闰年。方法一:#include“stdio.h"main(){intyear,leap;scanf(w%dw,&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=l;elseleap=O;}elseleap=l;}elseleap=O;if(leap)printf("%dis”,year);elseprintf(w%disnotw,year);print*“aleapyearAn”);)方法二:#include“stdio.h''main(){intyear,leap;scanf("%d”,&year);if((year%4==0&&year%100!=0)ll(year%400==0))leap=l;elseleap=O;if(leap)printf("%dis”,year);elseprintf("%disnoビ,year);print*“aleapyear.Vi”);}第六章循环结构程序设计while语句格式:while(表达式)语句;功能:while语句用来实现“当型”循环执行过程:首先判断表达式,当表达式的值为非〇时,反复执行while中的语句。注意事项:1)当条件满足时,执行一次。,执行到}则返回while语句开始下一次。2)如果第一次条件就不满足,循环则一次都不作,直接结束。执行}后的语句。3)循环体中应有使循环趋向结束的语句。4)一些变量的赋值操作要在while的前面要完成。5)循环体如果包含ー个以上的语句,应用花括弧括起来。dowhile语句格式:do语句while(表达式);功能:do-while语句用来实现“直到型”循环执行过程:先无条件执行ー次语句,然后再判断表达式,当表达式的值为非〇时,返回,再执行该语句。一般,while结构和do-while结构实现时可以相互转换。for语句格式:for(表达式1;表达式2;表达式3)语句执行过程:首先计算表达式1的值,给循环变量赋初值,然后测试表达式2的值,若其值非0,则执行循环体语句,执行循环体一次后再计算表达式3的值,自动修改循环变量的值,返回再测试表达式2的值,直到表达式2的值为0(假)退出循环。三个表达式都可以省略。说明:(1)for语句一般形式中的“表达式1”可以省略,不过若省略了,其后的分号不能省略,且应在for语句之前给循环变量赋初值。(2)如果表达式2省略(其后分号不能省),即不判断循环条件,循环无终止地执行下去。例如:for(i=l;;i++)sum=sum+i;就相当于i=l;while(1){sum=sum+i;i++;)(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。例如:for(i=l;i<=100;){sum=sum+i;i++;}(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。例如:for(;i<100;){sum=sum+i;i++;}就相当于while(i<100){sum=sum+i;i++;)循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。三种循环结构可以相互嵌套。break语句:break语句用于循环语句和switch语句,作用是跳出循环和switch语句,提前结束循环。continue语句:continue语句类似于break语句,但不是退出循环,而是跳过本次循环体下面未执行的语句,接着执行下一次循环的迭代。复习作业题:1.请分别用WhileヽDo•••whileヽFor三种循环结构格式语句编程计算1+2+3+...+19+20。用While格式语句:main(){inti=l;longsum=0;while(i<=20)sum=sum+i;i++;)printf(H%ldn,sum);)用Do While格式语句:main(){inti=l;longsum=();dosum=sum+i;i++;}while(i<=20);printf(**%Id**,sum);)用For格式语句:main(){inti;longsum=0;for(i=l;i<=20;i++)sum=sum+i;printf(n%ld",sum);}.请编写程序计算20!=l*2*3…*19*20。main(){inti=l;longfac=l;while(i<=20)(fac*=i;i++;}printf("%ld",fac);.请用多种解法编写程序计算1-1/2+1/3+...+l/9-l/10o解法一:main(){inti=l;floatsum=O;while(i<=10){if(i%2==0)sum=sum-1.0/i;elsesum=sum+1.0/i;i++;}printf(n%f",sum);}解法二:main(){inti=l;floatsum=O;while(i<=10){sum=sum+1.0/i;sum=sum-1.0/(i+l);i+=2;}printf(''%f",sum);解法三:main(){inti=l;floatsuml=0,sum2=0;while(i<=10){suml=suml+1.0/i;i=i+2;}i=2;while(i<=10){sum2=sum2+1.0/i;i=i+2;}printf(n%fn,suml-sum2);}解法四:main(){inti=l,sign=l;floatsum=O;whi!e(i<=10){sum=sum+1.0/i*sign;i++;sign=-sign;}printf(M%fn,sum);及其和的程序。4.请编程求满足1+2+3+...+n<500中最大的n及其和的程序。main(){intn=O,sum=O;do{++n;sum+=n;}while(sum<500);printf(Hn=%dsum=%d\nn,n-l,sum-n);.打印“九九乘法表1TOC\o"1-5"\h\z2 43 6 94 8 12510156121871421816249182716TOC\o"1-5"\h\z20 2524 30 3628 35 42 4932 40 48 56 6436 45 54 63 72main(){intij;for(i=l;i<=9;i++){for(j=l;j<=i;j++)printf(u%4dn,i*j);printf(u\nH);)).输出以下图形。#include"stdio.h"voidmain()(intij,k;charspace='for(i=l;i<=6;i++){for(j=2;j<=i;j++)printf(n%cM,space);for(k=l;k<=6;k++)printf(H%cH,'*');printfC,Xn**);)}.输出以下图形。****'{cjjc****#include"stdio.h"voidmain()intij,k;for(i=l;i<=4;i++){for(j=l;j<=4-i;j++)printf(un);for(k=l;k<=2*i-l;k++)printf(n*H);printf(n\nn);}for(i=l;i<=3;i++){for(j=l;j<=i;j++)printf(nH);for(k=l;k<=7-2*i;k++)printf(H*H);printf(,,\nn);)).输入一个整数机,判断是否是素数。main(){intm川;scanf(n%dn,&m);for(i=2;i<=j;i++)if(m%i==0)break;if(i>=j+l)printf("%disaprimenumber”,m);elseprintf("%disnotaprimenumber",m);}.把100〜200之间不能被3整除的数输出。#include“stdio.h"main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}).求100-200之间的全部素数。#include"math.h"main(){intm,iJ,n=0;for(m=101;m<200;m=m+2){j=sqrt(m);for(i=2;i<=j;i++)if(m%i==0)break;if(i>=j+l){printf(H%6dH,m);n=n+1;}if(n%10==0)printf(rt\nw);}printf(“\n”)).请编写程序20求Z”!(即求1!+2!+3!+ +20!)main()(floats=0,t=l;intn;for(n=l;n<=20;n++)(t=t*n;s=s+t;printf(nl!+2!+...+20!=%e\n",s);}.请编写程序100 50 101求とk+乙《十乙-k=l k=l k=l氏main()(intk,nl=100,n2=50,n3=10;floatsl=0,s2=0,s3=0;for(k=l;k<=nl;k++)sl=sl+k;for(k=l;k<=n2;k++)s2=s2+k*k;for(k=l;k<=10;k++)s3=s3+1.0/k;printf(nthesumis%8.2f\nn,sl+s2+s3);).用近似公式求e^l+l/l!+l/2!+-+l/n!用单循环编写的程序片段:e=1.0;term=1.0;for(i=l;i<=n;i++){term/=i;e+=term;}.用11/4^l-l/3+l/5-l/7+...求!!的近似值,直到最后ー项的绝对值小于10-6为止。#include“stdio.h”#include"math.h"voidmain(){ints;floatn,t,pi;t=l;pi=0;n=1.0;s=l;while((fabs(t))>le-6){pi=pi+t;n=n+2;s="s;t=s/n;}pi=pi*4;printf(“pi=%12.6f\n”,pi);).请编程求fibonacci数列的前40个数。fl=l;f2=l;n=2;prin以"%121d%121dw,fl,f2);for(i=3;i<=40;i++){f=fl+f2;if(n%4==0)printf(n\nn);printf(M%121dH,f);n=f2;f2=f;n++;}.百钱买百鸡问题。公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买ー百只鸡有几种解法。for(x=0;x<=19;x++)for(y=0;y<=33-x;y++){z=100-x-y;if(z%3==0&&5*x+3*y+z/3==100)
printf(nx=%dy=%dz=%dM,x,y,z);).用100元换成5元,1元,0.5元,共100张,且每种不少于1张,有多少种组合?#include“stdio.h"voidmain(){intiJ,k,sum=0;floatrbs=0.0;for(i=1;i<=100;i++)foru=1;j<=100;j++)for(k=1;k<=100;k++){sum=i+j+k;rbs=5*i+j+0.5*k;if((sum==100)&&(rbs==100))printf(“5元…%d,1元一%d,0.5元…%d\n”,iJ,k);})可改进为:#include“stdio.h"voidmain(){intiJ;for(i=1;i<=ll;i++)for0=1;j<=100-i;j++)if(5*i+j+0.5*(100-i-j)==100)printf(“5元…%d,1元…%d,0.5元…%d\n”,ij,100-i-j));}.请编写程序求5,;=a+aa+aaa+ +aa...a之值,其中a是ー个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。main()inta,n,i=l;longsn=0,tn=0;printf(na,n=:H);scanf(H%d,%dH,&a,&n);while(i<=n){tn=tn+a;sn=sn+tn;a=a*10;++i;)printf(,,a+aa+aaa+...+aa..a=%ld\n,,,sn);).请编写程序求所有的“水仙花数”。所谓“水仙花数”是指ー个3位数,其各位数字立方和等于该数本身。例如,153就是一水仙花数,因为153=1+5'+3,main()intij,k,n;printf("shuixianhuashushi:n);for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf(H%4dn,n);)printf(,,\nu);).请编写程序找出1000之内的所有完数,ー个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。输出时按下面的格式输出其因子: 6itsfactorsare1,2,3main()(intm,s,i;for(m=2;m<1000;m++){s=0;for(i=l;i<m;i++)if(m%i==0)s=s+i;if(s==m){printf(M%disawanshu.itsyinziis:",m);for(i=l;i<m;i++)if(m%i==O)printf(,'%d,,,,i);printf(n\nu);))).请编写程序输入2个正整数m,n,求其最大公约数和最小公倍数。main()(intp,i,n,m,temp;printf("pleaseinputtwointegers(>0)n,m:");scanf("%d,%d”,&n,&m);if(n<m){temp=n;n=m;m=temp;}p=n*m;for(i=m;i>l;i-)if((m%i==0)&&(n%i==0))break;printf(Hzuidagongyueshuis:%d\nn,i);printf(nzuixiaogongbeishuis:%d\nH,p/i);).请编写程序,求下列分数序列的前20项之和。2 3 5 8 13 21「5,3,78,13, main(){inti,t;floata=2,b=l,term,sum=0;for(i=l;l<=20;i++){term=a/b;sum=sum+term;t=a;a=a+b;b=t;)printf(**sum=%9.6f\n**,sum);).请编写程序若一个球从100m髙度自由落下,每次落地后反跳回原髙度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多髙?main(){inti;floats=100,h=100;for(i=2;i<=10;i++){h=h/2;s=s+2*h;)printf(Hthetotallenthis:%fm\nu,s);printf("thelasthigthis:%fm\n",h/2);).请编写程序猴子吃桃问题。猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第!0天早上再想吃时,就只剩ー个桃子了。求第一天猴子共摘了多少桃子。main(){inti,xl,x2=l;for(i=10;i>l;i—){xl=(x2+l)*2;x2=xl;)printf(ntotal=%d\nn,xl);第七章数组数组的有关概念数组是具有一定顺序关系的若干相同类型变量的集合,特点:a)数组具有有序性b)数组具有同一性c)数组具有整体性组成数组的每个分量称为数组的元素;数组的维数(ー维,二维,三维)数组的定义类型说明符数组名[常量表达式];例如: inta[5];charc[20];floatx[10];注意:数组名命名规则与变量名相同;数组名后是方括号,而不是小括号;常量表达式表示元素的个数,下标从零开始。ー数组的大小是固定的,不能动态定义。例如:intn;scanf("%d",&n);inta[n];是错误的。数组必须先定义,后使用。只能逐个引用数组元素。引用形式: 数组名[下标];-其中下标可以是整型的常量、变量或表达式;ー数组长度为M时,下标值为0,1,2...M-1ー维数组的初始化可以用赋值语句或输入语句使数组中的元素得到值,对数组元素的初始化可以用以下方法:1)在定义数组时,对数组元素赋以初值。2)可以只给一部分元素赋值3)在对全部数组元素赋初值时,可以不指定数组长度。C语言规定,对数组的使用只能逐个引用数组元素,不能ー次引用整个数组。同样,对数组的输入和输出也是依次对每个元素进行的。说明:在循环体内利用循环控制变量作为下标输入输出数组元素,因此数组元素输入输出的次序和数量可以控制的。二维数组定义的一般形式为:类型说明符数组名[常量表达式][常量表达式]例如:inta[2][3]; charc[20][7];二维数组的元素在数组中的是按行排列的。引用形式:数组名[下标][下标];・其中下标可以是整型的常量、变量或表达式;两个下标的值不要超过各自的范围;要严格区分定义数组时a⑵⑶,和引用数组时的a⑵⑶;二维数组的初始化分行赋初值inta[2][3]={{1,2,3},{4,5,6});不分行赋初值intb[2][3]={1,2,3,4,5,6};对部分元素赋初值intc[3][4]={{1},{0,2},{0,0,3}};intd[3][4]={{1},0,{9}};未赋值的元素自动赋值。,且前面的。不能省,后面的。可以省。对全部元素赋初值,省略第一维的长度inta[][2]={{1,2},{3,4}};inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};字符数组的定义及初始化存放字符数据的数组是字符数组,字符数组中的ー个元素存放ー个字符。•定义 char字符数组名[整型常量表达式][…]•初始化逐个为数组中各元素指定初值字符用字符串给字符数组初始化字符数组的输入输出>输出字符时不包含‘、〇’>用“%s”格式符时,输出项是数组名,而不是数组元素名。>输入项为数组名时,前面不要再加。>当数组长度大于字符串实际长度,也只输出到遇へO’结束。如:charc[1O]={"well");printf("沁”,c);A如果ー个字符数组中有多个、〇',则遇到第一个へ。',输出就结束。>利用scanf输入多个字符串,以空格分隔。C语言提供了一个用于读字符串的函数,它读入全部字符(包括空格),直到遇到回车符为止,它是gets。。字符串的输入gets(字符数组)一格式:gets(ch)功能:从终端输入一个字符串到字符数组ch中,输入回车键时结束,并将回车符へn'转换成へ〇ノ,其中ch只能是ー个字符数组名。字符串的输出puts(字符数组)一格式:puts(ch)功能:向终端输出字符串,并将,MT转换成ハ『输出,其中ch可以是某个字符数组名,也可以是一个字符串常量。字符串的复制strcpy(字符数组1,字符串2)一格式:strcpy(chi,ch2)功能:将ch2中的字符串复制到chi字符数组,限定chi为字符数组名,ch2可以是字符串常量或字符数组名。说明:ch!必须定义的足够大拷贝时’、〇’一起拷贝过去不能用赋值语句将一个字符串常量或字符数组直接赋给ー个字符数组。如:strl="china”;或strl=str2;可以将字符串2前面的n个字符拷贝到字符数组1中,如:strcpy(chi,ch2,2);字符串的比较strcmp()一格式:strcmp(chi,ch2)功能:对chi和ch2所对应的字符串从左到右——进行比较(比较字符的ASCII码值的大小),第一个不相等的字符的大小决定了整个字符串的大小,若chi和ch2的所有字符完全相同,则chi等于ch2°chl=ch2函数返回〇chl<ch2函数返回一个负整数chl>ch2函数返回一个正整数ー说明:对两个字符串比较,不能用if(chl==ch2)printf("yes");只能用if(strcmp(chi,ch2)==0)printf("yes”);字符串的连接函数strcat0一格式:strcat(chi,ch2);功能:将ch2复制到ch!的后面,连接时将chi的へ(T去掉,只在新字符串后保留一个へ。,。要求chi必须是一个足够大的字符数组,ch2可以是字符串常量或字符数组名。求字符串长度的strlen()格式:strlen(ch)功能:返回ch的有效字符的个数,不包括へ。’在内,其中ch为字符数组名或某个字符串常量。字符串大小写转换strlwrO格式:strlwr(ch);一功能:将ch中所有的大写字母转换成小写字母。字符串大小写转换struprO格式:strupr(ch);一功能:将ch中所有的小写字母转换成大写字母。二维字符数组定义:charstr[3][6];或intstr[3][6];引用:一可以单独输出某ー个元素,也可以输出某一行的元素,即某ー个字符串。如:printf("%s”,str⑵);初始化:charstr[3][6]={wChina”,”Japan",”Korea”};复习作业题:.定义ー个ー维数组,存放10个整数在其中,找出其中最大的ー个数。main()inti,max,x[10];printf(Henterdata:\n");for(i=0;i<10;i++)scanf("%dH,&x[i]);max=x[0];for(i=l;i<10;i++)if(x[i]>max)max=x[i];printf(nmax=%d\n",max);).使用数组编程,计算出前40项Fibonacci数列,要求一行打印5个数。main(){longf[40];inti;f[O]=l;f[l]=l;for(i=2;i<40;i++)f[i]=f[i-l]+f[i-2];for(i=0;i<40;i++){if(i%5==0)printf("\n");printf(,,%121d',,f[i]);}).用冒泡法对10个整数按从小到大的顺序排列输出。#include"stdio.h”voidmain(){inti,j;floata[ll],temp;for(i=1;i<=10;i++)scanf(“%f”,&a[i]);printf(“\n”);for(i=1;i<=10;i++){printf("%f,”,a[i]);if(i%5==0)printf(“\n”);}printf(“\n”);for(j=1;j<10;j++)for(i=l;i<=10-j;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+l];a[i+l]=temp;)for(i=1;i<=10;i++){printf(a%f,",a[i]);if(i%5==0)printf(“\n”);}}.用选择法对10个数从小到大排序。#include“stdio.h”voidmain(){inti,j,k;floata[10],temp;for(i=0;i<=9;i++)scanf(w%fw,&a[i]);printf(“\n”);for(i=0;i<9;i++){k=i;for(j=i+l;j<=9;j++)if(a[k]>a[j])k=j;if(i!=k){temp=a[i];a[i]=a[k];a[k]=temp;}for(i=0;i<=9;i++){printf(a%f,”,a[i]);if(i%5==4)printf(“\n”);}).求两个3*4矩阵的和。main(){inta[3][4],b[3][4];c[3][4];intij;printf("输入a矩阵的元素值、n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(,,%d,,,&a[i][j]);printf("输入b矩阵的元素值、n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(u%dn,&b[i][j]);for(i=0;i<3;i++)for(j=0;j<4;j++)/*矩阵a和b的对应元素相加*//・结果存放在c矩阵中*/printf("和矩阵为:\nH);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(H%5dH,c[i][j]);printf("\nn);}).将一个2*3的数组行、列元素互换,存到另外一个数组中。main()(inta[2][3]={{l,2,3},{4,5,6});intb[3][2],ij;printf(uarraya八n’’);for(i=0;i<=l;i++){for(j=0J<=2;j++){print—bU][i]=a[i]U];}printf("\n'');printf(uarrayb:\n^^);for(i=0;i<=2;i++)for(j=0;j<=l;j++)prin城“%5d”,b[i][jD;printf(“\n");)).求一个3*4矩阵中的最大值及其所在的行、歹!]。main(){inta[3][4],row=0,col=0,ij,max;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(n%dn,&a[i][j]);max=a[O][O];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i+l;col=j+l;}printf(wmax=%d,row=%d,col=%d\nw,max,row,col);).请编写程序,求一个3X3矩阵对角线元素之和。main(){inta[3][3],sum=0;intij;printf(HEnterdata:\nM);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(H%dn,&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf(Hsum=%5d\nn,sum);).请编写程序对ー个已排好序的数组,从键盘上输入ー个数,要求按原来排序的规律将它插入数组中。main(){inta[ll]={2,6,9,13,18,25,29,33,37,46};intiJ,tempi,temp2,number;printf(H\narraya:\nn);for(i=0;i<10;i++)printf(H%5dn,a[i]);printf(n\ninsertdata:**);scanf(M%dH,&number);if(number>a[9])a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number){templ=a[i];a[i]=number;for(j=i+l;j<ll;j++){temp2=a[j];a[j]=templ;templ=temp2;)break;printf(**now,arraya:\nn);for(i=0;i<ll;i++)printf(n%5d",a[i]);).请编写程序打印以下的杨辉三角形(要求打印出10行)。11146411510105116152015611721353521711828567056288119368412612684369#defineN10main(){intij,a[N][N];for(i=0;i<N;i++){a[i][i]=l;a[i][0]=l;)for(i=2;i<N;i++)for(j=l;j<i;j++)a[i][j]=a[i-l]U]+a[i-l]U-l];for(i=0;i<N;i++){for(j=0;j<=i;j++)printf(H%6dn,a[i][j]);printf(n\nn);printf(H\nn);).请编写程序打印ー个由5行(每行5个星号)组成的平行四边型形状的图案。main(){chara[6]={*******H};intij;charspace=**;printf(n\nn);for(i=l;i<=5;i++){for(j=l;j<=i;j++)printfC*%c",space);printf(M%s\nH,a);)).请编写程序将一个数组中的值按逆序从新存放。例如,假设原来顺序为:35,27,19,13,6,1〇要求改为:1,6,13,19,27,35〇#defineN6main(){inta[N],i,temp;print©”Enteraarray:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);printf("arrayais:\n");for(i=0;i<N;i++)printf("%4d",a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-i-l];a[N-i-l]=temp;}printf("\nNow,arrayais:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");).请编写程序将两个字符串连接起来,不要用strcat函数。main(){charsl[80],s2[40];inti=0j=0;printf(n\ninputstringl:**);scanf(M%sH,sl);printf(u\ninputstring2:u);scanf(H%sn,s2);while(sl[i]!=,\O,)i++;while(s2[j]!=,\0,)sl[i++]=s2[j+4-];sl[i]=,\O,;printf(**thenewstringis:%sM,sl);}.请编写程序将两个字符串s!和s2比较,如果sl>s2,输出ー个正数;sl=s2,输出0;sl<s2,输出ー个负数。不要用strcmp函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。例如,“A"与“0’相比,"A"v“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医理疗在慢性肝炎康复中的特色方法
- 医院信息管理培训方法分析
- 课件直播录课
- 医学影像技术发展研究进展动态综述报告分析探讨报告探讨
- 土木基础与工程 3
- 2026年酒柜除湿模块项目商业计划书
- 医学检验质量控制与评价
- 2026年智能遮阳防水罩壳项目营销方案
- 医学教育信息化平台建设
- 医院内部绩效管理实践案例
- 国开经济学(本)1-14章练习试题及答案
- 2025包头铁道职业技术学院教师招聘考试试题
- 2025至2030年中国三氯甲基碳酸酯行业市场发展现状及投资策略研究报告
- 不负韶华主题班会课件
- GB/T 45614-2025安全与韧性危机管理指南
- 2025年江西省新余市中考二模化学试题(含答案)
- DG∕T 149-2021 残膜回收机标准规范
- 污水管道疏通方案
- 化学工艺过程控制与优化试题库
- 灵渠流域多民族交往交流交融的历史及启示
- 现代汉语重点知识笔记详解
评论
0/150
提交评论