C语言-题目

这是一篇关于C语言编程题目的博客,涵盖了选择题、填空题和判断题等多个方面,涉及知识点包括sizeof运算符、宏定义、正则表达式、HTTP/2协议、TLS版本、内存对齐、指针、循环控制、浮点数比较、内存资源管理、函数重载、OpenStack和Docker等。题目解析详细,解释了每个问题的正确答案和陷阱,帮助读者深入理解C语言及其相关技术。
摘要由CSDN通过智能技术生成
C语言-题目

单选题:

32位机系统关于sizeof 的使用不正确的是 __

【A】 int count=0; 【B】 int count=0;

sizeof(count); sizeof int;

【C】 int count=0; 【D】 int count=0;

sizeof count ; sizeof(int);

【参考答案】B不正确 sizeof作为C语言的关键字,当计算变量的大小时,括号可以省略,但是计算数据类型的括号不能省略,会出现编译出错。

以下程序的输出结果是:

#define ADD(x) (x)+(x)

main()

{ int a=4,b=6,c=7,d=ADD(a+b)*c;

printf(“d=%d”,d);

}

【A】 d=70 【B】 d=140 【C】 d=280 【D】 d=80

【参考答案】D

本题主要考察编程规范,宏定义中如果包含表达式或变量,表达式和变量必须用小括号括起来。在宏定义中,对表达式和变量使用括号,可以避免可能发生的计算错误。

#define ADD(x) (x)+(x) 如果写作:#define ADD(x) ((x)+(x)) 就不会造成计算错误了

有如下程序该程序的执行结果是

void main(void)

{

int x=23;

do

{

printf("%d",x–);

} while(!x);

}

【A】321 【B】23【C】不输出任何内容【D】陷入死循环

答案【B】

以下程序在 Win32 系统下的运行后的输出结果是 A

void main(void)

{

int A = 1,B = 2;

int C = (A<<32)|B;

printf("%d",C);

}

【A】3 【B】2

【C】4 【D】1

【参考答案】A

当移位的位数超过该数值类型的最大位数时,编译器会用移位的位数去模类型的最大位数,然后按余数进行移位,例如:当前的int最大32位,因此左移的实际操作是: int i = 1, j = 1; i = i << 33;/* 33 % 32 = 1 左移1位,i变成2 */

j = j << 32; /* 32 % 32 = 0 左移0 位,j 还是1 */

本例中, A<<32操作之后的值仍是1; 因此最后C = 1 | 2 = 3;

32 位体系结构下,下列函数f 的返回值为:

int f()

{

char str[] = “ZTE COPR”;

char *p = str;

int i = 4;

return sizeof(str) + sizeof§ + sizeof(i) + sizeof(*p);

}

【A】18 【B】30 【C】25 【D】11

【参考答案】A

sizeof(str) =9 char str[] = “ZTE GGSN”;中还有字符串结束符’0/’

sizeof§ win32下指针的为4字节

sizeof(i) win32下 int变量为4字节

sizeof(*p) *p为char

填空题:

以下程序的输出显示是 Got a valid pointer

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

puts(“Got a null pointer”);

else

puts(“Got a valid pointer”);

【参考答案】 Got a valid pointer

考察malloc(0)返回时最小对齐的内存块指针,指针是有效的

结构体Book1与Book2如下定义,在64位系统下,sizeof(Book1)= *24* ,sizeof(Book2)= *168*

typedef struct Book1{

char title[5];

char author[5];

char subject[10];

int book_id;

} Book1;

struct Book2{

char *title[5];

char *author[5];

char *subject[10];

int book_id;

};

考察结构体成员最小对齐原则

以下程序运行后的输出结果是: 4

#include <stdio.h>

int fun()

{

static int x=1;

x=x*2;

return x;

}

void main()

{

int i,s=1;

for(i=1;i<=2;i++)

{

s=fun();

}

printf("%d\n",s);

}

【参考答案】4

static int x=1 定义的是静态变量,存储区域是数据段中,函数返回后数据保留。


*第1题 单选题 正则表达式*

类型:单选题

难度:中

题目:PCRE模式“abc+?xyz ”可以匹配以下哪个字符串?

选项1:abcabcyz

选项2:abcabc+xyz

选项3:abcabxyz

选项4:abcabcccccxyz

正确答案:4

解答:考察正则表达式的基本知识。

第一,c+表示c字符至少出现一次;

第二,c+xyz表示一个或多个c字符后边只能跟xyz;

第三,c+?xyz中的?,是非贪婪的意思,默认+是贪婪的,+?是非贪婪的。但是放在这个题目里,只是为了混淆视听,并无实际意义。答题者如果不了解贪婪/非贪婪的知识,就会迷惑。

*第10题 单选题 正则表达式*

类型:单选题

难度:中

题目:以下哪种开源软件,可用于大量正则模式的高速匹配,从而实现与ZXDPI软件多模引擎类似的功能?

选项1:PCRE

选项2:Intel DPDK

选项3:Intel HyperScan

选项4:libpcap for linux/winpcap for windows

正确答案:3

解答:考察正则表达式的实现方面的知识。

第一,正则表达式匹配分为单模和多模两种方式,比如:有一个HTTP请求报文到来,有10000条正则表达式特征需要与该报文匹配。那么,单模方式下要对该报文匹配10000次;多模方式下仅对该报文仅匹配一次即可。我们的网络设备需要高性能,不能采用单模方式,只能采用多模方式。

第二,PCRE是通用正则表达式库,可以认为是一种单模匹配引擎。不能用于高性能网络设备。

第三,Intel DPDK是高性能网络收发的库。与正则表达式匹配无关。

第四,Intel HyperScan是Intel开源的多模的正则表达式库,很多公司都是直接集成该库提供高性能的多模正则表达式匹配功能。

第五,libpcap/winpcap是Linux/Windows上的旁路方式的抓包库。与正则表达式匹配无关。

*第11题 多选题 HTTP/2*

类型:多选题

难度:中

题目:相对于HTTP/1.1,HTTP/2引入了哪些新特性?

选项1:请求Pipelining

选项2:首部压缩

选项3:服务器推送

选项4:二进制编码

选项5:单TCP连接多路复用

正确答案:2345

解答:考察对HTTP/1.1协议、HTTP/2协议的了解知识。

选项一Pipelining是HTTP/1.1引入的机制。

其余选项都是HTTP/2引入的新机制。

*第14题 多选题 TLS 1.3*

类型:多选题

难度:难

题目:对于以下哪些协议,ZXDPI协议识别引擎可从其流量中,获取HTTPS网站数字证书的CN、O、OU等信息?

选项1:SSL 3.0

选项2:TLS 1.0

选项3:TLS 1.1

选项4:TLS 1.2

选项5:TLS 1.3

正确答案:1234

解答:考察对TLS 1.3的知识了解。

第一,对于TLS 1.3之前的版本,SSL/TLS握手阶段的流量中会出现的CN、O、OU等信息,因为承载这些信息的Certificate消息不是加密的,所以这些信息可以作为DPI特征用于协议识别。

第二,TLS 1.3版本,引入了对不需要明文的信息都尽可能加密的原则,所以握手阶段很多消息都被加密了,其中Certificate消息也被加密了,加密后就不能用于DPI识别了。

*第17题 判断题 TCP*

类型:判断题

难度:难

题目:启用TCP Nagle算法有助于提高5G网络中应用的数据传输速度。

正确答案:错

解答:考察TCP、5G的基本原理和知识。

TCP Nagle用于改善低速网络的吞吐量效率,可以理解它是将小的数据(比如1个字节、2个字节)积攒到一定量(如一个MSS)才发送出去,这会造成长度小的数据无法及时实际发送出去,相当于降低了数据传输速度,这个TCP特性对实时类交互(比如:云游戏、VR游戏)可能有负面影响。


*判断题*

int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。(F)

任何表达式语句都是表达式加分号组成的。(T)

一个变量的数据类型被强制转换后,它将保持被强制转换后的数据类型。(F)

*选择题:*

int x = -1; if (x < 0u) 和 if (x > 1)分别为

a. false, false

b. false, true

c. true, false

d. true, true

答案:A

*填空题:*

int * p1=(int *)0x0500;

int * p2=(int *)0x0518;

int value=p2-p1;

printf("%d",value);

输出为:

答案:6


每日一贴
6-1
以下程序在Win32系统下的输出结果是 D

1.struct X 
2.{
    
3.    short a[3]; 
4.    long b; 
5.}_x; 
6.struct Y 
7.{
    
8.    char c; 
9.    char ddd; 
10.    short dd; 
11.    struct X d; 
12.    double e; 
13.}_y; 
14.struct Z 
15.{
    
16.    char c; 
17.    short dd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值