《C语言程序设计》重点难点_第1页
《C语言程序设计》重点难点_第2页
《C语言程序设计》重点难点_第3页
《C语言程序设计》重点难点_第4页
《C语言程序设计》重点难点_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

《C语言程序设计》

重点难点第1章C语言概述本章重点:

★了解C语言的特点

★熟悉TurboC的上机环境?认识C程序

第2章数据类型运算符与表达式本章重点:

★熟记C语言的基本元素

★掌握常量和变量的概念以及各种数据类型的常量和变量的形式

★不同类型数据间的混合运算

★几种基本运算符及其表达式

本章难点:

★整型数据与字符型数据的通用问题

★正确求解不同类型数据间的混合运算

★基本运算符的使用限制练习1、以下选项中可作为C语言合法常量的是______。(05/4)

A)-80.B)-080C)-8e1.0D)-80.0e2、以下选项中不能作为合法常量的是______。(05/4)

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0第3章最简单的C程序设计本章重点:

★输入/输出的概念

★基本的数据输入/输出函数

★简单的C程序设计

本章难点:

★真正理解C语言中的输入过程

★正确、灵活运用输入/输出函数中的格式控制字符

实例分析——运算符和表达式及printf格式符1、C语言中运算对象必须是整型的运算符是:

A.%=B./C.=D.<=2、main(){inti=10,j=1;

printf(“%d,%d\n”,i--,++j);}A.9,2B.10,2C.9,1D.10,13、main(){intm=3,n=4,x;x=-m++;x=x+8/++n;

printf(“%d\n”,x);}A.3B.5C.-1D.-24、若有定义inta=8,b=5,c;执行语句c=a/b+0.4;后,c的值为:

A.1.4B.1C.2.0D.25、若变量a是int类型,并执行了语句a=‘A’+1.6;则正确叙述:

A.a的值为字符CB.a的值是浮点型

C.不允许字符型&浮点型相加D.a的值是字符A的ASCLL+16、以下合法的赋值语句:

A.x=100B.d--;C.x+y;D.c=int(a+b);7、有如下程序:

main(){intk=2,i=2,m;m=(k+=i*=k);

printf(“%d,%d\n”,m,i);}A.8,6B.8,3C.6,4D.7,48、下列程序输出结果是:

main(){inty=3,x=3,z=1;

printf(“%d%d\n”,(++x,y++),z+2);}A.34B.42C.43D.339、假定X和Y都是double型,则表达式X=2,Y=X+3/2的值为:

A.3.500000B.3C.2.000000D.3.00000010、以下程序段的输出结果是:

A.12B.34C.1234D.提示出错,无结果。11、以下程序的输出结果:

main(){intk=17;

printf(“%d,%o,%x”,k,k,k);}A.17,021,0X11B.17,17,17C.17,0X11,021D.17,21,1112、程序运行后结果:

main(){inta=666,b=888;

printf(“%d\n”,a,b);}A.错误信息B.666C.888D.666,88813、mian(){inti,j;

scanf(“i=%d,j=%d”,&i,&j);……}

要求给i赋值10,给j赋值20,应该从键盘输入:(i=10,j=20)14、main()

{intx=102,y=012;

printf(”%2d,%2d”,x,y);}

A.10,01B.02,12C.102,10D.02,1015、main(){intm=0x256,n=256;

printf(”%x%0”,m,n);}

A.02560400B.0256256C.256400D.40040016、printf(“asffg\0dfg”);输出结果是:(asffg

)上机作业输入一个华氏温度,要求输出摄氏温度。公式为:

c=5/9(F-32)输出要有文字说明,取2位小数。第4章选择结构的程序设计本章难点:

★正确使用关系表达式与逻辑表达式

★if语句的嵌套

★switch语句的正确使用第4章相关练习题1、inta=5,b=4,c=3,d;d=(a>b>c);

求d的值:02、a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为()3、x=y=3;t=++x||++y;求y的值:4、main(){intp,a=5;if(p=a!=0)

printf(“%d”,p);elseprintf(“%d”,p+2);}

求p的值:第5章循环结构程序设计本章重点:

★构成循环的语句:while、do-while、for

★几种循环的比较

★循环的嵌套

★break语句和continue语句

本章难点:

★for语句的多种变换形式

★循环嵌套的正确使用第6章数组本章重点:

★数值型数组的定义和引用

★字符数组的定义和引用

★字符串与字符数组的关系

★字符串结束标记的使用

★字符串处理函数

本章难点:

★理解二维数组是一种“特殊”的一维数组

★字符串与字符数组的关系

★字符串的赋值与操作?字符串与字符数组的关系★字符串在内存的存储形式例如:字符串“china”china\0在C语言中,字符串是作为字符数组来存放得出结论:★有效字符串的长度与字符数组的长度例如:charc[100]=“china”;字符数组长度=有效字符串的长度=字符串实际占用内存=★两个函数:strlen()和sizeof()区别:Strlen()用来求字符串的实际长度;Sizeof()用来求字符数组的长度;例如:strlen(c)=?Sizeof(c)=?字符串与字符数组的关系10056返回典型例题分析Charc[]=“china”;Charb[]={‘c’,‘h’,‘i’,‘n’,‘a’};假设字符数组c,b的长度分别用c_len,b_len表示。判断:c_len=b_lenc_len<b_lenc_len>b_len5

6字符数组的输入输出★字符数组的输入输出:(1)逐个字符输入输出;用for循环+%c格式符。输入注意:回车作为输入结束键;空格作为实际字符输入。(2)整个字符串输入输出;用%s格式符。输入注意:回车作为输入结束键;空格也可以作为输入结束键;可把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组例如,可把a[3][4]看作是一个一维数组,有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。见下图:二维数组的存储二维数组中元素排列的顺序是按行存放a[0]a[1]a[2]a[0][0]

a[0][1]

a[0][2]

a[0][3]aa[1][0]

a[1][1]

a[1][2]

a[1][3]a[2][0]

a[2][1]

a[2][2]

a[2][3][4][4][4]上机练习—一维数组1、main(){inti,n[]={0,0,0,0,0};for(i=1;i<=4;i++){n[i]=n[i-1]*2+1;

printf(“%d”,n[i]);}}2、main(){inti,a[10];for(I=9;i>=0;i--)a[i]=10-i;printf(“%d%d%d”,a[2],a[5],a[8]);}3、假定int类型变量占2个字节,其有定义:intx[10]={0,2,4};

则数组在内存中所占字节数是:()二维数组练习4、能正确定义并且正确赋值的是:

A.Intn=5,b[n][n];B.Inta[1][2]={{1},{3}};

C.intc[2][]={{1,2},{3,4}};D.intd[3][2]={{1,2},{34}};5、能正确定义二维数组的是()

A.inta[][3];B.inta[][3]={2*3};

C.inta[][3]={};D.inta[2][3]={{1},{2},{3,4}}6、man(){intm[][3]={1,4,7,2,5,8,3,6,9};

inti,j,k=2;for(i=0;i<3;i++){printf(“%d”,m[k][i]);}}执行后输出结果:

A.456B.258C.369D.7897、main(){inti,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf(“%d,”,x[i][2-i]);}A.1,5,9B.1,4,7C.3,5,7D.3,6,9字符数组与字符串练习1、设有数组定义:chararray[]=“china”;,则数组array所占空间为:

A.4个字节B.5个字节C.6个字节D.7个字节2、main(){chara[]=“abcdefg”,b[10]=“abcdefg”;

printf(“%d%d\n”,sizeof(a),sizeof(b));}A.77B.88C.810D.10103、chara[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’\0’};

inti,j;i=sizeof(a);j=strlen(a);

printf(“%d%d”,i,j);请问i,j的值分别为多少?4、chars[]=“\n123\\”;

printf(“%d,%d\n”,strlen(s),sizeof(s));A.6,7B.5,6C.6,6D.6,85、chars[]=\\141\141abc\t;

printf(“%d\n”,strlen(s));A.9B.12C.13D.146、chararr[2][4];

strcpy(arr,”you”);strcpy(arr[1],”me”);arr[0][3]=‘&’;

printf(“%s\n”,arr);A.you&meB.youC.meD.err7、如果输入ABC,输出结果是:

charss[10]=“12345”;gets(ss);strcat(ss,”6789”);

printf(“%s”,ss);A.ABC6789B.ABC67C.12345ABC6D.ABC456789

上机操作题1、用数组来处理求Fibonacci数列问题。(输出前40列)2、用起泡法和选择法对十个数进行从大到小排序。3、求一个3×3矩阵对角线元素之和。4、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。(用字符数组实现)第7章函数本章重点:

★函数的定义和调用

★函数参数和函数值

★函数的嵌套调用和递归调用

★局部变量和全局变量及变量的存储类别

本章难点:

★函数的实参与形参的对应关系及不同的形式

★函数递归调用的概念及执行过程

★变量的作用范围和生存期

考点1:函数的概念1、以下所有函数声明中,正确的是:

A.voidplay(var

a:Integer,varb:Integer)B.voidplay(inta,b)C.voidplay(int

a,intb)D.Subplay(aasinteger,basinteger)2、以下函数值的类型是:

fun(floatx){floaty;y=3*x-4;returny;}

A.intB.不确定C.voidD.float考点2:函数调用中的数据传递1、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式:

A.地址传递B.单向值传递

C.由实参传给形参,再由形参传给实参D.传递方式由用户指定2、voidf(int

v,intw){intt;t=v;v=w;w=t;}main(){intx=1,y=3,z=2;if(x>y)f(x,y);elseif(y>z)f(y,z);elsef(x,z);

printf(“%d,%d,%d”,x,y,z);}

运行结果:3、fun(int

x,int

y,intz){z=x*x+y*y;}main(){inta=31;fun(5,2,a);

printf(“%d”,a);}A.0B.29C.31D.无定值4、voidfun(int

x,inty){x=x+y;y=x-y;x=x-y;

printf(“%d,%d”,x,y);}main(){intx=2,y=3;

fun(x,y);printf(“%d,%d\n”,x,y);}输出结果:考点3:函数的调用与递归调用1、voidf(int

x,inty){return(y-x)*x;}main(){inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));

printf(“%d\n”,d);}输出结果:2、int

f(intn){if(n==1)return1;elsereturnf(n-1)+1;}main(){intI,j=0;for(I=1;I<3;I++)j+=f(I);

printf(“%d\n”,j);}输出结果:3、fun(intx){if(x/2>0)fun(x/2);

printf(“%d,”,x);}main(){fun(6);}考点4:数组做函数参数1、voidre(int

a[],intn){intI,t;for(I=0;I<n/2;I++){t=a[I];a[I]=a[n-1-I];a[n-1-I]=t;}}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};

intI,s=0;re(b,8);for(I=6;I<10;I++)s+=b[I];

printf(“%d\n”,s);}A.22B.10C.34D.302、voidswap1(intc[]){intt;t=c[0],c[0]=c[1];c[1]=t;}voidswap2(intc0,intc1){intt;t=c0;c0=c1;c1=t;}main(0{inta[2]={3,5},b[2]={3,5};swap1(a);swap2(b[0],b[1]);printf(“%d,%d,%d,%d\n”,a[0],a[1],b[0],b[1]);}A.5,3,5,3B.5,3,3,5C.3,5,3,5D.3,5,5,3上机操作题函数fun的功能是:将两个两位数的正整数a,b合并形成一个整数放在c中。合并的方式:将a数的十位和个位依次放在c数的个位和百位上,b数的十位和个位依次放在c数的十位和千位上。例如:当a=45,b=12,调用该函数后,c=2514。Voidfun(int

a,intb){……}Main(){inta,b;longc;

clrscr();

printf(“input

a,b:”);scanf(“%d%d”,&a,&b);c=fun(a,b);

printf(“theresultis:%ld\n”,c);}考点4:局部变量和全局变量1、inta=3;main(){ints=0;{inta=5;s+=a++;}s+=a++;printf(“%d\n”,s);}A.8B.10C.7D.112、intx=3;main(){inti;for(i=1;i<x;i++)

incre();}

incre(){staticintx=1;x*=x+1;printf(“%d”,x);}A.33B.22C.26D.253、inta,b;voidfun(){a=100;b=200;}main(){inta=5,b=7;fun()+

printf(“%d%d\n”,a,b);}A.100200B.57C.200100D.75考点5:动态存储变量与静态存储变量1、inta=5;

fun(intb){staticinta=10;a+=b++;

printf(“%d“,a);}main(){intc=20;fun(c);a+=c++;

printf(“%d\n”,a);}2、intf(){staticinti=0;ints=1;s+=i;i++;returns;}main(){inti,a=0;for(i=0;i<5;i++)a+=f();

printf(“%d”,a);}A.20B.24C.25D.153、int

ff(intn){staticintf=1;f=f*n;returnf;}main(){intI;for(i=1;i<=5;i++)

printf(“%d”,ff(i));}4、在C语言中,形参的默认存储类型是:

A.autoB.registerC.staticD.exten5、在C语言中,函数的隐含存储类型是:

A.autoB.staticC.externD.无存储类别6、以下叙述正确的是:

A.全局变量的作用域一定比局部变量的作用域大。

B.静态变量的生存期贯穿于整个程序的运行期间。

C.函数的形参都属于全局变量。

D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值。

7、正确的是:

A)局部变量说明为static类,其生存期将得到延长。

B)全局变量说明为static类,其作用域将得到扩大。

C)任何存储类别的变量在未赋值时,其值都是不确定的。

D)形参可以使用的存储类型与局部变量完全相同。第8章预处理命令理论链接:1、宏定义的作用是用表示符来代表一串字符。C语言中宏定义分为带参数的宏定义和不带参数的宏定义。2、不带参数的宏定义形式为:#define宏名字符串带参数的宏定义形式为:#define宏名(形式参数表)字符串3、注意:宏名与括号之间不要空格,否则就成为不带参数的宏定义了。宏定义就是用宏名代表一个字符串,编译预处理时凡是程序中出现宏名的地方都用其所代表的字符串替换下来,此过程称为宏替换或宏展开。上机练习1、#defineMCRA(m)2*m#defineMCRB(n,m)2*MCRA(n)+m#definef(x)(x*x)main(){inti=2,j=3;

printf(“%d\n”,MCRB(j,MCRA(i)));}2、#difineN10#defines(x)x*x#definef(x)(x*x)main(){inti1,i2;i1=1000/s(N);i2=1000/f(N);

printf(“%d%d\n”,i1,i2);3、#include<stdio.h>#defineF(X,Y)(X)*(Y)main(){inta=3,b=4;

printf(“%d\n”,F(a++,b++));}A.12B.15C.16D.204、#difinef(x)x*xmain(){inti;i=f(4+4)/f(2+2);

printf(“%d”,i);}A.28B.22C.16D.45、#defineN2#defineMN+1#difineKM+1*M/2main(){inti;for(i=1;i<k;i++){……}……}for循环执行的次数是:

第9章指针本章重点:

指针、指针变量的概念

指向数组的指针

指向字符串的指针

返回指针的函数

指针数组及指向指针的指针

本章难点:

区分数组指针与指向数组的指针

区分指向函数的指针和返回指针的函数

区分指向数组的指针和指针数组

指向指针的指针

考点1:变量的指针和指向变量的指针考点点拨:主要考查变量指针的概念、指针变量的定义、指针变量的引用和指针的运算。1、执行该程序段后,a的值是:

int*p,a=10,b=1;p=&a;a=*p+b;A.12B.11C.10D.编译出错2、intn=2,*p=&n,*q=p;非法的赋值语句:

A.p=q;B.*p=*q;C.n=*q;D.p=n;3、inta=511,*b=&a;则printf(“%d”,*b);输出结果为:

A.无确定的值B.a的地址C.512D.5114、inta,*p=&a;以下正确的是:

A.scanf(“%d”,p);B.scanf(“%d”,a);

C.scanf(“%d”,&p);D.scanf(“%d”,*p);考点2:数组的指针和指向数组的指针变量1、main(){intx[8]={8,7,6,5,0,0},*s;s=x+3;printf(“%d”,s[2]);}A.0B.5D.6C.随机值2、inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

数值为9的表达式:

A.*p+9B.*(p+8)C.*p+=9D.p+83、main(){intI,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(I=0;I<4;I+=2)printf(“%d”,p[I]);}A.52B.51C.53D.974、inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是:A.5B.6C.8D.9复习数组指针和指向数组的指针变量1、数组的指针和指向数组的指针变量

inta[10],*p;p=a;

第i个元素的地址:p+i或a+i、&a[i]、&p[i]

第i个元素:*(p+i)或*(a+i)、a[i]、p[i]2、对于数组作为参数,可以用数组名和指针作为参数,共有四种组合:形参和实参均数组形参用数组而实参用指针形参用指针而实参用数组形参和实参均用指针

传递的均是数组的首地址。3、指向多维数组的指针和指针变量

类似于一维数组。考点3:字符串的指针和指向字符串的指针变量考点点拨:主要考查使用指针变量引用字符数组元素的方法和字符串的实现方式。1、main(){charstr[]=“xyz”,*ps=str;while(*ps)ps++;

for(ps--;ps-str>=0;ps--)puts(ps);}

A.yzxyzB.zyz

C.zyzxyz

D.xxyxyz2、main(){chara[10]={‘1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’},*p;

inti;i=8;p=a+i;printf(“%s\n”,p-3);}A.6B.6789C.’6’D.7893、以下正确的是:

A.chars[8];s={“beijing”};B.char*s;s={“beijing”};C.chars[8];s=“beijing”;D.char*s;s=“beijing”;4、main(){charstr[][10]={“china”,”beijing”},*p=str;printf(“%s”,p+10);}A.chinaB.beijing

C.ng

D.ing

考点4:函数的指针和指向函数的指针变量考点点拨:主要考查指向函数指针变量的定义和返回指针的函数定义。1、设函数findbig已定义为求3个数中的最大值,以下程序将利用函数指针调用findbig函数。填空。

main(){int

findbig(int,int,int);

int(*f)(),x,y,z,big;f=;

scanf(“%d%d%d”,&x,&y,&z);big=(*f)(x,y,z);

printf(“big=%d”,big);}2、int*f(),标识符f代表的是()

A.一个用于指向整型数据的指针变量;

B.一个用于指向一维数组的行指针;

C.一个用于指向函数的指针变量;

D.一个返回值维指针型的函数名;3、char*fun(char*p){returnp;}

该函数的返回值()

A.无确切的值;B.形参p中存放的地址值;

C.一个临时存储单元的地址;D.形参p自身的地址值;4、int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);

printf(“%d,%d,%d”,*p,*q,*r);}A.7,8,8B.7,8,7C.8,7,7D.8,7,8考点5:指针数组和指向指针的指针主要考查指针数组的定义、应用以及指向指针的指针的定义和应用。1、main(){char*s[]={“one”,”two”,”three”},*p;p=s[1];

printf(“%c,%s”,*(p+1),s[0]);}A.n,twoB.t,oneC.w,oneD.o,two2、int*p[3],叙述正确的是:

A.定义了一个基类型为Int的指针变量p,该变量具有三个指针。

B.定义了一个指针数组p,该数组含三个元素,每个元素都是基类型为int的指针。

C.定义了一个名为*p的整型数组,该数组含三个int类型的元素。

D.定义了一个可指向一维数组的指针变量p。3、fut(int**s,intp[2][3]){**s=p[1][1];}main(){inta[2][3]={1,3,5,7,9,11},*p;

fut(&p,a);

printf(“%d”,*p);}A.1B.7C.9D.114、main(){inta=5,*b,**c;c=&b;b=&a;}A.变量a的地址B.变量b中的地址

C.变量a中的地址D.变量b的地址5、intc[4][5],(*p)[5];p=c;能够正确引用c数组元素的是:

A.p+1B.*(p+1)C.*(p+1)+3D.*(p[0]+2)6、inta[3][2]={1,2,3,4,5},*p[3];p[0]=a[1];*(p[0]+1)所代表的数组元素是:

A.a[0][1]B.a[1][0]C.a[1][1]D.a[1][2]第10章结构体与共用体考点1:结构体类型的概述——主要考查结构体类型定义、结构体变量的定义与引用、结构体数组的定义与c元素的引用。理论链接:1、结构体类型定义的一般形式为:

struct

结构体名

{类型名结构体成员名;

……};结构体是由用户命名的,命名规则与变量名相同,也可以省略结构体名。结构体成员称为结构体中的域。结构体成员可以是简单变量、数组、指针或已声明的结构体、共用体类型等。结构体类型的数据长度是结构体各成员变量的长度之和。

struct

student

{intnum;charname[20];

charsex;

intage;

floatscore;

charaddr[30];

};2、定义结构体类型变量的方法:(1)紧跟在类型说明之后进行定义。

strutct

结构体名

{成员列表}变量名列表;(2)先说明结构体类型,然后再单独定义。

struct

结构体名

{成员列表};

struct

结构体名变量名表列;(3)说明一个无名结构体类型,直接进行变量定义。

struct{成员列表}变量名列表;(4)用typedef说明一个结构体类型名,再用类型名进行定义。

typedef

struct

结构体

{成员列表}标示符;标示符变量名列表;或省略结构体名。注意:typedef和define的区别。3、结构体成员的引用方式:(1)结构体变量名.成员名(2)结构体数组元素名.成员名(3)结构体指针变量名->成员名(4)(*结构体指针变量名).成员名4、结构体变量的初始化

structstudent{1ongintnum;charname[20];charsex;charaddr[20];

温馨提示

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

评论

0/150

提交评论