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?
答(A)return 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;
}