C程序设计复习(一)要点(二)概念50%---疑难举例(三)编程50%---部分编程题解衷心祝愿各位取得好成绩!学好《C程序设计》关键在于用好“两脑两手”:●两脑---大脑和电脑●两手---左手和右手除了多编程多上机外别无选择!C程序设计复习阅读讲义(含例题)复习习题(55道)(一)要点1C语言基础1C语言基础●基本数据类型(int,float,double,char)●变量(命名规则,类型,值,占用内存大小,地址)变量(作用域,存储类,生存期,可见性)●表达式表达式的种类表达式的计算规则逗号表达式●赋值语句●C程序的基本结构---顺序结构,选择结构,循环结构●运算符的优先级和结合性●一维数组和二维数组2函数---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]同值。●二维数组的数组名与指向一维数组的指针的关系●指向一维数组的指针与指针数组的区别●已知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]同值。●指向函数的指针变量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.5100.5&&0.51●运算符/有时表示整除有时表示实数除设x=2.5,y=4.7,a=7,算术表达(1)x+a%3*((int)(x+y)%2/4的值为[]A)2.5B)7C)4.7D)2.75(2)x+a%3*((int)(x+y)%2/4.0的值为[]A)2.5B)7C)4.7D)2.75●混合表达式是根据算符优先规则和结合性进行,但右自加++,右自减—不会因加了括号而提前执行以下程序段的输出结果是[]#includestdio.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)15B)100C)10D)150(2)执行下列语句后a,b,c的值分别为[]a=1;b=2;c=3;a=(a++)+(b++)+(c++);1)2342)7343)6344)1034(3)设a,b,c为整型变量,且a=2,b=3,c=4,则执行完以下语句:a*=16+(b++)-(++c);后,a的值是28●如何计算字符串常量的长度?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●有符号整数与无符号整数,指出下列程序的输出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);}●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;}}}若执行时从键盘上输入2473CR,则程序的输出结果____________。/*668977*/(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●for循环(continue语句的作用)(1)main(){inty=9;for(;y0;y--)if(y%3==0){printf(%d,--y);continue;}}A)741B)852C)963D)875421(2)voidmain()(break语句的作用){ints=0,k;for(k=7;k4;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)的值是[]struct{inthour;intminute;intsecond}x,*y;y=&x;A)6,2B)6,6C)3,2D)3,3●函数的定义与调用,内部静态变量运行以下程序,输出的结果是[]#includestdio.hmain(){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●变量的作用域下面程序的输出是[]#inckudestdio.hinta[5],k;main(){fun1();fun3();fun2();fun3();}fun1(){for(k=0;k5;k++)a[k]=0;}fun2(){inta[5];for(k=0;k5;k++)a[k]=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=0xffffff;intb;charc;A)0xffffff和ox61B)-1和98C)-1和97D)指向同一地址●执行下面程序片段后的输出结果是[]floatf1=111.111;printf(%%ff1=%8.3f\n,f1);A)%ff1=111.111B)%ff1=111.111C)f1=111.111D)f1=111.111●设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.000000B)12,34,5678.000000C)12,56,78.0D)输出格式有误,不能通过编译●设有以下程序片段,执行后的输出结果是[]intx=100,y=200;printf(%d,(x,y));A)100B)200C)100,200D)编译出错●下列程序输出结果是[](阅读程序的方法)#includestdio.hmain(){intn[2],i,j,k;for(i=0;i2;i++)n[i]=0;k=2;for(i=0;ik;i++)for(j=0;jk;j++)n[j]=n[i]+1;printf(%d\n,n[k]);}上面程序的A)不确定的值B)3C)2D)i0011j0101n[0]13n[1]23●下列程序运行结果为[]。#defineP3#defineS(a)P*a*amain(){intar;ar=S(3+5);printf(\n%d,ar);}A)192B)29C)27D)25●设有以下程序:#includestdio.hmain(){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)210B)205C)D2D)195●若有以下说明和语句,则对a数组元素的正确引用的选项是[]inta[4][5],(*p)[5];p=a;A)p+1B)*(p+3)C)*(p+1)+3D)*(*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)8B)7C)6D)5●若有以下程序片段:inta[12]={0},*p[3],**pp,i;for(i=0;i3;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)●以下程序执行结果是[]。point(cahr*pt);main(){charb[4]={'a','c','s','h'},*pt=b;point(pt);printf(%c\n,*pt);}point(char*p){p+=3;}A)sB)cC)hD)a●下面程序的输出是[]main(){structcmplx{intx;inty;}cnum[2]={1,3,2,7};printf(%d\n,cunm[0].y/cnum[0].x*cnum[1].x);}A)0B)1C)3D)6●下列语句中可以完成建立n个结点的单向链表的功能的选项是[]。(其中,head指向链表的第一个结点,new指向新结点)A)head-next=new;new-next=head;B)new-