【C语言】10题相关讲解+总结----有用的知识1

news2024/9/20 9:00:45

总结【C语言】10题,有兴趣的可以看看

  • 1.结构体与typedef联系
  • 2.结构体中涉及的操作符
  • 3.指针数组与数组指针
  • 4.数组首元素的作用
  • 5.喝汽水问题
  • 6.上三角矩阵判定
  • 7 矩阵相等判定
  • 8.VS调试技巧
  • 9.Debug与Release关系
  • 10.调整奇数偶数顺序
  • 11.有序序列合并

1.结构体与typedef联系

如有以下代码

struct student
{
  int num;
  char name[32];
  float score;
}stu;

则下面的叙述不正确的是:(D )
A.struct 是结构体类型的关键字
B.struct student 是用户定义的结构体类型
C.num, score 都是结构体成员名
D.stu 是用户定义的结构体类型名

D .stu不是结构体类型名,而是结构体定义的变量,如果想让stu变成用户定义的结构体类型名
必须在结构体定义时添加typedef关键字
比如:

typedef struct student
{
	int num;
	char name[32];
	float score;
}stu;//将结构体sturct student 类型名改成stu了

2.结构体中涉及的操作符

结构体访问成员的操作符不包含:(D
A… 操作符
B.-> 操作符
C.* 解引用操作符
D.sizeof

A.结构体变量在访问结构体时使用 .操作符
B.指向结构体类型变量的指针在访问结构体变量时使用 ->操作符
C.指向结构体类型变量的指针也可以通过*解引用操作符来访问结构体成员,但必须先用 *解引用操作符对指针解引用,再用 .操作符
D sizeof是求结构体类型大小的

3.指针数组与数组指针

下面哪个是指针数组:( A
A. int* arr[10];
B.int * arr[];
C.int **arr;
D.int (*arr)[10];
指针数组是一个数组,数组元素都是指针

A.定义了一个10个元素的数组,数组元素是int 类型
B.在定义数组时必须要有明确的大小,如果没有大小也必须给出初始化结构
C二级指针,int **类型
D.arr首先与
结合成为指针,指针指向一个int[10]数组的,所以这是个数组指针。

4.数组首元素的作用

truct stu
{
    int num;
    char name[10];
    int age;
};

void fun(struct stu *p)
{
	printf(%s\n”,(*p).name);
	return;
}

int main()
{
	struct stu students[3] = {{9801,"zhang",20},
							 {9802,"wang",19},
                            {9803,"zhao",18} };
   fun(students + 1);
	return 0;
}

结果(C
A.zhang
B.zhao
C.wang
D.18

定义一个结构体数组,数组元素有3个,而数组名表示首元素地址,+1表示第二个元素的地址,所以将第二个元素的地址传给fun函数,fun用指针接收,先解引用,访问到结构体变量,再用.操作符访问变量元素,wang

5.喝汽水问题

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
图例:
在这里插入图片描述
代码:

int main()
{
	int money;
	scanf("%d", &money);
	int total = 0;//总共喝的数量
	int empty = 0;//空瓶的数量
	total += money;//1块就等于1瓶
	empty = money;//一元等于1瓶==一个空瓶
	while (empty >= 2)
	{
		total += empty / 2;//2个空瓶换一个汽水
		empty = empty / 2 + empty % 2;//空瓶等于刚刚喝的汽水得到的瓶子,和上次奇数瓶子没有换整数汽水剩下的瓶子。循环
	}
	printf("%d", total);
	return 0;
}

在这里插入图片描述

6.上三角矩阵判定

上三角矩阵判定

在这里插入图片描述
代码:

int main()
{
	int n;
	int arr[100][100];
	scanf("%d ", &n);
	int i;
	int j;
	int flag = 1;//默认flag=1是上三角矩阵
	for (i = 0; i < n; i++)
	{
		
		for (j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < i; j++)
		{
			if (arr[i][j] != 0)
			{
				flag = 0;//如果有一个不为0,则不是上三角
				goto end;//跳出循环
			}
		}
	}
end://判断
	if (flag == 1)
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}
	return 0;
}

7 矩阵相等判定

矩阵相等判定

int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
	int arr1[10][10];
	int arr2[10][10];
	int i, j;
	int flag = 1;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr1[i][j]);
		}
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr2[i][j]);
			if (arr1[i][j] != arr2[i][j])
			{
				flag = 0;
				goto end;
			}
		}
	}
end:
	if (flag == 1)
	{
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

8.VS调试技巧

关于VS调试快捷键说法错误的是:(A
A.F5-是开始执行,不调试
B.F10-是逐过程调试,遇到函数不进入函数
C.F11-是逐语句调试,可以观察调试的每个细节
D.F9是设置断点和取消断点

A.F5是开始调试,遇到断点的位置可以停下来,ctrl+F5是开始执行,不调试。
正确,F10遇到函数不会进入函数内部,F11会
F11会进入函数的内部
F9会在光标所在行下断点,如果有断点就会取消断点

9.Debug与Release关系

关于Debug和Release的区别说法错误的是:( )
A.Debug被称为调试版本,程序调试找bug的版本
B.Release被称为发布版本,测试人员测试的就是Release版本
C.Debug版本包含调试信息,不做优化。
D.Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优

Debug版本是用来调试的,调试代码都是在Debug模式下进行的
Release版本最终是要发给用户,发给用户的版本是不能有问题的,测试人员就是用的Release版本
C:正确,Debug版本是调试版本,编译器编译时会增加一些调试信息,编译器基本不会对其进行优化
D:错误,Release版本是不能调试的,一般都是在Debug版本下调试的,Release版本一般编译器会进行大量的优化,删除无用的代码,指令的次序调整等,让其速度更快

10.调整奇数偶数顺序

调整数组使奇数全部都位于偶数前面。
题目:

输入一个整数数组,实现一个函数,

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。

思路:
我们可以设置两个下标left,right
1.让left从数组的左边开始遍历,如果找到奇数则跳过去继续往后找,如果找到偶数则停下
2.让right从数组的右边开始遍历,如果找到偶数则跳过去继续往前找,如果找到奇数就停下来
3.如果左边和右边都找到,则进行交换
4.要注意循环的条件,left能超过right吗?
5.还有一个问题:如果全是奇数或者全是偶数,则存在越界问题

代码:

void Move(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		//左边找偶数
		while ((left < right)&& ((arr[left] % 2 == 1)))//如果全奇数或者全是偶数,会导致left++或者right--,越界,所以这里还是需要改进一下再加上left<right这个条件
		{
			
				left++;//找到奇数++往后找
		}
		//右边找奇数
		while ((left < right)&&((arr[right] % 2 == 0)))
		{
			
				right--;//找到偶数--,往前找
		}
		//交换
		// 如果偶数和奇数都找到,交换这两个数据的位置
     // 然后继续找,直到两个指针相遇
		if(left<right)
		{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;//交换完需要跳过去
		right--;
		}
	

}
int main()
{
	int n;
	scanf("%d", &n);
	int arr[10];
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	Move(arr, sz);
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

11.有序序列合并

有序序列合并

思路:
1.两个数列都是有序的
要求合并成有序数列
2.我们可以分别对两个数组遍历,然后将遍历的数按有序放进另一个数组里
3.我们对数组1用i遍历,对数组2用j遍历,用k对数组3进行遍历,在遍历的过程让数组1和数组2中元素进行比较
如果数组1中元素比数组2中元素小,则将数组1中这个元素放进数组3中,数组1中i++,往后走,数组3,下标k也++往后走,然后再与数组2比较,然后将比较的元素中较小的元素放进数组3中,然后下标++4.最后如果某个数组先遍历完,则最后直接将剩下的数组的元素全部放进数组3中即可

代码:

int main()
{
	int arr1[100];
	int arr2[100];
	int arr3[200];
	int i, j;
	int n, m;
	scanf("%d %d", &n, &m);
	//将数据输入
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//比较两个数组
	int i = 0;//需要将i重新赋值0
	int k = 0;
	while (i < n && j < m)
	{
		if (arr1[i] < arr2[j])
		{
			//比较两个数组元素,将小的元素放进数组3中,然后再比较
			arr3[k] = arr1[i];
			i++;//这个元素放进去后,后面的元素继续与数组2比较
			k++;//放进去一个元素++
		}
		else
		{
			arr3[k] = arr2[j];
			j++;
			k++;

		}
	}
	//出了循环肯定有一个数组先遍历完,然后我们就可以直接将剩下一个数组的全部元素直接放进数组3中就可以了
	if (i == n)//如果数组1先遍历完
	{
		arr3[k] = arr2[j];
		j++;
		k++;
	}
	else//如果数组2先遍历完
	{
		arr3[k] = arr1[i];
		i++;
		k++;
	}
	//打印
	for (k = 0; k < n + m; k++)
	{
		printf("%d ", arr3[k]);
	}
	return 0;
}

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

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

相关文章

开发互动直播应用很简单:声网 Android Demo保姆级运行教程

本文作者是来自声网开发者社区的用户“Xiaohua”。 前言 本人在参与《声网开发者漫游指南》期间&#xff0c;通过学习了解和学会跑通声网的实时互动Demo&#xff0c;但因为课程提供的demo是移动端和pc端的&#xff0c;很少接触过&#xff0c;所以只能花点时间学习一下才能运行…

如何屏蔽 iOS 软件自动更新,去除更新通知和标记

如何禁用 iPhone、iPad 软件自动更新。适用于 iOS、iPadOS 和 watchOS&#xff0c;即 iPhone、iPad 和 Apple Watch 通用。 请访问原文链接&#xff1a;https://sysin.org/blog/disable-ios-update/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

WebAssembly编译之(4)-WASM编译进阶(多文件、多接口)

引言 上一节我们讲到如何用Emscripten将一个C编译陈wasm&#xff0c;并导出可供Javascirpt调用的接口&#xff0c;以及C导出类的函数接口、导出类的封装对象等。然而&#xff0c;编译的方式比较玛法&#xff0c;有没办法能更友好一点实现wasm的编译呢 WASM 相关文档&#xff1a…

【自学Docker】Docker diff命令

Docker diff命令 大纲 docker diff命令教程 docker diff 命令用于比较一个 Docker容器 不同版本提交的文件差异。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker diff命令会列出 3 种容器内文件状态变化&#xff08;A - Add, D - Delete, C - Chang…

Java-基础-3.容器

一&#xff1a;为什么会出现容器&#xff1f; 在之前的学习中&#xff0c;我们学习了变量和常量。都是一个字符或者字符串&#xff0c;数字的情况。但是在实际的生产中&#xff0c;我们一次会接受到很多类型不同&#xff0c;个数不同的数据。所以&#xff0c;为了方便我们后续…

红杉:2022企业数字化年度指南

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图华为2021数字…

[基础语法] python语法之列表的基本操作

文章目录列表已发布列表的基本操作增删改查排序列表实例练习列表 已发布 python判断语句python循环语句python之列表list python 的数据格式主要有列表、字典、元组、集合。其中列表的使用最为广泛。 任何一种数据格式的使用都离不开增、删、改、查四个操作。列表除了这四个…

【Mysql第四期 运算符规则计算】

文章目录写在前面1.算数运算符2.比较运算符3.逻辑运算符4.位运算符5.运算符的优先级拓展&#xff1a;使用正则表达式查询写在前面 基本的运算符号在计算机编程领域都是相通的&#xff0c;会有自己的一些特定符号语言&#xff0c;就像是各地的普通话一样&#xff0c;尽管语音描…

剑指 Offer II 004只出现一次的数字

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;nums [0,1,0,…

Linux中Vi编辑器和Vim编辑器

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Docker常用命令总结

基础命令 1.启动docker systemctl start docker 2.关闭docker systemctl stop docker 3.设置docker为自启动 systemctl enable --now docker 4.重启docker systemctl restart docker 3.查看docker版本信息 docker version 4.查看docker详细信息 docker info Clien…

Spring定时器超过30分钟问题

目前需要定时器做一个定时扫描任务的功能&#xff0c;原先都是定时在半个小时&#xff0c;程序跑起来也没事。但是最近公司要求定时时间加长到45分钟&#xff0c;而调整完配置完后发现&#xff0c;程序是在45分钟和整点进行的扫描。 下面是我做的示例时间缩短为45秒 spring。x…

守护进程编程流程及代码实现

概念不做阐述&#xff0c;本文主要内容为守护进程编程部分的知识说明 守护进程的编程流程&#xff1a; 1.fork退出父进程&#xff0c;保证留下的子进程是组员进程 2.利用setsid()创建新会话&#xff0c;把子进程挪到新的会话中 //获取会话是getsid() 3.fork退出父进程&#x…

完成基于Servlet的对user表的增删改查

基于Servlet的增删改查 1.开发环境 IDEAJDK1.8Tomcat8.5Mysql 8.0.12 2.数据库 2.1表创建 2.2表数据 3.JavaWeb代码 3.1目录结构 3.2util包下代码 JdbcUtil完成对数据库的连接和资源释放 JsonResult对返回前端资源的封装 JdbcUtil代码&#xff1a; /* 数据库连接板帮助类 …

Python中的垃圾回收机制

Python的垃圾回收主要以引用计数为主&#xff0c;分代回收为辅。引用计数在Python中&#xff0c;使用了引用计数这一技术实现内存管理。一个对象被创建完成后就有一个变量指向这个对象&#xff0c;那么就这个对象的引用计数为1&#xff0c;以后如果有其他变量指向这个对象&…

不吹牛,完爆ant design的定位组件,floating-ui来也

前言 因为要写react定位组件&#xff08;这不是标题党&#xff0c;就是完爆ant design的定位组件&#xff0c;你应该看到一半就会同意我的观点&#xff09;&#xff0c;如下图&#xff1a; 红框部分是用绝对定位放在按钮上面的&#xff0c;你们B端用的主流组件库都是这样实现的…

Python自动化小技巧14——自动批量发送邮件(带各种附件)

案例背景 我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的&#xff0c;每次输入评论者的邮箱&#xff0c;然后打开数据所在的文件夹&#xff0c;上传&#xff0c;填写标题正文&#xff0c;发送....... 一模一样的流程&#xff0c;所以这种重复性的劳动肯定…

Linux下 git 上传与删除 的基本指令

git的概述克隆仓库使用 git 上传文件删除 git 中的文件git的概述 Git 是一个免费并开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 在使用 git 应确保Linux系统中已安装有git 命令&#xff1a;git --version 作用&#xff1a;查看 git 是否…

Spring Boot 单元测试

文章目录1. 单元测试是什么2. 单元测试的优点3. 进行 Spring Boot 单元测试3.1 确认项目中已经内置了测试框架3.2 生成单元测试的类3.3 添加 SpringBootTest 注解3.4 添加单元测试的业务代码3.5 注解 Transactional4. 断言1. 单元测试是什么 单元测试&#xff0c;是指对软件中…

微信小程序022同学会学生会活动经费系统

同学会小程序采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员端和用户端两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、个人中心、用户管理、共享账本管理、我的账本管理、经费信息管理、经费支出管理、活动信息、管理员管理、留言板管理…