二级C语言复习_第1页
二级C语言复习_第2页
二级C语言复习_第3页
二级C语言复习_第4页
二级C语言复习_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计复习(一)要点(二)概念50% ---疑难举例(三)编程50%---部分编程题解二级C语言复习衷心祝愿各位取得好成绩!

学好《C程序设计》关键在于用好“两脑两手”:●两脑---大脑和电脑●两手---左手和右手除了多编程多上机外别无选择!二级C语言复习C程序设计复习阅读讲义(含例题)复习习题(55道)(一)要点二级C语言复习C语言基础

1C语言基础●基本数据类型(int,float,double,char)●变量(命名规则,类型,值,占用内存大小,地址)

变量(作用域,存储类,生存期,可见性)●表达式 表达式的种类表达式的计算规则逗号表达式●赋值语句●C程序的基本结构---顺序结构,选择结构,循环结构●运算符的优先级和结合性●一维数组和二维数组二级C语言复习2函数---C程序的基本积木块●如何编写(定义)函数?●如何使用(调用)函数?●函数的类型和返回值●函数的形式参数和实在参数●函数的参数传递(单向传值)●哪些类型的变量可以作函数的参数?●如何编写递归函数?二级C语言复习3指针---C语言的一大特色●指针与指针变量的概念●运算符&和*●指针和指针变量允许的运算●一维数组的数组名与指向数组元素的指针的关系●已知intj=10,*p=&j;则*p与j等价已知ints[]={10,20,30,40,50},*p=s;则*(p+i)与s[i]等价,p+i与&s[i]同值。●二维数组的数组名与指向一维数组的指针的关系●指向一维数组的指针与指针数组的区别二级C语言复习●已知

inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}},(*p)[4]=a;

则*(p+i),*(a+i),p[i],a[i]同值;*(*(p+i)+j),*(*(a+i)+j),*(p[i]+j),p[i][j],a[i][j]同值。●指向函数的指针变量二级C语言复习4结构体---有广泛的应用背景●结构体类型与结构体变量的定义●结构体类型与结构体变量的区别●如何引用结构体变量(即存取数据)?●如何计算结构体变量的大小?●单向链表的建立,插入,删除与排序二级C语言复习5文件---有广泛的应用背景●文本文件与二进制文件●文本文件的打开与关闭(fopen,fclose)●文本文件的读与写操作(fgetc,fputc,fgets,fputs,fscanf,fprintf)●二进制文件的读与写操作(fread,fwrite)●其它的文件操作(fseek)二级C语言复习C程序设计复习(二)基本知识疑难举例做完习题集中的选择题部分对掌握C语言的基本知识大有助益。若能加做其中的填空题更有好处。●标识符大小区分

Sum=i=j=5;sum=(j--,i++,i++);printf(“%d”,Sum);●关键字不能作为标识符(用户标识符)

指出不合法的标识符:

A)name B)_old C)char D)turbo_c二级C语言复习●赋值号不能与等号相混淆下述循环的循环次数是[]intk=2;while(k=0)printf("%d",k),k--;printf("\n");A)无限次 B)0次

C)1次 D)2次●数学中的不等式不能与C语言中关系表达式相混淆

0<0.5<10<0.5&&0.5<1二级C语言复习●运算符/有时表示整除有时表示实数除设x=2.5,y=4.7,a=7,算术表达

(1)x+a%3*((int)(x+y)%2/4的值为[]

A)2.5 B)7C)4.7 D)2.75(2)x+a%3*((int)(x+y)%2/4.0的值为[]A)2.5 B)7C)4.7 D)2.75●混合表达式是根据算符优先规则和结合性进行,但右自加++,右自减—不会因加了括号而提前执行二级C语言复习以下程序段的输出结果是[]#include<stdio.h>#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti,j,k;i=10;j=15;k=10*MIN(i,j);printf("%d\n",k);}

A)15 B)100 C)10 D)150二级C语言复习(2)执行下列语句后a,b,c的值分别为[]a=1;b=2;c=3;a=(a++)+(b++)+(c++);1)234 2)734 3)634 4)1034(3)设a,b,c为整型变量,且a=2,b=3,c=4,则执行完以下语句:a*=16+(b++)-(++c);后,a的值是28

二级C语言复习●如何计算字符串常量的长度?main(){charm[]={{"\\\"ABC\"\\"},{"\x7a\107\\A\""},{"%%\m\659"}};clrscr();printf("%d,%d,%d\n",strlen(m[0]),strlen(m[1]),strlen(m[2]));printf("%s,%s,%s\n",m[0],m[1],m[2]);}

7,5,5\"ABC"\,zG\A",%m59二级C语言复习●有符号整数与无符号整数,指出下列程序的输出main(){inti=65536,j=65535,k=-1;clrscr();printf("%d\n",i);/*0*/printf("signedj=%d,unsignedj=%u\n",j,j);printf("signedk=%d,unsignedk=%u\n",k,k);}二级C语言复习●switch语句的执行规则

(1)main(){intc;while((c=getchar())!='\n'){switch(c-'2'){ case0:case1:putchar(c+4); case2:putchar(c+4);break; case3:putchar(c+3); default:putchar(c+2);break;}}}若执行时从键盘上输入2473<CR>,则程序的输出结果____________。/*668977*/二级C语言复习(2)有以下程序:

main(){inti;scanf("%d",&i);switch(i){ case1:printf("%d",i++); case2:printf("%d",i++); case3:printf("%d",i++); case4:printf("%d",i++);break; default:printf("END");}}

输入数据1,则执行以上程序输出结果是1234

二级C语言复习

●for循环(continue语句的作用)(1)main(){inty=9;for(;y>0;y--) if(y%3==0) {printf("%d",--y);continue;}}A)741 B)852 C)963 D)875421二级C语言复习(2)voidmain()(break语句的作用){ints=0,k;for(k=7;k>4;k--){switch(k){case1:case4:case7:s++;break; case2: case3: case6:break; case0: case5:s+=2; break;}}printf("s=%d",s);/*s=3*/}二级C语言复习(3)执行语句for(i=0;i++<10;);后变量i的值是[](表达式中自加)A)9 B)10

C)11 D)不变若有以下定义语句,则sizeof(x)和sizeof(y)的值是[]struct{inthour;intminute;intsecond}x,*y;y=&x;

A)6,2 B)6,6C)3,2 D)3,3二级C语言复习●函数的定义与调用,内部静态变量运行以下程序,输出的结果是[]#include<stdio.h>main(){inta=1,b=2;printf("%d",func(a,b));printf("%d",func(a,b));}

func(intx,inty){staticinta=0,b=1;a=b*2;二级C语言复习

b=a+x+y;return(b);}A)5,5 B)4,7

C)5,13 D)5,7●变量的作用域下面程序的输出是[]#inckude<stdio.h>inta[5],k;main(){fun1();fun3();fun2();fun3();}二级C语言复习fun1(){for(k=0;k<5;k++)a[k]=0;}fun2(){inta[5];for(k=0;k<5;k++)a[k]=k;}fun3(){for(k=0;k<5;k++)printf("%d",*(a+k));}A)0000000000 B)0000001234C)0000012345 D)0123400000二级C语言复习●用下列语句定义a,b,c,然后执行b=a,c=‘b’+b,则b,c的值为[](宽度不同的整数之间相互赋值)longa=0xffffff;intb;charc;A)0xffffff和ox61 B)-1和98

C)-1和97 D)指向同一地址●执行下面程序片段后的输出结果是[]floatf1=111.111;printf("%%ff1=%8.3f\n",f1);

A)%ff1=111.111 B)%ff1=111.111C)f1=111.111 D)f1=111.111二级C语言复习●设x,y为int型变量,z为float型变量,有以下语句:scanf("%2d%*2d%2d%f",&x,&y,&z);printf("%d,%d,%f",x,y,z);

现在从键盘输入12345678,则输出结果为[]

A)12,56,78.000000 B)12,34,5678.000000C)12,56,78.0 D)输出格式有误,不能通过编译●设有以下程序片段,执行后的输出结果是[]intx=100,y=200;printf("%d",(x,y));A)100 B)200C)100,200 D)编译出错二级C语言复习●下列程序输出结果是[](阅读程序的方法)#include<stdio.h>main(){intn[2],i,j,k;for(i=0;i<2;i++)n[i]=0;k=2;for(i=0;i<k;i++)for(j=0;j<k;j++)n[j]=n[i]+1;printf("%d\n",n[k]);

}

上面程序的

A)不确定的值 B)3 C)2 D)i0011j0101n[0]13n[1]23二级C语言复习●下列程序运行结果为[]。

#defineP3#defineS(a)P*a*amain(){intar;ar=S(3+5);printf("\n%d",ar);}A)192 B)29C)27 D)25二级C语言复习●设有以下程序:

#include<stdio.h>main(){inta[9]={1,2,3,4,5,6,7,8,9},*p;p=a;printf("%d",p);printf("%x",p+5);}

执行此程序,如果第一个printf语句输出的值是200,则第二个printf语句的输出是[]A)210 B)205

C)D2 D)195二级C语言复习●若有以下说明和语句,则对a数组元素的正确引用的选项是[]inta[4][5],(*p)[5];p=a;A)p+1 B)*(p+3) C)*(p+1)+3 D)*(*p+2)●执行下面语句后,表达式*(p[0]+1)+**(q+2)的值为[]。

inta[]={5,4,3,2,1},*p[4]={a+3,a+2,a+1,a},**q=p;/*p[0]=a+3;p[1]=a+2;p[2]=a+1;p[3]=a;*//*p[0][1]+q[2][0]=1+4=5*/A)8 B)7C)6 D)5

二级C语言复习●若有以下程序片段:

inta[12]={0},*p[3],**pp,i;for(i=0;i<3;i++)p[i]=&a[i*4];/*p[0]=&a[0],p[1]=&a[4],p[2]=&a[8]*/pp=p;

则对数组的错误引用是[]A)pp[0][1] B)a[10]

C)p[3][1] D)*(*(p+2)+2)二级C语言复习●以下程序执行结果是[]。

point(cahr*pt);main(){charb[4]={'a','c','s','h'},*pt=b;point(pt);printf("%c\n",*pt);}point(char*p){p+=3;}A)s B)cC)h D)a二级C语言复习●下面程序的输出是[]main(){structcmplx{intx;inty;}cnum[2]={1,3,2,7};printf("%d\n",cunm[0].y/cnum[0].x*cnum[1].x);}A)0 B)1C)3D)6二级C语言复习●下列语句中可以完成建立n个结点的单向链表的功能的选项是[]。(其中,head指向链表的第一个结点,new指向新结点)

A)head->next=new;new->next=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;二级C语言复习●若有运算符"<<","sizeof","^","&=",按优先级的正确排序是[]A)sizeof,&=,<<,^

B)sizeof,<<,^,&=C)^,<<,sizeof,&=D)<<,^,&=,sizeof×●在C语言中,要求运算数必须是整型或字符型的运算符是[]A)&& B)& C)! D)||×●表达式0x13&0x17的值是[],0x13|0x17的值是[]

A)0x17

B)0x13C)0x18 D)0xec二级C语言复习×●若有以下程序段:intx=1,y=2;x=x^y;y=y^x;x=x^y;

则执行完以上语句后x和y的值分别是[]A)x=1,y=2 B)x=2,y=2

C)x=2,y=1 D)x=1,y=1二级C语言复习C程序设计复习

(三)编程重点●选择语句,循环语句●数组●函数●结构体●文件复习上机题(55题)二级C语言复习需要掌握的上机题(谭浩强著,C程序设计):P65:6,8,9,10,12P85:9,10P104:3,5,7,9P120:1,2,3,4,6,7,8,14P141:2,4,5,6,8,11,13,14,15P186:1,3,5,6,9,10,16,17P1991,2P258:3,4,5,7,8,14,17,20P296:3,5,8,12P327:5,6,7,10,12二级C语言复习main()/*讲解p105习题5.7(用循环结构更简单)*/{inta,b,c,d,e,count=0;longm;clrscr();printf("Inputm:");scanf("%ld",&m);if(m){e=m%10;m/=10;count++;}if(m){d=m%10;m/=10;count++;}if(m){c=m%10;m/=10;count++;}if(m){b=m%10;m/=10;count++;}if(m){a=m%10;m/=10;count++;}printf("\ncount=%d",count);二级C语言复习

printf("\nlefttoright:");switch(count){case5:printf("%2d",a);case4:printf("%2d",b);case3:printf("%2d",c);case2:printf("%2d",d);case1:printf("%2d",e); break;case0:printf("errordata!");}printf("\nrighttoleft:");switch(count)二级C语言复习

{case5:case4:case3:case2:case1:printf("%2d",e); if(count==1)break; printf("%2d",d); if(count==2)break; printf("%2d",c); if(count==3)break; printf("%2d",b); if(count==4)break; printf("%2d",a);}}二级C语言复习5.7解法2main(){inta[5],count=0;longn;printf(“Inputn:”);scanf(“%ld”,&n);printf(“\n”);while(n){printf(“%2d”,a[count]=n%10);count++;n/=10;}printf(“\n”);for(n=count-1;n>=0;n--)printf(“%2d”,a[n]);printf(“\ncount=%d”,count);}二级C语言复习/*6.1*/讲解main(){inta,b,temp,product;printf(“Inputtwopositiveintegers:”);scanf(“%d%d”,&a,&b);if(a<0||b<0)abort();product=a*b;while(b!=0){temp=a%b;a=b;b=temp;}printf(“greatestcommondivisor=%d\n”,a);printf(“lowestcommonmultiple=%d\n”,product/a);}二级C语言复习习题6.3求S=a+aa+aaa+……+aaa……a的值。假设a的值是2。讲解:tn=tn-1*10+amain(){intn,a,i;longs,t;printf("Entera&n:");scanf("%d%d",&a,&n);if(a>9||a<0||n<0)abort();/*提示该函数*/for(s=0,t=0,i=0;i<n;i++){ t=t*10+a; s+=t;}printf("\ns=%ld",s);}二级C语言复习/*ex0604*/讲解main(){floatfac,sum;intj;for(sum=0,j=1,fac=1;j<=20;j++){fac*=j;sum+=fac;}printf(“sum=%f\n”,sum);}二级C语言复习/*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”);}二级C语言复习/*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=%f\n”,sum);}二级C语言复习main()/*ex0614*/讲解{inti,k;for(k=1;k<5;k++){for(i=0;i<4-k;i++)printf("");for(i=0;i<2*k-1;i++)printf("*");printf("\n");}for(;k<8;k++){for(i=0;i<k-4;i++)printf("");for(i=0;i<15-2*k;i++)printf("*");printf("\n");}}二级C语言复习#include"stdio.h”#defineN10main()/*习题7-2*/讲解{inti,j,k,t,a[N];printf("\n\ninputis");for(i=0;i<N;i++) scanf(“%d”,&a[i]);/*输入数据*/for(i=0;i<N-1;i++){ k=i; /*k记住最大者之下标*/ for(j=i+1;j<N;j++) if(a[k]>a[j])k=j;/*修改k*/ if(k!=i){t=a[k];a[k]=a[i];a[i]=t;}}for(i=0;i<N;i++) printf("%4d",a[i]);}二级C语言复习#include“stdio.h”

/*习题7.4*/讲解#defineN5main(){inta[N+1]={1,4,6,8,10},x,i,j;printf(“Enterx:”);/*输入一个数*/scanf("%d",&x);for(i=0;i<N&&x>a[i];i++)/*找x应该放的位置*/;for(j=N-1;j>=i;j--)/*将应放位置i及其后的数据依次后移*/ a[j+1]=a[j];a[i]=x; /*将x插入到相应位置*/for(i=0;i<N+1;i++) printf("%6d",a[i]);}二级C语言复习#include"stdio.h"#defineN10main()/*习题7-5*/{ inta[N]; inti,j,t; for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0,j=N-1;i<j;i++,j--){ t=a[i]; a[i]=a[j];a[j]=t; } printf("\noutputarray\n"); for(i=0;i<N;i++) printf("%6d",a[i]);}二级C语言复习#defineN10main()/*习题7.6方法一*/{inta[N][N],i,j;for(i=0;i<N;i++) a[i][0]=a[i][i]=1;/*第0列和对角线上元素置1*/ for(i=2;i<N;i++)/*从第二行开始*/ for(j=1;j<i;j++)/*前行j-1与j列之和为本行j列的值*/ a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<N;i++){ for(j=0;j<i+1;j++) printf("%6d",a[i][j]);printf("\n");}}二级C语言复习main()/*习题7.8找鞍点,用宏定义指定M,N的值*/{inti,j,k,a[M][N],a,maxj;

输入数组a的数据。

for(i=0;i<M;i++){for(j=1,maxj=0;j<N-1;j++)/*maxj记录i行上最大者下标*/if(a[i][j]>a[i][maxj])maxj=j;/*循环结束后,a[i][maxj]是i行上最大者*/for(k=0;k<M;k++)/*检查a[i][maxj]是否maxj列上的最小者*/ if(a[i][maxj]>a[k][maxj])break;/*不是maxj列上的最小者*/if(k>=M)break;/*a[i][maxj]是鞍点*/}if(i>=M)无鞍点,否则a[i][maxj]是鞍点}二级C语言复习/*打印图案 7.11*/#include"stdio.h"#defineN5main(){ inti,j; printf("\n\n"); for(i=0;i<N;i++){ for(j=0;j<i+20;j++)putchar(''); for(j=0;j<N;j++)putchar('*'); printf("\n"); }}二级C语言复习#include"stdio.h”#include<string.h>#defineN20main()/*习题7-13*/{ charstr1[N],str2[N]; inti,j; printf("\ninputstring1:"); gets(str1); printf("\ninputstring2:"); gets(str2); for(i=0;str1[i]!='\0';i++); j=0; while((str1[i++]=str2[j++])!='\0') ; printf("\nnewstring1is:\t%s\t",str1);}二级C语言复习#include<stdio.h>#sefineMAX100main()/*习题7.14*/{chars1[MAX],s2[MAX];inti=0;printf(“Inputthefirststring:”);gets(s1);printf(“Inputthesecondstring:”);gets(s2);while(s[i]!=‘\0’&&s2[i]!=‘\0’&&s1[i]==s2[i])i++;printf(“%d\n”,s1[i]-s2[i]);}二级C语言复习#include"stdio.h“#include<string.h>#defineN20main()/*习题7-15*/{ charstr1[N],str2[N]; inti=0; printf("\ninputstring2:"); gets(str2); while((str1[i]=str2[i])!='\0') i++; printf("\nstring1is:\t%s",str1);}二级C语言复习#include"stdio.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("\n\tEntertwointegers:");scanf("%d%d",&a,&b);printf("\nMfactor:%d",maxM(a,b));printf("\nMmultiple%d",minM(a,b));}讲解习题8-1二级C语言复习#include"stdio.h”#include"math.h“/*讲解习题8-3*/intisPrimeNum(intn){inti,k;k=sqrt(n);for(i=2;i<=k;i++) if(n%i==0)return0;return1;}/*-----------------------------------------------*/voidmain(){intm;printf("\n\tInputaninteger:");scanf("%d",&m);if(isPrimeNum(m))printf("\n\t%disaprimenumber\n",m);elseprintf("\n\t%disnotaprimenumber\n",m);}二级C语言复习#include"stdio.h”/*讲解习题8-5*/#include"string.h"voidreverse(chars[]){inti=0,j=strlen(s)-1;charc;while(i<j){ c=s[i];s[i]=s[j];s[j]=c; i++; j--;}}voidmain(){charstr[100];printf("\n\tInputastring:");gets(str);reverse(str);printf("\n\tNewstringis%s",str);}二级C语言复习#include"stdio.h“/*讲解习题8-6*/voidstringcat(chars[],chart[]){inti,j;i=j=0;while(s[i]!='\0')i++;while((s[i]=t[j])!='\0'){ i++;j++;}/*while((s[i++]=t[j++])!='\0')*/}/*-----------------------------------------------*/voidmain(){chars1[100],s2[30];printf("\n\tInputtwostrings:");scanf("%s%s",s1,s2);stringcat(s1,s2);printf("\n\tNewstringis%s:%s",s1,s2);}二级C语言复习#include“stdio.h“

/*习题8-9*/intalpha,digit,blank,others;intis_pha(charc)/*ifcisachar,returntrue,elsereturnfalse*/{return((c>='A'&&c<='Z')||(c>='a'&&c<='z')?1:0);}/*-----------------------------------------------*/intis_digit(charc)/*ifcisadigit,returntrue,elsereturnfalse*/{return((c>='0'&&c<='9')?1:0);}/*-----------------------------------------------*/intis_blank(charc)/*ifcisaspace,returntrue,elsereturnfalse*/{return((c==''||c=='\t'||c=='\n')?1:0);}/*-----------------------------------------------*/二级C语言复习voidcount(chars[]){intis_pha(char),is_digit(charc),is_blank(char);inti;alpha=digit=blank=others=0;for(i=0;s[i]!='\0';i++)if(is_pha(s[i]))alpha++;elseif(is_digit(s[i]))digit++; elseif(is_blank(s[i]))blank++;elseothers++;}voidmain(){chars[100];gets(s);count(s);printf("\n\talpha:%d,digit:%d",alpha,digit);printf("\n\tbalnks:%d,others:%d",blank,others);}二级C语言复习#include"stdio.h"#include"string.h"#include"ctype.h"voidgetMaxLenWord(chars[],chart[])/*习题8-10*/{inti=0,j;charsub[30];/*临时变量*/

strcpy(t,""); /*strset(t,'\0');*/while(s[i]!='\0'){while(s[i]=='')i++;/*skiptheblanks*/j=0;while(isalpha(s[i]))/*savecurrentwordtosub*/sub[j++]=s[i++];sub[j]='\0';if(strlen(sub)>strlen(t))strcpy(t,sub);}}voidmain(){charstr[200],t[30];gets(str);getMaxLenWord(str,t);printf("\n\tMaxlengthword:%s\n",t);}二级C语言复习#include"stdio.h“/*习题8-16*//*高位部*16+本位值*/longintcovert(chars[]){inti;longintn=0;for(i=0;s[i]!='\0';i++)if(s[i]>='A'&&s[i]<='F') n=n*16+(s[i]-‘A’+10);/*高位部*16+本位值*/elseif(s[i]>='a'&&s[i]<='f') n=n*16+(s[i]-'a'+10); elseif(s[i]>='0'&&s[i]<='9') n=n*16+(s[i]-'0'); elsebreak;returnn;}voidmain(){chart[6];scanf("%s",t);/*anumberbasedon16*/printf("\n\tThevalueoftenis:%ld",covert(t));}二级C语言复习#include"stdio.h“/*讲解习题8-17*/voidprint(intn){inti;if((i=n/10)!=0) print(i);putchar('\t');putchar(n%10+'0');}/*------------------------------------------*/voidmain(){intn;printf("\n\tEnterainteger:");scanf("%d",&n);print(n);}二级C语言复习习题9.1#defineexchange(x,y) t=x,x=y,y=tmain(){inta,b,t;scanf(“%d%d”,&a,&b);exchange(a,b);printf(“a=%d,b=%d\n”,a,b);}二级C语言复习/* P1999.2习题 */#defineMod(a,b)(a)%(b)main(){ intx,y,t; printf("Inputtwointegers:"); scanf("%d%d",&x,&y); if(x<y){ t=x;x=y;y=t; } printf("\n%dMOD%d=%d\n",x,y,Mod(x,y));}二级C语言复习25107981643pbegin/* 10.3*//*要求用3个函数,一个输入,一个处理,一个输出*/#defineN10/*--------------------------------------------*/voidinput(int*p){int*begin;printf("\nEnter10numbers:");for(begin=p;p<begin+N;p++) scanf("%d",p);}二级C语言复习/*--------------------------------------------*//*将最大的一个与最后一个互换,将最小的一个与第一个数互换*/voidprocess(int*p)/*此算法有错,如下图的数据,则结果错*/{int*max,*min,*begin,t;max=min=p;/*开始时,将最大和最小指针指向第一数*/for(begin=p;p<begin+N;p++){if(*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;}10527983641maxmin二级C语言复习voidprocess(int*p)/*修改后*/{int*max,*min,*begin,t;begin=p;max=min=p;/*开始时,将最大和最小指针指向第一数*/for(;p<begin+N;p++)if(*p>*max)max=p;/*交换操作:最大数*/t=*(begin+N-1);*(begin+N-1)=*max;*max=t;for(p=begin;p<begin+N;p++)if(*p<*min)min=p;/*交换操作:最小数*/t=*begin;*begin=*min;*min=t;}二级C语言复习/*--------------------------------------------*/voidoutput(int*p){int*begin;printf("\nTheresultare:");for(begin=p;p<begin+N;p++) printf("%4d",*p);}/*--------------------------------------------*/main(){inta[N];

input(a);process(a);output(a);级C语言复习/* 10.4*/#defineN10/*--------------------------------------------*/voidexchange(int*a,intm){inti,t,j;for(i=0;i<m;i++){t=*(a+N-1);/*取出最后一个数暂存于t*/for(j=N-2;j>=0;j--)*(a+j+1)=*(a+j);/*从倒数第二个数开始各数右移一位*/*a=t;/*将t存入第一个位置*/}}二级C语言复习/*----10.4的主函数----------------------------------------*/main(){inti,m,a[N];printf("\nEnter%dnumbers:",N);for(i=0;i<N;i++) scanf("%d",&a[i]);printf("\n\tEnterm:");scanf("%d",&m);exchange(a,m);printf("\n\tResults:");for(i=0;i<N;i++) printf("%4d",a[i]);}/*--------------------------------------------*/二级C语言复习#defineMAX50/*10.5的解法*/intex1005(int*p,intn){inti,k=0,m=n;/*k记报数,m记在位人数*/for(i=0;i<n;i++)*(p+i)=1;/*1表示在位,0不在位*/i=0;/*座位号*/while(m>1){if(*(p+i)==1){k++;/*报数*/if(k==3){*(p+i)=0;k=0;m--;}}i=(i+1)%n;}/*未完,接下页*/二级C语言复习for(i=0;i<n;i++)if(*(p+i)==1)returni;}main(){inta[MAX],n;clrscr();printf(“Inputthenumbersofpeople:”);scanf(“%d”,&n);printf("last=%d\n",ex1005(a,n));}二级C语言复习/* 10.7*/#defineN10/*--------------------------------------------------------------*/voidcopystring(char*s,intm,char*t){char*p;for(p=s+m;p<=s+strlen(s);p++,t++) *t=*p;}/*---------------------------------------------------------------*/main(){chars[100],t[100];intm;printf("\nEnterastring:");gets(s);printf("\nEnterm:");scanf("%d",&m);copystring(s,m,t);printf("\n\ts=%s\tt=%s\n",s,t);}二级C语言复习voidcount(char*p,int*pu,int*pl,int*pb,int*pd,int*po)/*10.8*/{*pu=*pl=*pb=*pd=*po=0;while(*p!=‘\0’){if(*p>=‘A’&&*p<=‘Z’)(*pu)++;elseif(*p>=‘a’&&*p<=‘z’)(*pl)++;elseif(*p>=‘0’&&*p<=‘9’)(*pd)++;elseif(*p==‘

‘||*p==‘\t’)(*pb)++;else(*po)++;p++;}}二级C语言复习/*习题10.8的主函数*/main(){chars[100];intupper,lower,blank,digiter,other;printf(“Inputastring:”);gets(s);count(s,&upper,&lower,&blank,&digiter,&other);printf(“\nupper=%d\tlower=%d”,upper,lower);printf(“\nblank=%d\tdigiter=%d”,blank,digiter);printf(“\nother=%d”,other);}二级C语言复习/* 10.14*/#defineN10/*-------------------------------------------------------------------*/voidreverse(int*a,intn){int*p,t;p=a+n-1;while(a<p){t=*a;*a=*p;*p=t;a++;p--;}}/*-------------------------------------------------------------------*/main(){inti,a[N];printf("\n\tEnter%dnumbers:",N);for(i=0;i<N;i++)scanf("%d",a+i);reverse(a,N);printf("\n\tResults:");for(i=0;i<N;i++) printf("%4d",*(a+i));}二级C语言复习/*10.17*/intstrcomp(char*s1,char*s2){for(;*s1==*s2&&*s1!='\0‘&&*s2!=‘\0’;s1++,s2++) ;return*s1-*s2;}二级C语言复习/* 10.20

希望大家仔细阅读*/#defineN5/*---------------选择排序------------------*/voidsort(char**str,intn){char**t1,*t2,**p1,**p2; for(p1=str;p1<str+n-1;p1++){ t1=p1;/*暂定p1指向的字符串最小*/ for(p2=p1+1;p2<=str+n-1;p2++) if(strcmp(*t1,*p2)>0) t1=p2;/*让t1始终指向小者*/ t2=*p1;/*p1中的地址与t1中的地址交换*/ *p1=*t1; *t1=t2; }}二级C语言复习/*--------------------------------------------*/main(){char*s[N]={"Pascal","C","Basic","Fortran","Java"};inti;sort(s,N);printf("\n\tResults:");for(i=0;i<N;i++) printf("%s\t",s[i]);}/*--------------------------------------------*/二级C语言复习“Pascal”“C”“Basic”“Fortran”“Java”S[0]S[1]S[2]S[3]S[4]“Pascal”“C”“Basic”“Fortran”“Java”S[0]S[1]S[2]S[3]S[4]二级C语言复习习题11.3structstudent{intnum;charname[20];intscore[3];}stu[5];main(){inti,j;for(i=0;i<5;i++){printf(“\nInputnum&name:”);scanf(“%d%s”,&stu[i].num,syu[i].name);printf(“\nInputscores:”);二级C语言复习for(j=0;j<3;j++) scanf(“%d”,&stu[i].score[j]);}print(stu,5);}print(structstudent*pst,intn){intk;for(k=0;k<n;k++){ printf(“\n%d,%s,“,pst->num,pst->name); printf(“%d,%d,%d”,pst->score[0],pst->score[1], pst->score[2]);pst++;}}二级C语言复习11.5 #defineN10/*有N个学生数*/ #defineM3/*各修M门课程*/typedefstruct{/*学生结构*/ intno; charname[20];intscore[M];intave;}STUD;/*------------------------------------------------------------------------*/voidinput(STUD*s)/*从键盘上输入N个学生的信息*/{ inti,j,temp;/*计算各学生的平均成绩*/ for(i=0;i<N;i++,s++){ printf("\tEnterNoNamescore[0]score[1]score[2]\n"); scanf("%d%s",&s->no,s->name); for(temp=0,j=0;j<M;j++){ scanf("%d",&s->score[j]); temp+=s->score[j]; } s->ave=temp/M; }}二级C语言复习/*-------------------------------------------------------------------*/voidprintAver(STUD*s)/*输出N个学生的总平均成绩*/{ inti,sum=0; for(i=0;i<N;i++,s++) sum+=s->ave; printf("\tTotalaverageis:%d\n",sum/N);}二级C语言复习/*----------------------------------------------------------------------------------*/voidprintMax(STUD*s)/*输出N个学生中平均分最高的学生信息*/{ inti; STUD*p=s; for(i=0;i<N;i++,s++) if(p->ave<s->ave) p=s; printf("\tThetopstudent'%d%s",p->no,p->name); for(i=0;i<M;i++) printf("%d",p->score[i]); printf("%d\n",p->ave);}二级C语言复习/*-------------------------------------------------------------------------------*/main(){ STUDstu[N]; system("cls"); input(stu); /*输入N个学生的信息*/ printAver(stu);/*输出N个学生的总平均成绩*/ printMax(stu);/*输出N个学生中平均分最高的学生信息*/}二级C语言复习11.8#include"stdio.h"#defineLENsizeof(structstudent)typedefstructstudent{ intno; intscore; structstudent*next;}STUD;二级C语言复习/*输出head指针所指的链表(带头结点)*/voidprint(STUD*head){STUD*p;p=head->next;if(p!=NULL){ printf("\n\tThelistis:\n"); while(p!=NULL){ printf("\tNum=%dScore=%d\n",p->no,p->score); p=p->next; }}}二级C语言复习STUD*create(){STUD*head,*last,*new;head=last=(STUD*)malloc(LEN);/*申请一个头节点*/last->next=NULL;while((new=(STUD*)malloc(LEN))!=NULL)/*申请一个数据节点*/{printf(“\nEnterNo&score:\n");scanf("%d%d",&new->no,&new->score);if(new->no!=0){new->next=NULL;last->next=new;last=new;}else{free(new);break;}/*建立链表结束*/}returnhead;/*返回链表的表头*/}二级C语言复习voidinsert(STUD*head,STUD*pt)/*将pt节点按学号从小到大插入到head为头指针的链表*/{STUD*p;p=head;while(p->next!=NULL&&p->next->no<pt->no)p=p->next;pt->next=p->next;p->next=pt;}二级C语言复习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;}二级C语言复习main(){ STUD*pa,*pb,*pc; system("cls"); printf("\tCreatelinkA\n");pa=create(); printf("\n\tCreatelinkB\n\n");pb=create(); pc=merge(pa,pb); print(pc);}二级C语言复习11.12将单链表倒置●将带表头结点的单链表倒置(先看下页的算法思想)STUD*reverse(STUD*head){STUD*movenode,*remains;remains=head->next;/*remains指向剩余部分*/head->next=NULL;/*此时head指向的链表只有一个表头结点*/while(remains!=NULL)/*若链表未处理完*/{movenode=remains;/*movenode指向卸下的结点*/re

温馨提示

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

评论

0/150

提交评论