网协安全组二面试题

导航
返回网络安全分类

这是我大一加入网协安全组的二面试题。

算法题

棋盘问题

设有一个N×M方格的棋盘(1≤N≤100,1≤M≤100)

求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。

例如:当N=2,M=3时:

正方形的个数有8个:即边长为1的正方形有6个;

边长为2的正方形有2个。

长方形的个数有10个:

即

2×1的长方形有4个

1×2的长方形有3个:

3×1的长方形有2个:

3×2的长方形有1个:

如上例:输入:2,3

输出:8,10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main(void)
{
int m,n,zheng,chang,bi,i,j;
zheng=chang=0;
scanf("%d,%d",&m,&n);
bi=(m>n)?n:m;
for(i=0;i<bi;i++)
zheng=zheng+(m-i)*(n-i);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
chang=chang+(m-i)*(n-j);
chang=chang-zheng;
printf("%d,%d",zheng,chang);

return 0;
}

倒计时

设计一个倒计时的程序。下面仅演示分钟和秒的递减输出,不包含每秒等待,不能直接作为真实计时器;输入要求分钟非负、秒数为0至59。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main(void)
{
int fen,miao,i,j;
if (scanf("%d %d",&fen,&miao) != 2 || fen < 0 || miao < 0 || miao > 59)
return 1;
for(i=fen;i>=0;i--)
for(j=miao;j>=0;j--)
{
printf("%02d:%02d\n",i,j);
miao=59;
}

return 0;
}

C语言基础

代码问题

1、找出下面代码的问题

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
char *f();
int main(void)
{
f();
return 0;
}
char *f()
{
char s[]="hello,world!";//需要声明为static char s[]=
return s;
}

读代码

阅读下面语句,写出输出结果

1.执行语句printf(“%c”,’A’+32);屏幕显示____(“a”)

在ASCII兼容字符集中,A的编码是65,a的编码是97,所以此例输出a。C标准不保证所有执行字符集都满足这个差值,通用大小写转换应使用<ctype.h>中的函数。

2.执行语句printf(“%d”,-1 > sizeof(int));屏幕显示____(“1”)

sizeof的结果类型是size_t。在常见的32/64位平台上,通常算术转换会将-1转换为相应无符号类型的最大值,因此此例输出1;数值不一定是4294967295,也不是发生有符号溢出。严格来说结果取决于实现的整数类型和转换规则。

3.执行语句printf(“%x”,-1);原题预期为____(“ffffffff”)

%x要求对应参数为unsigned int,而原题传入的是int,不能把它当作可移植的标准写法。改为printf("%x", (unsigned int)-1);时,转换按无符号整数规则得到UINT_MAX;在32位unsigned int平台上输出ffffffff,位宽不同则结果不同。

4.执行语句printf(“%d”,!9);屏幕显示____(0)

c语言中非零为真,9代表真,!9代表假(0)。

注意:sizeof的结果和strlen的返回值都是size_t,它是实现定义的无符号整数类型,不一定是unsigned long。C99及以后用%zu输出,例如printf("%zu", sizeof(int));。类型转换和格式要求参见C11委员会草案N1570的6.3.1.3、6.3.1.8和7.21.6.1节。