学习c语言第24天(练习)

news2024/11/25 6:32:38

编程题

第一题        最大公约数最小公倍数求和

//求最大公约数和最小公倍数之和
//暴力求解
//int main()
//{
//	int n = 0;
//	int m = 0;
//	while (scanf("%d %d", &n, &m)==2)
//	{
//		int min = n < m ? n : m;
//		int max = n > m ? n : m;
//		int i = min;
//		int j = max;
//		while (1)
//		{
//			if (n % i == 0 && m % i == 0)
//			{
//				break;
//			}
//			i--;
//		}
//		//i是最大公约数
//		while (1)
//		{
//			if (j % n == 0 && j % m == 0)
//			{
//				break;
//			}
//			j++;
//		}
//		//j最小公倍数
//		printf("%d",i+j);
//	}
//	return 0;
//}

//辗转相除法
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d %d",&n,&m);
	int i = n;
	int j = m;
	int r = 0;
	while (r = i % j)
	{
		i = j;
		j = r;
	}
	//j为最大公约数
	printf("%d", m * n / j+j);
	return 0;
}

第二题        空心正方形

//空心正方形
int main()
{
	int n = 0;
	scanf("%d",&n);
	int i = 0;
	int j = 0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
				printf("* ");
			else
				printf("  ");
		}
		printf("\n");
	}
	return 0;
}

第三题        offsetof

offsetof
offsetof(type,member )
该函数求结构体变量相对于首地址的偏移量
struct S
{
	char c1;
	int i;
	char c2;
};
int main()
{
	struct S s = { 0 };
	printf("%d\n",offsetof(struct S ,c1));
	return 0;
}
struct S
{
	char c1;
	int i;
	char c2;
};
#define OFFSETOF(type,m_name) (int)&(((type *)0)->m_name)//把0强制转换成结构体地址
int main()
{
	struct S s = { 0 };
	printf("%d\n", OFFSETOF(struct S, c1));
	printf("%d\n", OFFSETOF(struct S, i));
	printf("%d\n", OFFSETOF(struct S, c2));
	return 0;
}

第四题        箭形图案

int main()
{
	int n = 0;
	scanf("%d",&n);
	//上n行
	int i = 0;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < n-i; j++)
		{
			printf("  ");
		}
		for (j = 0; j <= i; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 0; i < n+1; i++)
	{
		int j = 0;
		for (j = 0; j < i; j++)
		{
			printf("  ");
		}
		for (j = 0; j <n+1-i; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	//上n+1行
	return 0;
}

第五题        公务员面试

int main()
{
	int score = 0;
	int n = 0;
	int max = 0;
	int min = 100;
	int sum = 0;
	while (scanf("%d", &score) == 1)
	{
		n++;
		if (score > max)
			max = score;
		if (score < min)
			min = score;
		sum += score;
		if (n == 7)
		{
			printf("%.2lf\n",(sum - max - min) / 5.0);
			max = 0;
			min = 100;
			sum = 0;
		}
	}
	return 0;
}

第六题        改造通讯录2

//通讯录相关的测试
//动态版本
//通讯录默认存放三个人信息
//不够的话 每次增加两个人信息
#include "contact.h"
void menu()
{
	printf("**************************\n");
	printf("*****1.add****************\n");
	printf("*****2.del****************\n");
	printf("*****3.search*************\n");
	printf("*****4.modify*************\n");
	printf("*****5.show***************\n");
	printf("*****6.sort***************\n");
	printf("*****0.exit***************\n");
	printf("**************************\n");
}
int main()
{
	int input = 0;
	contact con;//通讯录
	//初始化通讯录
	initcontact(&con);
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			addcontact(&con);
			break;
		case 2:
			delcontact(&con);
			break;
		case 3:
			searchcontact(&con);
			break;
		case 4:
			modifycontact(&con);
			break;
		case 5:
			showcontact(&con);
			break;
		case 6:
			sortcontact(&con);
			break;
		case 0:
			destroycontact(&con);
			printf("退出通讯录\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
	return 0;
}
//通讯录相关声明
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#define DEFAULT_SZ 3
#define INC_SZ 2
#define MAX 100
#define	MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 30
//类型的声明
//人的信息
typedef struct people
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}people;

//通讯录
//静态版本
//typedef struct contact
//{
//	people data[MAX];
//	int count;
//}contact;


//动态版本
typedef struct contact
{
	people * data;
	int count;
	int capacity;//当前通讯录的容量
}contact;




//初始化通讯录
void initcontact(contact* pc);
//销毁通讯录
void destroycontact(contact*pc);
//添加联系人
void addcontact(contact* pc);
//删除联系人
void delcontact(contact* pc);
//查找联系人
void searchcontact(const contact* pc);
//修改联系人
void modifycontact(contact* pc);
//打印通讯录的信息
void showcontact(const contact* pc);
//排序通讯录得内容
void sortcontact(contact* pc);
//通讯录相关的实现
#include "contact.h"

//通讯录初始化 
//静态版本
//void initcontact(contact* pc)
//{
//	assert(pc);
//	pc->count = 0;
//	memset(pc->data, 0, sizeof(pc->data));
//}

//动态版本
 void initcontact(contact* pc)
{
	assert(pc);
	pc->count = 0;
	pc->data = (people*)calloc(DEFAULT_SZ,sizeof(people));
	if (pc->data == NULL)
	{
		printf("initcontact:%s\n",strerror(errno));
	}
	pc->capacity = DEFAULT_SZ;
}
 //销毁通讯录
 void destroycontact(contact* pc)
 {
	 assert(pc);
	 free(pc->data);
	 pc->data = NULL;
 }


//增加联系人
 //静态版本
//void addcontact(contact* pc)
//{
//	assert(pc);
//	if (pc->count == MAX)
//	{
//		printf("通讯录已满,无法添加");
//		return;
//	}
//	//
//	printf("请输入名字");
//	scanf("%s", pc->data[pc->count].name);
//	printf("请输入年龄");
//	scanf("%d", &(pc->data[pc->count].age));
//	printf("请输入性别");
//	scanf("%s", pc->data[pc->count].sex);
//	printf("请输入电话");
//	scanf("%s", pc->data[pc->count].tele);
//	printf("请输入地址");
//	scanf("%s", pc->data[pc->count].addr);
//	pc->count++;
//	printf("增加成功\n");
//}

 //动态版本
 void checkcapacity(contact* pc)
 {
	 if (pc->count == pc->capacity)
	 {
		 people* ptr = (people*)realloc(pc->data, (pc->capacity + INC_SZ) * sizeof(people));
		 if (ptr == NULL)
		 {
			 printf("addcontact:%s\n", strerror(errno));
		 }
		 else
		 {
			 pc->data = ptr;
			 pc->capacity += INC_SZ;
			 printf("增容成功\n");
		 }
	 }
 }
 void addcontact(contact* pc)
 {
	 assert(pc);
	 //增容
	 checkcapacity(pc);
	 //
	 printf("请输入名字");
	 scanf("%s", pc->data[pc->count].name);
	 printf("请输入年龄");
	 scanf("%d", &(pc->data[pc->count].age));
	 printf("请输入性别");
	 scanf("%s", pc->data[pc->count].sex);
	 printf("请输入电话");
	 scanf("%s", pc->data[pc->count].tele);
	 printf("请输入地址");
	 scanf("%s", pc->data[pc->count].addr);
	 pc->count++;
	 printf("增加成功\n");
 }

//删除联系人
static int findbyname(contact* pc, char name[])
{
	assert(pc);
	int i = 0;
	for (i = 0; i < pc->count; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
			return i;
	}
	return -1;
}
void delcontact(contact* pc)
{
	assert(pc);
	int i = 0;
	if (pc->count == 0)
	{
		printf("通讯录为空,没有信息可以删除\n");
		return;
	}
	char name[MAX_NAME] = { 0 };
	printf("请输入要删除人的名字");
	scanf("%s", name);
	//删除
	//1.查找
	int pos = findbyname(pc, name);
	if (pos == -1)
	{
		printf("要删除的人不存在");
		return;
	}
	//2.删除
	for (i = pos; i < pc->count - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->count--;
	printf("删除成功");
}

//查找联系人
void searchcontact(const contact* pc)
{
	assert(pc);
	char name[MAX_NAME] = { 0 };
	printf("请输入要查找人的名字");
	scanf("%s", name);
	//1.查找
	int pos = findbyname(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
			pc->data[pos].name,
			pc->data[pos].age,
			pc->data[pos].sex,
			pc->data[pos].tele,
			pc->data[pos].addr);
	}
}

//修改联系人
void modifycontact(contact* pc)
{
	assert(pc);
	char name[MAX_NAME] = { 0 };
	printf("请输入要修改人的名字");
	scanf("%s", name);
	//1.查找
	int pos = findbyname(pc, name);
	if (pos == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	//修改
	printf("请输入名字");
	scanf("%s", pc->data[pos].name);
	printf("请输入年龄");
	scanf("%d", &(pc->data[pos].age));
	printf("请输入性别");
	scanf("%s", pc->data[pos].sex);
	printf("请输入电话");
	scanf("%s", pc->data[pos].tele);
	printf("请输入地址");
	scanf("%s", pc->data[pos].addr);
	printf("修改成功\n");
}

//显示通讯录
void showcontact(const contact* pc)
{
	assert(pc);
	int i = 0;
	printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");
	for (i = 0; i < pc->count; i++)
	{
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",
			pc->data[i].name,
			pc->data[i].age,
			pc->data[i].sex,
			pc->data[i].tele,
			pc->data[i].addr);
	}
}

//排序
int cmp_peo_by_name(const void* e1, const void* e2)
{
	return strcmp(((people*)e1)->name, ((people*)e2)->name);
}
void sortcontact(contact* pc)
{
	assert(pc);
	qsort(pc->data, pc->count, sizeof(people), cmp_peo_by_name);
	printf("排序成功\n");
}

第七题        找单身狗

//找单身狗
int find_single_num(int arr[], int sz, int* pd1, int* pd2)
{
	int i = 0;
	int ret = 0;
	//1.异或
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];
	}
	//2.计算ret中最右边第几位是1
	int pos = 0;
	for (pos; pos < 32; pos++)
	{
		if (((ret >> pos) & 1) == 1)
		{
			break;
		}
	}
	for (i = 0; i < sz; i++)
	{
		if (((arr[i] >> pos) & 1) == 1)
		{
			*pd1 ^= arr[i];
		}
		else
		{
			*pd2 ^= arr[i];
		}
	}
}
int main()
{
	int arr[] = {1,2,3,4,5,1,2,3,4,6};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int dog1 = 0;
	int dog2 = 0;
	find_single_num(arr, sz, &dog1, &dog2);
	printf("%d %d\n",dog1,dog2);
	return 0;
	//5^6  101 110-->011 把最低位为0的分成一组,把最低位为1的分成一组
	//分组
	//1.所有数字异或
	//2.找出异或的结果数字中哪一位为1--n
	//3.以第n位为0放一组,以第n位为1放一组
}

第八题        模拟实现atoi

atoi
int atoi (const char*str);
//模拟实现atoi
//1.空指针
//2.空字符串
//3.空格
//4.+-
//5.越界
//6.非数字字符
enum	Status
{
	VALID,//0
	INVALID//1
}sta=INVALID;
int my_atoi(const char* str)
{
	int flag = 1;
	assert(str);
	if (*str == '\n')
	{
		return  0;
	}
	//跳过空白字符
	while (isspace(*str))
	{
		str++;
	}
	//+-
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	//

	long long ret = 0;
	while (*str)
	{
		if (isdigit(*str))
		{
			ret = ret * 10 + flag * (*str - '0');
			if (ret > INT_MAX || ret < INT_MIN)
			{
				return 0;
			}
		}
		else
		{
			return ret;
		}
		str++;
	}
	if (*str == '\0')
	{
		sta = VALID;
	}
	return (int)ret;
}
int main()
{
	char arr[20] = "-123abc";
	int ret =my_atoi(arr);
	if (sta == INVALID)
	{
		printf("非法返回:%d\n",ret);
	}
	else if (sta == VALID)
	{
		printf("合法转换:%d\n",ret);
	}
	return 0;
}

第九题        改造通讯录3

第十题        交换奇偶位

//写一个宏,将整数二进制位的奇数位和偶数位交换
把所有偶数位提出来(&10101010101010101010101010101010,就是0xaaaaaaaa)
然后右移1,就到了偶数位
奇数位换到偶数位,也一样

#define SWAP_BIT(n) (((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1))
int main()
{
	int a = 0;
	scanf("%d",&a);
	SWAP_BIT(a);
	printf("%d", SWAP_BIT(a));
	return 0;
}

选择题

第一题        16  12

第二题        12 12 16

第三题        D

第四题        02 29 00 00

第五题        C

第六题        16

第七题        38 39

第八题         D

第九题        1 257

第十题        D

第十一题        B

第十二题        A

第十三题        A

第十四题        C

第十五题        C

第十六题        C

第十七题        B

第十八题        B

第十九题        B

第二十题        D

第二十一题        D

第二十二题        D

第二十三题        A

第二十四题        C

第二十五题        b

第二十六题        A

第二十七题        A

第二十八题        D        

第二十九题        B

第三十题        C

第三十一题        B

第三十二题        D        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

原神4.8版本角色数据

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原神4.8版本角色数据</title><style>…

【浏览器插件】Chrome扩展V3版本

前言&#xff1a;Chrome从2022年6月开始&#xff0c;新发布插件只接受V3版。2024年V2版已从应用商店下架。 浏览器扩展插件开发API文档 chrome官网&#xff08;要翻墙&#xff09;&#xff1a; https://developer.chrome.com/docs/extensions/mv3 MDN中文&#xff1a;https:/…

gitee拉取项目,提交代码

1&#xff0c;安装git 2&#xff0c;gitee配置成员仓库权限 3&#xff0c;克隆项目 git clone gitgitee.com:sky474775788/Python_API_AUTO.git 4&#xff0c;配置用户信息 git config --global user.name 林俊xxx git config --global user.email ohnxxxsee1xxx.com 5&…

机器学习·L2W4-决策树

决策树 从根节点的所有示例开始计算所有可能特征的分割信息增益&#xff0c;并选择信息增益最高的特征根据所选特征分割数据集&#xff0c;并创建树的左分支和右分支不断重复分割过程&#xff0c;直到满足停止条件 信息增益 也可以理解为信息熵的减少 p p p是结果为positive…

住宅代理和数据中心代理:指纹浏览器用哪个更安全?

在当今的数字时代&#xff0c;确保您的在线安全至关重要。这就是住宅和数据中心代理发挥作用的地方&#xff0c;它们可以保护您的身份和个人信息。指纹浏览器解决了账号所在环境指纹参数隔离的安全问题&#xff0c;而IP解决环境的定位与隔离问题&#xff0c;就像Maskfog中提供的…

洛伦兹微分方程与混沌理论

前言 这一段时间在看书中关于深度学习与神经网络的内容&#xff0c;其中有一节介绍神经网络用于预测洛伦兹微分方程的数值解&#xff0c;还提到了“吸引子”这一概念&#xff0c;当时也没太理解是什么&#xff0c;下午搜集了一本书上关于混沌理论的介绍——《混沌的本质》。 这…

【线性回归】——解决运筹优化类问题

目录 文章目录 前言 一、模型原理 1.线性规划模型的三要素 &#x1f60f;&#x1f60f;&#x1f60f; 2.模型特点 3.线性规划的表现形式 二、模型建立步骤 1.找决策变量 2.确定目标函数 3.找到约束条件 4.运用Matlab中的Linprog函数 总结 前言 在实际生活应用中&#xff0c;我…

Unity入门5——材质

创建材质 点击Assets → Create → Material&#xff0c;得到一个默认材质球的副本。 使用材质 直接把材质球拖拽到物体上&#xff0c;或设置mesh renderer组件下的Materials 数组中第一个元素

etcd高可用集群部署

文章目录 一、环境准备二、安装部署2.1 下载安装包2.2 将etcd和etcdctl复制到/usr/local/bin中2.3 创建目录并赋予权限2.4 修改节点配置2.4.1 配置etcd.conf文件2.4.2 配置/etc/systemd/system/etcd.service文件 2.5 启动ectd服务2.6 查看集群成员信息2.7 查看集群状态 在生产环…

【PyQt5】PyQt5 信号和槽

基于GUI的应用程序是事件驱动的。函数或方法按照用户的操作&#xff08;例如点击按钮、从集合中选择项目或点击鼠标等&#xff09;来执行&#xff0c;这些操作被称为 事件 。用于构建GUI界面的小部件充当这些事件的来源。每个PyQt小部件都是从QObject类派生而来&#xff0c;设计…

《Redis设计与实现》读书笔记-复制

目录 1.概述 2.复制命令 3.部分重同步过程 4.部分重同步实现 4.1复制偏移量 4.2复制积压缓冲区 4.3服务器运行ID 5.总结 1.概述 在redis 通过向从服务器发送命令&#xff1a;SLAVE OF&#xff0c;让从服务器复制主服务器&#xff0c;成为复制。 复制的目的 让从服务器…

等保测评 linux设置三权分立

1、首先浅谈一下目录结构 drwxr-xr-x意思如下&#xff1a;第一位表示文件类型。 d是目录文件&#xff0c;l是链接文件&#xff0c;-是普通文件&#xff0c;p是管道。后面的分三个三个来看&#xff0c;即 rwx 、r-x 、r-x。 第一个&#xff1a; root &#xff1a;r 是可读&#…

在Linux中认识pthread库

int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间&#xff0c;及0号地址&#xff0c;及往虚拟地址的0号地址处写8个字节的数据&#xff0c;全部写为0. &#xff08;此操作不允许&#xff09; 进程和线程的关系如…

Python PDF文本处理技巧 - 查找和高亮文字

目录 使用工具 Python在PDF中查找和高亮文字并统计出现次数和页码 Python在PDF的特定页面区域中查找和高亮文字 Python使用正则表达式在PDF中查找和高亮文字 Python在PDF中查找文字并获取它的坐标位置 其他查找条件设置 在日常工作和学习中&#xff0c;我们常常需要处理各…

命令-响应框架在 ESP RainMaker 中的应用

【如果您之前有关注乐鑫的博客和新闻&#xff0c;那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注&#xff0c;建议先查看相关信息&#xff0c;知晓本文背景。】 在 ESP RainMaker 中&#xff0c;管理员用户可以查看一些基本的节点数据&#xff0c;包括类型、型…

【Liunx】线程与进程的经典面试题总结

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 线程与进程的面试题总结 1 简述什么是LWP2 简述LWP与pthread_create创建的线程之间的关系3 简述轻量级进程ID与进程ID之间的区别4 请简述什么是线程互斥&#xff0c;为什么需要互斥5 简述你了解的进程间通信方式…

【免费测试】人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对&#xff1f; 人脸身份证比对又称人证比对&#xff0c;实人比对&#xff0c;人像比对&#xff0c;输入姓名、身份证号码和头像照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

安科瑞智慧能源管理平台在电动汽车虚拟电厂优化调度起到什么作用?

摘要&#xff1a;大量电动汽车用户的无序充电可能造成电网负荷剧烈波动&#xff0c;危及电网的安全稳定。随着电动汽车入网技术的应用&#xff0c;将电动汽车充电站及其周边的分布式新能源发电聚合为虚拟电厂后进行优化调度&#xff0c;有助于改善电动汽车用户充放电的经济性及…

深入LVS内核世界:揭秘其高效背后的技术细节与实现机制

LVS简介 Linux virtual server&#xff0c;即Linux虚拟服务器&#xff0c;是一种基于Linux平台的高性能、高可用的服务器负载均衡技术。它主要工作在网络层、传输层&#xff08;OSI参考模型的第三层、第四层&#xff09;&#xff0c;主要通过IP地址和端口号来转发网络流量。LV…

【Dash】Web 应用程序中的可复用组件

一、Reuable Comopnents By writing our makup in Python, we can create complex reusable components like tables without switching contexts or languages. from dash import Dash, html import pandas as pddf pd.read_csv(https://raw.githubusercontent.com/GarciaS…