1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,一、语法,标识符:,由字母、数字和下划线三种字符构成,且必须以字母或下划线开头。,关键字不能作为用户定义标识符。,用户定义标识符:,合法:,char2 _abc a3 P1 max,等,不合法:,int p.i break 3a a+b,等,常量:,合法:,n 102 0 t 2L 72,等,不合法:,ABC 1.2e0.5 M ,等,基本数据类型:整型、实型、字符型,第1页,第1页,(,一,),运算符和表示式,:,1.,结合性及优先级,(p16),例,:a+=a*=2 a+=(a=a*2)a=a+(a=a
2、*2),若初始情况下,a=3,则执行上述运算后,a=?,12,2.,对操作数要求,(1)(i+j)+,3+(,),+,-,只能对变量操作,(2)a%b,%,两边操作数必须为整型,(3),a,b,若为整型,,则,a/b,为整除,1/5,结果为,0 1.0/5,结果为,0.2,(4),赋值号左边只能是变量名或数组元素名,x+y=3 (,)sqrt(4)=2 (,)s=s+i (,),(5),数值型和字符型在一定范围内可通用,char c=a;,printf(“%c%dn”,c+1,c+1);,(b 98),第2页,第2页,3.,用逻辑表示式表示某个命题,如,:ch=0&ch=a&x=100&x10
3、00 x,是一个,3,位整数,x,是一个,3,位整数,其十位数为:,x/10%10,或,x%100/10,有定义:,int a=1,b=3;float x=2.5;,则下列那些是合法表示式?,a+1=a+1,(,),+(a*b),(,),sqrt(16)=4,(,),a+=1,a=a+b a=a+b a=x%b,(,),x=(int)x%b;,x=10/3%5 x=x/2 a=b+a=+b,已知,a=b=1;,则执行语句,a-,后,a,、,b,值,?,(0,2),已知,a=b=1;,则执行语句,a-|b+;,后,a,、,b,值,?,(0,1),第3页,第3页,4.,初始化与赋值,错误,:int
4、 a=b=c=0;int a,b,c=0;,应为,:int a=0,b=0,c=0;,或,:int a,b,c;a=b=c=0;,5.,数据输入和输出,(,函数,scanf,printf,getchar(),putchar(),(,1,)数据如何输入,设:,int a,b;char c,d;,scanf(“%d%d,scanf(“%c%c,c=getchar();,d=getchar();,第4页,第4页,(,2,)数据输出,printf(a=%d,b=%d,a,b);,printf(“c=%c,d=%c,c,d);,putchar(c);,putchar(d);,c,为字符型变量,哪个是正确
5、语句?,c=abc;c=n;,(,),c=abc;,c=0;,(,),c=“101”;c=101;,(,),how do you do,第5页,第5页,6.,语句,:,(1)if,语句几种形式,if(),语句,;,if(),语句,1;else,语句,2;,if(),语句,1;,else if(),语句,2;,else,(2)switch,语句中适当地方加,break,退出,switch(a%5),case 0:printf(“%d ”,a+);,case 1:printf(“%d ”,+a);,case 2:printf(“%d ”,a-);,case 3:printf(“%d ”,-a);,
6、若,a=2,则输出:,(,直接输出,2 0,,在哪里加,break,都不行啊,),2 0,int a=3;,if(a)a=5;if(a!=0)a=5,if(!a)a=5;if(!(a!=0)a=5,if(a3)x=1;else x=0;,第6页,第6页,(3),循环,:,do _while,先执行后判断,至少执行一次,for,while,先判断后执行,也许一次也不执行,main(),int i,s=0;,for(i=1;i0;i-=2)s+=i;,printf(“%dn”,s);,8,9,main(),int i,s=0;,for(i=1;i=10;i+),if(i%3=0)break;,s=
7、s+i;,printf(“%dn”,s);,main(),int i,s=0;,for(i=1;i=10;i+),if(i%3=0)s=s+i;,printf(“%dn”,s);,3,18,第7页,第7页,下列程序段中循环执行次数是(),int k=1;,while(k=2)k+;,(,D,),int i,k=0;for(i=0;i!=k;i-)k+;,(,D,),A.,无限次,B.,有语法错,不能执行,C.1,次,D.0,次,int k=3;,while(k=0)k+;,(,D,),注意:,运算符“,=”,与“,=”,break,语句,用于退出本层循环及退出,switch,语句,第8页,第8
8、页,7.,数组,数值型,a.,定义、初始化,int a10=1,2,3,4;int a=1,2,3,4;int n=5,an;(,),b.,输入、输出,int a10;,输入,:for(i=0;i10;i+)scanf(“%d”,输出,:for(i=0;iscore (*t).score 正确,s-score t.score *t.score 错误,将“li ming”送到结构成员name中:,strcpy(s.name,”li ming”);strcpy(t-name,”li ming”);正确,s.name=“li ming”;t-name=“li ming”;错误,第20页,第20页,四
9、、文献,文献打开、字符读写与块读写。,(,1,)文献打开方式,如:,r,、,rb,、,w wb,(,2,)文献指针指向一打开文献,#,include,stdio.h,FILE*fp;,fp=fopen(,c:a.dat,wb,),(,3,)字符读写与块读写函数使用办法,fgetc,函数、,fputc,函数,fread,函数、,fwrite,函数,第21页,第21页,例:,从键盘输入一字符串,将小写字母转换成大写字母,,然后保留在,test.dat,文献中。,#include stdio.h,main(),FILE*fp;,char str100;,int i=0;,if(fp=fopen(te
10、st.dat,w)=NULL),printf(Can not open the filen);exit(1);,printf(Input a string:n);,gets(str);,while(stri!=,0,),if(stri=,a,&stri1),y=1;,else if(x=0),y=0;,else,y=-1;,部分算法举例分析:,第24页,第24页,main(),int i,n,max,min,a100;,scanf(%d,for(i=0;in;i+),scanf(%d,max=min=a0;,for(i=1;imax)max=ai;,if(aimin)min=ai;,print
11、f(max=%d,min=%d,max,min);,2.,int findmax(int a,int n),int i,max;,max=a0;,for(i=1;imax)max=ai;,return max;,第25页,第25页,3.,计数、求和、文本统计,统计整型数组中偶数个数。,main(),int a10,i,count=0;,for(i=0;i10;i+),scanf(“%d”,for(i=0;i=a&ch=z),sum+;,printf(“%dn”,sum);,第26页,第26页,4.,级数求和,计算:,s=1+1/2!+1/3!+1/n!,main(),int i,n;float
12、 t=1,s=0;,scanf(“%d”,for(i=1;i=n;i+),t=t/i;,s=s+t;,printf(“%fn”,s);,float fun(int n)int i,n;float t=1,s=0;for(i=1;i=n;i+)t=t/i;,s=s+t;,return s;main()scanf(“%d”,printf(m=%fn,fun(n);,第27页,第27页,最大公约数、最小公倍数,int gcd(int m,int n),int h;,while(h=m%n),m=n;n=h;,return(n);,main(),int x,y,g1,g2;,scanf(“%d%d”,
13、g1=gcd(x,y);,g2=x*y/g1;,printf(“%d,%dn”,g1,g2);,5.,素数,int isprime(int m),int i;,for(i=2;m%i!=0;i+);,return(i=m);,main(),int k,s=0;,for(k=100;k200;k+),if(isprime(k),s=s+1;,printf(“%d”,s);,第28页,第28页,6.,穷举法,鸡兔同笼,共有,30,个头,,90,只脚,求鸡兔各有多少,?,main(),int m;,for(m=1;m30;m+),if(m*2+4*(30-m)=90),printf(%d chick
14、ens and%d hares,m,30-m);,编一个程序,求出方程,x,2,+2x=y,3,(,其中,1=x=100;1=y=100),所有整数解。,main(),int x,y;,for(x=1;x=100;x+),for(y=1;y=100;y+),if(x*x+2*x=y*y*y),printf(x=%d,y=%dt,x,y);,第29页,第29页,void sort(int x,int n),int i,j,k,w;,printf(x=%pn,x);,for(i=0;in-1;i+),k=i;,for(j=i+1;jxj)k=j;,if(i!=k),w=xi;xi=xk;xk=w;
15、,main(),int n,a10,i;,printf(a=%pn,a);,scanf(%d,for(i=0;in;i+),scanf(%d,sort(a,n);,for(i=0;in;i+),printf(%d,ai);,printf(n);,7.,排序,冒泡法排序,for(i=0;in-1;i+)/*,从小到大排序*,/,for(j=0;jaj+1),temp=aj;aj=aj+1;aj+1=temp;,第30页,第30页,8.,字符串,(1),求长度,strlen,函数,long len(char s),long i=0;,while(si!=0)i+;,return i;,(2),复制
16、,strcpy,函数,#include stdio.h,main(),char s180,s280;int i;,gets(s1);,for(i=0;s1i!=0;i+),s2i=s1i;,s2i=0;,puts(s2);,第31页,第31页,连接,#include stdio.h,main(),char s180,s280;,int i,j;,gets(s1);gets(s2);,for(i=0;s1i!=0;i+);,for(j=0;s2j!=0;j+),s1i+j=s2j;,s1i+j=0;,puts(s1);,s1,a,b,c,d,e,0,s2,d,e,0,第32页,第32页,(4),
17、大小写转换,#include stdio.h,main(),char s80;,int i;,gets(s);,for(i=0;si!=0;i+),if(si=A&si=Z),si=si+32;,puts(s);,第33页,第33页,(5),字符串逆序存储、回文,#include stdio.h,#include string.h,main(),char s180,s280;,gets(s1);,strcpy(s2,s1);,n=strlen(s2);,for(i=0;in/2;i+),t=s2i;,s2i=s2n-i-1;,s2n-i-1=t;,if(strcmp(s1,s2),printf(yes);,else,printf(no);,第34页,第34页,9.,数据插入、删除,for(i=0;i10;i+),if(key=i;j-),aj+1=aj;,ai=key;,for(k=0;k10;k+),if(key=ak)break;,for(j=k;j9;j+),aj=aj+1;,第35页,第35页,