全部博文(156)
分类: C/C++
2010-10-31 19:27:36
第一题、
int (* (*f)(int, int))(int)这里的f是什么?
答案:f是指针,指向一个参数为(int,int),返回值为一个指针的函数
这个返回的指针指向一个参数为(int),返回值为int的函数
第二题、
#include
typedef struct
{
char data[10];
}T1;
typedef struct
{
T1 p;
int data[0];
}T2;
int main()
{
printf("%d\n", sizeof(T2));
return 0;
}
输出结果为12字节
第三题、
.下面哪些编译通不过?
(A).
void T()
{
const int N=100;
int a[N];
a[2]=42;
}
(B).
void T()
{
*((int* const)0x23567890)=5;
}
(C).
char* fuc(void)
{
char a[4];
strcpy(a,"abcd");
return a;
}
答案:ABC都可以通过编译。
第五题、下面程序的运行结果是多少?(D)
main () {
char chr = 127;
int sum = 200;
chr += 1;
sum +=chr;
printf(“sum = %d\n”,sum);
return(0);
}
A: 327 B:328 C:99 D:72
第六题、 编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"cad"
int GetCommon(char *s1, char *s2, char **r1, char **r2)
{
int len1 = strlen(s1);
int len2 = strlen(s2);
int maxlen = 0;
for(int i = 0; i < len1; i++)
{
for(int j = 0; j < len2; j++)
{
if(s1 == s2[j])
{
int as = i, bs = j, count = 1;
while(as + 1 < len1 && bs + 1 < len2 && s1[++as] == s2[++bs])
count++;
if(count > maxlen)
{
maxlen = count;
*r1 = s1 + i;
*r2 = s2 + j;
}
}
}
}
利用指针来实现:
第七题、
输入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
解答:
#include
#define N 5
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--;
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++ )
printf("%d ", s[i][j]);
printf("\n");
}
}
第八题
编译和链接有什么不同?(如外部符号的处理)
答:
编译生成的是目标文件(object*.o);
编译过程中对于外部符号不做任何解释和处理。外部符号对应的就是“符号”
链接生成的是可执行程序
链接将会解释和处理外部符号。外部符号对应的是地址
第九题
有两个变量a,b,不使用“if”,"?:","switch"或者其他判断语句,
找出两个数中较大的数?
int max = (x + y + abs(x-y))/2
注意:如果x或者y中有一个数比较大时,有可能会造成整数溢出。
第十题
在结构体中double数据类型(32位系统占8字节)只需要4字节对齐(对于gcc),但是整个结构体的大小还是要为8的整数倍即double类型的整数倍。
第十一题
为什么C++中有了malloc/free还需要new/delete?
答:malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete 不是库函数。
第十二题
把八进制数x转换成十进制数y的表达式:y=x/10*8+x%10
chinaunix网友2010-11-01 17:44:08
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com