《C语言总复习》PPT课件.ppt

上传人:za****8 文档编号:12668587 上传时间:2020-05-13 格式:PPT 页数:183 大小:695.01KB
返回 下载 相关 举报
《C语言总复习》PPT课件.ppt_第1页
第1页 / 共183页
《C语言总复习》PPT课件.ppt_第2页
第2页 / 共183页
《C语言总复习》PPT课件.ppt_第3页
第3页 / 共183页
点击查看更多>>
资源描述
C语言总复习,一、C语言的数据表示,1.1常量和变量1.2表达式1.3数据类型简单类型、结构类型、指针类型1.4输入、输出,1.1常量和变量,1.常量常量是在程序执行中,值不发生改变的数据。其值预先决定,之后不变。有不同的数据类型。,(1)常数例如的:整数:+5、-3、017(八进制)、0 x1f(16进制)实数(浮点数):3.14、-1.2E-3、1E10单个字符:A,占一个字节,转义字符非法77(八进制ASCII码63,?),78非法x3f(十六进制ASCII码63,?)x3g非法字符串:“A”后面有0,占两个字节,在程序中inta=0 x6d,是把一个十六进制的数赋给变量a注意这里的0 x必须存在。在程序中inta=06d,是一个八进制的形式。在转义字符中,x6d才是合法的,0不能写,并且x是小写。141是合法的,0是不能写的。108是非法的,因为不可以出现8。,转义字符非法”77(八进制ASCII码63,?),78非法x3f(十六进制ASCII码63,?)x3g非法转义字符占1个字节。,(2)符号常量给常量起标识符名字。C语言的符号常量(用宏定义):#definePI3.14159265好处:提高程序易读性;方便修改常量的值;注意:1.一般用大写字母。2,#defineM3不是C语句,后面没有“;”。3.可以做M+1,不能做M+.,(3)地址常量当数组在定义时,其变量名为其首地址,是地址常量。inta10;可以做a+1,不能做a+.,1.1常量和变量,2变量用各种操作来改变值数据。从“名”和“值”两个角度认识变量,(1)变量名每个变量,要在使用前定义变量的名字,遵循标识符命名规则。只能用字母、数字和下划线组成。不能以数字开头。不能用保留字(int,main.)。关键字不可以作为用户标识符号。maindefinescanfprintf都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。,变量定义就是申请数据的存储空间,登记数据的各种存储特性。例如:intm;2个字节-215215-1(-3276832767)longn;4个字节-231231-1charch;1个字节0255floatx;4个字节3.4(10-381038)doubley;8个字节1.7(10-30810308)可以用sizeof获得字长sizeof(char)=1sizeof(int)=2sizeof(double)=8,(2)变量的值变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。数据内容用语言的操作语句来改变。赋值语句;键盘输入语句;charchx;intm;/*变量的定义*/chx=A;m=12*3;/*赋值语句*/scanf(“%d”,/*键盘输入语句*/在程序运行时,将数据存入制定内存空间。,变量初始化:定义变量时同时确定变量初值。例如:charchy=a;intweight=2;,1.2C语言的表达式,1、算术表达式2、关系表达式3、逻辑表达式4、赋值表达式5、逗号表达式6、条件表达式7、其他表达式,C语言的表达式:使用规定的运算符,将常量、变量、函数(调用)连结的一个有意义的式子。,1、算术表达式,用算术运算符来表示对数据的算术运算求值过程。算术运算符:+-*/%2/3结果是0,2%3结果是2,2.0%3错,注意不同类型运算问题:,强制类型转换:一定是(int)a不是int(a),注意类型上一定有括号的。注意(int)(a+b)和(int)a+b的区别。前是把a+b转型,后是把a转型再加b。,2、关系表达式,关系运算符:=0,sin(x)=0.5,(a+b)=(c*d)注意语法合理与数学逻辑错误问题:分析:10=a=15a=9,10=a=15,10=a假0,0=15真,所以要写成10=a,n*=m+2相当于n=n*(m+2)k=i+;先k=i,再i=i+1k=+i;先i=i+1,再k=i,c赋值给b,b=2b赋值给a,a=2,5、条件表达式e1?e2:e3若e1为真,表达式的值为e2,否则为e3.(-a=b+)?-a:b+,5-1=4Ta=4,-aa=3表达式的值为3,a=5,b=4,4-1=5Fb=6,b+b=7表达式的值为6,a=4,b=5,条件表达式的值的类型为e2,e3二者中类型较高者。如果y=5;y3?-1.0:2其值为2.0,6、逗号表达式表达式的值等于最后一个表达式的值,运算等级最低!a=5,b=2,c=3a=7+b+c,a+a=(7+b+c,a+),a=12,a=5,7、强制类型转换表达式(单目)intm;sqrt(float)m);,并没有改变m的类型和数值,三种取整丢小数的情况:,、inta=1.6;、(int)a;、函数返回值,位运算,总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。例1:chara=6,b;b=ax+yca=#;注意转义字符的使用。,(4)字符串(输入、输出格式“%s”)所谓“字符串”是指若干有效字符的序列。语言字符串可以包括字母、数字、专用字符、转义字符等。字符串常量:使用双引号ChinaBASICa+b=cLi-Li39.4%dn解放军“字符型的一维数组(相当于字符串变量)charst8,str10;strcpy(st,12345);strcpy(str,st);不能st=“12345”;str=st;,2.结构类型“结构”一般可以称为数据元素,在不同的结构类型中,数据元素会有特定的名称。结构类型的数据由更加基本的成分组成。这些成分称为“数据项”,结构的子成员。,1.3数据类型,(1)数组A0A1A2A3A4A5A6A71020304050607080一个数组(array)是由相同类型的若干数组元素构成的有限序列。C语言的数定义:intB8,A8;charC10;,2.结构类型,例日期类型的定义,(2)结构体,C语言中实现:structDateintmonth;/*月*/intday;/*日*/intyear;/*年*/;structDatemyd=12,16,1978;系统分配给它的内存是各成员所需内存量的总和。本例是6.,(1)指针:变量名在内存中的存储地址。(2)指针变量inti=12,*p;P=把存放变量i的地址的变量p称作指针变量。指针变量的存放内容是数据的地址。,3.指针类型,(3)指针引用变量指针变量可以指向各种不同的数据类型,因此指针变量也要有不同的指针类型。如:intm,*p;floatx,*q;inta,*rm=12;p=,注意:是否用printf(“n%d,%d,%d”,n,+n,n+);计算从右到左,输出从左到右。,%s是输出以指定首地址到第一个0或空格之间的字符串。chara=“abcdefg”,*p=a;printf(“%s”,*+p);,bcd,5,5,3,1.4输入、输出,输入:scanf(“.”,.)%d,%ld对应intlong%c,%s对应charcharstr%f,%lf对应flaotdoubleScanf(“%d%d%*d%d”,跳过输入的第三个数据。,常见错误inta,b;chard,e20;scanf(%d,%fn”,格式化输入函数scanf,输入/输出,输入/输出,说明:(1)负号“-”表示该输出项以左对齐方式输出,缺省表示以右对齐方式输出;(2)m称字段宽度,表示该输出项所占字符个数;(3)n表示小数部分占用的字符个数;(4)如果输出项的实际位数小于m,则用空格补足,如果大于m,则按实际的位数输出。,输入/输出,(1)表达式语句(2)流程控制语句(3)复合语句,C语言语句,指令语句非指令语句,数据定义语句floatx;intm;编译预处理宏定义#definePI3.14159文件包含处理#include,二、C语言的程序结构与相关语句,表达式语句,1.表达式语句的组成:由一个表达式后接一个分号组成的。i=i+1(是表达式,没有构成语句)i=i+1;(是语句)x+y;(是合法语句,但没有实际意义)表达式语句的分类:赋值语句:i=1;c=getchar();函数调用语句:printf(nHello,world!);空语句。其形式为:;逗号表达式语句:+a,-b;复合语句:t=a;a=b;b=t;,完成一定的控制功能。9种控制语句:判断语句条件判断语句if()else多分支选择语句switch()case循环语句循环次数控制语句for()先判断后执行循环控制语句while()先执行后判断循环控制语句dowhile()转移控制语句直接转移语句goto终止语句break(用在循环结构、swicth)跳转语句continue(仅用在循环结构)返回语句return,流程控制语句,复合语句,一组语句括在一对花括号之中,称复合语句。c=getchar();putchar(c);注意,一个复合语句的后花括号之后不应再写分号。在语法上是一个整体,相当于一个语句。凡是能够使用简单语句的地方,都可以使用复合语句。一个复合语句中又可以包含另一个或多个复合语句。,二、C语言的程序结构与相关语句,程序的三种基本结构:顺序结构选择结构if()elseswitch()case循环结构for().;while();do;while(),选择结构,单分支结构if(a=b)printf(“yes”);双分支结构if(a=b)printf(“yes”);elseprintf(“no”);else是与最接近的if且没有配对else的相组合的。多分支结构switch_case,表达式类型任意,switch(表达式)case常量表达式1:语句1break;case常量表达式2:语句2break;case常量表达式n:语句nbreak;default:语句n+1break;,算术表达式(intchar),相当于语句标号,没有分号,多分支选择语句,switch(表达式)case常量表达式1:语句序列1;break;case常量表达式2:语句序列2;break;case常量表达式n:语句序列n;break;default:语句序列n+1;,根据“表达式”的值从上至下去寻找与表达式的值相匹配的“case常量表达式”,执行一个分支后,再执行下一个分支,直到break结束,然后执行switch结构后面的程序。找不到匹配的入口标号时,执行“语句序列n+1”,然后结束。顺序向下执行程序。,一定要注意有break和没有break的差别,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。,main()inta=1,b=1;switch(a)case1:switch(b)case0:printf(“$”);break;case1:printf(“#”);break;case2:printf(“*”);case2:printf(“”);case3:printf(“”);break;case4:printf(“,a=1case1:swtch(1)b=1printf#,break跳出switch(b)结构进入switch(a)结构case2:printfcase2:printfbreak跳出switch(a)结构,#,for,while,do-while三种结构,循环变量初始化,继续循环条件,改变循环变量是不可缺少的三个环节。for常用于循环次数已知的问题中。括号中的两个“;”不可省。do-while()循环的最后一个while();的分号一定不能够丢。while与do-while常用于循环次数未知的问题中。写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。,注意,在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)while(i0;-x)y*=x;printf(“%ld”,y);,main()intm,n;longcmn,facto();scanf(%d%d,求C(m,n)=m!/(n!*(m-n)!),嵌套循环,就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。,while(c=getchar())!=n)和while(c=getchar()!=n)的差别,先看a=3!=2和(a=3)!=2的区别:(!=号的级别高于=号所以第一个先计算3!=2)第一个a的数值是得到的1;第二个a的数值是3。,三数组,数组要素:1.数组名:数组的起始地址2.基类型:数组元素的数据类型3.数组长度:数组元素的个数4.数组的存储:连续的存储单元。二维数组按行存放,数组的定义类型标识符数组名数组长度,错误的定义是:或intn;intn=10;scanf(%d,定义inta5时,a0,a1.=?,随机数!,只有inta5=3后,后面几项自动赋0,常量表达式,数组的初始化,合法:inta=1,2,3,4,5;inti3=1,2,3,4,5,6;inta5=1,2,3;intb34=1,3;chara4=“boy”chara3=b,o,y,不合法:inta5=,2,4,5;inti2=1,2,3,4,5,6;inta5=;chara4=boy,数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写inta=1,2合法。inta4=2,3,4合法。但inta4=2,3,4非法。,一维数组元素的引用引用数组元素使用数组名和该元素在数组中的下标。,数组下标的取值范围是0,数组长度1,二维数组元素的引用与一维数组类似,分别用三种方法(数组元素下标法、数组名地址法、指针变量法)访问数组元素。,#includevoidmain()inta5=1,3,5,7,9,i,*p;for(i=0;i5;i+)printf(%d,ai);/*下标法*/printf(n);for(i=0;i5;i+)printf(%d,*(a+i);/*地址法*/printf(n);for(p=a;pa+5;p+)printf(%d,*p);/*指针变量*/,对a10这个数组的讨论。,、a表示数组名,是第一个元素的地址,也就是元素a0的地址。、a是地址常量,所以只要出现a+,或者是a=a+2赋值的都是错误的。、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。,1.输入与输出,例如:对一维数组有inta10;定义后,输入格式为:for(i=0;i10;i+)scanf(“%d”,对二维数组有inta32;定义后,输入格式为:for(i=0;i3;i+)for(j=0;j第二行a2789第三行,步骤二:这样作题目时很简单:*(a0+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a01元素,所以是。*(a1+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a12元素,所以是6。一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。,二维数组中的行指针,inta12;其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p2指针a0,a1现在就是一个列指针。a0+1跳一个数组元素。搭配*p2指针数组使用还有记住脱衣服法则:a2变成*(a+2)a23变成*(a+2)3再可以变成*(*(a+2)+3)这个思想很重要!,数组的操作往往用循环结构.,数值数组#defineM10intaM;for(i=0;iM;i+),字符数组#defineM10charaM;for(i=0;ai!=0;i+),数值数组倒序#defineM10main()inti,j,aM;for(i=0;iM;i+)scanf(“%d”,ai);for(i=0,j=M;ij;i+,i-)交换ai,aj,字符数组倒序main()inti,j;chara50;gets(a);for(i=0,j=strlen(a);ij;i+,i-)交换ai,aj,用函数实现倒序,数值数组voidinv(intx,intn);#defineM10main()inti,j,aM;for(i=0;iM;i+)scanf(“%d”,ai);inv(a,M);for(i=0;iM;i+)printf(“%d”,ai);,字符数组voidinv(charx)main()inti,j;chara50;gets(a);inv(a);puts(a);,多一个参数,表示元素个数,可以整体输入,输出,必须单个输入,输出,数值数组voidinv(intx,intm)inti,j,k;j=m;for(i=0;ij;i+,i-)k=xi;xi=xj;xj=k;,字符数组voidinv(intx)inti,j,k;j=strlen(x);for(i=0;ij;i+,i-)k=xi;xi=xj;xj=k;,顺序查找,下面程序在a数组中查找与x值相同的元素所在位置,数据从a1元素开始存放。#includevoidmain()inta11,i,x;printf(“输入10个整数:”);for(i=1;i=10;i+)scanf(“%d“,费伯那契(Fibonacci)数列各项为1,1,2,3,5,8,13,21,.,求其前40项之和。,矩阵,基本知识:主对角线i=j副对角线i+j=n-1上三角形i=j,编一个程序,求一个33矩阵对角线元素之和。main()inti,j,s=0,a33;for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,主对角线i=j副对角线i+j=2,累加(积),#defineM10main()inti,aM,s=0;for(i=0;iM;i+)scanf(“%d”,#defineM10main()inti,aM,s=1;for(i=0;iM;i+)scanf(“%d”,求最大(小)值,#defineM30main()inti,k,k_i,aM;for(i=0;is2,strcmp(s1,s2)0,s1s2,strcmp(s1,s2)0,一函数定义的形式:,存储类型数据类型函数名(形式参数表)变量数据定义语句序列;可执行语句序列;,intfun(intx,inty)intz;z=x+y;returnz;,函数体,四函数,类型标识符函数名(形参表)语句,返回值类型,函数首部(函数头),函数体,可以为空,但花括号不能省略,没有分号,形参表可以为空,但括号不能省略,函数要先定义后使用(调用)。【语法】函数定义的一般形式为:,【语义】定义一个函数,编译程序并不为函数定义分配存储空间,在函数调用时才分配存储空间,然后再运行这个函数。,函数定义,1.有返回值函数有返回值函数在函数执行结束后向调用者返回一个执行结果,称为函数的返回值。【语法】有返回值return语句的一般形式如下:return(表达式);括号可以省略【语义】计算表达式的值,结束函数的执行并将表达式的值作为返回值返回给调用者。,函数定义,2.无返回值函数无返回值函数只完成某种特定的处理,函数执行后不向调用者返回函数值。函数首部必须将返回值的类型说明为空类型(void),函数体中的return语句只结束函数的执行。【语法】无返回值return语句的一般形式如下:return;【语义】结束函数的执行。,函数调用,函数定义只是按照程序逻辑将相关语句组织在一起,要想执行这些语句,就需要执行函数,即函数调用。【语法】函数调用的一般形式如下:,函数名(实参表);,与形参表相对应,实参可以是常量、变量,还可以是表达式,如果实参中存在变量,则在函数调用时,变量应该是“值有定义的”;,【语义】为函数分配存储空间,执行函数。,括号不能省略,函数的嵌套调用,函数可以嵌套调用,程序中的函数通过互相调用体现其逻辑关系。,但函数不能嵌套定义。,函数声明,【语义】对函数原型进行声明,说明函数的参数和返回值类型等情况。,C语言规定:函数必须先定义后调用,因此,程序中要确保函数调用之前已经完成函数定义,否则编译器没有关于函数的任何信息,不能正确地完成翻译工作。为了避免函数在定义前调用,在调用前声明这个函数的原型。,【语法】函数声明的一般形式如下:,1.基本知识:(1)调用格式:主调函数函数名(实参表列)被调函数返回类型函数名(形参说明形参表列)(2)地址传递主调函数函数名(地址表列)被调函数返回类型函数名(形参说明地址表列)(3)一维数组主调函数函数名(a,n)被调函数返回类型函数名(int*b,intn)函数名(intb,intn)(4)二维数组主调函数函数名(a,3,4)被调函数返回类型函数名(int*b,intm,intn),非void型intfun(intx,inty);main()inta,b;scanf(“%d,%d”,void型voidfun(intx,inty);main()inta,b;scanf(“%d,%d”,填main(),charfun(intx,inty)intz;z=x+y;returnz;,main(),inta,b;函数实参,charc;函数返回值,scanf(“%d,%d”,a,b);实参赋值,c=fun(a,b);调用函数,printf(“%c”,c);输出结果,注意变量数据类型的对应int%dlong%ldfloat%fdouble%lfchar%c或%s,递归调用的概念在语言中,一个函数直接或间接地调用自身,便构成了函数的递归调用。前者为直接递归调用,后者称间接递归调用。,计算n!的函数fac()longfac(intn)longp;if(n=0|n=1)p=1;elsep=n*fac(n-1);/*自己调自己*/returnp;voidmain()printf(“%ld”,fac(5);,记住递归调用的框架,一定要注意参数之间的传递,实参和形参之间传数值,和传地址的差别。传数值的话,形参的变化不会改变实参的变化。传地址的话,形参的变化就会有可能改变实参的变化。,数组名作函数实参,voidfun(inta,intn);main()intarr10,i;for(i=0;i10;i+)scanf(“%d”,变量的作用域,局部变量,局部变量是在函数内部、复合语句或语句块的内部定义的变量,其作用域仅限于函数、复合语句或语句块,离开作用域后再引用局部变量是非法的。1.函数级局部变量,局部变量,#includeintFun(intx);intmain()inta=10,b;b=Fun(a);printf(%d,x);/编译错误,变量x只能在函数Fun中引用return0;intFun(intx)inty;y=x*x+2*x+1;printf(%d,a);/编译错误,变量a只能在函数main中引用returny;,局部变量a和b的作用域,局部变量x和y的作用域,局部变量,同名变量,占用不同的内存单元,属于不同的作用域,互不干扰,局部变量,局部变量,2.复合语句级局部变量,在复合语句中定义的变量属于复合语句级局部变量,其作用域仅限于花括号括起的复合语句。,#includeintmain()inta=5,b=10;inttemp;temp=a;a=b;b=temp;printf(%d,temp);/编译错误,对变量temp的访问超出其作用域return0;,局部变量temp的作用域,全局变量,全局变量(也称全程变量)是定义在所有函数(包括main函数)之外的变量,其作用域从变量定义开始到程序结束。全局变量不属于哪一个函数,可以被作用域内的所有函数引用。,#includeintSum=0;voidAccumulate();intmain()Accumulate();printf(调用1次累加和:%dn,Sum);/Sum的值为10Accumulate();printf(调用2次累加和:%dn,Sum);/Sum的值为20return0;voidAccumulate()for(inti=1;i=10;i+)Sum+;,全局变量Sum的作用域,变量的生存期,变量从生成到撤销(释放)的这段时间称为变量的生存期。,C程序在运行时将具有生存期的变量保存在数据区中,数据区一般分为静态存储区和动态存储区两种,全局变量和静态变量存储在静态存储区中,局部变量和自动变量存储在动态存储区中,如图所示。,动态存储区:局部变量、自动变量,所谓自动的含义是在生成变量时系统自动为变量分配内存空间,在撤销变量时系统自动收回变量占用的内存空间,因此,此类变量称为自动变量。局部变量都属于自动变量,静态变量(static),如果希望在函数调用结束后仍保留局部变量的值,即不释放该变量占用的存储单元,则必须将该变量定义为静态变量。静态变量一经分配内存空间,在程序的运行过程中就始终占有该内存空间,但静态变量的作用域不变,因此,仍然只能在其作用域范围内引用。静态变量的初始化只在第一次调用函数时执行一次,以后执行函数时不再进行初始化操作。,自动变量(auto或省略),静态局部变量,可以保留上次运行的结果函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为。intf(intm)staticinti=0;ints=0;for(;i=m;i+)s+=i;returns;A、21B、16C、15D、8,静态局部变量,#includeintAccumulate();main()intnum;num=Accumulate();printf(调用1次累加和:%dn,num);/num的值为10num=Accumulate();printf(调用2次累加和:%dn,num);/num的值为20printf(%d,sum);/编译错误,对变量sum的引用超出其作用域return0;intAccumulate()staticintsum=0;/初始化操作只执行一次for(inti=1;ip如p和q不指向同一数组,则比较无意义。,指向二维数组的指针二维数组是一维数组的推广,即可以把二维数组的每一行看成是一个一维数组,其中每个数组元素是一个一维数组,如图所示。a为二维数组的首地址,也就是数组a0的首地址,则a+1表示数组a1的首地址,a+2表示数组a2的首地址,如图所示。则二维数组元素aij的存储地址inti,j;for(i=0;i3;i+)for(j=0;j4;j+)aij=i+j;,2.通过地址访问数组元素:对于二维数组元素aij,“”实际上是变址运算符,即将元素aij的存储地址转换为ai+j。因此,为了提高运行速度,可以直接通过地址访问数组元素。例如,如下语句通过数组元素的存储地址实现为二维数组元素赋值:inta34;inti,j;for(i=0;i3;i+)for(j=0;j结构体指针-成员名具有最高的优先级,自左向右结合若structstudentstu,*p=stu;则stu.num、(*p).num、p-num等效,结构体变量分量的3种表示方法结构变量.分量名(*指针).分量名指针-分量名结构体数组分量的表示方法:数组元素.结构分量类型由结构分量决定,文件题的框架FILE*fpfp=fopen(文件名,读写方式)读写函数fclose(fp)文件遍历遍历:读写函数与文件的数据指针结束条件:ch!=EOF!feof(),编程,输入x后,根据下式计算并输出y值。,#include#includevoidmain()doublex,y;scanf(%lf,求xn,#includevoidmain()inti,n;doublex,power;printf(inputx,n:n);scanf(%lf%d,输入x、n后输出下列算式的值。,#includevoidmain()floats,t1,t2,t3,x;inti,n;scanf(%f%d,从键盘输入100个整数,求其中正数的平均数。,main()inti,count=0,x;floatsum=0;for(i=0;i0)sum=sum+x;count+;sum=sum/count;printf(%f,sum);,输入一行字符,统计其中英文字母、空格或回车、数字和其他字符的个数。,#includevoidmain()intblank,digit,i,letter,other;charch;blank=digit=letter=other=0;while(c=getchar()!=n)if(ch=a,求500以内的全部素数,每行输出10个,#include#include/*使用求平方根函数,需要包含数学库*/voidmain()intcount,i,m,n;count=0;*count用于控制输出格式,每行输出10个数*/for(m=2;m=n)/*如果m是素数*/printf(%6d,m);/*输出m*/count+;/*累加已经输出的素数个数*/if(count%10=0)printf(“n”);/*输出数10的倍数,换行*/printf(n);,从键盘读入一个整数,统计该数的位数。例如,输入1234,输出4;输入0,输出1。,#includevoidmain()intcount,number;/*count记录number的位数*/count=0;printf(Inputanumber:);/*输入提示*/scanf(%d,若一个3位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。例如:153是水仙花数,因为153=13+53+33求所有的水仙花数。,#includevoidmain()intdigit,x,s;printf(水仙花数是:n);for(i=100;i=999;i+)x=i;s=0;while(x)digit=x%10;s+=digit*digit*digit;x=x/10;if(s=i)printf(“%dn”,i);,#includevoidmain()inti,j,k;printf(水仙花数是:n);for(i=1;i=9;i+)/*百位数*/for(j=0;j=9;j+)/*十位数*/for(k=0;k=9;k+)/*个位数*/if(i*i*i+j*j*j+k*k*k=100*i+10*j+k)printf(“%dn”,i*100+j*10+k);,#includevoidmain()inta,b,c,i;printf(水仙花数是:n);for(i=100;i=999;i+)a=i%10;b=i/10%10;c=i/100;if(i=a*a*a+b*b*b+c*c*c)printf(“%dn”,i);,最大公约数,最小公倍数,该程序功能:输入m、n(要求输入数均大于0),输出它们的最小公倍数#includevoidmain()intm,n,k;while(scanf(%d%d,main()intm,n,factor,multiple;printf(请输入两个自然数:);scanf(%d%d,鸡兔同笼问题(函数版),【问题】鸡有2只脚,兔子有4只脚,假设笼子里共有M只头N只脚,问鸡和兔子各有多少只?要求用函数实现。【想法】设鸡有x只兔子有y只,则有如下方程组成立:,x+y=M,2x+4y=N,【算法】设函数CR实现求解方程组,算法描述如下:输入:头的个数M,脚的个数N功能:求解鸡兔同笼问题输出:鸡的个数x,兔子的个数y,step1:x从0到M循环执行下述操作:step1.1:y=Mx;step1.2:如果(2*x+4*y等于N),则跳出循环;否则x+;step2:如果提前跳出循环,则输出x和y的值;否则令x=0,y=0,输出x和y的值;,#includevoidCR(intM,intN,int*p,int*q);intmain()intM,N;intchicken,rabbit;printf(请输入笼子里动物头的个数和脚的个数:);scanf(%d%d,voidCR(intM,intN,int*p,int*q)intx,y;for(x=0;x=M;x+)y=Mx;if(2*x+4*y=N)break;if(x=M)*p=x;*q=y;else*p=0;*q=0;return;,输入一个正整数n(1n6),再输入n*n矩阵,要求:将该矩阵转置后输出。求该矩阵每行元素的和。求该矩阵每列元素的最大值。,#includevoidmain()inta66,i,j,t,n,sum,max;printf(输入一个正整数(1n6):);scanf(%d,for(i=0;in;i+)/矩阵转置for(j=i;jn;j+)if(ij)t=aij;aij=aji;aji=t;printf(1)该矩阵转置后:n);for(i=0;in;i+)/输出该矩阵for(j=0;jn;j+)printf(%2d,aij);printf(n);,for(i=0;in;i+)/求矩阵每行元素的和sum=0;for(j=0;j=0,字符转数字:-0数字转字符:+0,静态局部变量,可以保留上次运行的结果,函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为。intf(intm)staticinti=0;ints=0;for(;i4)intx;/复合语句内局部变量x=+y;printf(“%d,%dn”,x,y);x+=y-;printf(“%d,%dn”,x,y);,值传递与地址传递,#includeintx,y,z;voidp(int*x,inty)+*x;y-;z=*x+y;printf(%d,%d,%d,*x,y,z);voidmain()x=2;y=3;z=4;p(,结果:3,2,5,3,3,5,4,2,6,3,4,6,swap1(intx,inty)/值传递intt;t=x;x=y;y=t;main()inta=3,b=5;swap1(a,b);/值传递printf(“%d,%dn”,a,b);/输出不变,swap3(int*p1,int*p2)/地址传递int*p;p=p1;p1=p2;p2=p;/形参值未改变main()inta=3,b=5;swap2(/输出不变,数组名作为函数参数,floataverage(float*array)inti;floataver,sum=0;for(i=0;i10;i+)sum+=arrayi;aver=sum/10;return(aver);main()floatscore10,aver;inti;for(i=0;i10;i+)scanf(“%f”,(1)实参是数组名(2)形参是指针变量,可以写成数组形式可以不指定长度双向传递实质:形参数组和实参数组共用同一段存贮空间,array,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!