• 3.59 MB
  • 2022-04-29 14:28:05 发布

最新C语言考试、计算机等级考试复习专用复习资料!!!课件PPT.ppt

  • 103页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'C语言考试、计算机等级考试复习专用复习资料!!! 考试题型参考一、单选题(20-20)二、判断题(10-10)三、写出程序运行结果(20-5)四、程序填空(20-4)五、编写程序(30-3)10/6/20212 总复习10/6/20213 初等运算符()、[]、单目运算符!、++、––、+、–、(类型)算术运算符、/、%,+、–关系运算符<、>、<=、>=,==、!=逻辑运算符&&、¦¦条件运算符?:赋值运算符=、+=、–=、=、/=、%=逗号运算符,C中各类运算符的优先级:10/6/20217 3.复合的赋值运算复合赋值等价于a+=3a=a+3x=y+8x=x(y+8)不得写成:x=xy+8x%=3x=x%3在C中可以使用的复合赋值运算符有:+=、-=、=、/=、%=,<<=、>>=、&=、^=、¦=x%=y+3x=x%(y+3)不得写成:x=x%y+310/6/20218 自动类型转换(非赋值运算)"A"+12–10.05657766.95高doublefloatunsignedlonglongunsignedunsignedshort低intchar,short10/6/20219 强制类型转换强制类型转换运算符(类型名)表达式(double)3(int)3.8(double)(5/2)(double)5/23.032.02.510/6/202110 2.12C语句结构(p23)C的五类语句控制语句共9种(ifswitchforwhile…)函数调用语句printf(“ThisisaCstatement.”);c=max(a,b);表达式语句任何表达式的末尾加上分号“;”就构成语句。空语句;复合语句用{}括起来的一组语句称为复合语句。10/6/202111 %d以十进制输出整数。%o以八进制输出整数。%x以十六进制输出整数。%u以十进制输出unsigned数据。%c用来输出1个字符。%s用来输出一个字符串。%ms按m宽度输出字符串。若串长>m,则照字符串原样输出;若串长){case<常量表达式1>:语句序列1;case<常量表达式2>:语句序列2;case<常量表达式n>:语句序列n;default:语句序列(n+1);}10/6/202118 switch语句一般形式的流程图:?10/6/202119 Switch结构实现了完全地独立分支功能:先计算<表达式>的值,再从上到下地判断与哪一个<常量表达式>的值相等,如果<表达式>的值等于<常量表达式>i的值,则执行<语句序列>i,执行完后,跳出switch结构,执行switch结构外的下一条语句.10/6/202120 5循环程序设计循环程序的实现要点:归纳出哪些操作需要反复执行?循环体这些操作在什么情况下重复执行?循环条件选用合适的循环语句forwhiledo-while循环具体实现时考虑(循环条件):事先给定循环次数,首选for通过其他条件控制循环,考虑while或do-while10/6/202121 /*exam5_1.c简单几何级数的和*/#includemain(){inti,sum;sum=0;sum=sum+i;printf("sum=%dn",sum);}程序运行结果:sum=5050for(i=1;i<=100;i++)10/6/202122 例5-5从键盘输入一批学生的成绩,计算平均分。分析:求累加和确定循环条件不知道输入数据的个数,无法事先确定循环次数用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。10/6/202123 #includeintmain(void){intnum;doublegrade,total;num=0;total=0;printf(“Entergrades:n");scanf("%lf",&grade);/*输入第1个数*/while(grade>=0){/*输入负数,循环结束*/total=total+grade;num++;scanf(“%lf”,&grade);}if(num!=0)printf(“Gradeaverageis%.2fn",total/num);elseprintf("Gradeaverageis0n");return0;}Entergrades:6788735482-1Gradeaverageis72.80Entergrades:-16788735482Gradeaverageis010/6/202124 6函数调用的过程计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数,然后再从原先暂停的位置继续执行。函数遇return或最后的大括号,返回主函数10/6/202125 2.参数传递函数定义时的参数被称为形式参数(简称形参)doublecylinder(doubler,doubleh);函数调用时的参数被称为实际参数(简称实参)volume=cylinder(radius,height);实参形参在参数传递过程中,实参把值复制给形参。形参和实参一一对应:数量一致,类型一致,顺序一致形参:变量,用于接受实参传递过来的值实参:常量、变量或表达式单向传递10/6/202126 3.函数结果返回函数返回的两种情况完成确定的运算,有一个运算结果返回给主调函数。完成指定工作,没有确定的运算结果需返回给主调函数(函数类型void)。函数结果返回的形式:return表达式;return(表达式);10/6/202127 4.函数原型声明函数类型函数名(参数表);doublecylinder(doubler,doubleh);voidpyramid(intn);函数必须先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样。如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。只写函数定义中的第1行(函数首部),并以分号结束。10/6/202128 例1-3#includeintadd(intx,inty);main(){inta,b,c;printf(“pleaseinputvalueofaandb:n”);scanf(“%d%d”,&a,&b);c=add(a,b);printf(“sum=%d”,c);}intadd(intx,inty){returnx+y;}函数声明函数调用函数定义10/6/202129 数组和循环for(i=0;iintmain(void){inti,j;inta[3][2];for(i=0;i<3;i++)for(j=0;j<2;j++)a[i][j]=i+j;for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%4d",a[i][j]);printf("n");}return0;}a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]i=0j=0i=0j=1i=1j=0i=1j=1i=2j=0i=2j=1例7-5源程序01122310/6/202133 字符串字符串:一个特殊的一维字符数组""把字符串放入一维字符数组(存储)数组长度足够字符数组初始化:staticchars[80]="Happy";赋值:s[0]="a";s[1]="";输入:输入结束符==>字符串结束符""i=0;while((s[i]=getchar())!="n")i++;s[i]="";s[0]s[1]s[5]sHappy??10/6/202134 把字符串放入一维字符数组(存储)对字符串的操作===>对字符数组的操作只针对字符串的有效字符和字符串结束符""检测for(i=0;s[i]!="";i++)putchar(s[i]);s[0]s[1]s[5]sHappy??10/6/202135 题型复习10/6/202136 考试题型参考一、单选题二、判断题三、写出程序运行结果四、程序填空五、编写程序10/6/202137 一、选择题1.以下叙述中正确的是()A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其它函数之前D)所有被调用的函数一定要在调用之前进行定义10/6/202138 2.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是()A)6.500000B)6C)5.500000D)6.0000003.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是()A)scanf(“%2d%2d%2d”,&i,&j,&k);B)scanf(“%d%d%d”,&i,&j,&k);C)scanf(“%d,%d,%d”,&i,&j,&k);D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);10/6/202139 4.若x为unsignedint型变量,则执行下列语句后x值为()x=65535;printf(“%dn”,x);A)65535B)1C)无定值D)-15.定义变量时,若变量的的存储类别缺省,则默认的存储类型是(  )。A)autoB)registerC)externD)static10/6/202140 6.若有语句:int*p,a=4;和p=&a;下面均代表地址的一组选项是。A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p7.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下能正确执行的赋值语句是。A)c=*p1+*p2B)p2=cC)p1=p2D)c=*p1*(*p2)10/6/202141 8.以下不正确的说法是。A)在不同函数中可以使用相同名字的变量B)形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内的复合语句中定义的变量在本函数范围内有效10/6/202142 9下述程序的执行结果是(  )。#includeunionun{inti;charc[2];};voidmain(){unionunx;x.c[0]=1;x.c[1]=10;printf(“n%d”,x.i);}A)266B)11C)265D)13810/6/202143 10下列叙述中,正确的是()。 A)引用带参的宏时,实际参数的类型应与宏定义时的形式参数类型相一致 B)宏名必须用大写字母表示 C)宏替换不占用运行时间,只占编译时间 D)在程序的一行上可以出现多个有效的宏定义10/6/202144 二、判断题C程序中的函数不能嵌套调用,但可嵌套定义。( )。C语言认为名为Student和student的变量是不同变量。(  )。二维数组a[3][4]中,*(a+1)是第一行的首地址若用数组名作为函数调用时的实参,则实际上传递给形参数组的是数组的第一个元素的值(  )。若一个函数声明中没有给出返回值类型,且表示此函数没有返回值。10/6/202145 6、赋值运算符的结合性是“自右至左”()。7、continue语句只能退出一层循环。()。8、结构体类型数据可以嵌套定义。()。10/6/202146 程序填空题1.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。#include#defineN4intfun(int(*a)[N]){introw,col,max,min;for(row=0;rowmaxmin>max10/6/202147 2.下面函数的功能是将两个字符串s1和s2连接起来,请填空使程序完整。voidconj(char*s1,char*s2){char*p=s1;while(*s1)【1】;while(*s2){*s1=【2】;s1++,s2++;}*s1=’’;s1=p;}s1++*s210/6/202148 3.下面的程序是用指针来交换两个数据,请将缺省语句填上。voidexchange(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inta,b,*x,*y;a=10;b=20;x=&a;【】【】printf(“%d%dn”,*x,*y);}y=&b;exchange(x,y);10/6/202149 1、输出101-200之间的所有素数。#include①intprime(intn);voidmain(){inti,j=0;printf("101---200之间的素数为:n");for(i=101;i<=200;i++)if(prime(i)){if(j%5==0)printf("n");printf("%d,",i);j++;}}int②{inti;for(i=2;i<=sqrt(n);i++)if(n%i==0)return0;③;}10/6/202150 写出程序运行结果1.main(){inta=15,b=21,m=0;switch(a%3){case0:m++;break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf(“%dn”,m);}程序运行结果110/6/202151 2.main(){intk=1,n=263;do{k*=n%10;n/=10;}while(n);printf(“%dn”,k);}程序运行后的输出结果是:3610/6/202152 3.inta=1; intf(intc) {staticinta=2;  c=c+1;  return(a++)+c;} voidmain() {inti,k=0; for(i=0;i<2;i++) {inta=3;k+=f(a);}  k+=a;  printf(“%dn”,k);}10/6/202153 4.structstu{charno[5],intmath,inteng,intcomp};main(){structstus[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}}inti;floatsum=0;for(i=0;i<3;i++)sum=sum+s[i].eng;printf("%6.2fn",sum);}程序运行后的输出结果是:270.0010/6/202154 编程题10/6/202155 字符串问题多项式问题数组遍历(二维数组)10/6/202156 intmain(void){inti,m;printf(“Enteranumber:");scanf("%d",&m);for(i=2;i<=m/2;i++)if(m%i==0)break;if(i>m/2)printf("%disaprimenumber!n",m);elseprintf("No!n");}源程序-判断素数Enteranumber:9NoEnteranumber:1111isaprimenumber!循环条件?循环的结束条件?10/6/202157 【例5-8】求sin(x)=x-x3/3!+x5/5!-x7/7!+…直到最后一项绝对值小于le-7(即10-7)为止。分析:多项式从第二项起,每一项都是前一项乘以一个因子,(-x2)/(n*(n-1))(n=3,5,7,9……)用s代表sin(x)的值,t代表每一项的值,则:t=t*(-x2)/(n*(n-1));s=s+t;x的值是用弧度值表示的(10=/180弧度),如:3000.523598775算法流程图如后图:10/6/202158 /*exam5_8.c求sin(x)的值*/#include#includemain(){doubles,t,x;intn=1;scanf("%lf",&x);t=x;s=x;do{n=n+2;t=t*(-x*x)/(n*(n-1));s=s+t;}while(fabs(t)>=1e-7);printf("sin(%lf)=%lfn",x,s);}程序运行结果:1.57sin(1.570000)=1.00000010/6/202159 数组:编写程序,判断某一字符串是不是“回文数”#defineN40voidmain(){charstr[N],ch="Y";inti,len;printf(“Inputastring:”);/*提示信息Inputastring:*/scanf(“%s”,str)/*用scanf()函数输入一个字符串*/len=strlen(str);/*求字符串的长度*/for(i=0;iintmain(void){intcount,i;charstr[80];printf(“Enterastring:");i=0;while((str[i]=getchar())!="n")i++;str[i]="";/*输入结束符=>字符串结束符*/count=0;for(i=0;str[i]!="";i++)if(str[i]<="9"&&str[i]>="0")count++;printf("count=%dn",count);return0;}源程序字符串的输入Enterastring:It"s512?count=3能省略str[i]=""吗?012345678sIt"s512??10/6/202162 指针:在主函数中输入两个整数存入变量,调用交换函数交换两变量的值。#include"stdio.h"voidmain(){inta,b;voidswap(int*p,int*q);/*交换函数的说明*/printf(“请输入两个数:”);   /*提示输入两个变量*/scanf(“%d%d”,&a,&b);/*使用scanf()函数输入两个整数*/printf("交换前 a=%db=%dn",a,b);swap(&a,&b);/*调用交换函数*//*输出交换后两变量的值*/}voidswap(int*p,int*q)/*交换函数的头部*/{inttemp;temp=*p;*p=*q;*q=temp;/**p与*q交换*/}10/6/202163 【例9-1】阅读下面的程序,了解结构体成员的使用/*exam9_1.c结构体成员的使用*/#include#includestructscore{intmath;inteng;intcomp;};structstu{charname[12];charsex;longStuClass;structscoresub;}10/6/202164 main(){structstustudent1={"LiMing","M",990324,88,80,90};structstustudent2;student2=student1;student2.name[0]="H";student2.name[1]="u";student2.StuClass=990325;student2.sub.math=83;printf("Record1-%s,%c,%ld,%d,%d,%dn",student1.name,student1.sex,student1.StuClass,student1.sub.math,student1.sub.eng,student1.sub.comp);printf("Record2-%s,%c,%ld,%d,%d,%dn",student2.name,student2.sex,student2.StuClass,student2.sub.math,student2.sub.eng,student2.sub.comp);}程序运行结果:Record1---LiMing,M,990324,88,80,90Record1---HuMing,M,990325,83,80,9010/6/202165 §9.2.2结构体数组成员的初始化和引用结构体数组成员的值也可以初始化,初始化的形式与二维数组的初始化形式类似。例如:structstudentstu[30]={{“LiFei”,“DongFengRoad14”,430038},{“LiMing”,“zhongshanRoad378”,430082},{“LiYong”,“XiaoShanRoad25”,430001}};10/6/202166 结构体数组的引用完全类似于结构体变量的引用,只是用结构体数组元素来代替结构体变量,其他规则不变,如下面所示:*/引用某一元素的成员*/stu[0].namestu[0].agestu[0]=stu[2];*/将结构体数组元素作为一个整体来使用*/10/6/202167 定义一个函数,可求3行4列整型数组中最大,最小元素值及它们的位置;要求在main中输入输出数组,并在main中输出所要求的数据;该整型数组为全局变量。#include"stdio.h"inta[3][4]={5,6,7,8,1,2,3,4,11,12,9,10};Intmin,max,x1,y1,x2,y2;voidmn(intb[][4]);main(){mn(a);printf("MAXISa[%d][%d]=%dn",x1,y1,max);printf("MINISa[%d][%d]=%dn",x2,y2,min);}10/6/202168 voidmn(intb[][4]){inti,j;max=b[0][0];min=b[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++){if(a[i][j]>max){max=a[i][j];x1=i;y1=j;}if(a[i][j]intmain(void){inti,a[10],n;voidreverse(int*p,intn);printf("Entern:");scanf("%d",&n);printf("Enter%dintegers:",n);for(i=0;i