编辑: 笨蛋爱傻瓜悦 | 2013-10-18 |
if(count >
maxlen) { maxlen = count;
*r1 = s1 + i;
*r2 = s2 + j;
} } } } 3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数 char* test3(long num) { char* buffer = (char*)malloc(11);
buffer[0] = '
0'
;
buffer[1] = '
x'
;
buffer[10] = '
\0'
;
char* temp = buffer + 2;
for (int i=0;
i <
8;
i++) { temp[i] = (char)(num28);
temp[i] = temp[i] >
=
0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] <
10 ? temp[i] +
48 : temp[i] + 55;
} return buffer;
} 输入N, 打印 N*N 矩阵 比如 N = 3,打印:
1 2
3 8
9 4
7 6
5 N = 4,打印:
1 2
3 4
12 13
14 5
11 16
15 6
10 9
8 7 解答:
1 #define N
15 int s[N][N];
void main() { int k = 0, i = 0, j = 0;
int a = 1;
for( ;
k <
(N+1)/2;
k++ ) { while( j <
N-k ) s[i][j++] = a++;
i++;
j--;
while( i <
N-k ) s[i++][j] = a++;
i--;
j--;
file:///C|/Documents and Settings/Administrator/桌面/C语言面试题大汇总,个人觉得还是比较全地!!!.htm(第48/133 页)2006-9-25 11:00:01 C语言面试题大汇总,个人觉得还是比较全地!!! while( j >
k-1 ) s[i][j--] = a++;
i--;
j++;
while( i >
k ) s[i--][j] = a++;
i++;
j++;
} for( i = 0;
i <
N;
i++ ) { for( j = 0;
j <
N;
j++ ) cout next;
} tail->
next = head->
next;
printf( 第%4d个出局的人是:%4d号\n , i, head->
index);
free(head);
head = tail->
next;
} i = head->
index;
free(head);
return i;
} int main() { int n, m;
scanf( %d%d , &
n, &
m);
printf( 最后胜利的是%d号!\n , Josephu(n, m));
system( pause );
return 0;
} 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc);
file:///C|/Documents and Settings/Administrator/桌面/C语言面试题大汇总,个人觉得还是比较全地!!!.htm(第52/133 页)2006-9-25 11:00:01 C语言面试题大汇总,个人觉得还是比较全地!!! 1.不调用库函数,实现strcpy函数. 2.解释为什么要返回char *. 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strSrc==NULL)) file://[/1] throw Invalid argument(s) ;
//[2] char * strDestCopy=strDest;
file://[/3] while ((*strDest++=*strSrc++)!='
\0'
);
file://[/4] return strDestCopy;
} 错误的做法: [1] (A)不检查指针的有效性,说明答题者不注重代码的健壮性. (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&
&
strSrc)),说明答题者对C语言中类型的隐式转换没有深 刻认识.在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本 升高.所以C++专门增加了bool、true、false三个关键字以提供更安全的条件表达式. (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处.直接使用字面常量(如 本例中的0)会减少程序的可维护性.0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不 能发现,生成的程序内含逻辑错误,很难排除.而使用NULL代替0,如果出现拼写错误,编译器就会检查出来. [2] (A)return new string( Invalid argument(s) );
,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心. 从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下, 调用者不会释放内存,这导致内存泄漏. (B)return 0;