当前位置:文档之家› C语言笔试题

C语言笔试题

C语言笔试题.txt骗子太多,傻子明显不够用了。我就是在路上斩棘杀龙游江过河攀上塔顶负责吻醒你的公主。现在的公司招聘,都要笔试面试.如果你不是那种编程功底非常深厚的人,又不好好准备一番,
在笔试面试中往往会处于被动局面.虽然有些笔试题是故意为难我们,有点钻牛角尖.
但是很多笔试题面试题确实能够很好地看出我们的基础.
在这里,我就略去那些钻牛角尖的题.从csdn论坛我近半年的收集中选出10道有代表性的题目,
难度基本上是逐渐加大.对数组,指针,数据结构,算法,字符串,文件操作等问题都有覆盖.
主要以c语言的实现为主,也有c++的题.大家可以先做做这10道题,测试一下自己的水平.
1. 下面这段代码的输出是多少(在32位机上).
char *p; // 4
char *q[20]; // 80
char *m[20][20]; // 1600
int (*n)[10]; // 4
struct MyStruct
{
char dda;
double dda1;
int type ;
};
MyStruct k; // 24
printf("%d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));
2.
(1)
char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };
for(int i=0;i<12;i++)
printf("%d ",___*(**a+i)____);

在空格处填上合适的语句,顺序打印出a中的数字
(2)
char **p, a[16][8];
问:p=a是否会导致程序在以后出现问题?为什么?
编译就通不过,p是一个指针的指针,而a是一个2维数组的首地址。
但是*p = a也是错误的。
3.用递归方式,非递归方式写函数将一个字符串反转.
函数原型如下:char *reverse(char *str);
#include
/*=======================================================
函 数 名: reverse()
参 数: str
功能描述: 将一个字符串翻转
返 回 值: const char*
抛出异常: 无
作 者: 刘基伟 2007/4/21
=======================================================*/
const char *reverse(char *str);
int main()
{
const char *pch; // 用于取得函数的返回值,来输出翻转后的结果
char chArray[] = " Hello World ! "; // 存储一个将要翻转的字符串
pch = reverse(chArray); // 将字符串chArray翻转
printf("%s\n",pch); // 打印字符串chArray
return 0;
}
const char *reverse(char *str)
{
if(str == NULL)
return NULL;
int nCount = 0; // 用来统计字符串的大小
int nCount_div; // 将字符串的大小折半
const char *pRemark_begin; // 标记字符串的首地址
char chTemp; // 用于交换字符串的临时变量
char *pString_begin; // 存储交换的头指针
char *pString_end; // 存储交换的尾指针
pString_begin = str;
pRemark_begin = str;
while(*str != '\0') // 寻找字符串的结尾
{
str++;
nCount++;
}
pString_end = --str; // 退回一个才是字符串的末尾
nCount_div = nCount/2;
while(nCount_div>0) // 将字符串翻转
{
chTemp = *pString_begin;
*pString_begin = *pString_end;
*pString_end = chTemp;
pString_begin++;
pString_end--;
nCount_div-

-;
}
return pRemark_begin;
}
4.strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题?
5.写一个函数将一个链表逆序.
一个单链表,不知道长度,写一个函数快速找到中间节点的位置.
写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).
6.用递归算法判断数组a[N]是否为一个递增数组。
7.
有一个文件(名为a.txt)如下,每行有4项,第一项是他们的名次,
写一个c程序,将五个人的名字打印出来.并按名次排序后将5行数据仍然保存到a.txt中.使文件按名次排列每行.

2,07010188,0711,李镇豪,
1,07010154,0421,陈亦良,
3,07010194,0312,凌瑞松,
4,07010209,0351,罗安祥,
5,07010237,0961,黄世传,
8.写一个函数,判断一个unsigned char 字符有几位是1.
写一个函数判断计算机的字节存储顺序是升序(little-endian)还是降序(big-endian).
9.微软的笔试题.
Implement a string class in C++ with basic functionality like comparison, concatenation,
input and output. Please also provide some test cases and using scenarios (sample code of using this class).
Please do not use MFC, STL and other libraries in your implementation.
10.有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,
写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).
这十道题还是能够看出自己的水平如何的.如果你能不假思索地做出这10道题,估计去国外大公司是没有问题了,呵呵.
答 案我在整理中,以后陆续发布.................
下面有些题也不错,可以参考.

1.下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b>6)?puts(">6"):puts("<=6");//puts为打印函数
}
输出 >6.
a+b这里做了隐式的转换,把int转化为unsigned int
编译器就会把b当作一个很大正数
2. b)运行下面的函数会有什么结果?为什么?
void foo(void)
{
char string[10],str1[10];
int i;
for(i=0;i<10;i++)
{
str1[i] = 'a';
}
strcpy(string, str1);
printf("%s",string);
}
str1没有结束标志,因此陷入死循环
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest == NULL) || (strSrc == NULL))
throw "Invalid argument(s)";
char * strDestCopy = strDest;
while ((*strDest++ = *strSrc++) != '\0');
return strDestCopy;
}
由于str1末尾没有'\0’结束标志,所以strcpy不知道拷贝到何时结束.
printf函数,对于输出char* 类型,
顺序打印字符串中的字符直到遇到空字符('\0')或已打印了由精度指定的字符数为止.

相关主题
文本预览
相关文档 最新文档