#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
}
#include<stdio.h>#include<string.h>
int a[100000],b[100000],total[1000000]
int i=0,j=0
void getdata()
{
char t
memset(a,-1,sizeof(a))
memset(b,-1,sizeof(b))
memset(total,0,sizeof(total))
printf("please input two numbers will be multiplied(a and b):\n")
while(scanf("%c",&t)!=EOF&&t!='\n'&&t!=' ')
a[i++]=t-'0'
while(scanf("%c",&t)!=EOF&&t!='\n'&&t!=' ')
b[j++]=t-'0'
}
void chengf()
{
int k,t,i1,j1,flag=0
i1=i,j1=j
for(i=i1-1i>=0i--)
{
k=flag
for(j=j1-1j>=0j--)
{
t=b[j]*a[i]
total[k]+=t%10
total[k+1]+=t/10
if(total[k]>=10)
{
total[k+1]+=total[k]/10
total[k]%=10
}
k++
}
flag++
}
//输出部分
while(total[k]<=0)k--
printf("\nOutput the result as follows:\n")
for(i=0a[i]>=0i++)
printf("%d",a[i])
printf(" * ")
for(j=0b[j]>=0j++)
printf("%d",b[j])
printf(" = ")
for(k>=0k--)
printf("%d",total[k])
}
int main()
{
getdata()
chengf()
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
阅读了本文,本站还为你提供以下可能你会感兴趣的相关文章:
厦新笔试真题
安信证券笔试题
日立环球存储笔试题目