《二级C语言复习》PPT课件_第1页
《二级C语言复习》PPT课件_第2页
《二级C语言复习》PPT课件_第3页
《二级C语言复习》PPT课件_第4页
《二级C语言复习》PPT课件_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计复习,(一)要点(二)概念50%-疑难举例(三)编程50%-部分编程题解,衷心祝愿各位取得好成绩!,学好C程序设计关键在于用好“两脑两手”:两脑-大脑和电脑两手-左手和右手除了多编程多上机外别无选择!,C程序设计复习,阅读讲义(含例题)复习习题(55道)(一)要点,C语言基础,1C语言基础基本数据类型(int,float,double,char)变量(命名规则,类型,值,占用内存大小,地址)变量(作用域,存储类,生存期,可见性)表达式表达式的种类表达式的计算规则逗号表达式赋值语句C程序的基本结构-顺序结构,选择结构,循环结构运算符的优先级和结合性一维数组和二维数组,2函数-C程序的基本积木块,如何编写(定义)函数?如何使用(调用)函数?函数的类型和返回值函数的形式参数和实在参数函数的参数传递(单向传值)哪些类型的变量可以作函数的参数?如何编写递归函数?,3指针-C语言的一大特色,指针与指针变量的概念运算符则*(p+i)与si等价,p+i与则*(p+i),*(a+i),pi,ai同值;*(*(p+i)+j),*(*(a+i)+j),*(pi+j),pij,aij同值。指向函数的指针变量,4结构体-有广泛的应用背景,结构体类型与结构体变量的定义结构体类型与结构体变量的区别如何引用结构体变量(即存取数据)?如何计算结构体变量的大小?单向链表的建立,插入,删除与排序,5文件-有广泛的应用背景,文本文件与二进制文件文本文件的打开与关闭(fopen,fclose)文本文件的读与写操作(fgetc,fputc,fgets,fputs,fscanf,fprintf)二进制文件的读与写操作(fread,fwrite)其它的文件操作(fseek),C程序设计复习,(二)基本知识疑难举例做完习题集中的选择题部分对掌握C语言的基本知识大有助益。若能加做其中的填空题更有好处。,标识符大小区分Sum=i=j=5;sum=(j-,i+,i+);printf(“%d”,Sum);关键字不能作为标识符(用户标识符)指出不合法的标识符:A)nameB)_oldC)charD)turbo_c,赋值号不能与等号相混淆下述循环的循环次数是intk=2;while(k=0)printf(%d,k),k-;printf(n);A)无限次B)0次C)1次D)2次数学中的不等式不能与C语言中关系表达式相混淆00.5104;k-)switch(k)case1:case4:case7:s+;break;case2:case3:case6:break;case0:case5:s+=2;break;printf(s=%d,s);/*s=3*/,(3)执行语句for(i=0;i+10;);后变量i的值是(表达式中自加)A)9B)10C)11D)不变若有以下定义语句,则sizeof(x)和sizeof(y)的值是structinthour;intminute;intsecondx,*y;y=A)6,2B)6,6C)3,2D)3,3,函数的定义与调用,内部静态变量运行以下程序,输出的结果是#includemain()inta=1,b=2;printf(%d,func(a,b);printf(%d,func(a,b);func(intx,inty)staticinta=0,b=1;a=b*2;,b=a+x+y;return(b);A)5,5B)4,7C)5,13D)5,7变量的作用域下面程序的输出是#inckudeinta5,k;main()fun1();fun3();fun2();fun3();,fun1()for(k=0;k5;k+)ak=0;fun2()inta5;for(k=0;k5;k+)ak=k;fun3()for(k=0;k5;k+)printf(%d,*(a+k);A)0000000000B)0000001234C)0000012345D)0123400000,用下列语句定义a,b,c,然后执行b=a,c=b+b,则b,c的值为(宽度不同的整数之间相互赋值)longa=0 xffffff;intb;charc;A)0 xffffff和ox61B)-1和98C)-1和97D)指向同一地址执行下面程序片段后的输出结果是floatf1=111.111;printf(%ff1=%8.3fn,f1);A)%ff1=111.111B)%ff1=111.111C)f1=111.111D)f1=111.111,设x,y为int型变量,z为float型变量,有以下语句:scanf(%2d%*2d%2d%f,A)100B)200C)100,200D)编译出错,下列程序输出结果是(阅读程序的方法)#includemain()intn2,i,j,k;for(i=0;i2;i+)ni=0;k=2;for(i=0;ik;i+)for(j=0;jnext=head;B)new-next=head;head=new;C)new-next=head;head=new;new-next=NULL;D)head-next=NULL;head-next=new;new-next=head;,若有运算符,sizeof,n-)printf(“%2d”,an);printf(“ncount=%d”,count);,/*6.1*/讲解main()inta,b,temp,product;printf(“Inputtwopositiveintegers:”);scanf(“%d%d”,习题6.3求S=a+aa+aaa+aaaa的值。假设a的值是2。讲解:tn=tn-1*10+amain()intn,a,i;longs,t;printf(Entera,/*ex0604*/讲解main()floatfac,sum;intj;for(sum=0,j=1,fac=1;j=20;j+)fac*=j;sum+=fac;printf(“sum=%fn”,sum);,/*ex0606*/讲解main()inti,j,k,m;for(m=100;m=999,m+)i=m%10;/*个位*/j=m/10%10;/*十位*/k=m/100;/*百位*/if(m=i*i*i+j*j*j+k*k*k)printf(%-4d”,m);printf(“n”);,/*ex0608*/前项分子+分母为后项分子;前项分子为后项分母main()intm;floata=2.0,b=1.0,sum=0.0;/*a为分子b为分母*/for(m=1;m=20;m+)sum+=a/b;a=a+b;/*前项分子+分母为后项分子*/b=a-b;/*前项分子为后项分母*/printf(“sum=%fn”,sum);,main()/*ex0614*/讲解inti,k;for(k=1;k5;k+)for(i=0;i4-k;i+)printf();for(i=0;i2*k-1;i+)printf(*);printf(n);for(;k8;k+)for(i=0;ik-4;i+)printf();for(i=0;i15-2*k;i+)printf(*);printf(n);,#includestdio.h”#defineN10main()/*习题7-2*/讲解inti,j,k,t,aN;printf(nninputis);for(i=0;iaj)k=j;/*修改k*/if(k!=i)t=ak;ak=ai;ai=t;for(i=0;iN;i+)printf(%4d,ai);,#include“stdio.h”/*习题7.4*/讲解#defineN5main()intaN+1=1,4,6,8,10,x,i,j;printf(“Enterx:”);/*输入一个数*/scanf(%d,#includestdio.h#defineN10main()/*习题7-5*/intaN;inti,j,t;for(i=0;iN;i+)scanf(%d,#defineN10main()/*习题7.6方法一*/intaNN,i,j;for(i=0;iN;i+)ai0=aii=1;/*第0列和对角线上元素置1*/for(i=2;iN;i+)/*从第二行开始*/for(j=1;ji;j+)/*前行j-1与j列之和为本行j列的值*/aij=ai-1j+ai-1j-1;for(i=0;i=M)无鞍点,否则aimaxj是鞍点,/*打印图案7.11*/#includestdio.h#defineN5main()inti,j;printf(nn);for(i=0;iN;i+)for(j=0;ji+20;j+)putchar();for(j=0;jN;j+)putchar(*);printf(n);,#includestdio.h”#include#defineN20main()/*习题7-13*/charstr1N,str2N;inti,j;printf(ninputstring1:);gets(str1);printf(ninputstring2:);gets(str2);for(i=0;str1i!=0;i+);j=0;while(str1i+=str2j+)!=0);printf(nnewstring1is:t%st,str1);,#include#sefineMAX100main()/*习题7.14*/chars1MAX,s2MAX;inti=0;printf(“Inputthefirststring:”);gets(s1);printf(“Inputthesecondstring:”);gets(s2);while(si!=0,#includestdio.h“#include#defineN20main()/*习题7-15*/charstr1N,str2N;inti=0;printf(ninputstring2:);gets(str2);while(str1i=str2i)!=0)i+;printf(nstring1is:t%s,str1);,#includestdio.h/*-*/intmaxM(intm,intn)intr;while(n!=0)r=m%n;m=n;n=r;return(m);/*-*/intminM(intm,intn)return(m*n/maxM(m,n);,voidmain()inta,b;printf(ntEntertwointegers:);scanf(%d%d,讲解习题8-1,#includestdio.h”#includemath.h“/*讲解习题8-3*/intisPrimeNum(intn)inti,k;k=sqrt(n);for(i=2;istrlen(t)strcpy(t,sub);voidmain()charstr200,t30;gets(str);getMaxLenWord(str,t);printf(ntMaxlengthword:%sn,t);,#includestdio.h“/*习题8-16*/*高位部*16+本位值*/longintcovert(chars)inti;longintn=0;for(i=0;si!=0;i+)if(si=A,#includestdio.h“/*讲解习题8-17*/voidprint(intn)inti;if(i=n/10)!=0)print(i);putchar(t);putchar(n%10+0);/*-*/voidmain()intn;printf(ntEnterainteger:);scanf(%d,习题9.1#defineexchange(x,y)t=x,x=y,y=tmain()inta,b,t;scanf(“%d%d”,/*P1999.2习题*/#defineMod(a,b)(a)%(b)main()intx,y,t;printf(Inputtwointegers:);scanf(%d%d,p,begin,/*10.3*/*要求用3个函数,一个输入,一个处理,一个输出*/#defineN10/*-*/voidinput(int*p)int*begin;printf(nEnter10numbers:);for(begin=p;pbegin+N;p+)scanf(%d,p);,/*-*/*将最大的一个与最后一个互换,将最小的一个与第一个数互换*/voidprocess(int*p)/*此算法有错,如下图的数据,则结果错*/int*max,*min,*begin,t;max=min=p;/*开始时,将最大和最小指针指向第一数*/for(begin=p;p*max)max=p;if(*p*min)min=p;/*交换操作:最大数*/t=*(begin+N-1);*(begin+N-1)=*max;*max=t;/*交换操作:最小数*/t=*begin;*begin=*min;*min=t;,max,min,voidprocess(int*p)/*修改后*/int*max,*min,*begin,t;begin=p;max=min=p;/*开始时,将最大和最小指针指向第一数*/for(;p*max)max=p;/*交换操作:最大数*/t=*(begin+N-1);*(begin+N-1)=*max;*max=t;for(p=begin;pbegin+N;p+)if(*p*min)min=p;/*交换操作:最小数*/t=*begin;*begin=*min;*min=t;,/*-*/voidoutput(int*p)int*begin;printf(nTheresultare:);for(begin=p;pbegin+N;p+)printf(%4d,*p);/*-*/main()intaN;input(a);process(a);output(a);,/*10.4*/#defineN10/*-*/voidexchange(int*a,intm)inti,t,j;for(i=0;i=0;j-)*(a+j+1)=*(a+j);/*从倒数第二个数开始各数右移一位*/*a=t;/*将t存入第一个位置*/,/*-10.4的主函数-*/main()inti,m,aN;printf(nEnter%dnumbers:,N);for(i=0;iN;i+)scanf(%d,/*-*/,#defineMAX50/*10.5的解法*/intex1005(int*p,intn)inti,k=0,m=n;/*k记报数,m记在位人数*/for(i=0;i1)if(*(p+i)=1)k+;/*报数*/if(k=3)*(p+i)=0;k=0;m-;i=(i+1)%n;/*未完,接下页*/,for(i=0;in;i+)if(*(p+i)=1)returni;main()intaMAX,n;clrscr();printf(“Inputthenumbersofpeople:”);scanf(“%d”,/*10.7*/#defineN10/*-*/voidcopystring(char*s,intm,char*t)char*p;for(p=s+m;p=A,/*习题10.8的主函数*/main()chars100;intupper,lower,blank,digiter,other;printf(“Inputastring:”);gets(s);count(s,/*10.14*/#defineN10/*-*/voidreverse(int*a,intn)int*p,t;p=a+n-1;while(ap)t=*a;*a=*p;*p=t;a+;p-;/*-*/main()inti,aN;printf(ntEnter%dnumbers:,N);for(i=0;iN;i+)scanf(%d,a+i);reverse(a,N);printf(ntResults:);for(i=0;iN;i+)printf(%4d,*(a+i);,/*10.17*/intstrcomp(char*s1,char*s2)for(;*s1=*s2,/*10.20希望大家仔细阅读*/#defineN5/*-选择排序-*/voidsort(char*str,intn)char*t1,*t2,*p1,*p2;for(p1=str;p10)t1=p2;/*让t1始终指向小者*/t2=*p1;/*p1中的地址与t1中的地址交换*/*p1=*t1;*t1=t2;,/*-*/main()char*sN=Pascal,C,Basic,Fortran,Java;inti;sort(s,N);printf(ntResults:);for(i=0;iscore0,pst-score1,pst-score2);pst+;,11.5#defineN10/*有N个学生数*/#defineM3/*各修M门课程*/typedefstruct/*学生结构*/intno;charname20;intscoreM;intave;STUD;/*-*/voidinput(STUD*s)/*从键盘上输入N个学生的信息*/inti,j,temp;/*计算各学生的平均成绩*/for(i=0;ino,s-name);for(temp=0,j=0;jscorej);temp+=s-scorej;s-ave=temp/M;,/*-*/voidprintAver(STUD*s)/*输出N个学生的总平均成绩*/inti,sum=0;for(i=0;iave;printf(tTotalaverageis:%dn,sum/N);,/*-*/voidprintMax(STUD*s)/*输出N个学生中平均分最高的学生信息*/inti;STUD*p=s;for(i=0;iaveave)p=s;printf(tThetopstudent%d%s,p-no,p-name);for(i=0;iscorei);printf(%dn,p-ave);,/*-*/main()STUDstuN;system(cls);input(stu);/*输入N个学生的信息*/printAver(stu);/*输出N个学生的总平均成绩*/printMax(stu);/*输出N个学生中平均分最高的学生信息*/,11.8#includestdio.h#defineLENsizeof(structstudent)typedefstructstudentintno;intscore;structstudent*next;STUD;,/*输出head指针所指的链表(带头结点)*/voidprint(STUD*head)STUD*p;p=head-next;if(p!=NULL)printf(ntThelistis:n);while(p!=NULL)printf(tNum=%dScore=%dn,p-no,p-score);p=p-next;,STUD*create()STUD*head,*last,*new;head=last=(STUD*)malloc(LEN);/*申请一个头节点*/last-next=NULL;while(new=(STUD*)malloc(LEN)!=NULL)/*申请一个数据节点*/printf(“nEnterNo/*返回链表的表头*/,voidinsert(STUD*head,STUD*pt)/*将pt节点按学号从小到大插入到head为头指针的链表*/STUD*p;p=head;while(p-next!=NULL,STUD*merge(STUD*pA,STUD*pB)/*将PA,PB两个链表合并*/STUD*pH,*pT;pH=pA;pA=pA-next;pH-next=NULL;while(pA!=NULL)/*将pA链表按要求插入pH链表*/pT=pA;pA=pA-next;insert(pH,pT);pB=pB-next;while(pB!=NULL)/*将pB链表按要求插入pH链表*/pT=pB;pB=pB-next;insert(pH,pT);returnpH;,main()STUD*pa,*pb,*pc;system(cls);printf(tCreatelinkAn);pa=create();printf(ntCreatelinkBnn);pb=create();pc=merge(pa,pb);print(pc);,11.12将单链表倒置将带表头结点的单链表倒置(先看下页的算法思想)STUD*reverse(STUD*head)STUD*movenode,*remains;remains=head-next;/*remains指向剩余部分*/head-next=NULL;/*此时head指向的链表只有一个表头结点*/while(remains!=NULL)/*若链表未处理完*/movenode=remains;/*movenode指向卸下的结点*/remains=remains-next;/*remains指向剩余部分*/movenode-next=head-next;/*movenode的下一个结点应是原第一个结点*/head-next=movenode;/*movenode作为新的第一个结点*/returnhead;,head,head,remains,head,remains,head,remains,movenode,movenode,将不带表头结点的单链表倒置(先看下页的算法思想)STUD*reverse(STUD*head)STUD*movenode,*remains;remains=head;/*remains指向剩余部分*/head=NULL;/*此时head指向的链表为空*/while(remains!=NULL)/*若链表未处理完*/movenode=remains;/*movenode指向卸下的结点*/remains=remains-next;/*remains指向剩余部分*/movenode-next=head;/*movenode的下一个结点应是原第一个结点*/head=movenode;/*movenode作为新的第一个结点*/returnhead;,head,head=NULL,remains,head,remains,head,remains,movenode,movenode,13.5A,B为两个文本文件,各存放一行字母,试将A,B中的字母按字典顺序合并后输出到新文件C中。#includestdio.hmain()FILE*fpA,*fpB,*fpC;chars200;inti,j,k,t;if(fpA=fopen(“A.txt”,rt)=NULL)abort();if(fpB=fopen(“B.txt”,rt)=NULL)abort();if(fpC=fopen(“C.txt”,wt)=NULL)abort();,i=0;/*将文件A和B中的字符装入内存*/while(si=fgetc(fpA)!=EOF)i+;while(si=fgetc(fpB)!=EOF)i+;si=0;for(i=0;si!=0;i+)/*对字符串中的字符排序*/k=i;for(j=i+1;sj!=0;j+)if(sksj)k=j;t=si;si=sk;sk=t;printf(“%sn”,s);fprintf(fpC,%s,s);fcloseall();,获得“获得知识的能力”比获得知识更重要。,学习方法之一:,举一反三,触类旁通,思考题:A,B为两个文本文件,各存放若干整数,试将A,B中的字母按字从小到大顺序合并后输出到新文件C中。注:空格为整数的分隔符,#includestdio.h“#defineMAX200main()FILE*fpA,*fpB,*fpC;intsMAX;inti,j,k,t,n;if(fpA=fopen(“A.txt”,rt)=NULL)abort();if(fpB=fopen(“B.txt”,rt)=NULL)abort();if(fpC=fopen(“C.txt”,wt)=NULL)abort();,i=0;/*将文件A和B中的整数装入内存*/while(fscanf(fpA,”%d”,问题:如果A.txtB.txt中整数数据很多sMAX容纳不了怎办?,13.6有五个学生,每个学生有3门课成绩,从键盘输入数据包括学号,姓名,三门课成绩,计算出平均成绩,将原有数据和平均成绩存入磁盘文件stud中。#includestdio.h#defineN5/*学生数*/#defineM3/*课程数*/typedefstruct/*学生结构*/intno;charname20;intscoreM;floatave;STUD;/*定义结构体类型*/,main()STUDstu;/*定义结构体变量*/FILE*fp;inti,j,temp;if(fp=fopen(stud.dat,wb)=NULL)abort();for(i=0;iN;i+)printf(tEnterNoNameand%dscoresn“,M);scanf(“%d%s”,13.7将13.6题文件stud中的学生成绩,按平均成绩进行排序处理,将已排序的学生数据存入另一新文件stu_sort中。#includestdio.h#defineN5/*N个学生*/#defineM3/*M门课*/typedefstruct

温馨提示

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

最新文档

评论

0/150

提交评论