主讲:邹显春E-Mail:zouxc@swu.edu.cnC语言基础部分一、历年试题剖析序号知识点覆盖抽中率1按照结构体成员筛选并排序10%2字符串替换、改写、排序、移动24%序号知识点覆盖抽中率3数位分解—筛选或重组后统计、排序求平均25%4初等数学—素数、统计个数、平均、方差、整除问题19%序号知识点覆盖抽中率5遍历统计、移动或倒排3%6选票问题4%7排序—相邻大小筛选统计后、后3位、数组排序8%8其他经典问题8%二、准确完成三级上机题的方法与策略:1.快速读懂题的内涵—5分钟之内2.快速阅读给定的程序内涵---5-10分钟4.分析所做工作的算法—20分钟之内3.明确自己要做的工作---1分钟之内准确完成三级上机题的方法与策略:5.编码、编辑、编译、连接、执行、调试---20-30分钟调试方法单步调试设置断点以未来教育培训为主线以题型为主线1按照结构体成员筛选并排序10%解决的两个关键技巧1.结构体变量的访问2.排序算法(要求掌握选择排序算法)第1-10套第1套voidSortDat(){inti,j;PROtemp;for(i=0;iMAX-1;i++)for(j=i+1;jMAX;j++)if(strcmp(sell[i].mc,sell[j].mc)0){temp=sell[i];sell[i]=sell[j];sell[j]=temp;}elseif(strcmp(sell[i].mc,sell[j].mc)==0)if(sell[i].jesell[j].je){temp=sell[i];sell[i]=sell[j];sell[j]=temp;}}第2套voidSortDat(){inti,j;PROtemp;for(i=0;iMAX-1;i++)for(j=i+1;jMAX;j++)if(sell[i].jesell[j].je){temp=sell[i];sell[i]=sell[j];sell[j]=temp;}elseif(sell[i].je==sell[j].je)if(strcmp(sell[i].dm,sell[j].dm)0){temp=sell[i];sell[i]=sell[j];sell[j]=temp;}}第1套2数的分解—按数筛选统计并排序12%(11-22套)解决的关键技巧1.数的分离3.排序算法(要求掌握选择排序算法)2.筛选出满足条件的数并统计温馨提示:数的分离方法:(1)当整数n(如有4位)的位数确定时,可分别定义个位、十位、百位、千位,利用运算%和/实现。个位i1=n%10;十位i2=n%100/10;百位i3=n%1000/100;千位i4=n/1000;(2)当整数n(如有4位)的位数不确定时,通常利用循环结构实现,但必须使用运算%和/。i=0;while(n0){a[i++]=n%10;//下标为0的元素存放n的最低位,i最终的值为n的位数n=n/10;}第11套#includestdio.hinta[300],b[300],cnt=0;voidreadDat();voidwriteDat();voidjsValue(){}voidmain(){inti;readDat();jsValue();writeDat();printf(cnt=%d\n,cnt);for(i=0;icnt;i++)printf(b[%d]=%d\n,i,b[i]);}voidreadDat(){FILE*fp;inti;fp=fopen(IN.DAT,r);for(i=0;i300;i++)fscanf(fp,%d,,&a[i]);fclose(fp);}voidwriteDat(){FILE*fp;inti;fp=fopen(OUT.DAT,w);fprintf(fp,%d\n,cnt);for(i=0;icnt;i++)fprintf(fp,%d,\n,b[i]);fclose(fp);}voidjsValue(){inti1,i2,i3,i4;inti,j,temp;for(i=0;i300;i++){i1=a[i]%10;//个位i2=a[i]%100/10;//十位i3=a[i]%1000/100;//百位i4=a[i]/1000;//千位if(i1+i4==i2+i3)b[cnt++]=a[i];//n为满足条件的数是个数}for(i=0;icnt-1;i++)for(j=i+1;jcnt;j++)if(b[i]b[j]){temp=b[i];b[i]=b[j];b[j]=temp;}}自己完成代码序号知识点覆盖抽中率3数位分解—筛选求平均4%(23-26套)解决的关键技巧1.数的分离2.求平均值—先求和,再求平均值第23套#includestdio.hinta[300],cnt=0;doublepjz1=0.0,pjz2=0.0;voidreadDat();voidwriteDat();voidjsValue(){}voidmain(){readDat();jsValue();writeDat();printf(cnt=%d\n满足条件的平均值pjz1=%7.2lf\n不满足条件的平均值pjz2=%7.2lf\n,cnt,pjz1,pjz2);}voidreadDat(){FILE*fp;inti;fp=fopen(in.dat,r);for(i=0;i300;i++)fscanf(fp,%d,,&a[i]);fclose(fp);}voidwriteDat(){FILE*fp;fp=fopen(out.dat,w);fprintf(fp,%d\n%7.2lf\n%7.2lf\n,cnt,pjz1,pjz2);fclose(fp);}voidjsValue(){inti1,i2,i3,i4;inti,cnt2=0;for(i=0;i300;i++){i1=a[i]%10;//个位i2=a[i]%100/10;//十位i3=a[i]%1000/100;//百位i4=a[i]/1000;//千位if(i3+i4==i2+i1){pjz1+=a[i];//满足条件的数求和cnt++;}else{pjz2+=a[i];//不满足条件的数求和cnt2++;}}pjz1/=cnt;//满足条件的数平均值pjz2/=cnt2;//满足条件的数平均值}自己完成代码序号知识点覆盖抽中率4数位分解—重组后再筛选并排序9%(27-35套)解决的关键技巧1.数的分离3.排序2.注意重组规则第27套#includestdio.h#defineMAX200inta[MAX],b[MAX],cnt=0;voidwriteDat();voidjsVal(){}voidreadDat(){inti;FILE*fp;fp=fopen(IN.DAT,r);for(i=0;iMAX;i++)fscanf(fp,%d,&a[i]);fclose(fp);}voidmain(){inti;readDat();jsVal();printf(满足条件的数=%d\n,cnt);for(i=0;icnt;i++)printf(%d,b[i]);printf(\n);writeDat();}voidwriteDat(){FILE*fp;inti;fp=fopen(OUT.DAT,w);fprintf(fp,%d\n,cnt);for(i=0;icnt;i++)fprintf(fp,%d\n,b[i]);fclose(fp);}自己完成代码voidjsVal(){inti1,i2,i3,i4;intab,cd,i,j,temp;for(i=0;i200;i++){i1=a[i]%10;//个位i2=a[i]%100/10;//十位i3=a[i]%1000/100;//百位i4=a[i]/1000;//千位ab=i4*10+i2;//重组新数abcd=i1*10+i3;//重组新数cdif((ab-cd)=0&&(ab-cd)=10&&ab%2!=0&&cd%2!=0&&i1!=0&&i4!=0)b[cnt++]=a[i];}for(i=0;icnt-1;i++)for(j=i+1;jcnt;j++)if(b[i]b[j]){temp=b[i];b[i]=b[j];b[j]=temp;}}序号知识点覆盖抽中率6根据相邻大小筛选统计并排序4%(36-39套)第36套#includestdio.h#defineMAX200inta[MAX],b[MAX],cnt=0;voidreadDat();voidwriteDat();voidjsVal(){}voidreadDat(){inti;FILE*fp;fp=fopen(IN.DAT,r);for(i=0;iMAX;i++)fscanf(fp,%d,&a[i]);fclose(fp);}voidmain(){inti;readDat();jsVal();printf(满足条件的数=%d\n,cnt);for(i=0;icnt;i++)printf(%d,b[i]);printf(\n);writeDat();}voidwriteDat(){FILE*fp;inti;fp=fopen(OUT.DAT,w);fprintf(fp,%d\n,cnt);for(i=0;icnt;i++)fprintf(fp,%d\n,b[i]);fclose(fp);}voidjsVal(){inti,j,temp;intflag;for(i=0;iMAX-1;i++){flag=1;for(j=i+1;j=i+5;j++)//a[i]小于之后的连续5个数if(a[i]=a[j]){flag=0;break;}if(flag==1&&a[i]%2==0)b[cnt++]=a[i];}for(i=0;icnt-1;i++)for(j=i+1;jcnt;j++)if(b[i]b[j]){temp=b[i];b[i]=b[j];b[j]=temp;}}自己完成代码6根据后3位排序2%(40-41套)解决的关键技巧1.数的后三位分离2.排序第40套#includestring.h#includestdlib.hintaa[200],bb[10];voidreadDat();voidwriteDat();voidjsSort(){}voidmain(){readDat();jsSort();writeDat();}voidreadDat(){FILE*in;inti;in=fopen(IN.DAT,r);for(i=0;i200;i++)fscanf(in,%d,,&aa[i]);fclose(in);}voidwriteDat(){FILE*out;inti;out=fopen(OUT.DAT,w);system(CLS);for(i=0;i10;i++){printf(i=%d,%d\n,i+1,bb[i]);fprintf(out,%d\n,bb[i]);}fclose(out);}voidjsSort(){inti,j,temp;for(i=0;i199;i++)for(j=i+1;j200;j++)if(aa[i]%1000aa[j]%1000){temp=aa[i];aa[i]=aa[j];aa[j]=temp;}if(aa[i]%1000==aa[j]%1000)if(aa[i]aa[i]){temp=aa[i];aa[i]=aa[j];aa[j]=temp;}for(i=0;i10;i++)bb[i]=aa[i];}自己完成部分序号知识点覆盖抽中率7数组排序2%(42-43套)第42套#includestdio.h#includestring.h#includestdlib.htypedefstruct{intx1,x2,x3;}Data;Dataaa[200],bb[