C语言复习(终)_第1页
C语言复习(终)_第2页
C语言复习(终)_第3页
C语言复习(终)_第4页
C语言复习(终)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.标识符用户标识符用来给变量、函数、数组或者指针等命名。(1) 标识符只能由字母、数字和下划线组成。如:NO_1(2) 标识符的第一个字符必须是字母或下划线。(3) 标识符的大小写字母是有区别的,如abc和ABC是两个完全不同的标识符。 (4) 标识符不能使用关键字。关键字:关键字是具有特定的含义的、专门用来说明C语言特定成分的一类标识符。如:int ,case。实型数据(浮点数)常量符号常量不能被赋值2.实型常量(1)小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有数字。如:.23 ,123.876 ,123. (2)指数形式:用“e”或“E”后接一个整数,表示以10为底

2、的幂数。注意: “e”或“E”之前之后必须有数字,且之后的数字必须是整数。他们和前后的数字之间不能有空格。例如:下列合法的常量是(A )。A.-32169 B.0128 C.0XDEFG D.13E0.5 (E) 1.23E5.0(F)124E3. 格式说明符(1)普通字符原样输入,原样输出。如:printf(“ad,a+bd”,30,4+7);输出结果是:a30,a+b11(2)对于d格式,指定宽度小于输出宽度,原样输出。例如:printf(“%d,%6d,%-6d”,386,1234,3456);输出结果:386, 1234,3456 ,12345printf(“%2d”,12345);输

3、出结果:12345(3)#o,#x,#X表示要输出八进制的前导符数字0,和十六进制的前导符0x,0X。printf(“%#o,%#x,%#X”,17,27,27);021,0x1b,0X1B(4)x,X格式,小写对小写,大写对大写。(5)*md:表示跳过相应的输入项。如:scanf(“%*3d%2d%2d”,&a,&b);若输入:1234567则:a的值是:45,b的值是:67(6)在scanf()函数中,给double类型变量输入数据时,应该使用lf类型说明符,而输出时,可以用lf,也可以用lf。(7) %m.nf:输出占m列,其中有n位小数。若超过m列,确保n位小数后按实际

4、输出。注意四舍五入问题。如:printf(“%7.3f,%-7.3f,%4.2f”,3.1415726,3.1415926,314.5926);2个空格3.142,3.142空格空格,314.59(8) 多个%c格式之间没有其它字符,仍然不能用回车或空格来分隔。如:scanf(“%c%c%c”,&a,&b,&c);若输入:a空格b空格c<回车>a的值是a,b的值是空格,c的值是b。但若是scanf(“%d%d%d”,&a,&b,&c);则输入时要用回车或空格来分隔4. if 语句的嵌套if(表达式1) if(表达式2) 语句1; el

5、se 语句2;else if(表达式3) 语句3; else 语句4;else总是与前面最近的且未配对的if语句配对,组成一对if-else语句。5.1运算符以及其运算优先级别:详见附录C特别注意”/”运算符,当”/”左右两边的操作数均为整数时,其结果亦为整数,例如:5/2 =2 (2.5向下取整)强制类型转换,例如(int)3.2 à结果是3关系运算符:注意数学上1x2,不能写成1<=x<=2,而应当是写成1<=x&&x<=2赋值运算符的左边只能是一个变量,不能是常量(包括符号常量),也不能是表达式:例1=x,x+1=2这些都是不合法的。5.

6、2 条件运算符和条件表达式条件运算符:? :是唯一一个三目运算符。优先级别高于赋值运算,结合方向自右向左。格式:表达式1 ?表达式2 :表达式3执行方式:先求“表达式1”的值,若其值为“真”,求出“表达式2”的值作为整个条件表达式的值;若其值为“假”,求出“表达式3”的值作为整个表达式的值。例如:max=a>b?a:b;相当于:if(a>b) max=a; else max=b;a>b?a:c>d?c:d :相当于a>b?a:(c>d?c:d)6. switch语句格式:switch(表达式) case 常量表达式1:语句1;break; case 常量表达

7、式2:语句2;break; case 常量表达式n:语句n;break;default :语句n+1;break;说明:(1) switch语句体中可以没有break语句和default部分。(2) switch语句的圆括号中表达式的值必须是整型或是字符型,不能为实型。(3) 执行switch语句时,首先计算switch后圆括号的表达式的值,然后将这个值与语句体中case后的常量表达式的值相比较,如果某个常量表达式的值与之相等,则执行该case后的语句块;如果没有任何一个常量表达式的值与之相等,则执行default后的语句块。(4) 在执行的时候如果遇到break语句,则跳出switch语句。

8、如果执行完一个case或者default语句块后没有遇到break,则继续顺序往下执行,知道遇到break语句或者语句体被执行完毕为止。例如:switch(a) 当输入的a为1,b=2,则输出结果是1,2;2,3case 1:printf("%d,%d;",a+,b+); case 2:printf("%d,%d",a-,b-);(5) default最多只能有一个,通常出现在switch语句的最后部分,但也可以出现在case之间或所有的case之前。有以下程序 ,运行结果为?10,4,2main( ) int i,s1=0,s2=0,s3=0; for

9、(i=1;i<=10;i+)switch(i%5) case 1:s1+; case 2:s2+;break; case 3:s3+;continue; s1+;printf(“%d,%d,%d”,s1,s2,s3);7. while语句格式: while(表达式)循环体语句注意:1)while是C语言的关键字。2)while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达式,作用是控制循环。其值为“真”(非0)则执行循环体语句,否则跳出while循环。3)while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用括起,构成一条复合语句。8.do-while语句格式

10、: do 循环体while(表达式);注意:1)do是C语言的关键字,需要和while一起搭配使用。2)while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达式,作用是控制循环。其值为“真”(非0)则执行循环体语句,否则跳出while循环。3)while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用括起,构成一条复合语句。9. for语句格式:for(表达式1;表达式2;表达式3) 循环体执行过程: (1)计算表达式1; (2)计算表达式2,若其值为非0,转步骤(3);若其值为0则转步骤(5); (3)执行一次for循环体。 (4)计算表达式3,转步骤(2)。 (5

11、)结束循环,执行for语句后面的语句。程序运行后结果为?#include<stdio.h>int sum (int n) int i, s=0; for(i=1; i<n; i+) if(i%10=9) s=s+i; return s;void main() printf(“%d”,sum(69);10. break 和 continue 语句break 语句用于结束循环或switch结构。continue 语句用于结束本次循环,跳过循环中continue后尚未执行的语句,继续进行下一次循环条件的判断。11. 字符型变量关键字:char ,字符型变量在内存中占1字节。例:ch

12、ar a=5;a字符的ASCII码值是97A 字符的ASCII码值是65同一字母的大小写之差是32,那么我们要把小写字母变成大写字母就相应的字母减去32。例如:char a=A;printf(“%c,%d”,a,a);输出结果为A,65 第一个%c是输出a的字符形式,第二个%d是输出a的ASCII码12. 函数是C程序的基本单位。(1)函数的定义:函数返回值的类型名 函数名(类型名1 形参名1,类型名2 形参名2,.)说明部分语句部分说明:函数不能嵌套定义,不能在一个函数体内定义另一个函数。函数参数传递方向是实参向形参单向值传递函数返回值,函数形参类型以函数首部定义的为准,例如:int fun

13、(int a,float b) return a/b; /按给出的参值,计算结果是1.875,但实际上返回给主函数的是1void main()int t; t=fun(3.2,1.6); /调用时实际a=3,b=1.6printf(“%d”,t);/输出1函数可以相互调用,但不能调用main()函数。eg:下面函数fun的功能是计算并输出下列级数和,请填空#include<stdio.h>double fun(int n)double s=_0_;int i;for(i=1;i<=n;i+)s=s+_1.0/(i*(i+1)_;return s;int main()print

14、f(“%fn”,fun(10);return 0;(2) 函数的参数可以分为:形式参数和实际参数。形参:函数定义时函数名后小括号内的参数。实参:函数调用时函数名后小括号内的参数。注意:1)形参只有在该函数被调用时才占内存单元,即该变量才可用;函数调用结束时形参所占的内存单元被释放,即不可用。2)函数的定义放在函数调用之前或在调用之前对函数作原型(3)函数的返回值即函数值。return 语句的格式: return 表达式;或return (表达式);功能:将表达式的值作为函数值返回给主调函数,并结束本函数的执行。注意:1)函数值应通过return语句返回,一个函数中可以有多条return语句,只

15、要执行其中任何一条return语句,该函数立即结束执行,并将该retrun后表达式的值返回。例如:int max(int a,int b)if(a>b) return a; else return b;2)函数值的类型保持与函数定义时所指定的类型相同,3)函数无返回值(无return),可将函数指定为空类型(void)。4)没有返回值的函数不能作为其它函数的参数(4) 函数可以直接或者间接调用自己,称为递归调用。#include<stdio.h>int fun(int n) if (n<10) return n; else return (n%10)*fun(n/10)

16、;void main() printf(“%d”,fun(218);#include<stdio.h>float fun(int a,float f)if(a=1)return f;elsereturn f*fun(a-1,f);void main()printf("%fn",fun(3,2);(5) 若被调函数定义在主调函数之前时,可以不作原型声明(例题不用声明)。若被调函数定义在主调函数之后,则在调用前应作原型声明。例如:main()int a=2,b=5;void swap(int,int);/*原型声明*/ swap(a,b);/*函数调用*/ prin

17、tf(“a=%d,b=%d”,a,b);void swap(int a,int b)/*函数定义*/a=a+b;b=a-b;a=a-b;13. 指针(1)指针变量的定义格式:类型名*指针变量名;例:int *p, a=20;p=&a;因为变量存放了的地址,所以是指向的指针变量。在执行“p=&a;”,这个语句之后,只要p的值不改变,p<=>&a ,*p<=>a,例如:scanf(“%d”,&a);<=> scanf(“%d”,p);例:int *p=20; /*出错*/int a=20,*p=a;/*出错,指针变量只能用于存放地

18、址值*/(2) 通过指针引用数组元素 int a5=1,2,3,4,5,*p=a; 指针变量p指向数组元素a0, 因此可以用间接访问运算符“*”来引用变量a0。如:*p=10;是指针所指向的存储空间赋值,即a0=10,原来a0=1,那么通过指针赋值现在变成了10. (3)*p+与*(p+)等价,都是得到p当前所指向的元素的值,并让p指向下一个元素。(4) *+p与*(+p)等价,都是先让p指向下一个元素,再取出重新指向的元素。(5) (*p)+、+(*p)、+*p的作用都是让p当前所指的元素值增加。14.数组(1)一维数组的定义格式:类型名 数组名常量表达式;例如:int a8;注意:1)数组

19、名属于用户标识符,必须满足用户标识符的命名规则。如:int do5; float 3com10;char a-b5; 都是非法的定义2)定义数组时,方括号必不可少且表达式的值必须是大于0正整数,表示数组元素的个数,数组的长度。#define M 5 int aM;3)同一数组元素在内存中所占的存储空间是依次连续的,数组下标是从0开始。(2)一维数组元素的引用格式:数组名下标表达式如:double a10;/*定义数组*/int b=a4;/*引用数组元素a4*/int b=a2*2; /*引用数组元素a4*/(3)一维数组的初始化int a10=1,2,3,4,5,6,7,8,9,10;注意:

20、1)若中的初值个数多于数组元素的个数(即数组长度),则出错;若初值个数少于数组元素的个数,则将初值依次赋给前面的元素,而未得到初值的元素自动赋零。例如:int a5=1,2,3,4,5,6;/出错int a5=1,2,3;int a4=2*2;int a3=0;2)可以通过赋初值来定义数组的大小。此时数组的长度可以省略。若定义时,未赋初值,则长度绝不能省略。例如:int a =1,2,3,4; 数组的长度是4。int a ; 是非法的。(4) 二维数组的定义int a23;二维数组初始化1)直接赋值int a341,2,3,4,5,6,7,8,9;问a20的值是多少?9 a22的值是多少?0i

21、nt a220,0,0,0,0;/*非法的*/2)按行赋值int a3=1,2,3,4,5,6,7,8,9;省略的第一位长度为3,a21的值为8。在a22前面共有8个元素。例题:实现矩阵乘法#define N 3#define M 4#include<stdio.h>void main()int aNM;int bMN;int cNN=0;int i,j,k;for(i=0;i<N;i+)for(j=0;j<M;j+)scanf("%d",&aij);for(i=0;i<M;i+)for(j=0;j<N;j+)scanf(&quo

22、t;%d",&bij); for(i=0;i<N;i+)for(j=0;j<N;j+)for(k=0;k<M;k+)cij+=aik*bkj;for(i=0;i<N;i+)for(j=0;j<N;j+) printf("%5d",cij);printf("n"); 15. 结构体的3种定义变量方式struct student 正确的赋值: B.a=A.a int a,b; B. b=A.bA=1,2,B; B=Astruct student int a,b;struct student A;struct i

23、nt a,b;A,*B=&A;对于成员a的三种访问方式:A.a, (*B).a, B->a共用体与结构体类似,其中共用体的关键字是union。16.字符串一.字符串常量用一对双引号括起的若干个字符,可以0个字符,若为0个字符,则称为空串(” ”)。例如:“I LOVE YOU” “A”和A区别注意:(1)没有字符串变量,不能将一个字符串赋给一字符变量。字符串要用字符数组来存放。例如:char a=“A”; 不合法char a=“A”; 合法char bA; 合法且分析sizeof(a),sizeof(b),strlen(a)的不同(2)每一个字符串的系统会加一个字符串结束符0。二

24、.字符数组(1)在定义字符数组时,可以用字符串的形式给数组初始化,且可以省略。也可以将字符串拆成单个字符后依次放在一对花括号中给数组初始化。char s=“china”;char s=“china”;char s=c,h,i,n,a,0;char s6=“china”;char s6=c,h,i,n,a;char a5=”china;/*是非法的,没有元素存放0*/三.字符数组的输入输出(1)用s格式输入输出时,输入列表和输出列表均必须是用于存放字符串的起始地址(如字符数组名)。char a10;scanf(“%s”,a);/*数组名前,不能加地址运算符(&)*/printf(“%s”

25、,a);scanf(“%s”,&a);/*错误*/(2)用s格式在输入时,遇到空格符或回车符就表示结束输入;输出时,遇到串结束符0表示结束。例如:char a5;scanf(“%s”,a);若输入:ab空格cd回车,则数组a的值是“ab”。char a10”abc08230”;printf(“%s”,a);输出结果是:abc四.字符串的指针和指向字符串的指针变量字符串在内存中所占的连续的存储单元的首地址,称为字符串的指针。abcde0char *p=”abcde”; /*将字符串”abcde”的首地址赋给指针变量p*/p+2指向字符c。char a10;a=”abcde”;/*出错*/

26、五、字符串处理函数#include”string.h” 用于字符串处理函数#include”stdio.h” 用于标准输入输出函数(1)puts 函数(2)gets( )函数格式:gets(字符数组)功能:从键盘读取一个字符串赋给字符数组。注意:用gets函数输入字符时,只有遇到回车符才结束接收字符。(与s格式不同)。(3)strcat()函数格式:strcat(s1,s2);功能:将字符串s2连接到字符串s1的末尾,并自动覆盖s1末尾的0;例如:char a18=”yunnan”;char b10=”china”;strcat(a,b);执行上述语句后:数组a的内容是:“yunnanchin

27、a”(4)strcpy()函数格式:strcpy(s1,s2);功能:将s2中的字符串复制到s1中。最后s1和s2中的字符串一样。例如:char s110=”123456”;char s210=”abc”;strcpy(s1,s2);s1:abc0560000s1=s2;/*非法的,不能整体赋值*/(5)strcmp()函数格式:strcmp(s1,s2)功能:比较s1和s2两字符串的大小,并非比较长度。函数的返回值为两字符串中第一个不相同字符的ASCII码值之差,若差大于0,则s1大于s2,若差小于0,则s2大于s1,若差等于0,则s1和s2相等。例如:strcmp(“abc”,”abc”)

28、 值为:0strcmp(“abc”,”abdc”) 值为:-1strcmp(“abcdef”,”abd”) 值为:-1“abd”大于“abcdef”。strcmp(“abc”,ab”) 值为:99注意:不能用关系运算符来直接进行字符串大小的比较。“abc”“abc”/非法s1>s2/非法而要采用例如: if(strcmp(s1,s2)>0) puts(s1); else puts(s2);(6)strlen()求长度。char a10=”abc”;printf(“%d”,strlen(a);/结果为317.程序题1、实现两个字符串复制功能,不要用strcpy函数2、用递归方法求n!

29、。3、输出所有的三位“水仙花数”。4、求100200的全部素数。5、请编程实现输出以下图案。6、编程实现输出以下图案:*7、采用冒泡法对10个整数排序。10个整数用scanf函数输入。8、采用选择排序法对10个整数排序。10个整数用scanf函数输入。9、对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。设有10人投票。10. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数。第一题#include<stdio.h>#include&l

30、t;string.h>int main()char s180,s280;int i,n;printf("input s2:");scanf("%s",s2);n=strlen(s2);for (i=0;i<=n;i+)s1i=s2i;printf("s1:%sn",s1);return 0;第二题#include<stdio.h>int main()long fac(int n);int n;long y;printf("please enter an integer number:");s

31、canf("%d",&n);y=fac(n);printf("%d!=%1dn",n,y);return 0;long fac(int n)long f;if(n<0)printf("n<0,data error!");else if(n=0|n=1)f=1;else f=fac(n-1)*n;return(f);第三题#include<stdio.h>int main()int i,j,k,n;printf("narcissus numbers are ");for(n=100;n

32、<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("%d ",n);printf("n");return 0;第四题 #include "math.h" main( ) int m,i,k,n=0; for(m=101; m<=200; m+=2) k=sqrt(m); for (i=2;i<=k;i+) if (m%i=0) break; if (i>k) printf("%5d",m); n=n+1; if

33、 (n%10=0) printf("n"); 第五题#include<stdio.h>int main()int i,j,k;for(i=0;i<=4;i+)for(j=0;j<=3-i;j+)printf(" ");for(k=0;k<=2*i;k+)printf("*");printf("n");第六题#include<stdio.h>int main()char a6='*','*','*','*',&#

34、39;*','0' int i,j; char space=' ' for(i=0;i<5;i+) for(j=0;j<i;j+) printf("%c",space); printf("%sn",a);return 0;第七题#include<stdio.h>int main()void sort(int array,int n);int a10,i;printf("please enter array:n");for(i=0;i<10;i+)scanf(&quo

35、t;%d",&ai);sort(a,10);printf("the sorted array:n");for(i=0;i<10;i+)printf("%d ",ai);printf("n");return 0;void sort(int array,int n)int i,j,k,temp;for(i=0;i<n-1;i+)k=i;for(j=i+1;j<n;j+)if(arrayj<arrayk)k=j;if(k!=i)temp=arrayk;arrayk=arrayi;arrayi=temp;第八题#include <stdio.h> int main() int i,j,min,term,a11; printf("enter data:n"); for(i=1;i<=10;i+) 

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论