主 题: 某公司笔试题~~~
作 者: ttwo2 (ttwo2)
等 级:
信 誉 值: 100
所属社区: C/C++ 新手乐园
问题点数: 100
回复次数: 35
发表时间: 2005-8-30 17:34:17
~~~
~~
~~各位帮忙做做看
4、请将下题中的空补充完整(20%)
/***********************************************************************************************
本程序为六个整型变量ABCDEF输入整数,并按从大到小的顺序输出它们的名和值。例如某次ABCDEF的输入值为3/2/5/7/4/6,则程序输出为:D(7)F(6)C(5)E(4)A(3)B(2)
***********************************************************************************************/
#define N sizeof(stTable) / sizeof(stTable [0])
intiA,iB,iC,iD,iE,iF;
struct
{
char vn; /*存入字符*/
int* vp;
} tmp, stTable[6] = { {0, &iA}, {0, &iB}, {0, &iC}, {0, &iD}, {0, &iE},{0, &iF}};
void main(void)
{
int k, j, m;
for (k = 0; k
{
stTable[k].vn = (1) ;
printf("Enter data for %c\n", stTable[k].vn);
scanf("%d", (2) );
}
m = N - 1; /*采用冒泡法排序*/
while (m > 0)
{
/*! 比较至上轮循环的最后交换前 */
for (k = j = 0; j
if ( (3) )
{
tmp = stTable[j];
stTable[j] = stTable[j + 1];
stTable[j + 1] = tmp;
(4) ;
}
m = (5) ; /*! 本行不能填m-1及m-- */
}
for (k = 0; k
printf("%c(%d)", (6) ,
(7) );
printf("\n");
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ø软件类(1、2、3必答,4选答):
1、改错题(请从下面两题中任选一题)(5%)
(1)、下面是一段分配与释放内存的片段,请找出错误并改之:
int *fp=new int[100];
delete fp;
(2)、阅读下面的程序,找出错误并改之。
#include
#include
void getmemory(char *p)
{
p=(char *)malloc(100);
strcpy(p, "Hello world!");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s\n",str);
free(str);
return 0;
}
2、Here is a Member function, put, of an integer queue(FIFO) that put an integer into
the queue:(20%)
void Queue::put(int d)
{
Queue *p = new Queue; // Allocate New Link Item
p->data= d;
if(ptail == NULL) // Is This the first Item?
{
p->next = p;
}else{
p->next = ptail->next;
ptail->next = p; // mount this item to the tail
}
ptail = p; // Let this item be the last item of FIFO
}
We implement the queue by cyclic link-list, that is, ptail->next is the head of the queue.
Please implement the member function “int Queue::get()” that get an integer from this queue.
3、写一程序将一个N进制数转换为指定的10进制数,将结果存入piDecValue中,N进制数以字串的形式存在pchString中(应考虑规范化编程)其中N<=32,N进制数0-9对进0-9,大于9的数以A起始(与16进制类似),如18进制中的10-17分别用ABCDEFGH表示(注:字串中从左至右为N进制数的从高到低位)(20%)
int TransNToDec( int* piDecValue,
int iN,
char* pchString)
**********************************************************************
* 函数 int commstr(char*strl, char*str2, int*sublen)从两已知字符串
* Strl和 Str2中,找出它们的所有最长的公共子串。如果最长公共子串不止 1个,
* 函数将把它们全部找出,并输出。约定空串不作为公共子串。
*
* 函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1
* 和str2的最长公共子串的个数。如果字符串 strl和 str2没有公共子串,约定最长
* 公共子串 的个数和最长公共子串的长度均为0。
************************************************************************/
int strlen(char* s)
{
char *t = s;
while ( (1) );
return t - s - 1;
}
int commstr(char* str1,
char* str2,
int* sublen)
{
char* s1, s2;
int count = 0,
len1, len2, k, j, i, p;
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 > len2)
{
s1 = str1; s2 = str2;
}
else
{
len2 = len1; s1 = str2; s2 = str1;
}
/* 从可能最长子串开始寻找 */
for (j = len2; j > 0; j--)
{
/* k为子串S2的开始位置 */
for (k = 0; (2)
{
/* i为子串s1的开始位置 */
for (i = 0; s1[ (3) ] != ‘\0‘;i ++;)
{
/* s1的子串与 的子串比较 */
for (p = 0; p
if ( (5) ) /* 如果两子串相同 */
{
for (p = 0; p
printf("%c", s2[k + p]);
printf("\n");
count++;
}
}
}
if (count > 0)
break;
}
*sublen = (count > 0) ? (6) : 0 ;
return count;
}
回复人: xiaocai0001(萧筱雨) ( ) 信誉:100 2005-8-30 17:43:22 得分: 0
先占个座
Top
回复人: SammyLan(没有窍门,只有努力.LOVE 33 4 Ever) ( ) 信誉:98 2005-8-30 18:25:22 得分: 0
MARK
Top
回复人: xiaocai0001(萧筱雨) ( ) 信誉:100 2005-8-30 18:45:59 得分: 0
(1)、下面是一段分配与释放内存的片段,请找出错误并改之:
int *fp=new int[100];
delete fp;
-----------------------
错误: 释放数组
delete[] fp;
#include
#include
void getmemory(char *p)
{
p=(char *)malloc(100);
strcpy(p, "Hello world!");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s\n",str);
free(str);
return 0;
}
-----------------------
像这种写法str是得不到函数中申请的空间的.(还少一个头文件)
修改:
#include
#include
#include
void getmemory(char **p)
{
*p=(char *)malloc(100);
strcpy(*p, "Hello world!");
}
int main( )
{
char *str=NULL;
getmemory(&str);
printf("%s\n",str);
free(str);
return 0;
}
先改了这两个
其它的再看.
Top
回复人: antijpn(antijpn) ( ) 信誉:100 2005-8-30 18:53:44 得分: 0
乱七八糟的面试题,转新手乐园
Top
回复人: bugebear3() ( ) 信誉:100 2005-8-30 18:53:57 得分: 0
关于改错题:
1.int *fp=new int[100];
delete fp;//改为delete []fp;
2.
(2)、阅读下面的程序,找出错误并改之。
#include
#include
#include
void getmemory(char **p)
{
*p=(char *)malloc(100);
strcpy(*p, "Hello world!");
}
int main( )
{
char *str=NULL;
getmemory(&str);
printf("%s\n",str);
free(str);
return 0;
}
Top
回复人: bugebear3() ( ) 信誉:100 2005-8-30 18:55:40 得分: 0
关于改错题:
1.int *fp=new int[100];
delete fp;//改为delete []fp;
2.
(2)、阅读下面的程序,找出错误并改之。
#include
#include
#include
void getmemory(char **p)
{
*p=(char *)malloc(100);
strcpy(*p, "Hello world!");
}
int main( )
{
char *str=NULL;
getmemory(&str);
printf("%s\n",str);
free(str);
return 0;
}
Top
回复人: drizzlecrj(农夫三拳) ( ) 信誉:100 2005-8-30 19:59:34 得分: 0
//第一题
#include
using namespace std;
int main()
{
int num[6], subscript[6] = {0, 1, 2, 3, 4, 5};
int i, j;
for(i = 0; i
cin>>num[i];
int temp;
bool unswap;
for(i = 0; i
{
unswap = true;
for(j = 5; j>i; j--)
{
if(num[j]>num[j - 1])
{
temp = num[j];
num[j] = num[j - 1];
num[j - 1] = temp;
unswap = false;
temp = subscript[j];
subscript[j] = subscript[j - 1];
subscript[j - 1] = temp;
}
}
if(unswap)
break;
}
for(i= 0; i
cout(‘A‘ + subscript[i])
cout
return 0;
}
Top
回复人: OMA_yudy(太平洋深深) ( ) 信誉:100 2005-8-30 20:24:23 得分: 0
计算机2级c寓言的题吧?
Top
回复人: foochow(恰似你的温柔) ( ) 信誉:100 2005-8-30 20:43:58 得分: 0
学习学习.......:-)
Top
回复人: zhouhuahai(道号"虚无") ( ) 信誉:100 2005-8-30 22:09:47 得分: 0
请将下题中的空补充完整(20%)
/***********************************************************************************************
本程序为六个整型变量ABCDEF输入整数,并按从大到小的顺序输出它们的名和值。例如某次ABCDEF的输入值为3/2/5/7/4/6,则程序输出为:D(7)F(6)C(5)E(4)A(3)B(2)
*/
#include
#include
#define N sizeof(stTable) / sizeof(stTable [0])
int iA,iB,iC,iD,iE,iF;
struct
{
char vn; /*存入字符*/
int* vp;
} tmp, stTable[6] = {
{0, &iA},
{0, &iB},
{0, &iC},
{0, &iD},
{0, &iE},
{0, &iF}
};
int main(void)
{
int k, j, m;
for (k = 0; k
{
stTable[k].vn = k+‘A‘; ////
printf("Enter data for %c\n", stTable[k].vn);
scanf("%d", stTable[k].vp );
}
m = N - 1; /*采用冒泡法排序*/
while (m > 0)
{
/*! 比较至上轮循环的最后交换前 */
for (k = j = 0; j
if ( *stTable[j].vp
{
tmp = stTable[j];
stTable[j] = stTable[j + 1];
stTable[j + 1] = tmp;
m = j ; ////(4) ;
}
m = j-1 ; /*! 本行不能填m-1及m-- */
}
for (k = 0; k
printf("%c(%d)", stTable[k].vn , *stTable[k].vp
);////
printf("\n");
system("pause");
return 0;
}
Top
回复人: zhouhuahai(道号"虚无") ( ) 信誉:100 2005-8-30 22:14:23 得分: 0
1、改错题(请从下面两题中任选一题)(5%)
(1)、下面是一段分配与释放内存的片段,请找出错误并改之:
int *fp=new int[100];
delete fp; //改成delete []fp;
(2)、阅读下面的程序,找出错误并改之。
#include
#include
void getmemory(char *p) //改成char * getmemory()
{
p=(char *)malloc(100); //改成char *p = (char *)malloc(100);
strcpy(p, "Hello world!");
//添加一行: return p;
}
int main( )
{
char *str=NULL;
getmemory(str); //改成str = getmemory();
printf("%s\n",str);
free(str);
return 0;
}
Top
回复人: zhouhuahai(道号"虚无") ( ) 信誉:100 2005-8-30 22:16:11 得分: 0
余下的明天再做,先mark一个
Top
回复人: heguosheng(何国胜) ( ) 信誉:100 2005-8-30 22:48:37 得分: 0
mark
Top
回复人: foochow(恰似你的温柔) ( ) 信誉:100 2005-8-30 23:09:56 得分: 0
好多...学习学习
Top
回复人: i_noname(晚九朝五)(恶补C++) ( ) 信誉:96 2005-8-31 1:14:05 得分: 0
我觉得像是大学里的考试题
Top
回复人: ttwo2(ttwo2) ( ) 信誉:100 2005-8-31 8:05:29 得分: 0
~~~这是凌成科技的面试题~~~~上次也发过~~不过被我不小心弄到完结区去了~~
~~这是完整的~~~
http://community.csdn.net/Expert/topic/4128/4128067.xml?temp=.172619
~~~~
~~`~~~
Top
回复人: yk_hu0621() ( ) 信誉:100 2005-8-31 8:14:49 得分: 0
第一题:
#define N sizeof(stTable) / sizeof(stTable [0])
intiA,iB,iC,iD,iE,iF;
struct
{
char vn; /*存入字符*/
int* vp;
} tmp, stTable[6] = { {0, &iA},
{0, &iB},
{0, &iC},
{0, &iD},
{0, &iE},
{0, &iF}};
void main(void)
{
int k, j, m;
for (k = 0; k
{
stTable[k].vn = k+‘A‘ //(1) ;
printf("Enter data for %c\n", stTable[k].vn);
scanf("%d",stTable[k].vp ); //(2)
}
m = N - 1; /*采用冒泡法排序*/
while (m > 0)
{
/*! 比较至上轮循环的最后交换前 */
for (k = j = 0; j
if ( *stTable[j+1].vp
{
tmp = stTable[j];
stTable[j] = stTable[j + 1];
stTable[j + 1] = tmp;
k=m-j-1 //(4) ;
}
m = k //(5) ; /*! 本行不能填m-1及m-- */
}
for (k = 0; k
printf("%c(%d)", (6)stTable[k].vn ,
(7) *stTable[k].vp );
printf("\n");
}
Top
回复人: yk_hu0621() ( ) 信誉:100 2005-8-31 8:52:05 得分: 0
第四步写错了,应该是k=N-1-j-1;
Top
回复人: zhouhuahai(道号"虚无") ( ) 信誉:100 2005-8-31 9:03:44 得分: 0
int Queue::get()
{
if(ptail == NULL)
{
cout
return -1000; //或者是exit
}
Queue *t = ptail;
int temp = ptail->data;
while(t->next != ptail)
t = t->next;
t ->next = ptail ->next;
ptail = ptail->next;
return temp;
}
Top
回复人: jingxiang(jingxiang) ( ) 信誉:99 2005-8-31 10:08:54 得分: 0
学习~
Top
回复人: bigseabigsky(海阔天空) ( ) 信誉:100 2005-8-31 10:53:08 得分: 0
楼上的考虑的不够全面,而且读的应该是头部数据,而不是尾部数据
const int EMPTY==-9999;//约定队列为空
int Queue::get()
{
if(ptail==NULL)
return EMPTY;
Queue *phead=ptail->next;
int temp=phead->data;
if(phead==ptail)//只有一个元素
{
ptail==NULL;
}
else
{
ptail->next=phead->next;
}
delete phead;
return temp;
}
Top
回复人: yajyjy(木易) ( ) 信誉:100 2005-8-31 11:27:42 得分: 0
3、
int TransNToDec(int* piDecValue, int iN, char* pchString)
{
int i = 0;
int iLen = strlen(pchString);
char ch;
char *p = pchString;
int iAnd = 1;
int *pV = piDecValue;
int iAdd = 0;
int iTmp = 0;
if (iN > 10)
{
ch = ‘A‘ + (iN - 10 - 1);
while (*p != ‘\0‘)
{
if (*p > ch)
{
return -1;
}
p++;
}
p--;
while (iLen > 0)
{
if (*p > ‘9‘)
{
iTmp = ((*p) - ‘A‘ + 10) * iAnd;
}
else
{
iTmp = ((*p) - ‘0‘) * iAnd;
}
i = 0;
while (iTmp > 0)
{
*(pV + i) += iTmp % 10 + iAdd;
iAdd = *(pV + i) / 10;
*(pV + i) %= 10;
iTmp /= 10;
i++;
if (iTmp == 0)
{
if (iAdd != 0)
*(pV + i) += iAdd;
}
}
iAnd *= iN;
p--;
iLen --;
}
}
return i;
}
Top
回复人: ls_thincal(松子) ( ) 信誉:100 2005-8-31 13:01:01 得分: 0
1、改错题(请从下面两题中任选一题)(5%)
(1)、下面是一段分配与释放内存的片段,请找出错误并改之:
int *fp=new int[100];
delete fp;
这题我在VC6.0上调试通过了,应该是没有问题的。
一般若分配的是二维的数组的话,释放内存应该用delete[] fp的!
Top
回复人: karlfly(flykarl) ( ) 信誉:100 2005-08-31 14:18:00 得分: 0
#include
#define N sizeof(stTable) / sizeof(stTable [0])
int iA,iB,iC,iD,iE,iF;
struct
{
char vn; /*存入字符*/
int* vp;
} tmp, stTable[6] = {
{0, &iA},
{0, &iB},
{0, &iC},
{0, &iD},
{0, &iE},
{0, &iF}};
void main()
{
int k, j, m;
for (k = 0; k
{
stTable[k].vn = ‘A‘+k;// (1)
printf("Enter data for %c\n", stTable[k].vn);
scanf("%d", stTable[k].vp);
}
m = N - 1; /*采用冒泡法排序*/
while (m > 0)
{
/*! 比较至上轮循环的最后交换前 */
for (k = j = 0; j
if ( *stTable[j].vp
{
tmp = stTable[j];
stTable[j] = stTable[j + 1];
stTable[j + 1] = tmp;
; // (4) ;
}
m = j-1;// (5) /*! 本行不能填m-1及m-- */
}
for (k = 0; k
printf("%c(%d)", stTable[k].vn, //6
*stTable[k].vp); //(7)
printf("\n");
}
Top
回复人: zhouhuahai(道号"虚无") ( ) 信誉:100 2005-08-31 14:40:00 得分: 0
最后一题:
int strlen1(char* s)
{
char *t = s;
while ( *t++ );
return t - s - 1;
}
int commstr(char* str1,
char* str2,
int* sublen)
{
char* s1, *s2;
int count = 0,
len1, len2, k, j, i, p;
len1 = strlen1(str1);
len2 = strlen1(str2);
if (len1 > len2)
{
s1 = str1; s2 = str2;
}
else
{
len2 = len1; s1 = str2; s2 = str1;//s1为最长的,S2为小的。
}
//从可能最长子串开始寻找
for (j = len2; j > 0; j--)
{
// k为子串S2的开始位置
for (k = 0; k
{
//i为子串s1的开始位置
for (i = 0; s1[i] != ‘\0‘; i++)////
{
// s1的子串与 的子串比较
for (p = 0; p
if ( p == j ) //如果两子串相同 ////
{
for (p = 0; p
printf("%c", s2[k + p]);
printf("\n");
count++;
}
}
}
if (count > 0)
break;
}
*sublen = (count > 0) ? count : 0 ; ////
cout
return count;
}
Top
回复人: karlfly(flykarl) ( ) 信誉:100 2005-08-31 15:34:00 得分: 0
#include
int strlen(char* s)
{
char *t = s;
while ( *t++ ); // (1)
return t - s - 1;
}
int commstr(char* str1,
char* str2,
int* sublen)
{
char* s1, *s2;
int count = 0,
len1, len2, k, j, i, p;
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 > len2)
{
s1 = str1; s2 = str2;
}
else
{
len2 = len1; s1 = str2; s2 = str1;
}
/* 从可能最长子串开始寻找 */
for (j = len2; j > 0; j--)
{
/* k为子串S2的开始位置 */
for (k = 0; k
{
/* i为子串s1的开始位置 */
for (i = 0; s1[ i ] != ‘\0‘;i++)//(3)
{
/* s1的子串与 的子串比较 */
for (p = 0; p
if ( p==j ) //(5)/* 如果两子串相同 */
{
for (p = 0; p
printf("%c", s2[k + p]);
printf("\n");
count++;
}
}
}
if (count > 0)
break;
}
*sublen = (count > 0) ? j : 0 ; //(6)
return count;
}
int main(int argc, char* argv[])
{
char s1[80],s2[80];
int maxlen;
printf("Enter string1:",s1);
scanf("%s",s1);
printf("Enter string2:",s2);
scanf("%s",s2);
printf("%d max sub strings\n",commstr(s1,s2,&maxlen));
printf("max len:%d\n",maxlen);
return 0;
}
Top
回复人: jiang_xiao(原来秋天) ( ) 信誉:100 2005-08-31 15:52:00 得分: 0
mark
Top
回复人: csdolauli(1937年的爱情) ( ) 信誉:100 2005-08-31 17:04:00 得分: 0
void getmemory(char *&p)
也可以吧
Top
回复人: guofu_x(蝈蝈) ( ) 信誉:100 2005-08-31 17:28:00 得分: 0
好简单
Top
回复人: jiayuming(无言的上帝) ( ) 信誉:100 2005-08-31 17:48:00 得分: 0
学习学习
Top
回复人: AntonlioX(做人要厚道) ( ) 信誉:100 2005-10-13 19:56:00 得分: 0
mark
Top
回复人: K() ( ) 信誉:70 2005-10-13 20:09:00 得分: 0
GZ!
Top
回复人: A_Knuth_A(高德纳) ( ) 信誉:100 2005-10-13 20:17:00 得分: 0
倒
Top
回复人: iwodgirl(一个勇于学习的人) ( ) 信誉:92 2005-10-13 22:57:00 得分: 0
学习
Top
回复人: deping_chen(小平) ( ) 信誉:100 2005-10-14 11:07:00 得分: 0
第一题
struct Pair
{
char name;
int value;
};
Pair input[6] = {{‘A‘,0},{‘B‘,0},{‘C‘,0},{‘D‘,0},{‘E‘,0},{‘F‘,0}};
int compare(const void* e1, const void* e2)
{
return (reinterpret_cast(e1))->value - (reinterpret_cast(e2))->value;
}
void main()
{
for(int i=0; i
{
cin >> input[i].value;
}
qsort(input, sizeof(input)/sizeof(input[0], sizeof(Pair), compare);
for(int i=0; i
{
cout
cout
}
}
Top