C语言笔试题题目.docx
《C语言笔试题题目.docx》由会员分享,可在线阅读,更多相关《C语言笔试题题目.docx(17页珍藏版)》请在冰豆网上搜索。
C语言笔试题题目
C语言笔试题题目
一、简答题
1.程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。
2.设有以下说明和定义:
typedefunion{longi;intk[5];charc;}DATE;
structdata{intcat;DATEcow;doubledog;}too;
DATEmax;
则语句printf("%d",sizeof(structdate)+sizeof(max));的执行结果是:
_______
3.32位系统下,请问如下语句的值
unsignedchar*p1;
unsignedlong*p2;
p1=(unsignedchar*)0x801000;
p2=(unsignedlong*)0x810000;
请问p1+5=
p2+5=
4.inti=10,j=10,k=3;k*=i+j;k最后的值是?
5.#defineDOUBLE(x)x+x,i=5*DOUBLE(5);i是多少?
6.下面程序的输出是_____,为什么?
char*ptr;
if((ptr=(char*)malloc(0))==NULL)
{
puts("Gotanullpointer");
}
else
{
puts("Gotavalidpointer");
}
7.以下程序运行后的输出结果是______。
main()
{
charm;
m='B'+32;printf("%c\n",m);
}
8.已有定义如下:
structnode
{
intdata;
structnode*next;
}*p;
以下语句调用malloc函数,使指针p指向一个具有structnode类型的动态存储空间。
请填空p=(structnode*)malloc(________);
9.在绝对地址0xXXXXXXXX上写入字符’a’的语句是___________。
10.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
11.写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。
12.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
13.用变量a给出下面的定义
a)一个整型数(Aninteger)
b)一个指向整型数的指针(Apointertoaninteger)
c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoanintege)
d)一个有10个整型数的数组(Anarrayof10integers)
e)一个有10个指针的数组,该指针是指向一个整型数的。
(Anarrayof10pointerstointegers)
f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)
g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger)
14.关键字static的作用是什么?
15.关键字const的含义。
16.关键字volatile有什么含意?
并给出三个不同的例子。
17.一个参数既可以是const还可以是volatile吗?
解释为什么。
18.一个指针可以是volatile吗?
解释为什么。
19.下面的函数有什么错误:
intsquare(volatileint*ptr)
{
return*ptr**ptr;
}
20.在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。
编译器是一个纯粹的ANSI编译器。
写代码去完成这一任务。
21.局部变量能否和全局变量重名?
22.如何引用一个已经定义过的全局变量?
23.全局变量可不可以定义在可被多个.C文件包含的头文件中?
为什么?
24.语句for(;1;)有什么问题?
它是什么意思?
25.do……while和while……do有什么区别?
26.下列哪种方法更好,为什么?
definedPSstructs*
typedefstructs*tPS;
27.下面的结构是合法的吗,如果是它做些什么?
inta=5,b=7,c;
c=a+++b;
28.队列和栈有什么区别?
29.全局变量和局部变量是否有区别?
如果有,是什么区别?
30.堆栈溢出一般是由什么原因导致的?
31.冒泡排序算法的时间复杂度是什么?
32.分别写出BOOL,int,float,指针类型的变量a与“零”的比较语句。
33.不能做switch()的参数类型是:
34.某32位系统下,请计算sizeof的值.
charstr[]=“
char*p=str;
intn=10;
请计算
sizeof(str)=?
(1)
sizeof(p)=?
(2)
sizeof(n)=?
(3)
voidFoo(charstr[100]){
sizeof(str)=?
(4)
}
void*p=malloc(100);
sizeof(p)=?
(5)
35.请说出const与#define相比,有何优点?
36.回答下面的问题.
a)头文件中的ifndef/define/endif干什么用?
预处理
b)#include和#include“filename.h”有什么区别?
37.使用malloc()函数时,为什么要将其返回值强制转换成被赋值指针变量的数据类型?
38.列举一个软件中时间换空间或者空间换时间的例子。
39.以下C语言语句有什么区别
char*constp;
charconst*p;
constchar*p;
40.下面x,y,*p的值是多少,有什么问题?
intx,y,z=2;
int*p=&z;
x=sizeof*p;
y=x/*p;
41.下面的语句是什么意思?
如何声明或定义才使它们更易懂?
(10分)
int(*foo())();
int(*foo())[];
int(*foo[])();
(*(void(*)())0)();
void(*signal(int,void(*)(int)))(int);
42.如何定义Bool变量的TRUE和FALSE的值。
43.运行chara[]=”abc”后,内存会开辟几块内存,这此内存共占多少个字节?
44.运行char*p=”abc”后,内存会开辟几块内存,这此内存共占多少个字节?
45.说出int*(*p)[3]; p是什么变量?
如果p是指针变量,那么p+1的偏移量是多少?
46.一个32位的机器,该机器的指针是多少位?
47.已知一个数组table,用一个宏定义,求出数据的元素个数
二、程序分析题
1.下面的代码有什么问题?
char*_strdup(constchar*strSource)
{
staticcharstr[MAX_STR_LEN];
strcpy(str,strSource);
returnstr;
}
2.下面的代码输出是什么,为什么?
voidfoo(void)
{
unsignedinta=6;
intb=-20;
(a+b>6)?
puts(">6"):
puts("<=6");
}
3.请写出下列代码的输出内容
#include
main()
{
inta,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:
%d,%d,%d",b,c,d);
return0;
}
4.Test函数的运行结果如何?
voidGetMemory(char*p)
{
p=(char*)malloc(100);
}
voidTest(void)
{
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
5.Test函数的运行结果如何?
char*GetMemory(void)
{
charp[]="helloworld";
returnp;
}
voidTest(void)
{
char*str=NULL;
str=GetMemory();
printf(str);
}
6.Test函数的运行结果如何?
VoidGetMemory2(char**p,intnum)
{
*p=(char*)malloc(num);
}
voidTest(void)
{
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
}
7.Test函数的运行结果如何?
voidTest(void)
{
char*str=(char*)malloc(100);
strcpy(str,“hello”);
free(str);
if(str!
=NULL)
{
strcpy(str,“world”);
printf(str);
}
}
8.写出下列代码的输出内容
#include
intinc(inta)
{
return(++a);
}
intmulti(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedefint(FUNC1)(intin);
typedefint(FUNC2)(int*,int*,int*);
voidshow(FUNC2fun,intarg1,int*arg2)
{
INCp=&inc;
inttemp=p(arg1);
fun(&temp,&arg1,arg2);
printf("%dn",*arg2);
}
main()
{
inta;
show(multi,10,&a);
return0;
}
9.请找出下面代码中的所以错误
说明:
以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
#include"string.h"
main()
{
char*src="hello,world";
char*dest=NULL;
intlen=strlen(src);
dest=(char*)malloc(len);
char*d=dest;
char*s=src[len];
while(len--!
=0)
d++=s--;
printf("%s",dest);
return0;
}
10.以下程序有什么错误
试题1:
voidtest1()
{
charstring[10];
char*str1="0123456789";
strcpy(string,str1);
}
试题2:
voidtest2()
{
charstring[10],str1[10];
inti;
for(i=0;i<10;i++)
{
str1='a';
}
strcpy(string,str1);
}
试题3:
voidtest3(char*str1)
{
charstring[10];
if(strlen(str1)<=10)
{
strcpy(string,str1);
}
}
11.下面程序的运行结果:
main()
{
inta[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
12.
请问以下代码有什么问题:
intmain()
{
chara;char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
13.交换两个变量的值,不使用第三个变量。
即a=3,b=5,交换之后a=5,b=3;
14.以下是求一个数的平方的程序,请找出错误:
#defineSQUARE(a)((a)*(a))
inta=5;
intb;
b=SQUARE(a++);
15.下面的程序运行结果是()
设intarr[]={6,7,8,9,10};
int*ptr=arr;
(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
16.下面的两段代吗?
有什么区别?
什么时候需要使用代码2?
1、
inti=10;
intj=i;
intk=i;
2、
volatileinti=10;
intj=i;
intk=i;
17.printf("%d",0x01<<2+3);输出?
18.在32位的X86系统下,输出的值为多少?
#include
intmain()
{
inta[5]={1,2,3,4,5};
int*ptr1=(int*)(&a+1);
int*ptr2=(int*)((int)a+1);
printf("%d,%x",ptr1[-1],*ptr2);
//注意从高字节开始打印
return0;
}
19.下面代码的有问题吗?
为什么?
#include
voidfunc(chara[10])
{
charc=a[3];
}
intmain()
{
charb[10]="abcdefg";
func(b[10]);
return0;
}
20.下面代码输出的结果是多少?
#include
voidfun(inti)
{
if(i>0)
{
fun(i/2);
}
printf("%d\n",i);
}
intmain()
{
fun(10);
return0;
}
三、编程题
1.不调用库函数,自己实现memcpy函数。
void*memcpy(void*dest,constvoid*src,size_tn);
2.不调用库函数,自己实现strcpy函数。
3.
a)编写strcat函数,已知strcat函数的原型是char*strcat(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串(不能调用库函数)。
b)strcat能把strSrc的内容连接到strDest,为什么还要char*类型的返回值?
4.两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串。
5.写一函数,实现删除字符串str1中含有的字符串str2。
6.编程,判断存储方式是大端存储,还是小端存储,并说出为什么要进行大小端的判定?
7.不调用库函数,自己实现longatol(constchar*nptr)函数。
8.编写strcat函数()。
已知strcat函数的原型是char*strcat(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串。
a)不调用C++/C的字符串库函数,请编写函数strcat。
b)strcat能把strSrc的内容连接到strDest,为什么还要char*类型的返回值?
9.写一个函数,它的原形是intcontinumax(char*outputstr,char*intputstr)。
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:
"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789
10.不用库函数,用C语言实现将一整型数字转化为字符串。
11.用指针的方法,将字符串“ABCD1234efgh”前后对调显示。
12.有一分数序列:
1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前20项的和。
13.实现子串定位。
14.有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O。
15.编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。
16.给定字符串A和B,输出A和B中的最大公共子串。
17.编程实现:
把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数。
18.在不用第三方参数的情况下,交换两个参数的值。
19.写一个程序,把一个100以内的自然数分解因数。
(自然数分解因数就是将一个自然数分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度)。
20.完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?
21.输出和为一个给定整数的所有组合。
例如n=5,5=1+4;5=2+3(相加的数不能重复)则输出1,4;2,3。
22.读文件file1.txt的内容(例如):
12
34
56
输出到file2.txt:
56
34
12
(逆序)
23.有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。
以7个数为例:
{0,1,2,3,4,5,6,7}0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除),如此循环直到最后一个数被删除。
24.写一个函数,将其中的'\t'都转换成4个空格。
25.编写一个函数,作用是把一个char组成的字符串循环右移n个。
比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”。
函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n
voidLoopMove(char*pStr,intsteps)
{
//请填充...
}
26.判断两个数组中是否存在相同的数字,给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
27.按单词反转字符串并不是简单的字符串反转,而是按给定字符串里的单词将字符串倒转过来,就是说字符串里面的单词还是保持原来的顺序,这里的每个单词用空格分开。
例如:
Hereis经过反转后变为:
isHere
28.求一个整形中1的位数。
29.费波那其数列,1,1,2,3,5……编写程序求第十项。
可以用递归,也可以用其他方法,但要说明你选择的理由。