#include <assert.h>
void take_num(const char *strIn, int *n, unsigned int *outArray)
{
const char * p = strIn
int next = 0
*n = 0
outArray[0] = 0
assert(p &&n &&outArray)
for (p = strIn*pp++) {
if (('0'<=*p)&&(*p<='9')) {
outArray[*n] = (outArray[*n] * 10)+((*p) - '0')
next = 1 /*后面还有*/
} else {
if (next == 1) {
(*n)++
}
next = 0
}
}
}
void max_prefix_match(const char *ip_addr, const char *net_addr_array[], int *n)
{
int ip,tar_net,tar_mask/*ip地址*/
int ip_it[4],net_it[4],mask_it[4]
char * p
int index,max_index,cur_bits,max_bits = 0,bit
*n = -1
sscanf(ip_addr,"%d.%d.%d.%d",&ip_it[0],&ip_it[1],&ip_it[2],&ip_it[3])
ip = ((ip_it[0]<<24)+(ip_it[1]<<16)+(ip_it[2]<<8)+ip_it[3])
for (index = 0net_addr_array[index][0] != '\0'index++) {
/*获取网络号和掩码*/
p = net_addr_array[index]
sscanf(p,"%d.%d.%d.%d/%d.%d.%d.%d",
&net_it[0],&net_it[1],&net_it[2],&net_it[3],
&mask_it[0],&mask_it[1],&mask_it[2],&mask_it[3])
tar_mask = ((mask_it[0]<<24)+(mask_it[1]<<16)+(mask_it[2]<<8)+mask_it[3])
tar_net = ((net_it[0]<<24)+(net_it[1]<<16)+(net_it[2]<<8)+net_it[3])
if (((tar_mask) &(ip)) == (tar_net)) {
cur_bits = 0
/*计算1的个数*/
for (bit = 0bit <sizeof(tar_mask) * 8bit++) {
cur_bits += tar_mask&1
tar_mask >>= 1
}
if (cur_bits >max_bits) {
max_bits = cur_bits
max_index = index
}
}
}
if (max_bits != 0) {
*n = max_index
}
}
int main()
{
int i, n,arrayOut[100] = {0}
char *strIn = "ab00cd+123fght456-25 3.005fgh"
char *ip_addr = "192.168.1.100 "
char *net_addr_array[1024] = {
"192.168.1.128/255.255.255.192",
"192.168.1.0/255.255.255.0",
"192.168.1.64/255.255.255.192",
"0.0.0.0/0.0.0.0",
""
}
take_num(strIn,&n,arrayOut)
printf("<1>:input:%s\noutput: [%d]\n",strIn,n)
for (i = 0i <ni++) {
printf("%d\n",arrayOut[i])
}
max_prefix_match(ip_addr,net_addr_array,&n)
if (n != -1) {
printf("<2>max:[%d] %s",n,net_addr_array[n])
}
return 0
}
一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)
1、有数组定义inta={{1},{2,3}}则a[0]的值为0。()
2、int(*ptr)(),则ptr是一维数组的名字。()
3、指针在任何情况下都可进行>,<,>=,<=,==运算。()
4、switch(c)语句中c可以是int,long,char,float,unsignedint类型。()
5、#defineprint(x)printf("theno,"#x",is")
二、填空题(共30分)
1、在windows下,写出运行结果,每空2分,共10分。
charstr[]="Hello"
char*p=str
intn=10
sizeof(str)=()
sizeof(p)=()
sizeof(n)=()
voidfunc(charstr[100])
{}
sizeof(str)=()
2、voidsetmemory(char**p,intnum)
{*p=(char*)malloc(num)}
voidtest(void)
{char*str=NULL
getmemory(&str,100)
strcpy(str,"hello")
printf(str)
}
运行
test函数有什么结果?()
10分
3、设
intarr[]={6,7,8,9,10}
int*ptr=arr
(ptr++)+=123
printf("%d,%d",*ptr,*(++ptr))
()10分
三、编程题(第一小题20,第二小题30分)
1、不使用库函数,编写函数
intstrcmp(char*source,char*dest)
相等返回
0,不等返回
-1
2、写一函数
intfun(char*p)判断一字符串是否为回文,是返回
1,不是返回
0,出错返回
-1
阅读了本文,本站还为你提供以下可能你会感兴趣的相关文章:
厦新笔试真题
安信证券笔试题
日立环球存储笔试题目
c语言用蓝牙连接华为手机读取16位码。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。