华为C语言上机试题

Python016

华为C语言上机试题,第1张

#include <stdio.h>

#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

阅读了本文,本站还为你提供以下可能你会感兴趣的相关文章:

厦新笔试真题

安信证券笔试题

日立环球存储笔试题目