Chinaunix首页 | 论坛 | 博客
  • 博客访问: 866318
  • 博文数量: 156
  • 博客积分: 6553
  • 博客等级: 准将
  • 技术积分: 3965
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 18:36
文章存档

2012年(3)

2011年(43)

2010年(110)

分类: 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;
}
}
}
}

利用指针来实现:

  1. #include "stdafx.h"
  2. #include "stdio.h"
  3. #include "malloc.h"
  4. #include "string.h"
  5. char *maxsubstr(char *str1, char *str2)
  6. {
  7.   char *p1, *p2, *q1, *q2, *destp;
  8.   char *substr;
  9.   int max=0, len;
  10.    p1 = str1;
  11.   while(*p1!='\0')
  12.    {
  13.      q1=str2;
  14.     while(*q1!='\0')
  15.      {
  16.        len=0;
  17.        p2=p1;
  18.        q2=q1;
  19.       while((*p2!='\0')&&(*q2!='\0'))
  20.        {
  21.         if(*p2==*q2)
  22.          {
  23.            p2++;q2++;len++;
  24.          }
  25.         else
  26.           break;
  27.        }
  28.       if(len>max)
  29.        {
  30.          max = len;
  31.          destp =p1;
  32.        }
  33.        q1++;
  34.      }
  35.      p1++;
  36.    }
  37.    substr=(char*)malloc(sizeof(char)*max);
  38.    strncpy(substr,destp,max);
  39.   return substr;
  40. }
  41. int _tmain(int argc, _TCHAR* argv[])
  42. {
  43.     char *s1="easderfghjkl";
  44.   char *s2="jasdwfghjewserfghjk";
  45.   char *sub;
  46.    printf("%s\n%s\n",s1,s2);
  47.    sub = maxsubstr(s1,s2);
  48.    printf("the max sub string is:%s",sub);
  49.   return 0;
  50. }


 

 

第七题、

输入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

 

阅读(1356) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-01 17:44:08

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com