C语言例题总结一

2023-11-09

目录:

一、两数交换的多种方法

二、比较两数大小的多种方法

三、在重复的数字中找出不同的数字

1.在重复的数字中找出一个不同的数字

2.在重复的数字中找出两个不同的数字

一、两数交换的多种方法 

第一种:引入第三方变量(利用了指针将地址传进去)

void fun1(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main() {
	int a = 10,b=20;
	fun1(&a, &b);
	printf("%d,%d", a, b);
}

第二种:不引用第三方变量,这里减法,乘法,除法都可以
a=a-b;b=a+b;a=b-a;
a=a*b;b=a/b;a=a/b;
a=a/b;b=a*b;a=b/a;

int main() {
	int a = 10;
	int b = 20;
    a = a - b;
	b = a + b; 
	a = b - a;
	printf("%d,%d", a, b);
}

但是四则运算存在的一些问题:

1.a和b不能出现0(针对乘法和除法)

2.代码没有使用第三方变量直观

3.可能存在数据溢出的问题

第三种:用二进制中的异或方法

a=a^b;b=a^b;a=a^b;

int main() {
	int a = 10;
	int b = 20;
	a = a ^ b; 
	b = a ^ b;
	a = a ^ b;
	printf("%d,%d", a, b);
}

但是如果使用异或法,也存在一个问题:不能出现浮点值(浮点值不能进行位运算)

第四种方法:直接对a,b进行内存交换

这里用到了memcpy库函数,目的是将a,b的内存进行交换(注意引用头文件#include<string.h>)

void fun(double* a, double* b) {
	char temp[10];
	memcpy(temp, a, sizeof(*a));//a的内存给temp
	memcpy(a, b, sizeof(*b));
	memcpy(b, temp, sizeof(*a));
}
int main() {
	double a = 10.0;
	double b = 20.0;
	fun(&a, &b);
	printf("%f,%f", a, b);
}

 二、比较两数大小的多种方法

第一种:选择—分支结构,if-else  switch-case

int main() {
	int a = 20;
	int b = 10;
	if (a > b) {
		printf("%d", a);
	}
	else {
		printf("%d", b);
	}
}
int main() {
	int a =10;
	int b =20;
	switch(a>b)
	{
	case 0:printf("%d", b); break;
	case 1:printf("%d", a); break;
	}
} 

第二种方法:三目运算符

int main() {
	int a =10;
	int b =20;
	int res = a > b ? a : b;
	printf("%d", res);
} 

第三种方法:用数学的思维求出最大值(abs求两数的差值,相当于数学中求出绝对值)

int main() {
	int a =10;
	int b =20;
	int res = ((a + b) +abs(a-b)) / 2;
	printf("%d", res);
} 

三、在重复的数字中找出不同的数字 

1.在重复的数字中找出一个不同的数字

(这道题的思路是用异或的方法,我们知道0与任何一个数异或都为任何一个数,而两个相同的数异或确为0),于是我们将思路用代码进行实现

int fun(int *arr,int len) {
    int n = 0;
    for (int i = 0; i < len; i++) {
        n = arr[i] ^ n;
    }
    return n;
}
int main() {
    int arr[] = { 45,32,68,32,45 };
    int len = sizeof(arr) / sizeof(arr[0]);
    int res = fun(arr, len);
    printf("%d", res);
}

2.在重复的数字中找出两个不同的数字

这道题的思路是在上面代码操作进行结束后,我们并没有得到我们想要的结果,于是我们应该想到两个数异或出来的结果“1”是代表两个数的不同位,那我们就根据他们的这一位不相同,将他们分成两个组,其他数据与这个为相“&”,就得到两组不同的数据了,最后将这两组中的数据分别异或就可以了,接下来我们进行代码的实现

int main() {
	int arr[] = { 45,32,68,19,32,45 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int num1 = 0;
	int num2 = 0;
	int index = 1;
	int n = 0;
	for (int i = 0; i < len; i++) {
		n = arr[i] ^ n;
	}
	while ((n & index) != 1) {
		index =index<<1;
	}
	for (int i = 0; i < len; i++) {
		if ((index & arr[i]) == 1) {
			num1 = num1 ^ arr[i];
		}
		else {
			num2 = num2 ^ arr[i];
		}
	}
	printf("%d,%d", num1, num2);
}

运行结果:

19,68
D:\c程序\p2-2\Debug\p2-2.exe (进程 12860)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言例题总结一 的相关文章

随机推荐

  • C++生成随机字符串的程序

    include
  • set-cookie失效之坑

    最近做的一个微信公众号项目 打开网页登录的时候就会出现每次请求sessionid不一致的问题 先贴图 session是后台生成的 由于验证码信息是放了在session里面 每次的session不一致 导致没有办法从session里面拿到响应
  • springmvc整合freemarker以及前端的一些坑

    一 SpringMVC整合freemarker配置 1 引入相关jar包 html view plain copy
  • 【LVGL】ANIM(动画)学习

    animate 通用动画 过渡动画与通用动画的区别 过渡动画只有在状态发生改变时发生 通用动画可以在任意时刻进行 过渡动画支是样式 style 的一部分 通用动画和样式是相互独立的 实际上 过渡的底层也使用的是动画 创建动画 为了创建动画
  • 海康摄像头视频调用出错,Jni Error(app bug): accessed stale local reference解决办法

    项目中要在Android手机中调用海康摄像头拍摄的画面 在公司网管配置好了网络地址 不要与其他局域网内地址冲突 和端口 并激活摄像头设备后 通过SADPTool 海康提供的摄像头搜索工具 可以自动检索到当前局域网内已激活的设备 通过设备列表
  • 算法笔记:字符串编辑距离(Edit Distance on Real sequence,EDR)/ Levenshtein距离

    1 算法介绍 给定两个长度分别为n和m的轨迹tr1和tr2 最小距离的匹配阈值e 两条轨迹之间的EDR距离就是需要对轨迹tr1进行插入 删除或替换使其变为tr2的操作次数 动态规划的算法如下 红色的是还没有考虑的两个轨迹部分 黑色是已经考虑
  • VScode 头文件添加路径

    先用调试运行建立三 有的是四个 个json文件 具体的操作步骤可以 点击这里转载 包含头文件路径主要是两个文件 一个是task json和c cpp properties json文件 1先打开task json文件 然后找到这一栏 最下面
  • Jmeter 三种提取方式 —— 关联实例

    当请求之间有依赖关系 比如一个请求的入参是另一个请求返回的数据 这时候就需要用到关联处理 Jmeter中常用的关联方法 正则表达式提取器 XPath提取器 JSON提取器 regex n 匹配除换行符 n r 之外的任何单个字符 零次或多次
  • Linux——shell脚本的基础篇(变量定义、变量种类、变量操作)

    文章目录 一 变量的定义 二 变量名称的规范 三 使用变量 四 在shell脚本中的变量种类 五 字符的转译及变量的声明 六 变量值的传递 一 变量的定义 变量即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来表示不固定的值的
  • 【二叉树】44 二叉树:度为2的结点个数

    问题描述 内容 1 请参照链表的ADT模板 设计二叉树并逐步完善的抽象数据类型 由于该环境目前仅支持单文件的编译 故将所有内容都集中在一个源文件内 在实际的设计中 推荐将抽象类及对应的派生类分别放在单独的头文件中 参考教材 课件 以及网盘中
  • 斜率优化

    如果转移方程中含有 既有i 的项又有j的项 往往可以考虑斜率优化 斜率优化的目标是将dp式转化为 y kx b 这种形式 P3195 HNOI2008 玩具装箱TOY 题意 有1 n个玩具需要打包 每个玩具的有其长度 可以一段区间一段区间地
  • 珍藏多年的各类资源网站分享给大家

    学习网站 素材巷 这个应该有少数人知道吧 是我近几年来第一次遇到这样的网站 一个专注于分享文字素材的分享平台 涵盖文学范围广 包含散文 小说 诗词 戏曲 科普 天文 地志 阴阳 医卜 僧道 技艺 高考作文等 网址 素材巷 文字写作素材分享平
  • Unity3d接入googleplay内购详细说明(二)

    因为本文内容比较多 整理花费时间比较长 故分几篇完成 以下为本文目录结构 方便查阅 Unity3d接入googleplay内购详细说明 一 引言 一 准备条件 二 谷歌开发者后台应用创建说明 Unity3d接入googleplay内购详细说
  • 《Python进阶系列》二:Python中的 for-else 语法

    for else 语法 你是否见过这个语法 for i in xxx pass else pass 是不是一脸懵逼 啊哈哈哈 事实上 在 Python 中 else不仅可以与 if搭配使用 还可以与 for结合 想不到吧 我们先来看一个例子
  • 结合ruoyi-cloud和ruoyi-app实现微信小程序的授权登录

    文章目录 1 前言 1 1 环境准备 1 2 登录流程图 2 小程序代码 2 1 RuoYi App编辑api login js 2 4 新增按钮微信授权登录 2 6 新增wxHandleLogin方法获取code 2 9 创建sendWx
  • 重置计算机的本地策略,Win10怎样重置组策略/安全策略

    很多windows10系统用户都会使用注册表或组策略来深度调试系统 这些系统自带工具虽然能够实现一些表面上没有的功能 但也可能会让我们 翻车 对于注册表来说 修改之前做好备份是硬道理 恢复起来也很方便 但对于组策略和安全策略 要如何才能恢复
  • wxPython 菜单栏 工具栏 状态栏

    coding utf 8 Created on Mon Jun 10 03 56 09 2019 QQ群 476842922 欢迎加群讨论学习 author Administrator coding utf 8 import wx impo
  • RN_iOS项目部署流程实例

    文章目录 1 环境配置 1 1 安装node 1 2 安装Watchman 1 3 安装npm 1 4 安装cocoapods 2 百家云demo下载 3 运行百家云demo 3 1 顺利的话 3 2 踩过的坑 按这个目录流程走 3 2 1
  • 如何使用Flask包构建网页

    最近接到的任务是用Flask构建简单的算法成果展示网页 所以才来研究如何用flask构建网页 因为要求展示 对前端页面的美化不做要求 所以这篇博客的重点在于页面之间的跳转及前后端的数据传输 1 Flask运行HTML代码 默认情况下 Fla
  • C语言例题总结一

    目录 一 两数交换的多种方法 二 比较两数大小的多种方法 三 在重复的数字中找出不同的数字 1 在重复的数字中找出一个不同的数字 2 在重复的数字中找出两个不同的数字 一 两数交换的多种方法 第一种 引入第三方变量 利用了指针将地址传进去