C语言算术转换例题

news2024/10/5 15:33:17

这里写目录标题

  • 例题一
    • 题目解析
    • 答案
  • 例题二
    • 题目解析
    • 答案
  • 例题三
    • 题目解析
    • 答案
  • 例题四
    • 方法一
    • 解析
    • 方法二
    • 解析
  • 例题五
    • 答案
    • 方法一
    • 方法二
    • 解析

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐓🏀 python

例题一

下面代码的结果是

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

A.> B.< C.不输出 D.程序有问题

题目解析

之前我认为i是没有初始化的,所以程序有问题

但是后面看了答案发现全局变量,没有给初始值时,编译其会默认将其初始化为0,所以i=0

既然i=0的话那i–就应该是-1才对,sizeof(i)的话就应该是求的int类型的大小,sizeof(i)=4,那-1<4理论上是输出<才对,可是答案却是>

这里我们就可以联想到无符号整形,也就是-1最后换算成无符号整形的时候是一个很大的数

事实上也确实是如此,sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该选择A

答案

答案:D

例题二

关于表达式求值说法不正确的是:( )
A.表达式求值先看是否存在整形提升或算术转换,再进行计算

B.表达式真正计算的时候先看相邻操作符的优先级再决定先算谁

C.相邻操作符的优先级相同的情况下,看操作符的结合性决定计算顺序

D.只要有了优先级和结合性,表达式就能求出唯一值

题目解析

具体可以看我之前写的一篇文章操作符详解下(非常详细)
ABC都是对的,对于D我们来看一个例子

#include <stdio.h>
int main()
{
    int i = 1;
    int ret = (++i)+(++i)+(++i);
    printf("ret = %d\n", ret);
	return 0;
}

这里的结果是不确定的,可以尝试在不同的编译器上打印结果

答案

答案:D

例题三

有序序列合并
在这里插入图片描述

题目解析

这道题需要将两个数组都合并起来,因此数组的空间要足够大,否则就会出现数组越界

第一步就需要确定两个数组的有效元素个数,也就是m和n,然后再向数组输入数据,

第二步就需要将两个数组合并,由于两个数组的有效元素个数都是确定的,因此我们只需要用一个循环就可以解决

第三步就是重新排列,我们需要用两个循环,因为第二个循环是为了将一个会较大的数往后排,但是前面仍然可能存在一些数比后面的数大,所以第一个for循环是为了检查前面是否有一些数比后面的数大

答案

这是我之前写的代码

int main() {

	int n,m,temp,a1[1000],a2[10000];

	scanf("%d %d",&n,&m);

	for(int i=0; i<n; i++) {
		scanf("%d",&a1[i]);
	}
	for(int i=0; i<m; i++) {
		scanf("%d",&a2[i]);
	}
	for(int i=0; i<m; i++) {
		a1[n+i]=a2[i];
	}

	for(int i=0; i<m+n-1; i++) {
		for(int j=0; j<m+n-1; j++) {
			if(a1[j]>a1[j+1]) {
				temp=a1[j];
				a1[j]=a1[j+1];
				a1[j+1]=temp;
			}
		}
	}

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

	return 0;
}

例题四

获得月份天数

在这里插入图片描述

方法一

#include<stdio.h>
int main()
{
	int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
	int notrun[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	int year, month;

	while(scanf("%d %d", &year, &month)!=EOF)
	{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		printf("%d\n", run[month - 1]);
	}
	else
	{
		printf("%d\n", notrun[month - 1]);
	}
    }
	return 0;
}

解析

这种解法是将创建两个数组,一个数组是闰年,另一个数组就不是闰年,将每个月份的总天数输入进数组

然后判断是否为闰年,由于数组的下标是0开始,所以最后打印的时候需要mouth-1

方法二

#include<stdio.h>
int main() {
    int year, month, day;
    while (scanf("%d %d", &year, &month) != EOF) {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                printf("31\n");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                printf("30\n");
                break;
            case 2: {   //2月平年28天,闰年29天
                    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
                        printf("29\n");
                    else
                        printf("28\n");
                }
        }
    }
    return 0;
}

解析

这个方法用switch语句,如果switch语句不是很懂可以参考我之前写的一篇文章switch语句和while循环

因为有一些月份的天数是相同的比如1 3 5 7 8 1012,因此把那些天数都放在一块

因为在中间是没break的,所以当我们在case12后只需要将天数打印出来就可以了

对于4,6,9,11也是一样的,而2月只需要一个简单的判断也可以解决

例题五

变种水仙花
在这里插入图片描述

答案

方法一

#include <stdio.h>
int main()
{
	for (int i = 10000; i <= 99999; i++)
	{
		int a = (i % 10) * (i / 10), b = (i % 100) * (i / 100), c = (i % 1000) * (i / 1000), d = (i % 10000) *( i / 10000);
		if (i == a + b + c + d)
		{
			printf("%d ", i);
		}
	}
	return 0;

方法二

这个方法二非常妙

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=10000; i<=99999; i++)
    {
        //判断i是否为lily number
        int j = 10;
        int sum = 0;
        int tmp = i;
        for(j=10; j<=10000; j*=10)
        {
            sum += (tmp%j)*(tmp/j);
        }
        if(sum == i)
            printf("%d ", i);
    }
    return 0;
}

解析

由于题目要求输出五位数的所有 Lily Number,所以需要一个i的for循环,
对于j=10是为了后面的求余和除法,sum就是为了把求余和除法的结果全加起来,而tmp是为了接收循环中i的值

对于内部的j循环可能比较难看懂
我们来画一个图就知道了
在这里插入图片描述

注意for循环是先用j=10,经过第一次循环后j=j*10=100,也就是第二次循环的j

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

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

相关文章

golang panic关键词执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时&#xff0c;Go的编译器会将这段…

uniapp视频倍速播放插件,uniapp视频试看插件——sunny-video使用文档

sunny-video视频倍速播放器 组件名&#xff1a;sunny-video 效果图 img1img2img3img4 平台差异说明 目前已应用到APP&#xff08;安卓、iOS&#xff09;、微信&#xff08;小程序、H5&#xff09;其它平台未测试 安装方式 本组件符合easycom规范&#xff0c;HBuilderX 2.5…

JoyT的科研之旅第一周——科研工具学习及论文阅读收获

CiteSpace概述 CiteSpace 是一个用于可视化和分析科学文献的工具&#xff0c;它专门针对研究者进行文献回顾和趋势分析。CiteSpace 的核心功能是创建文献引用网络&#xff0c;这些网络揭示了研究领域内各个文献之间的相互关系。使用 CiteSpace 可以为论文研究做出贡献的几种方…

【迅搜03】全文检索、文档、倒排索引与分词

全文检索、文档、倒排索引与分词 今天还是概念性的内容&#xff0c;但是这些概念却是整个搜索引擎中最重要的概念。可以说&#xff0c;所有的搜索引擎就是实现了类似的概念才能称之为搜索引擎。而且今天的内容其实都是相关联的&#xff0c;所以不要以为标题上有四个名词就感觉好…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

LeetCode Hot100 102.二叉树的层序遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(七)

分页查询、删除和修改菜品 1. 菜品分页查询1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码开发1.2.1 设计DTO类1.2.2 设计VO类1.2.3 Controller层1.2.4 Service层接口1.2.5 Service层实现类1.2.6 Mapper层 1.3 功能测试1.3.2 前后端联调测试 2. 删除菜品2.1 需求分析…

局域网协议:DNS(Domain Name System,域名系统)详解

文章目录 什么是DNS&#xff1f;DNS的重要性DNS的域名解析过程递归查询迭代查询 DNS解析失败怎么办&#xff1f;为什么DNS需要递归服务器&#xff1f;DNS为什么用UDP&#xff1f;推荐阅读 什么是DNS&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系统&#…

【Unity3D】MAX聚合广告SDK——Pangle广告接入

Pangle, App Monetization Simplified 注册 登录 创建应用 创建广告单元 将其应用ID和广告ID关联到MAX广告。 下载Pangle Unity Plugin包&#xff0c;新建一个空工程&#xff08;很重要&#xff09; Unity版本2019.4.0f1 gradle plugin 4.2.0 gradle版本6.7.1 build_tools 34.…

问题汇总20231124

文章目录 1.练习题错题笔记&#xff1a;2. 串口配置中的无硬件控制流是什么3. 硬件控制流是如何管理数据流的&#xff1f;4. 串口不显示的原因有哪些&#xff1f;5. 中断服务函数中为什么一定要清除中断标志位&#xff1f;6. 中断标志位是什么时候设置的&#xff1f;7. BSRR8. …

探索优雅的处理 JavaScript 类数组对象的技巧

一. 引言 在 JavaScript 编程中&#xff0c;我们经常遇到类数组对象&#xff0c;它们拥有类似数组的结构和行为&#xff0c;但却不具备真正的数组方法和属性。常见的类数组对象包括 DOM 集合、函数的 arguments 对象和字符串等。如果我们想对这些类数组对象进行操作和处理&…

使用 STM32F7 和 TensorFlow Lite 开发低功耗人脸识别设备

本文旨在介绍如何使用 STM32F7 和 TensorFlow Lite框架开发低功耗的人脸识别设备。首先&#xff0c;我们将简要介绍 STM32F7 的特点和能力。接下来&#xff0c;我们将讨论如何使用 TensorFlow Lite 在 STM32F7 上实现人脸识别算法。然后&#xff0c;我们将重点关注如何优化系统…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)

套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型&#xff1a;1.1.2接口设计&#xff1a;1.1.3数据库设计&#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …

元宇宙现已开放!

在 2023 年 11 月 3 日 The Sandbox 首个全球创作者日上&#xff0c;The Sandbox 联合创始人 Arthur Madrid 和 Sebastien Borget 宣布元宇宙已开放&#xff0c;已创作完整体验的 LAND 持有者可以自行将体验发布至 The Sandbox 地图上。 精选速览 LAND 持有者&#xff1a;如果…

实验室信息管理系统源码,LIS系统源码,lis源码

医学检验(LIS)管理系统源码&#xff0c;云LIS系统全套商业源码 随着全自动生化分析仪、全自动免疫分析仪和全自动血球计数器等仪器的使用&#xff0c;检验科的大多数项目实现了全自动化分析。全自动化分析引入后&#xff0c;组合化验增多&#xff0c;更好的满足了临床需要&…

Android Frameworks 开发总结之七

1.修改android 系统/system/下面文件时权限不够问题 下面提到的方式目前在Bobcat的userdebug image上测试可行&#xff0c;还没有在user上测试过. 修改前: leifleif:~$ adb root restarting adbd as root leifleif:~$ adb disable-verity verity is already disabled using …

集「才华」与「美貌」于一身的原型设计利器—摹客RP

文章目录 画原型做设计&#xff0c;用摹客RP就够了 初遇摹客再遇摹客RP摹客RP简介与注册摹客RP的突出亮点1️⃣拥有海量矢量图标&#xff0c;满足各种设计场景2️⃣打造高扩展性组件&#xff0c;打破传统组件编辑模式3️⃣海量摹客RP模板例子随意挑选4️⃣实现多人实时协同&…

【数据结构】什么是栈?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;栈的定义 &#x1f4cc;元素进栈出栈的顺序 &#x1f4cc;栈的抽象数据类型 &#x1f4cc;栈的顺序存储结构 &#x1f4cc;栈的链式存储结构 链栈的进…

micro_ros需要用到的hardware

我没有那么长的线啊&#xff0c;所以就用一个4块5的usb转串口看看 没有那么高档的开发板&#xff0c;就用主流的STM32F103C8T6试试看 这应该就是个仿真器了&#xff0c;一个字不认得都能够看的出来吧

《尚品甄选》:后台系统——权限管理之角色管理(debug一遍)

文章目录 一、权限管理介绍二、表结构的设计三、查询角色四、添加角色五、修改角色六、删除角色 一、权限管理介绍 在后台管理系统中&#xff0c;权限管理是指为了保证系统操作的安全性和可控性&#xff0c;对用户的操作权限进行限制和管理。简单的来说就是某一个用户可以使用…