关键词不能为空

当前您在: 主页 > 英语 >

C语言题库(含答案)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:42
tags:

-

2021年3月3日发(作者:zbs)


渥瑞达北美



IT


培训







































一、



简答题。


(



14



,



0



,


每题


0



)


1.


int


i=10,


j=10,


k=3;


k*=i+j;


k


最后的值是


?


答:


k = 60


ok



2.


写出程序结果


:


void


Func(char


str[100])



{














































printf(


sizeof(str));



}



答:


4


或者


8


(如果操作系统为

< p>
32


位则为


4,64


位则 为


8




是地址吗




3.


写出


sizeof(struct name2)


的结果



struct name2{



char str;



int num;



short x;


}


不会!看结构




答:此题考察结构对齐的知识,结果为


12


4.


写出


sizeof(struct name1)


的结果



struct name1{



char str;



short x;



int num;


}



不会!





答:同样考察的是结构对齐的知识,结果为


8


5.


A.c


B.c


两个


c


文件中使用了两个相 同名字的


static


变量


,


编译的时候会


不会有问题


?

这两个


static


变量会保存到哪里(栈还是堆或者其他 的)


?






答:


没有问题,

static


变量只在当前文件中有效,也就是说


stat ic


变量的作用


域属于所在的文件域。



渥瑞达北美



IT


培训







































static


变量保存在全局


/


静态区



6.


(void *)ptr




(*(void**))ptr< /p>


的结果是否相同?





答:相同。首先第一个(


void


*



ptr



ptr


转换为空指针类型


(

< p>
一级指针


)




*



void**


))


ptr


相当于先将


ptr


转换为空类型指针(二级指针)。二级指针是


指向指针的指针,在前面加上< /p>


*


(解指针),也就是空类型指针了(一级指针)。



7.


#define DOUBLE(x) x+x



i = 5*DOUBLE(5)




i


是多少?






: i = 5 * 5+5 = 30;


看书上的结构理解下意思



8.


下面的声明都是什么意思?



const int a;



int const a;



const int *a;



int * const a;



int const * const a ;





< /p>


答:第一个定义常量


a


,第二个也是定义 常量


a


,第三个定义常量指针


a


,第四


个定义指针常量


a


第五个定义指向常量的指针常量(相当于


const


引用)




9.


关键字


const


是什么含意?





< p>
答:



修饰基本类型,比如


int


类型为常量。




修饰指针分为两种情况:指针常量或者常量指针。



< /p>


修饰类的成员函数,


则在此函数中无法修改类中数据成员的值。< /p>


???




修饰返回值意味着返回值不可被改变




修饰函数参数,意味着函数参数不能被有意或者无意修改。



10.


do……while

< p>


while……do


有什么区别?





< br>答:do…while


先执行循环再判断条件,while…do


先进行判断再执行循环。



11.

语句


for(



1



)


有什么问题?它是什么意思?



他的意思是循环条件永远为真,


不停地进行循环操作,


除非循环体中有强制退出


循环的语句才 能终止循环,其实功能就相当于


while(1)




渥瑞达北美



IT


培训








































答:无限循环



12.


如何引用一个已经定义过的全局变量?






答:


题目 说的有点不太清楚,如果是引用其它文件中定义的全局变量用


extern



如果是在本文件中引用的话用作用域运算符


::


是在


c++


中的




()


结构中条件表达式的类型可 以是什么类型?






答:整型,字符型,常量,


枚举类型





14..h


头文件中的


ifndef/define/endif


的作用 ?





答:预编译命令,一般是用来防止头文件多重包含



结构?



二、



问答题。


(



63



,



0



,


每题


0



) < /p>


1.


关键字


static


的作用是什么?





第一:隐藏。


static


全局变量只在本文 件中可访问,其它文件无法访问。



第二:持久保存变量的内容 。


static


变量一经初始化便到程序运行结束后才



会被释放。



第三: 默认初始化为



变量会被编译器默认初始化为

0






2.


int a[3];



a[0]=0; a[1]=1; a[2]=2;



int *p, *q;



p=a;



q=&a[2];




a[q-p]=a[2]



这段程序执行完之后数组中元素的值分别是什么?


q-p=2

< p>




答:


0



1



2


渥瑞达北美



IT


培训













































3.


根据


a


的值, 完成


b


的初始化,并将


b


的值返回



int func(


float


a)



{




int b;




switch(a)




{





case 1: 30;









break;





case 2: 20;





case 3: 16;





default: 0




}




return b;



}



此程序段有什么错误,如果有请指出







答:< /p>



只能用整型或者字符型或者枚举类型,


f loat


类型不正确。




后面没有加


break





4.


写出程序运行结果



int sum(int a)



{



auto int c=0;



static int b=3;



c+=1;



b+=2;



return(a+b+c);



}




void main()



{



int I;



渥瑞达北美



IT


培训







































int a=2;



for(I=0;I<5;I++)



{



printf(



}



}







答:


8



10



12



14



16






5.


写出输出结果



void g(int**);



int main()



{



int line[10],i;



int *p=line;



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



{



*p=i;



g(&p);



}



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



printf(



return 0;



}





void g(int**p)



{



(**p)++;



(*p)++;



}






答:


1 2 3 4 5 6 7 8 9 10




渥瑞达北美



IT


培训








































6.


写出输出结果



int main()



{




int a[5]={1,2,3,4,5};




int *ptr=(int *)(&a+1);//


解释



解释


1



printf(



}







答:


2



5



7.


写出下面的结果



char str1[] =



char str2[] =



const char str3[] =



const char str4[] =





const char *str5 =



const char *str6 =





char *str7 =



char *str8 =



printf (“%d”,str1 == str2 );


//


数组名就是



printf (“%d”, str3 == str4);



printf (“%d”, str5 == str6 );



printf (“%d”, str7 == str8 );








答:


0 0 1 1




8.


以下


3


个有什么区别


?



char * const p;



char const * p




const char *p






渥瑞达北美



IT


培训










































答:第一个是指针常量,第二个是常量指针,第三个也是常量 指针





9.


unsigned short array[]={1,2,3,4,5,6,7};



int i=3;



*(array+i)=?






答:


4





10.


i


最后等于多少


?


int i = 1;



int j = i++;



if((i>j++) && (i++ == j)) i+=j;






答:


5





11.


写一个“标准”宏



1>


输入两个参数,输出较小的一个



2>


表明


1


年 中有多少秒(忽略闰年问题)




答: 此题的考察点是防止数据太大


int


类型表示不了,现在不用担 心(


int



4


个字节)



1.#define Min(a, b) ((a) <= (b) ? (a): (b))


2.#define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL



考察内容:



1). #define


语法的基本知识(例如:不能以分号结束,括号的使用,等等)



2).


意识到这个表达式将使一个


1 6


位机的整型数溢出


-


因此要用到长整 型符号


L,


告诉编译器这个常数是的长整型数。



3).


如果你在你的表达式中用到


UL


(表示无符号长整型),那么你有了一个好


的起点 。




渥瑞达北美



IT


培训








































12.


什么是预编译


,


何时需要预编译


?



答:预编译又称为预处理,主要做一些 文本的替换工作。比如


#include


包含文


件代码,


#define


宏定义的替换,条件编译等等 。



预编译代码有助于在开发周期中缩短编译时间,特别是在以 下的情况中:



1.


总是使用不经常改动的大型代码体



2.


程序由多个模块组成,所有模块都使用一组标准的包含文件 和相同的编译选


项。在这种情况下可以将所有包含文件编译为一个预编译头。

< p>



用于创建预编译头文件的第一次编译所花费的 时间比后面的编译稍长一些,通


过包含预编译代码可以加快后面的编译速度。

< p>








13.


阐述堆和栈的区别




答:


1.


申请方式。栈由编译器自动申请空间,堆需要 程序员手动申请空间。



2.


申请后的 系统响应。栈的剩余空间大于所申请的空间,系统为程序提供内存,


否则退出。堆申请方 式是链表式申请,遍历空闲内存链表,找到大于申请空间


的内存,从空闲内存链表中删除 ,分配给程序。



3.


申请大小的限制 。栈在


windows


下是向低地址扩展的数据结构,是一块连 续


的内存区域,大小是固定的。(一般是


2m

< br>)堆是向高地址扩展的数据结构,是



不连续的内存区域。



4.

< p>
申请效率,栈分配速度较快,堆分配速度较慢,容易产生内存碎片。



还有其它的一些区别,课下大家自己去学习一下。







14.


简要描述


c

< br>程序的内存分配





答:


C


语言内存分配主要分为

< br>5




1.



栈。存放局部变量,函数参数等 。由编译器自动申请空间,自动释放。



2.



堆。由程序员手动申请、释放空间。



3.



常量存储区。一般是常量字符串



4.



静态


/


全局区。存储的是静态变量或者全局变量。初始化后等到程序结束后

内存才会被释放



5.



程序代码区。存放函数体的二进制代码。



渥瑞达北美



IT


培训









































15.


static


全局变量与普通 的全局变量有什么区别?


static


局部变量和普通局


部变量有什么区别?


static


函数与普通 函数有什么区别?






答:



全局变 量只能在本文件中访问,


而全局变量可以通过


extern


在其


它文件中访问




局部变量存储在全局


/


静态区中,< /p>


一经初始化直到程序结束后才会被释


放。普通的局部变量存储在栈 中。




函数只能在本文件中访问,普通 函数可以在其它文件中访问。






16.


局部变量能否和全局变量重名,如果可以,请说明原因?






答:可以。局部变量会屏蔽全局变量




17.


使用枚举的好处?







答:代码的可读性就好一些






18.


全局变量和局部变量在内存中的存储是否有区别?如果有,是什么区别?





答:全局变量存储在全局数据区,


初始化后直到程序运行结束后才会释放内存。



局部变量存储在栈上,作用域在其被定义的函数或者块中,出了这个作用域就


会 被释放。





19.


#include




#include


的区别?





答:


<>


一般用来引用系统定义的头文 件,“”一般用来引用自定义头文件。



渥瑞达北美



IT


培训











































20.


“引用”与指针的区别是什么?





答:引用是变量的别名,指针保存的是变量的地址。也就是说 引用是直接操作


变量本身,而指针是间接操作变量。





21.


已知


strcpy


函数的原型是:



char * strcpy(char * strDest,const char * strSrc);


1.


不调用库函数,实现


strcpy


函数。



2.


解释为什么要返回


char *





答:


1.


char


*strcpy(


char


*


strDest


,


const



char


*


strSrc


)


{



char


*strDestCopy =


strDest


;



if


(


st rDest


==


NULL


||


strSrc


==


NULL


)



{




th row


(



);



}



while


((*strDestCopy++ = *


strSrc


++) !=


'0'


);



return



strDest


;


}




2.


支持链式表达式







22.


判断一个字符串是不是回文,


当字符串是回文时


,


函数返回字符串


: yes!,



则函数返回字符串


:no


。所谓回文即正向与反向的拼写都一样,例如


:adgda





答:



#include





#include





#define



N


100


char


*judgeStrings(


char


*str);


int


main()


{


渥瑞达北美



IT


培训








































char


a[


N


];



printf(



请输入要判断的回文字符串:



);



scanf(



, a);



printf(



, judgeStrings(a));



return


0;


}


char


*judgeStrings(


char


*


str


)


{



if


(


str


==


NULL


)




throw




;



int


len = strlen(


str


);



for


(


int


i=0; i



{




if


(< /p>


str


[i] !=


str


[len - i - 1])





return




;



}



return




;


}






23.


递规反向输出字符串的例子


,


可谓是反 序的经典例程


,


那么任意输入一字符


串 ,利用递归将其反向输出


.


#include





#define N 20



void


getReverseChar(


char


*str);


int


main()


{



char


a[N];



printf(


请输入要反序的字符串:



);



scanf(



, a);



getReverseChar(a);



printf(



);



return


0;


}


void


getReverseChar(


char


*


str


)


{



if


(*


s tr


==


'0'


)




return


;



else




{




ge tReverseChar(


str


+1);




printf(



, *


str


);


渥瑞达北美



IT


培训








































}


}







24.


用指针的方法,将字符串“ABCD1234efgh”前后对调显示



#include





#include





int


main()


{



char


a[] =



;



char


*p = a;



int


len = strlen(a);



for


(


i nt


i = 0; i < len/2; i++)



{




char


temp = a[i];




a[i] = a[len - i - 1];




a[len - i - 1] = temp;



}




printf(



, a);



return


0;


}







25.


两个字符串,


s,t;



t

< p>
字符串插入到


s


字符串中,


s


字符串有足够的空间存



t


字符串




答:


#include





#include





#define



N


100


int


main()


{



char


s[


N


] =



;



char


*t =



;



int


sLen = strlen(s);



int


tLen = strlen(t);



int


pos;



printf(



请输入要插入的位置:



);


渥瑞达北美



IT


培训
























































}



scanf(



, &pos);


if


(pos > sLen || pos < 0)



return


0;


//


先将


s


字符数组后面的 字符放到后面(采用前插法,从


0


开始)



for


(


int


i = 0; i < sLen - pos; i++)


{



s[pos + tLen + i] = s[pos + i];


}


//


再放心的插入


t


字符数组



for


(


int


i = 0; i < tLen; i++)


{



s[pos+i] = t[i];


}



s[sLen + tLen] =


'0'


;


printf(



, s);


return


0;



26.


已知


strcmp

< p>
的原型是



int


strcmp(const


char


*str1,


const


char


*str2)


,不调用库函数,实现


s trcmp


函数



答:


#include





#include





#define



N


100


int


strcmp(


const



char


*str1,


const



char


*str2);


int


main()


{



char


s[


N


];



char


t[


N


];



printf(



请输入要比较的一个字符串:



);



scanf(



, s);



printf(


请输入要比较的另一个字符串:



);



scanf(



, t);



printf(



, strcmp1(s, t));



return


0;


}


int


strcmp(


const



char


*


str1


,


const



char


*


str2


)


{



int


len1 = strlen(


str1


);



int


len2 = strlen(


str2


);



int


maxLen = len1 > len2 ? len1 : len2;



for


(


int


i = 0; i < maxLen; i++)


渥瑞达北美



IT


培训














































}



{



if


(


st r1


[i] >


str2


[i])




return


1;



else



if


(


str1


[i] <


str2


[i])




return


-1;


}


return


0;






27.


找出错误



#include



string. h




void main(void)


{ char *src=


char *dest=NULL;


dest=(char *)malloc(strlen(src));


int len=strlen(str);


char *d=dest;


char *s=src[len];


while(len--!=0)


d++=s--;


printf(


}



答:


.h



<>


括起来。



= (char *)malloc( strlen(src));


申请的空间不够,需要改为


des t =


(char *)malloc(strlen(src)+1);


len = strlen(str);


改为


int len = strlen(src);


*s = src[len];


改为


char *s = src[len -1];


5.d++ = s--;


改为


*d++ = *s--;

< br>6.


需要在


printf(


“% s”, dest


);


上面加上一行代码:


*d =




0’;





28.


写出输出结果



#include


void foo(int m, int n)


{



printf(


}




int main()


渥瑞达北美



IT


培训







































{






}


int b = 3;


foo(b+=3, ++b);


printf(


return 0;



答:此题考察的有一些难度,深入到了编译器级别。编译器实现的不一样,那

< p>
么结果也是不一样的。在


vc6.0


下面,结果为 :


7 4 7



vs2012


结果为


7 7


7

< br>。在


xcode


下面是


6 7 7.



29.


分析:



int arr[] = {6,7,8,9,10};


int *ptr = arr;


*(ptr++)+=123;


printf(“



%d %d


”, *ptr, *(++ptr));





答:此题和上一题目类似,考察的 是


printf()


函数的参数入栈顺序,从右往左

< p>
的运算。所以结果为:


8 8




30.


对下面程序进行分析,若有错误,请写出一个正确的程序段



void test2()


{



char string[10], str1[10];



int i;



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



{




str1[i] = 'a';



}



strcpy( string, str1 );


}


答:错误,主要是


str1[10]


字符数组没哟


0


。所以应该如下修改


:


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


{


str[i]


= ‘a’;



}


str[i] = ‘



0’;






渥瑞达北美



IT


培训







































31.


请问一下程序将输出什么结果?



char *RetMemory(void)


{



char p[] =


“hellow world”;




return p;


}


void Test(void)


{



char *str = NULL;



str = RetMemory();



printf(str);


}


< /p>


答:


此程序存在的问题是


RetMemo ry(void)


函数返回的是局部变量的地址,


然后


str


指向这个地址,


但是实际上这块地址已经 让编译器给释放,


编译器有可能把


这块内存分配给其它的变量。 所以如果内存没有被修改的话输出结果为


hello


worl d,


如果被修改则输出结果未知。





32.


分析下面的程序:



void GetMemory(char **p,int num)


{



*p=(char *)malloc(num);


}


int main()


{



char *str=NULL;



GetMemory(&str,100);



strcpy(str,



free(str);



if(str!=NULL)



{




strcpy(str,



}



printf(



getchar();


}




答:程序存在的问题是:


GetMe mory


函数成功的为


str


分配了一 块堆上的内存,


但是后来被释放掉了。


由于释放后没有将指针置 为空,



str


肯定不会为

< p>
NULL



接着调用


st rcpy()


函数为


str


指向的空间 赋值。这是非法的,


str


指向的是已


经被释放的内存,故拷贝会失败。



渥瑞达北美



IT


培训











































33.


下面的语句会出现什么结果?



char szstr[10];


strcpy(szstr,




答:编译不通过,字符数组


szstr


空间 为


10


,但是字符串为


11

< p>
个(加上


0



,


故字符数组空间不够存下字符串。







34.


下面的程序会出现什么结果



#include


#include


void getmemory(char *p)


{



p=(char *) malloc(100);



strcpy(p,


}


int main( )


{



char *str=NULL;



getmemory(str);



printf(



free(str);



return 0;


}



答:程序存在的问题是


str


没有指向申请出来 的空间,


str


还是为


NULL



free


()函数释放堆上的空间,可是< /p>


str


并没有指向堆上的空间,故程序会出错。

< br>






35.


请问以下代码有什么问题:



int main()


{



char a;



char *str=&a;

-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:42,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700001.html

C语言题库(含答案)的相关文章