0613,基本数据类型,表达式

题目1,选做:

假设 int n = 0xCAFE; 请用表达式完成下面操作 (拓展题:不要求每个同学都写)

(a) 测试最后 4 位中是不是最少有 3 位为 1.

(b) 逆转字节序(i.e.,使 n = 0xFECA)

(c) 旋转 4 位 (i.e., 使 n = 0xECAF)

答案代码/补:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

bool is_three(int a);
int feca(int a);
int ecaf(int a);

int main(void) {
	int n = 0xCAFE;
	printf("%.4x\n", n);

	if (is_three(n)) {
		printf("yes\n");
	}
	else {
		printf("nono\n");
	}

	printf("%.4x\n", feca(n));
	printf("%.4x\n", ecaf(n));
	return 0;
}

bool is_three(int a) {
	int mask = a & 0xf; //只看后四位
	//printf("%.4x\n", mask);
	if (mask == 0x7 || mask == 0xb || mask > 0xc) {
		return true;
	}
	else {
		return false;
	}
}


int feca(int a) {
	//0xCAFE
	int temp1 = a & 0xff;     //temp1=0x00fe
	int temp2 = a & 0xff00;   //temp2=0xca00
	temp1 <<= 8;              //temp1=0xfe00
	temp2 >>= 8;              //temp2=0x00ca
	return temp1 | temp2;
}

int ecaf(int a) {
	//0xCAFE
	int temp1 = a & 0xf;     //temp1=0x000e
	int temp2 = a & 0xfff0;   //temp2=0xcaf0
	temp1 <<= 12;              //temp1=0xe000
	temp2 >>= 4;              //temp2=0x0caf
	return temp1 | temp2;
}
参考答案:

(a)

&

int x = n & 0xF;
x == 0x7 || x == 0xB || x >= 0xD;
1111, 1110, 1101, 1011, 0111
F     E     D     B     7

(b)

(n & 0xFF) << 8;    0xFE00
n >> 8;             0x00CA
((n & 0xFF) << 8) | (n >> 8);

(c)

(n & 0xF) << 12;   0xE000
(n >> 4);		  0x0CAF
((n & 0xF) << 12) | (n >> 4);

题目二,必做:

(a) 目前使用的格里高利历闰年的规则如下:

  1. 公元年分非4的倍数,为平年。

  2. 公元年分为4的倍数但非100的倍数,为闰年。

  3. 公元年分为100的倍数但非400的倍数,为平年。

  4. 公元年分为400的倍数为闰年。

请用一个表达式判断某一年是否为闰年。

(b) 输入某一天的年月日,输出下一天的年月日。

(c) 输入某两天的年月日,输出这两天的相距多少天(不考虑公元前,且第一个日期比第二个日期要早)。

(d) 已知1970年1月1日是星期四,输入之后的某一天的年月日,判断它是星期几?

答案代码:个人
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
/*
(d) 已知1970年1月1日是星期四,输入之后的某一天的年月日,判断它是星期几?*/

bool is_leap(int t_year);
void tomorrow(int t_year, int t_mon, int t_day,bool judge);
int interval1( int t_mon, int t_day, bool judge);
int interval2( int t_mon, int t_day, bool judge);
int interval3(int t_year,int s_year);

int main(void) {
	
	int t_year, t_mon, t_day;
	int s_year, s_mon, s_day;
	printf("第一个问题:insert date\n");
	scanf("%d%d%d", &t_year,&t_mon,&t_day);

	bool judge = is_leap(t_year);
	if (judge==true) {
		printf("%d is leap year.\n", t_year);
	}
	else {
		printf("%d is not leap year.\n", t_year);
	}
	tomorrow(t_year, t_mon, t_day, judge);
	

	printf("第二个问题:insert first date\n");
	scanf("%d%d%d", &t_year, &t_mon, &t_day);
	printf("insert second date\n");
	scanf("%d%d%d", &s_year, &s_mon, &s_day);

	judge = is_leap(t_year);
	bool judge1 = is_leap(s_year);
	int days01 = interval1( t_mon, t_day, judge);
	int days02 = interval2(s_mon, s_day, judge1);
	int days03 = interval3(t_year,s_year);
	int result_days = days01 + days02 + days03;
	printf("%d\n", days01);
	printf("%d\n", days02);
	printf("%d\n", days03);
	printf("%d-%d-%d between %d-%d-%d has %d\n", t_year, t_mon, t_day, s_year, s_mon, s_day, result_days);


	printf("第三个问题:insert one date affter 1970,01,01\n");
	scanf("%d%d%d", &t_year, &t_mon, &t_day);

	judge = is_leap(1970);
	judge1 = is_leap(t_year);
	days01 = interval1(1, 1, judge);
	days02 = interval2(t_mon, t_day, judge1);
	days03 = interval3(1970, t_year);
	result_days = days01 + days02 + days03;
	printf("%d\n", days01);
	printf("%d\n", days02);
	printf("%d\n", days03);
	printf("1970-1-1 between %d-%d-%d has %d\n",  t_year, t_mon, t_day, result_days);
	result_days %= 7;
	switch (result_days) {
	case 0:printf("周4\n"); break;
	case 1:printf("周5\n"); break;
	case 2:printf("周6\n"); break;
	case 3:printf("周7\n"); break;
	case 4:printf("周1\n"); break;
	case 5:printf("周2\n"); break;
	case 6:printf("周3\n"); break;
	}

	return 0;
}

//是否是闰年
bool is_leap(int t_year) {
	bool judge = false;
	if ((t_year % 4 == 0 && t_year % 100 != 0) || (t_year % 400 == 0)) {
		//printf("%d is leap year.\n", t_year);
		judge = true;
	}
	//else {
	//	  printf("%d is not leap year.\n", t_year);
	//}

	return judge;
}

//明天
void tomorrow(int t_year, int t_mon, int t_day, bool judge) {

	int aff_year=t_year, aff_mon=t_mon, aff_day=t_day;

	int month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (judge == true) {
		month[1] = 29;
	}

	if (month[t_mon-1] == t_day) {
		aff_day = 1;
		if (t_mon == 12) {
			aff_year =t_year+ 1;
			aff_mon = 1;
		}
		else {
			aff_mon +=1;
		}
	}
	else {
		aff_year = t_year;
		aff_mon = t_mon;
		aff_day += 1;
	}

	printf("tomorrow is %d %d %d\n\n", aff_year, aff_mon, aff_day);
}

//第一年剩余时间
int interval1( int t_mon, int t_day, bool judge) {

	int days = 0;

	int month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (judge == true) {
		month[1] = 29;
	}
	int i = 0; 
	for (i = 0; i < t_mon-1; i++) {
		days += month[i];
	}
	if (judge==true) {
		days = 366 - (days + t_day);
	}
	else {
		days = 365 - (days + t_day);
	}

	return days;
}

//最后一年度过时间
int interval2(int t_mon, int t_day, bool judge) {
	int days = 0;

	int month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (judge == true) {
		month[1] = 29;
	}
	int i = 0;
	for (i = 0; i < t_mon - 1; i++) {
		days += month[i];
	}
	days += t_day;

	return days;
}

//中间年份时间
int interval3(int t_year, int s_year) {

	int days03=0;
	int i = t_year + 1;
	
	for (i = t_year + 1; i <= s_year-1; i++) {
		bool judge = is_leap(i);
		if (judge == true) {
			days03 += 366;
		}
		else {
			days03 += 365;
		}
	}

	return days03;
}

参考答案: 

(a)

bool isLeapYear(int year) {
	return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}

(b)

int daysOfMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

void setDaysOfFeb(int year) {
    if (isLeapYear(year)) {
        daysOfMonth[2] = 29;
    } else {
        daysOfMonth[2] = 28;
    }
}

int main(void) {
	int year, month, day;
	scanf("%d%d%d", &year, &month, &day);

	day++;
	setDaysOfFeb(year);
    
	if (day > daysOfMonth[month]) {
		day = 1;
		month++;
	}
	if (month > 12) {
		month = 1;
		year++;
	}

	printf("%4d/%.2d/%2d\n", year, month, day);

	return 0;
}

(c)

int daysOfMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int  distance(int year1, int month1, int day1, int year2, int month2, int day2) {
	int days = 0;
    // 计算year1还剩多少天
    setDaysOfFeb(year1);
    
	days += daysOfMonth[month1] - day1;
	for (int i = month1 + 1; i <= 12; i++) {
		days += daysOfMonth[i];
	}

	// 计算中间年份的天数
	for (int i = year1 + 1; i < year2; i++) {
		days += 365;
		if (isLeapYear(i)) {
			days++;
		}
	}

	// 计算year2过了多少天
    setDaysOfFeb(year2);
    
	for (int i = 1; i < month2; i++) {
		days += daysOfMonth[i];
	}
	days += day2;

	// 如果 year1 == year2, 那么多算了一整年
	if (year1 == year2) {
		days -= 365;
		if (isLeapYear(year1)) {
			days--;
		}
	}

	return days;
}

(d)

int weekday(int year, int month, int day) {
	int days = distance(1970, 1, 1, year, month, day);
	return (4 + days) % 7; 
}

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

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

相关文章

Elasticsearch 认证模拟题 - 18

一、题目 为一个索引&#xff0c;按要求设置以下 dynamic Mapping 一切 text 类型的字段&#xff0c;类型全部映射成 keyword一切以 int_ 开头命名的字段&#xff0c;类型都设置成 integer 1.1 考点 字段的动态映射 1.2 答案 # 创建索引和索引模板 PUT my_index {"m…

关于Linux ping 不通外网

网关为第三段为137那么子网ip第三段必须为137且IPaddr必须为137 将主机虚拟适配器连接到此网络必须勾上&#xff0c;不然vmnet适配器在windows将找不到 ping www.baidu.com不行的话试着勾上桥接模式应该是不行在勾上取消勾上桥接模式最后勾上nat模式

【Pr剪辑】工具栏的认识

目录 1.选择工具&#xff08;快捷键V&#xff09;1.1 选择1.2 移动素材1.3 框选1.4缩放1.5复制 2.钢笔工具&#xff08;快捷键P&#xff09;3.文字工具&#xff08;T&#xff09;4.剃刀&#xff08;C &#xff09;5.比例拉伸工具&#xff08;R&#xff09;6.波纹编辑工具&#…

从零开始开发知识付费APP:在线教育系统源码详解

今天&#xff0c;小编将从零开始&#xff0c;详细讲解在线教育系统的源码开发过程&#xff0c;帮助你打造一款功能完善的知识付费APP。 一、需求分析与规划 1.1 市场调研 在开始开发之前&#xff0c;首先要进行市场调研&#xff0c;了解当前市场上的主要竞争对手和用户需求。…

易保全网络赋强公证系统,“公证赋强+科技赋能”双重增信

网络赋强公证系统是一种创新的法律服务模式&#xff0c;旨在通过线上方式赋予债权文书强制执行效力。具体来说&#xff0c;该系统结合了互联网技术与公证业务&#xff0c;允许公证机构根据当事人的申请&#xff0c;利用互联网公证技术手段对互联网上的债权文书进行公证&#xf…

【SpringBoot系列】覆盖重写第三方Jar包中类

要覆盖或重写一个第三方JAR包中的类&#xff0c;你可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用类路径优先级 Java的类加载机制会优先加载类路径&#xff08;classpath&#xff09;中最先找到的类。因此&#xff0c;如果你在自己的项目中定义了一个与第三方JAR包…

ESP32-C6 闪耀 Apple WWDC24|使用 Embedded Swift 构建 Matter 设备

WWDC 是苹果公司的年度全球开发者大会&#xff0c;旨在向全球开发者展示最新技术和工具。在今年的 WWDC 2024 上&#xff0c;苹果宣布将 Swift 语言扩展至嵌入式设备领域。大会技术讲座中&#xff0c;乐鑫 ESP32-C6 也现身官方 Demo “Go Small with Embedded Swift​​​​​​…

【译】SQLAlchemy文档:SQLAlchemy 统一教程

SQLAlchemy Unified Tutorial SQLAlchemy 是 Python SQL工具包和ORM&#xff0c;它为应用程序开发人员提供了 SQL 的全部功能和灵活性。它提供了一整套企业级持久性模式&#xff0c;专为高效和高性能的数据库访问而设计。 SQLAlchemy呈现为两层API&#xff1a;Core和ORM&…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现&#xff0c;如营销手段单一、难以应对市场竞争等。因此&#xff0c;许多卖家为了提升店铺权重和排名&#xff0c;选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

使用CSS常见问题解答卡片

常见问题解答卡片 效果展示 CSS 知识点 CSS 选择器的使用background 渐变背景色运用CSS 综合知识运用 页面整体布局 <div class"container"><h1>经常问的问题</h1><!-- 这里只是展示一个项目 --><div class"tab"><in…

Apollo9.0 PNC源码学习之Control模块(三)—— 基于双环PID的纵向控制

本文将对Apollo的纵向控制器进行讲解&#xff0c;看完本文&#xff0c;你将会对百度Apollo的纵向控制有更深的理解 前面文章&#xff1a; Apollo9.0 PNC源码学习之Control模块&#xff08;一&#xff09; Apollo9.0 PNC源码学习之Control模块&#xff08;二&#xff09; 1 纵向…

如何用Vue3和p5.js打造一个令人惊叹的3D球体在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 p5.js 创建交互式 3D 图形 应用场景介绍 p5.js 是一个用于创建交互式图形和动画的 JavaScript 库。它被广泛用于教育、艺术和设计领域&#xff0c;让开发者可以轻松创建具有吸引力的可视化效果。 代码基…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

【FPGA】静态分析与时序约束(持续更新

Reference&#xff1a; V2静态时序分析与时序约束文档 入门 无时序约束场景中&#xff0c;普通图像显示不清晰&#xff0c;千兆网口接收Ethernet package 数据不正常&#xff0c;红外场景中图像显示不正常 Definition&#xff1a; 我们提出一些特定的时序要求&#xff08;或…

B端系统:面向用户or面向客户?有啥区别?当二者起冲突呢?

在B端系统中用户和客户大部分情况下是分离的&#xff0c;不像C端&#xff0c;用户即客户。那么用户和客户到底怎么区分&#xff0c;做B端设计到底听谁的呢&#xff1f;大美B端工场为大家详细解读下。 一、B端产品的用户和客户 在B端产品中&#xff0c;用户和客户是两个不同的…

JVM 垃圾回收器

一、垃圾回收器类型 如果说垃圾收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体 实现。下图展示了7种作用于不同分代的收集器&#xff0c;其中用于回收新生代的收集器 包括Serial、PraNew、Parallel Scavenge&#xff0c;回收老年代的收集器包括Seri…

计算机网络学习3

文章目录 以太网的MAC帧格式虚拟局域网VLAN概述虚拟局域网VLAN的实现机制以太网的发展802.11无线局域网的组成无线局域网的物理层无线局域网的数据链路层---使用CSMA/CD协议802.11无线局域网的MAC帧 网络层网络层概述网际协议IP和4.2.1异构网络互联IPv4地址及其编址方法概述IPv…

优思学院|用ChatGPT快速完成数据分析图表【柏累托图法】

数据分析是很多行业的人不可少的一部分&#xff0c;尤其是质量工程师更是日常的工作。然而&#xff0c;随着科技的进步&#xff0c;人工智能&#xff08;AI&#xff09;将逐渐承担起数据计算的工作&#xff0c;这意味着未来的质量工程师需要具备的不仅仅是计算能力&#xff0c;…

CentOS7.9 安装jdk17

切换到目录 /usr/local/src cd /usr/local/src下载压缩包 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz解压 tar -zxvf jdk-17_linux-x64_bin.tar.gz添加环境变量 vim /etc/profile重加载环境变量 export JAVA_HOME/usr/local/usr/jdk-1…

TLE9879的基于Arduino调试板SWD刷写接口

官方的Arduino评估板&#xff0c;如下图所示&#xff1a; 如果你有官方的调试器&#xff0c;应该不用关注本文章&#xff0c;如下图连接就是&#xff1a; 如果&#xff0c;您和博主一样需要自己飞线的话&#xff0c;如下图所示&#xff1a;PCB的名称在右边整理&#xff0c;SWD的…