威盛的笔试题目

6.编程给一个程序,输入N(1<=N<=20)N*N的矩阵进行Zigzag赋值,
即:N=0 时,a[0]=0;
    N=4
时,
a[4][4]=0 1   5   6
               2 4   7   12
               3 8   11 13
               9 10 14 15

解:#include <stdio.h>
int a[20][20];
int main()
{
    int i,j,c,n;
  printf("/ninput n:");
while (scanf("%d",&n) && n>0)
{
   c=0;
   for (i=0;i <=2*n-2;i++)
{
  for (j=0;j <=i;j++) 
  if (j <n && i-j <n)
if (i % 2==0) a[i-j][j]=c++;
else a[j][i-j]=c++;
}
for (i=0;i <n ;i++ )
{
   for (j=0;j <n ;j++ )
{
   printf("%3d",a[i][j]);
}
printf("/n");
}
    printf("/ninput n:");
}
return 0;
}

7.8个台阶,上台阶的人一次最多上3个台阶,问上这个8个台阶有多少种方法?

答:我填的81
按递归得到,如果写程序可以用动态规划
1
步待走,1种走法
2
步待走,2种走法
3
步待走,4种走法
n
步待走,走法count(n)=count(n-1)+count(n-2)+cout(n-3)
n=8
时,count(n)=81;


8.
编写程序,产生一个8*8的数组,随即初始化该数组,然后编程查找该数组中值为1的元素,讲该元素的所在的行列都赋为1.

答:以3*3数组为例

#include <iostream>
void foo(int *mat, int dim)
{
   int flag[9] = {0};
   int row=0;
   int col=0;
  for(int i=0; i < dim*dim; ++i)
    {
      if(mat[i] == 1)
     {
       flag[i] = 1;
      }
    }
  for(int i=0; i < 9; ++i)
   {
      if(flag[i] == 1)
      {
        row=i/dim;
        col=i%dim;
        for(int j=0; j < dim; ++j)
         {
          mat[row*dim+j]=1;
          mat[j*dim+col]=1;
         }
    }
 }
}
int main()
{
 int mat[9]={2, 5, 6,4, 1, 1,7, 0, 9};
  cout << "The original matrix:/n";
for(int i=0; i < 3; ++i)
{
   for(int j=0; j < 3; ++j)
{
   cout << mat[i*3+j] << " ";
}
cout << "/n";
}
foo(mat, 3);
cout << "The converted matrix:/n";
for(int i=0; i < 3; ++i)
{
  for(int j=0; j < 3; ++j)
  {
   cout << mat[i*3+j] << " ";
  }
   cout << "/n";
}
return 0;
}

 

冒泡:

main()
{
  int n,i,j,exchange=0;

  for (i=0;i<n-1;i++)
  {
    for (j=i+1;j<n;j++)
      if (a[i]>a[j])
      {

a[i]=a[i]+a[j];

a[j]=a[i]-a[j];

a[i]=a[i]-a[j];
        exchange=1;
      }
    if (!exchange) break; /*
如果此次循环没有发生排序的交换则退出比较
*/
  }
}

6、库函数调用和系统调用的区别?

答:c编译程序采用一个预定义的函数库,其中的大部分函数具有系统调用的名字。    解决了在用户程序中从用户态到核心态的状态变化。因为用户是不能直接操作内核的,必须通过系统调用。 不是每个库函数都会进入核心态,但每个系统调用肯定会进入核心态。简单点,系统调用运行在核心态,库函数运行在用户态。

1如何调用地址为0的函数,写出代码。

答:0就是NULL,可以是任意类型指针的取值。所以你将0强制转化为一个函数指针就可以了。  
 
i.e.   typedef   void   (*pFunc)(void);    ((pFunc)0)();

2)怎么写程序判断一个数是unsigned   int还是int

答(Areturn   x>=0&&-x>=0&&a-1>=0;  为真表示unsigned   int

(B)#include   <iostream>  
  using   namespace   std;  
  #define   TYPE(i)     (i-i-1>0   ?   "unsigned"   :   "int")  
  void   main   (void)  
  {  
        int   i=2;  
        unsigned   int   j=1;  
         
        cout<<TYPE(i)<<endl;  
        cout<<TYPE(j)<<endl;  
        cout<<TYPE(i+j)<<endl;  
  }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值