南京晓庄学院—C语言期末考试复习提纲

别妄想泡我
841次浏览
2021年02月12日 21:48
最佳经验
本文由作者推荐

-

2021年2月12日发(作者:吊死扶伤)



习题一



1.


以下常量中正确的是






。



A.


’


abc


’



B.


’


x123


’


C. 3.145E-1.2 D.



”


a


”



2.


设有“


int a;

< p>
”


,


以下不能正确表达数学关系

< br>10


的表达式是






。



A. 10


C. a>10&&a<15 D. !(a<=10)&&!(a>=15)


3.


以下程序段的输出结果是






。



int a=0,b=4,k=2;


k=a+1>0||(++a<0)&&(!(b--<=0));


printf(


”


%d,%d, %d


”


,k,a,b);


A. 1,1,3 B. 1,1,4 C. 1,0,3 D. 1,0,4


4


.若有“


int a=5; a+=a-=-a*a;


”


,则

a


的值是






。



5.


以下所列语句中,合法的语句是






。



A. a=1,b=2 B. ++a; C. a=a+1=5; D. y=int(a);


6.


以下所列字符常量中,不合法的是






。



A.


’


0xff


’



B.


’


65


’


C.


’


$$


’


D.



’


x1a


’



7.


设有定义“


float


y=3.45678;


int


x;


”


,则以下表达式中能实现将


y


中数值保留小数点后


2


位,第


3


位四舍五入的表达式是






。



A. y=(y*100+0.5)/100.0 B. x=y*100+0.5,y=x/100.0


C. y=y*100+0.5/100.0 D. y=(y/100+0.5)*100.0


8.


以下程序段输出结果是






。



int a=10,b=11,c=12,s;


s=a++<=10&&b--<=2&&c++;


p rintf(


”


%d,%d,%d,%d


”


,s,a,b,c);


A. 0,11,10,13 B. 1,11,10,13 C. 0,11,10,12 D. 1,11,10,12


9.


设有语句“


int a=2,b=3,c=2; a+=b*= (++b-c++);


”


,变量


b


的值是






。




习题二



1.


以下关于


if


语句的错误描述是






。



A.


条件表达式可以是任意的表达式



B.


条件表达式只能是关系表达式或逻辑表达式



C.


条件表达式的括号不可以省略



D.


与


else


配对的


if


语句是其之前最近的未配对的


if


语句



2.


以下叙述中不正确的是






。



A.


一个变量的作用域完全取决于变量说明语句的位置



B.


外部变量可以在函数以外的任何位置定义



C.


内部变量的生存期只限于本次函数调用,无法将内 部变量的值保存至函数的下一次调用



D.

< p>
用


static


说明一个外部变量是为了限制其他 编译单位的引用



3.


以下程序的输出结果是






。



main()


- 1 -



{ extern int x;


printf(


”


%d


”


,x+=2 ); fun1(2);


}


int x=1;


fun1(int x)


{ printf(


”


%d


”


,x++); fun2(2); }


fun2(void)


{ prin tf(


”


%d


”


,x);


int x=5; printf(


”


%d


”


,x);


}


4.


以下不致造成死循环的语句是






。



A. for(y=0,x=1;x>++y;x=i++)i=x; B. for(;;x+=i);


C. while(x=8)x--; D. for(i=10,sum=0;sum<=i;)sum=--i;


5.


以下程序输出结果是






。



main()


{ printf(


”


%d


”


,fun(5)); }


fun(int n)


{ if(n==1) return 1;


return n-fun(n-1);


}


6. [


程序


]


main()


{ int j,k,s,m;


for(k=1;k<10;k++)


{ s=1; m=k+2;


for(j=k;j


}


printf(


”


s=%d,k=%d


”


,s,k);


}



程序输出结果


s=





,k=





。



7.


若有宏定义:



#define N 2


#define Y(n) ((N+1)*n)



则执行语句“


z=2*(N+Y(N+2));


”后


,z


的值是






。



8.


以下程序输出结果是






。



#define T(x,y,z) x*y*z/4


main()


{ int a=1,b=3,c=5;


- 2 -



printf(< /p>


”


%d


”


,T( b+a,a*++b,a+b+c));


}



习题三



1.


若有“


int a[][4]={1,2,3,4,5,6,7 ,8,9,10},*p=*(a+1);


”


,


则值为


9


的表达式是







。



A. p+=3,*p++ B. p+=4,*(p++)


C. p+=4,*++p D. p+=4,++*p


2.


设有以下函数定义,则返回的函数值是






。



main()


{int x,*y; y=fun(&x);


…


}


int *fun(int *a)


{int *t; *a=99; t=a; return t;}


A.


无确切的值


B.


形参


a


的地址



C.


主函数中变量


x


的地址


D. fun


函数 中变量


t


的地址


3


.


[


程序


]


main()


{ int s,p[9]={1,2,3,4,5,6,7,8,9};


printf(


”


n%d


”


,add( p,5));


}


add(int *p,int n)


{ if(n==1) return *p;


else return *p+add(p+1,n-1);


}



程序输出结果是






。



4. [


程序


]


int *swap(int *a, int *b)


{ int *p;


p=a; a=b; b=p;


return a;


}


main()


{ int x=3,y=4,z=5;


swap(swap(&x,&y),&z);


printf (


”


%d,%d,%d


”


,x,y,z);


}



程序输出结果是






。



5. [


程序


]


fun(int n,int *s)


{ int f1,f2;


if(n==1||n==2) *s=1;


- 3 -



else


{ fun(n-1,&f1); fun(n-2,&f2);


*s=2*f1+f2+1; printf(


”


n%d,%d


”


,f1,f2);


}


}


main()


{ int x;


fun(4,&x); printf(


”


nx=%d


”


,x);


}


程序运行时输出的第一行是






,第二行是






,最后一行是






。



6.


如有以下定义



int y[4][4]={1,2,3,4,5,6,7,8,9,10},*py1 =y[1],(*py2)[4]=y;


则不能正确引用值为


7


的数组元素的表达式是






。



A. *(y[1]+2) B. *(y+1)+2 C. py1[2] D. py2[1][2]


7. [


程序


]


main()


{ int i,p[3][3]={1,2,3,4,5,6,7,8,9},*p1[3],(*p2)[3];


for(i=0;i<3;i++) p1[i]=p[i];


p2=p;


for(i=1;i<3;i++)


printf(


”


n%d,%d


”


,*(*(p1+i)+1)+1,*(*++p2+1)+ 1);


}



程序运行时输出的第一行是






,第二行是






。



8. [


程序


]


main()


{ int i,j,a[3][3]={1,1},*p1,*p2,*p3;


p1=a[0]; p2=a[0]+1; p3=a[0]+2;


for(i=2;i<9;i++)


func(p1++,p2++,p3++);


for(i=0;i<3;i++)


for(j=0;j<3;j++)


{ pri ntf(


”


%d,


”

< br>,a[i][j]); printf(


”


n

< p>
”


); }


}


func(int *q1,int *q2,int *q3)


{ *q3=*q1+*q2; }



程序运行时输出的第一行是






,第二行是






,第三行是






。



9. [


程序


]


main()


{ int i,p[9]={1,2,3,4,5,6,7,8,9},*p1[3],**p2;


for(i=0;i<3;i++) p1[i]=&p[6-3*i];


- 4 -



p2=p1+2;


for(i=1;i<3;i++)


printf(


”


%d,%dn


”


,* (++p1[i]+2)+1,*(*p2--+1)+2);


}



程序运行时输出的第一行是






,第二行是






。



10.[


程序


]


fun(int *s,int n1,int n2)


{ int t;


while(n1


{ t=*(s+n1);


*(s+n1)=*(s+n2);


*(s+n2)=t;


n1++; n2--;


}


}


main()


{ int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;


fun(p,0,3); fun(p+3,1,6);


for(i=0;i<10;i++)


{ if(i%5==0) printf(


”


n

< br>”


);


printf(


”


%d


”


,a[i]);


}


}



程序输出的第一行是






,第二行是






。




习题四



1.


设有基类型相同的两个指针变量,则不能对它们进行






运算。



A. + B. - C. ++ D. --


2.


语句






能正确完成赋字符串的功能。



A. char s[4];s[0]=


”


string


”


; B. char *s;gets(s);


C. char *s[]=


”


string


”


; D. char *s;strcpy(s,


”


string

”


);


3


.以下程序的输出结果是






。



enum week{SUN=7,MON=1,WED,TUS,THS,FRI,SAT};


main()


{ printf(


”


%d


”


,hour(FRI,SUN) );


}


hour(int x,int y)


{ if(y>x) return 24*(y-x);


- 5 -



else return


–


1;


}


4. [


程序


]


char *fun(char *s)


{ int i,j;


for(i=j=0;s[i]!=


’


0


’


;i++)


if(s[i]!=


’


c


’

< p>
) s[j++]=s[i];


s[j]=


’< /p>


0


’


; return s;


}


main()


{ printf(


”


%s


”


,fun(


”


chance

”


)); }



程序输出结果是






。



5.


以下说法中正确的是






。



A.


一个结构中只能包含一种数据类型



B.


不同结构中的成员不能有相同的成员名



C.


两个结构变量不可以进行比较



D.


关键字


typedef


用于定义 新的数据类型



6.


下列程序段执行 后变量


j


的值是






。



int j;


char *s=


”


x045


””


;


for(j=0;*s++;j++);


A. 7 B. 3 C. 4 D. 5


7.


设有以下说明和语句,则值为


2 10


的表达式是






。



struct s


{ int a; int *b; };


int x0[]={110,120},x1[]={210,220};


struct s x[]={{100},{200}},*p=x;


x[0].b=x0; x[1].b=x1;


A. *p->b B. (++p)->a C. *(p++)->b D. *(++p)->b


8.


设有“


char s[]=


”


Program


”


,*p=s;


”


,


则以下叙述中正确的是






。



A.

数组


s


的内容与指针变量


p


中的内容相同



B.


数组


s


的长度与


strlen (p)


的值相等



C. p[5 ]


的值等于


s[5]


的值



D. sizeof(s)


等于


sizeof(*p)


9.


若有定义语句“


static char str[4][20]={


”


thank

< p>
”


,



”


you


”


,



”


very


”


,



”


much!


”


};


”


,



则


str


数组中存储


’


0


’


的数组元素有






个。



- 6 -



10.


以下程序输出结果是






。



main()


{ enum color{RED=5,BLUE,WHITE=0,BLACK};


char *colorname[]={


”

< br>red


”


,


”

< br>blue


”


,


”


white


”


,


”

< p>
black


”


};


pr intf(


”


%s


”

< br>,colorname[BLACK]);


}



习题五



1.


函数


delstr


功能是:在字符串


str


中删除所有出现的子串


str1


。



[


程序


]


char *delstr(char *str,char *str1)


{ char *p,*p1,*q1;


int i;


if(*str==


’


0


’


||* str1==


’


0


’

< br>) return str;


p=str;


whil e(*p!=


’


0


’

< br>)


{ p1=p,q1=str1;


while(*p1==*q1 && *q1!=


’


0


’


)





;


if(p!=p1 && *q1==


’


0


’

)


{ for(i=0; *p1!=


’

< p>
0


’


; i++,p1++)





=*p1;






=


’


0


’


;


}


p++;


}






;


}


2.


设结点的数据结构定义如下:



typedef struct p{


int x,y;


struct p *next;


}PNODE;



函数


padd


功能是:由


pa


、


pb


分别指向的两个已经存在的链表,生成一个

< p>
pc


指向的新链表并返回


该新链表第一个结点的地 址。


两个已存在的链表均是按结点的


y


值升序排列的有序表,


新生成链表


的结点仍按

< br>y


的值升序排列。


新链表生成规则是:

< br>当在


pa


和


pb


链表中发现


y


值相同的结点时,


则


在


pc


链表中增加一个新结点,< /p>


新结点的


x


取值为


pa


、


pb


指向的链表中对应的两个 结点的


x


值之和,


新结点的

< p>
y


取值为


pa


或


pb


链表中对应结点的


y


值。



- 7 -



[


程序


]


PNODE *padd(PNODE *pa,PNODE *pb)


{ PNODE *pcr,*pt,*pc;


pc=NULL;


while(





)


{ if(pa->y==pb->y)


{ pt=(





)malloc(sizeof(PNODE));


pt->x=pa->x+pb->x; pt->y=pa->y; pt->next=NULL;


if(pc==NULL) pc=pcr=pt;


else


{ pcr->next=pt;





;}


pa=pa->next; pb=pb->next;


}


else if(





) pb=pb->next;


else pa=pa->next;


}


return pc;


}


3.


以下程序打 印所有符合下列条件的


3


位正整数:是某一个数的平方数,其中 有两位数字相同。如


100


、


121< /p>


等。



main()


{ int a,b,c,n,k;


for(k=10;;k++)


{ n=





;


if(n>999)





;


a=n/100;


b=





;


c=n%10;


if(!((a-b)*(b-c)*(c-a))) printf(


”


n%d,%d


”

,n,k);


}


}


4.


以下程序实现将


a


数组中后


8


个元素从大到小排序的功能。

< p>


void sort(int *x,int n);


main()


{ int a[12]={5,3,7,4,2,9,8,32,54,21,6,43},k;


sort(





,


8);


for(k=0;k<12;k++) printf(


”


%d


”


,a[k]);


}


void sort(int *x,int n)


{ int j,t;


if(n==1) return;


for(j=1;j


- 8 -



if(





)


{ t=x[0]; x[0]=x[j]; x[j]=t; }


sort(x+1,





);


}


5.


已知某链表中结点的数据结构定义如下:



struct node


{ int x;


struct node *next;


};



函数


find_del


功能是:


在参数


head


指向的链表中查找并删除


x


值最大的结点,

< br>如有多个相同的


x


值最大的结点,删除第一个结点,保存 该结点的地址到


pm


指向的指针变量中,函数返回链表首结


点的指针。



struct node *find_del(struct node *head,struct node **pm)


{ struct node *p1,*p2,*pmax,*pre;


if(head==NULL) return NULL;


pmax=





; p2=p1=pmax;


while(p1)


{ if(p1->x>





)


{ pre=p2; pmax=p1; }


p2=p1; p1=p1->next;


}


if(pmax==head) head=pmax->next;


else





=pmax->next;






=pmax;


return head;


}





编程题



1.


熟悉


Visual C++


编程环境,编写第一个


C


语言程序,输出以 下信息:



* * * * * * * * * * * * * * *


Very good!


* * * * * * * * * * * * * * *












- 9 -



2.


三数中取大数













3.


搬砖问题。

< br>36


块砖,


36


人搬;男搬


4


,女搬


3


,两个 小孩抬一砖。要求一次全搬完,问男、女、小


孩各若干?













4.


打印九九表。



1


2


3


4


5


6


7


8


9


----------------------------------


1


2


3


4


…






9


2


4


6


8


3


6


9


12


.


.


9


18


27


36






81














- 10 -







5.


验证素数。















6.


打印


Fibonacci


数列。


(


1 1 2 3 5 8 13


…)

















1.


有一分数序列


2/1,3/2, 5/3,8/5,13/8,21/13,


…


,


求出这个数列的前


20


项之和。














- 11 -




2.


输出以下图案:



*


* * *


* * * * *


* * * * * * *


* * * * *


* * *


*














3.


有一个


3


×


4


的矩阵,要求编程序求出其中值最大的那个元素的值,以 及其所在的行号和列号。
















4.


求一个


3


×


3


的整型矩阵对角线元素之和。











- 12 -







5.


已 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中


















6.


输出以下的杨辉三角形(要求输出


10


行)


。



1


1


1


1


2


1


1


3


3


1


1


4


6


4


1


1


5


10


10


5


1


.


.


.


.


.


.


.
















1.


有


15


个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中


第几个元素的值。如果该数不在数组中,则输出“无此数”


。



- 13 -

-


-


-


-


-


-


-


-