2.2作业

1、写一个宏,可以将一个int型整数的二进制位的奇数位和偶数位交换

2、递归实现字符串逆置

 void func (char *src)
{
	if (strlen(src) == 0)
	{
		return;
	} 
	else
	{ 
		func(&src[1]);
		printf("%c", src[0]);
	}
}
int main(int argc, const char *argv[])
{ 
	char *s = "abcdefg";
	func(s);
	printf("\n");
	return 0;
}

3、下面程序的输出是(D)

Void main( )

{

Unsigned char ucNum;

For (ucNum = 0; ucNum < 500; ucNum++){

......

}

Printf(“%d”, ucNum);
}

  1. 499           B. 500               C. 501          D. 无输出

无输出,ucNum是一个无符号字符类型,取值范围是0~255,一直在执行循环

4、子网掩码255.255.192.0对于一个网络来说,网络容量是多大()

 A.192

 B.254

 C.192*254

 D.64*254

1100 0000   0000 0000      2^6*(2^8-2)  减去网关和广播地址

5、在bash shell中,假设str=abc,请写出以下的输出的结果

(1)echo  “$str”

(2)echo  ’$str’

(3)echo  “’$str’”

​ 1) abc

​  2)$str

​ 3) 'abc'

1、bash中的特殊符号

①$:使用变量的前导符

②“ ”:具有变量置换的功能

③‘ ’:两个“”中间为可以先执行的命令

2、shell字符串

字符串可以用单引号,也可以用双引号

单引号   str='this is $a',即使存在变量a,这句话执行结果也还是this is $a,单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

双引号  str = "this is $a",如果a变量值是world,那么这句话执行结果将是this is world,双引号的优点是可以有变量,双引号里可以出现准义

6、进程的写时拷贝

7、使用信号回收僵尸进程

1> 当子进程结束时,会向父进程发送一个SIGCHLD信号

2> 如果使用阻塞形式回收僵尸进程那么会造成可能因等待某个进程的退出导致其他子进程资源无法及时回收

3> 此时我们可以采用非阻塞的形式回收,如果单纯使用非阻塞形式回收,如果子进程没有退出,则该回收函数立即结束

4> 我们可以将信号与处理函数结合使用,捕获SIGCHLD信号,并在该信号处理函数中,以非阻塞的形式循环回收僵尸进程

8链表逆置

Linklist rev_linklist(Linklist head)
{
    //1,判断长度是否小于等于1
    if(NULL ==head || NULL ==head->next)
    {
        return head;
    }
    //2,逆置
    Linklist p=head->next;
    head->next=NULL;
    while(p!=NULL)
    {
        Linklist t=p;
        p=p->next;
        t->next=head;
        head=t;
    }
    return head;
}

9、约瑟夫环

Linklist joseph(Linklist head,int n,int m)
{
    Linklist p=head;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m-2;j++)
        {
            p=p->next;
        }
        //删除p的后继节点
        Linklist del=p->next;
        printf("%-4d",del->data);
        p->next=del->next;
        free(del);
        del=NULL;
        p=p->next;
    }
    head=NULL;
    return NULL;

}

10、简单选择排序

int arr[]={12,34,23,4,665,23,6};
    int n=sizeof(arr)/sizeof(arr[0]);
    
    int min;
    for(int i=0;i<n-1;i++)//循环轮数,表示也是默认最值的下表
    {
        min=i;//默认第一个值的下表值最值下表
        for(int j=i+1;j<n;j++)//循环默认值的后面的所有下表
        {
            if(arr[min] <arr[j])
            {
                min=j;
            }
        }
        if(min!=i)
        {
            int t=arr[min];arr[min]=arr[i];arr[i]=t;
        }
    }

    for(int i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }

11、快排

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//一次排序:确定基准值的位置,返回基准值的下表
int once_sort(int arr[],int low,int high)
{
    //确定基准值,默认low对应的值
    int key=arr[low];

    while(low<high)
    {    
        while(low<high && key <= arr[high])
            high--;
        //把high对应的值赋值给low
        arr[low]=arr[high];

        //掉换方向从loe开始比较
        while(low<high && key>=arr[low])
            low++;
        //把low对应的值赋值给high
        arr[high]=arr[low];
    }
    //把基准值存到low或high
    arr[low]=key;
    return low;
}

//快速排序
void quick_sort(int arr[],int low,int high)
{
    //如果low==high  有一个元素
    //如果low>high   没有元素
    //如果low<high   快速排序
    if(low>=high)
        return;

    //一次排序
    int mid=once_sort(arr,low,high);
    //递归左边
    quick_sort(arr,low,mid-1);
    //递归右边
    quick_sort(arr,mid+1,high);
}

int main(int argc, const char *argv[])
{
    int arr[]={12,43,654,234,76,45,87};
    int len=sizeof(arr)/sizeof(arr[0]);
    quick_sort(arr,0,len-1);

    for(int i=0;i<len;i++)
    {
        printf("%-4d",arr[i]);
    }
    return 0;
}

12、插入排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insert_sort(int arr[],int len)
{
    int j;
    for(int i=1;i<len;i++)//循环无序区的下表
    {
        int t=arr[i];//保存无序区的第一个元素
        for(j=i-1;j>=0;j--)
        {
            if(t < arr[j])
            
                arr[j+1]=arr[j];
            else
                break;
        }
        //在j+1下表插入t
        arr[j+1]=t;
    }

}
int main(int argc, const char *argv[])
{
    int arr[]={12,34,546,34,76,34,7};
    int len=sizeof(arr)/sizeof(arr[0]);
    insert_sort(arr,len);
    for(int i=0;i<len;i++)
    {
        printf("%d\t",arr[i]);
    }
    return 0;
}

13、循环输入一维数组,交换最小值,和第二大值{不允许使用排序}

int arr[]={12,34,54,76,6,76,34,2};
                         
    int n=sizeof(arr)/sizeof(arr[0]);
    //计算最大值和最小值
    int first_max=arr[0],first_min=arr[0];
    int first_maxi=0,first_mini=0;
    for(int i=0;i<n;i++)
    {
        if(first_max<arr[i])
        {
            first_max=arr[i];
            first_maxi=i;
        }
        if(first_min>arr[i])
        {
            first_min=arr[i];
            first_mini=i;
        }
    }
    //计算第二大
    int second_max=first_min;
    int second_maxi=0;
    for(int i=0;i<n;i++)
    {
        if(i==first_maxi)
            continue;
        if(second_max<arr[i])
        {
            second_max=arr[i];
            second_maxi=i;
        }
    }
    arr[first_mini]=second_max;
    arr[second_maxi]=first_min;

    for(int i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }

14

d=1

15

16、缓冲区的大小

1>全缓存:和文件操作有关的缓冲区叫全缓存(fp指针, 4096字节)

2> 行缓存:和终端操作相关的缓冲区叫做行缓存(strdin\stdout, 1024字节)

3> 不缓存:和标准出错操作相关的缓冲区叫不缓存(stderr, 0字节)

17何时不需要进行字节序的转换

1、已经能够确定对方的存储方式跟自己一致时,无需进行转换

2、如果传输的数据是1字节的整数,也无需进行字节序的转换

3、如果传输的是多字节字符串,也无需进行字节序的

18、三次握手和四次挥手

第一次握手:客户端发送SYN包(SYN=1, seq=0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。

第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包(ACK=1 , ack=1),同时发送一个SYN包(SYN=1, seq=0),并进入SYN_RCVD状态。

第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包(ACK=1, ack=1)。此时三次握手包发送完毕,服务器也进入establish状态

四次挥手的发起方可能是服务器,也可能是客户端

第一次挥手,主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态;

第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。     如果有数据没有发送完毕,则继续发送,直到发送完毕为止;

第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态.

第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭方的ACK后关闭连接。

19、结构体字节计算

1> 64位操作系统

1.结构体的总字节是各个成员的字节总和

2.结构体的大小计算需要满足字节对齐原则

1> 结构体的总字节是最宽成员字节的倍数,否则则填充空字节

2> 结构体的首地址必须是最宽成员的倍数

3> 结构体各个成员的偏移量是该成员的字节倍数,否则则填充空字节

1.结构体的总字节是各个成员的字节总和

2.结构体的大小计算需要满足字节对齐原则

1> 结构体的总字节是最宽成员字节的倍数,否则则填充空字节

如果最宽成员是1、2,则总字节是1、2的倍数

如果最宽成员是4、8,则总字节是4的倍数

2> 结构体的首地址必须是最宽成员的倍数

如果最宽成员是1,2,则首地址按1或2的倍数计算

如果最宽成员是4,8,则首地址按4的倍数计算

3> 结构体各个成员的偏移量是该成员的字节倍数,否则则填充空字节

如果该成员字节是1,2,则偏移量按1或2的倍数计算

如果该成员字节是4,8,则偏移量按4的倍数计算

20、内存泄漏的场景及解决办法以及如何避免

未释放分配的内存: 程序在动态分配内存后,如果没有及时调用对应的释放内存的函数,就会导致内存泄漏。

循环引用: 在C++中,如果存在循环引用(两个或多个对象互相引用,并且它们之间的引用计数无法降为零),可能导致对象无法被正确释放。

解决方法:

及时释放内存: 在动态分配内存后,确保在不再使用时调用对应的释放内存函数(如free、delete)。

使用智能指针

避免循环引用: 在C++中,可以使用智能指针来管理对象的生命周期,从而避免循环引用问题。

使用工具进行内存检测: 使用内存检测工具,如Valgrind(对C语言)或内存检测模块(如AddressSanitizer)来帮助发现潜在的内存泄漏问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/366999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

☻C++ QA

0. 什么是“第一性原理”&#xff1f; 函数指针的定义泛式与原理&#xff1f;联合(union)的原理是怎样的&#xff1f;联合类型对象的指针是什么意思&#xff1f;命名空间在.h和.cpp中怎么定义和使用&#xff0c;是什么原理&#xff1f;静态变量/函数在.h和.cpp中怎么定义和使用…

资源推荐:web js linux windows vm 虚拟机

web js vm list https://bellard.org/jslinux/index.html 可以在在浏览器中运行 X Window 或 Windows 2000、linux 以下为示例&#xff1a; JSLinux - News 从2018-08-18开发更新到2021-01-09 … https://bellard.org/jslinux/news.html faq 常见问题解答 https://bella…

flv视频格式批量截取封面图(不占内存版)--其他视频格式也通用

flv视频格式批量截取封面图&#xff08;不占内存版&#xff09;--其他视频格式也通用 需求&#xff08;实现的效果&#xff09;功能实现htmlcssjs 需求&#xff08;实现的效果&#xff09; 批量显示视频&#xff0c;后端若返回有imgUrl,则直接显示图1&#xff0c; 若无&#xf…

如何使用VSCode上运行Jupyter,详细案例过程出可视化图

Python作为最受AI喜欢的语言之一&#xff0c;我们与大家共同学习下如何在VS Code上运行Jupyter&#xff0c;并且用简单案例实现出图。 环境 VS Code version: 1.80.1 Python: 3.12.0 小白安装过程&#xff1a; 在准备好基础环境&#xff0c;小白心想&#xff0c;AI可是霸占科…

爬虫(二)使用urllib爬取百度贴吧的数据

下一期我就不用urllib来抓取数据了&#xff0c;因为urllib现在已经很少人用&#xff0c;大部分人用得是requests&#xff0c;requests也是基于底层urllib的一个模块。 首先我先来讲一下关于如何使用动态的UA&#xff01; 动态UA就是指在自己创建的一个列表里随机选择一个UA当做…

07 SB3之@HttpExchange(TBD)

HttpExchange是SpringBoot3的新特性. Spring Boot3 提供了新的 HTTP 的访问能力&#xff0c;封装了Http底层细节. 通过接口简化 HTTP远程访问&#xff0c;类似 Feign 功能。 SpringBoot 中定义接口提供 HTTP 服务 --> 框架生成的代理对象实现此接口 --> 框架生成的代理…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3-management方式二&#xff1a;从本地加载 上传到虚拟机中后&#xff0c;使用命令加载镜像即可&#xff1a; docker load -i mq.ta…

全面认识DOS系统

目录 一、DOS系统的功能 1.执行命令和程序&#xff08;处理器管理&#xff09; 2.内存管理 3.设备管理 4.文件管理 5.作业管理 二、文件与目录 三、文件类型与属性 1.系统属性&#xff08;S&#xff09; 2.隐含属性&#xff08;H&#xff09; 3.只读属性&#xff08…

Window命令行 如何查看以及关闭进程

目录 前言1. 基本知识2. Demo 前言 用习惯了Linux操作系统&#xff0c;突然想用Window&#xff0c;发现很陌生&#xff01; 补充一波Linux的基本命令&#xff1a; 查看进程和端口信息&#xff1a; 通过 netstat -tanp 命令查看系统上的所有网络连接&#xff0c;然后通过 grep…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

day36 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;435 无重叠区间 题意 intervals[i][starti&#xff0c;endi] 移除区间&#xff0c;使得区间互不重叠&#xff0c;返回移除区间的最小数量 相邻区间挨在一起&#xff0c;尽量移除重叠区间 代码 class Solution { publ…

【C语言】异常处理 | assert函数 | errno错误码

文章目录 C语言传统的处理错误的方式1. 终止程序&#xff08;例如使用 assert&#xff09;2. 返回/设置错误码手动实现C语言库函数内置的错误码Linux系统调用内置的错误码 C语言传统的处理错误的方式 C语言传统的处理错误的方式主要包括assert终止程序和返回或设置错误码两种方…

面试经典150题 -- 区间(总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台最经典 150 题&#xff0c;掌握面试所有知识点https://leetcode.cn/studyplan/top-interview-150/ 228 汇总区间 直接用双指针模拟即可 ; class Solution { public…

数据结构——实验01-线性表的链式存储和操作

一、实验内容 二、算法思想与算法实现 1、解题思想 &#xff08;1&#xff09;逆序创建链表La就是使用头插法创建一个链表&#xff0c;所谓头插法就是在创建链表时始终将新元素插入到头结点之后&#xff0c;而正序创建链表Lb就是使用尾插法创建一个链表&#xff0c;所谓尾插法…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起…

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…

【LeetCode: 462. 最小操作次数使数组元素相等 II + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

根据路由动态注册组件失败

动态注册组件 方式1 import 这种跟webpack的版本有关系 import低版本不支持传入动态参数 <template><components :is"componentName" v-show"isShow" :key"componentName"></components> </template>const _import fi…

网络基础【Linux网络编程】

目录 一、网络发展 二、协议和协议分层 OSI七层网络模型 TCP/IP协议栈 三、网络和OS的关系 四、网络传输基本流程 五、数据包封装和分用 六、IP地址和MAC地址 MAC地址 局域网通信原理 IP地址 一、网络发展 详细参考此篇博文&#xff1a;网络发展史 独立模式 计算机…

第三百零三回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容&#xff0c;本章回中将介绍如何在在输入框中提示错误.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…
最新文章