0614,表达式,语句

news2024/11/24 16:09:58

题目一:

许多简单的交互式程序都是基于菜单的:它们向用户显示可供选择的命令列表;一旦用户选择了某条命令,程序就执行相应的操作,然后提示用户输入下一条命令;这个过程一直会持续到用户选择 "退出" 或 "停止" 命令。

这类程序的核心显然是循环。循环内将有语句提示用户输入命令,读命令,然后确定执行的操作

for (; ;) {
    提示用户输入命令;
    读入命令;
    执行命令;
}

执行命令将用到 switch 语句 (或者级联式 if 语句):

for (; ;) {
    提示用户输入命令;
    读入命令;
    switch (命令) {
        case 命令1: 执行操作; break;
        case 命令2: 执行操作; break;
        ...
        case 命令n: 执行操作; break;
        default: 显示错误信息; break;
    }
}

现在请开发一个记账程序。程序将为用户提供选择菜单:清空账户余额,往账户上存钱,从账户上取钱,显示当前余额,退出程序。选择项分别用整数 0、1、2、3 和 4 表示。程序的会话类似这样:

*** checkbook-balancing program ***
Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit

Enter command: 1
Enter amount of credit: 1000.0
Enter command: 2
Enter amount of debit: 100.0
Enter command: 3
Current balance: $900.00
Enter command: 9
Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit

Enter command: 0
Enter command: 3
Current balance: $0.00
Enter command: 4
代码一/解答:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int command=0; float credit = 0.0f; float add_or_del;
	printf("*** checkbook-balancing program ***\nCommands: 0 = clear, 1 = credit, 2 = debit, 3 = balance, 4 = exit\n\n");
	
	for (;command!=4;) {
		printf("Enter command: ");
		scanf("%d", &command);
		switch (command)
		{
		case 0: 
		{
			credit =0.0;
			break;
		}
		case 1:
		{
			printf("Enter amount of credit: ");
			scanf("%f", &add_or_del);
			credit += add_or_del;
			break;
		}
		case 2:
		{
			printf("Enter amount of debit: ");
			scanf("%f", &add_or_del);
			credit -= add_or_del;
			break;
		}
		case 3: 
		{
			printf("Current balance: $%.2f\n",credit);
			break;
		}
		default:
		{
			printf("Commands: 0 = clear, 1 = credit, 2 = debit, 3 = balance, 4 = exit\n\n");
			break;
		}
		case 4:break;
		}
	}

	return 0;
}
答案:

 

发现一个蛮好玩的事情,1.2的时候,不知道怎么回事

exit(0);是老师退出循环的语句,for循环里面就没有放任何表达式

其他就是,我的长的丑哭死

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


int main(void) {
	printf("*** checkbook-balancing program ***\n");
	printf("Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit\n\n");
	
	double balance = 0.0;
	double amount = 0.0;

	for (;;) {
		int cmd;
		printf("Enter command: ");
		scanf("%d", &cmd);

		switch (cmd) {
		case 0:
			balance = 0;
			break;
		case 1:
			printf("Enter amount of credit: ");
			scanf("%lf", &amount);
			balance += amount;
			break;
		case 2:
			printf("Enter amount of debit: ");
			scanf("%lf", &amount);
			balance -= amount;
			break;
		case 3:
			printf("Current balance: $%.2lf\n", balance);
			break;
		case 4:
			exit(0);
		default:
			printf("Commands: 0=clear, 1=credit, 2=debit, 3=balance, 4=exit\n\n");
			break;
		}
	}
	return 0;
}

题目二:

(1) 给你一个 非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

输入:nums = [1,4,2,1,2]
输出:4

(2) 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按任意顺序返回答案.

输入:nums = [1,2,1,3,2,5]
输出:[3, 5]
解释:[5, 3] 也是有效的答案
代码二/解答:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE(a) (sizeof(a)/sizeof(a[0]))

int main(void) {
	//ONE SINGLE_DOG
	int nums[] = { 1,4,2,1,2 };
	int single_dog = 0; int lenght = 0;

	for (lenght = 0; lenght < SIZE(nums); lenght++) {
		single_dog = single_dog ^ nums[lenght];
	}

	printf("nums=[1,4,2,1,2]\nsingle_dog is %d\n", single_dog);


	//two single_dog
	int nums2[] = {1, 2, 1, 7, 2, 5};
	single_dog = 0; lenght = 0;

	for (lenght = 0; lenght < SIZE(nums2); lenght++) {
		single_dog = single_dog ^ nums2[lenght];
	}
	//printf("%d\n", single_dog);

	//找出single_dog最低有效位
	int lsb = 1; int count=0;
	while ((single_dog & lsb) == 0) {
		lsb <<=1; //single_dog>>=1;
		count++;
	}
	//printf("%d\n", count);

	//分组  -LSB的最低有效位
	int a=0; int b=0; lenght = 0;
	for (lenght = 0; lenght < SIZE(nums2); lenght++) {
		if (nums2[lenght] & lsb) {    
			a ^= nums2[lenght];  //在LSB位上是1   多次异或,除了SINGLE_DOG,其他的都会异或两次!!!妈的他不说
		}
		else {
			b^= nums2[lenght];    //在LSB位上是0
		}
		//nums2[length] & lsb 检查数组中的每个元素在 lsb 位上是1还是0。如果是1,则将其与 a 异或。如果是0,则将其与 b 异或。
	}
	printf("nums = [1,2,1,7,2,5]\ntwo single_dog is %d and %d\n", a,b);

	return 0;
}
答案:

(1)

#include <stdio.h>

int main(void) {
	int nums[] = { 1,2,1,3,2};

	int xor = 0;
	for (int i = 0; i < 5; i++) {
		xor ^= nums[i];
	}
	printf("xor = %d\n", xor);

	return 0;
}

(2) 

老师的找出最低有效位:

int lsb = xor &(-xor);

解释:

  1. -xor 的作用

    • 负号操作符 - 对 xor 进行取反操作(按位取反),并且将结果加 1,这是因为 -xor 在计算机中表示为补码形式,即 ~xor + 1。这个操作的结果是一个整数,其二进制表示仍然是原整数 xor 的最低有效位(LSB)的位置。
    • 这个结果确保了 -xor 保留了 xor 中最低有效位的1,并且将其右边的所有位都置为0,而它左边的所有位都变成了原 xor 的补码形式(即原来的0变成1,1变成0,但不影响最低有效位)。
  2. 按位与操作 &

    • xor & (-xor) 执行按位与操作。在按位与操作中,只有当两个操作数的对应位都为 1 时,结果的对应位才为 1,否则为 0。
  3. 结果 lsb

    • 结果 lsb 是一个整数,其二进制表示只有 xor 中的最低有效位为 1,其余位都为 0。这是因为 -xor 操作使得它只保留了 xor 中最低有效位的信息,其他位上的信息都被置为了 0。

示例:

假设 xor 的值为 0b101010,即十进制的 42。

  • xor = 0b101010 (42)
  • -xor = ~xor + 1 = 0b010110 + 1 = 0b010111 (-42 的补码表示)
  • xor & (-xor) = 0b101010 & 0b010110 = 0b000010 (结果为 2)

在这个示例中,lsb 的值为 2,对应于二进制数 0b000010,它是 xor 中最低有效位的位置。

我的:

int lsb = 1; int count=0;
    while ((single_dog & lsb) == 0) {
        lsb <<=1; //single_dog>>=1;
        count++;
    }

#include <stdio.h>

int main(void) {
	int nums[] = { 1,2,1,3,2,5 };

	int xor = 0;
	for (int i = 0; i < 6; i++) {
		xor ^= nums[i];
	}
	// xor = a ^ b; (xor肯定不等于0, 至少有一位为1, a和b在那一位上的值不一样)
	int lsb = xor &(-xor);

	int a = 0, b = 0;
	for (int i = 0; i < 6; i++) {
		if (nums[i] & lsb) {
			a ^= nums[i];
		} else {
			b ^= nums[i];
		}
	}

	printf("a = %d, b = %d\n", a, b);

	return 0;
}

题目三:

用户输入初始金额,利率和投资年数,程序将打印一张表格。表格将显示输入的利率以及紧随其后 4 个更高利率下的总金额。程序的会话如下:

Enter initial balance: 100
Enter interest rate: 6
Enter number of years: 5

Years    6%     7%     8%     9%    10%
  1    106.00 107.00 108.00 109.00 110.00
  2    112.36 114.49 116.64 118.81 121.00
  3    119.10 122.50 125.97 129.50 133.10
  4    126.25 131.08 136.05 141.16 146.41
  5    133.82 140.26 146.93 153.86 161.05

代码三/解答:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int balance, rate, years;
	printf("Enter initial balance: ");
	scanf("%d", &balance);
	printf("Enter interest rate:");
	scanf("%d", &rate);
	printf("Enter number of years: ");
	scanf("%d", &years);

	int i; int temp_rate = rate;
	double money[5];
	int rate_arr[5];
	printf("\nYears ");
	for (i = 0; i < 5; i++) {
		money[i] = balance;
		rate_arr[i] = temp_rate;
		printf("   %d%%  ", temp_rate++);
		//printf("%d\t", rate_arr[i]);
	}
	printf("\n");

	i = 0;
	for(i = 0; i < years; i++) {
		printf("  %d   ", i + 1);
		int j;
		for (j = 0; j < years; j++) {
			money[j] =money[j]* (1.0 + rate_arr[j]/100.0);
			printf("%-8.2f", money[j]);
		}
		printf("\n");
	}
	return 0;
}

答案:

int main(void) {
	double init_balance;
	printf("Enter initial balance: ");
	scanf("%lf", &init_balance);

	int rate;
	printf("Enter interest rate: ");
	scanf("%d", &rate);

	int years;
	printf("Enter number of years: ");
	scanf("%d", &years);

	double balance[5];

	printf("\nYears   ");
	for (int i = 0; i < 5; i++) {
		printf("%4d%%  ", rate + i);
		balance[i] = init_balance;
	}
	printf("\n");

	for (int i = 1; i <= years; i++) {
		printf("%3d     ", i);
		for (int i = 0; i < 5; i++) {
			balance[i] += balance[i] * ((rate + i) / 100.0);//同时实现利率的递增
			printf("%7.2lf", balance[i]);
		}
		printf("\n");
	}

	return 0;
}

题目四:

写一个随机发牌的程序。用户指定发几张牌,程序打印手牌。程序的会话如下:

Enter number of cards in hand: 5
Your hand: 9c 7d 3c 5d kd
 代码四/解答:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>   
#include <stdbool.h> 
#include <time.h>  
#define SIZE(a) (sizeof(a)/sizeof(a[0]))

//int random_number = min + rand() % (max - min + 1);
int main(void) {
	srand(time(NULL));
	const char rank[] = { '1','2','3','4','5','6','7','8','9','t','j','q','k','a' };
	const char suit[] = { 'd','c','h','s' };
	bool is_hand[13][4] = { false };  //注意不能TRUE

	int num;
	printf("Enter number of cards in hand:");
	scanf("%d", &num);
	printf("Your hand: ");
	int i;
	for (i = 0; i < num;i++) {
		int random_number =rand()%13;
		int random_number2 = rand() % 3;
		if (is_hand[random_number][random_number2] == false) {
			is_hand[random_number][random_number2] = true;
			printf("%c%c  ", rank[random_number], suit[random_number2]);
		}
		else {
			i--;
		}
	}
	printf("\n");
	return 0;
}
/*
写一个随机发牌的程序。用户指定发几张牌,程序打印手牌。程序的会话如下:

Enter number of cards in hand: 5
Your hand: 9c 7d 3c 5d kd
*/
 答案:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>

int main(void) {	
	const char suits[4] = { 's', 'h', 'c', 'd' };
	const char ranks[13] = { '2', '3','4', '5','6','7','8','9','t','j','q','k','a' };
	bool in_hand[4][13] = { false };

	int cards;
	printf("Enter number of cards in hand: ");
	scanf("%d", &cards);
    
	printf("Your hand: ");
	srand(time(NULL));	// 设置随机种子
	while (cards) {
		int i = rand() % 4;
		int j = rand() % 13; // (i, j)
		if (!in_hand[i][j]) {
			in_hand[i][j] = true;
			cards--;
			printf("%c%c ", ranks[j], suits[i]);
		}
	}
	printf("\n");
    
    return 0;
}

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

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

相关文章

SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#

本文所述开发环境&#xff1a;.C#、NET8、Visual Studio2022 1. 在项目中安装SqlSugar 在Visual Studio2022中新建一个 C# 的控制台应用程序&#xff0c;框架选择 .Net8。新建后如下图所示&#xff1a; 然后打开NuGet程序包管理器 搜索 SqlSugarCore 并安装 安装后在解决方案…

微服务开发与实战Day09 - Elasticsearch

一、DSL查询 Elasticsearch提供了DSL&#xff08;Domain Specific Language&#xff09;查询&#xff0c;就是以JSON格式来定义查询条件。类似这样&#xff1a; DSL查询可以分为两大类&#xff1a; 叶子查询&#xff08;Leaf query clauses&#xff09;&#xff1a;一般是在特…

【C++提高编程-06】----C++之STL-函数对象、谓词、仿函数

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

表面声波滤波器——SAW 基本介绍(1)

声表面波特点与应用 声表面波&#xff0c;也称为表面声波&#xff08;surface acoustic wave&#xff09;&#xff0c;是指在弹性体的自由表面上产生并沿着表面或界面传播的各种模式的波&#xff0c;包括瑞利波(Rayleighwave)&#xff0c;勒夫波(Lovewave)等。 具有以下特点:…

快消品经销商需要注意哪些仓库管理细节,才能提效降本

仓库管理是快消品经销商必须重视的环节&#xff0c;只有仓库管理做好了&#xff0c;整体效率才能得到提升&#xff0c;成本才能降低&#xff0c;客户订单更快地交付&#xff0c;而在仓库管理中有很多细节需要经销商注意。 01仓库布局与设计&#xff1a;合理的仓库布局可以极大地…

13.泛型、trait和生命周期(下)

目录 6. 生命周期与引用有效性6.1 生命周期引入6.2 得到长度最大的String值6.3 生命周期标注语法1&#xff09;说明2&#xff09;普通标注示例3&#xff09;函数参数中的生命周期标注 6.4 深入理解生命周期6.5 结构体定义中的生命周期标注6.6 生命周期省略 6.7 方法定义中的生命…

AI大模型技术揭秘-参数,Token,上下文和温度

深入理解 AI 大模型:参数、Token、上下文窗口、上下文长度和温度 人工智能技术的飞速发展使AI大模型大放异彩,其中涉及的“参数”、“Token”、“上下文窗口”、“上下文长度”及“温度”等专业术语备受瞩目。这些术语背后究竟蕴含何意?它们如何影响AI大模型的性能?一起揭开…

[SWPUCTF 2022 新生赛]善哉善哉(隐写,新佛曰,MD5)

题目&#xff1a; 我们看到&#xff1a;题目就是一张图片便联想到隐写术。、 首先查看图片的详细信息我们看到 又看到有关MD5加密。 我们利用小鲨鱼(Stegsolve)破解得到&#xff1a; 小鲨鱼下载可参考&#xff1a;CSDN小鲨鱼下载安装配置 最后面有一段摩斯密码&#xff0c;破…

Explain Python Machine Learning Models with SHAP Library

Explain Python Machine Learning Models with SHAP Library – Minimatech &#xff08;能翻墙直接看原文&#xff09; Explain Python Machine Learning Models with SHAP Library 11 September 2021Muhammad FawiMachine Learning Using SHapley Additive exPlainations …

Elixir学习笔记——输入输出和文件系统

本章介绍输入/输出机制、文件系统相关任务以及相关模块&#xff08;如 IO、File 和 Path&#xff09;。IO 系统提供了一个很好的机会来阐明 Elixir 和 Erlang VM 的一些思维模式和新奇思想。 输入输出模块 输入输出模块是 Elixir 中读写标准输入/输出 (:stdio)、标准错误 (:s…

HTML表格的跨行与跨列:《红楼梦》人物与小学课表示例

在HTML中&#xff0c;表格不仅可以按常规行和列排列数据&#xff0c;还可以通过跨行&#xff08;rowspan&#xff09;和跨列&#xff08;colspan&#xff09;属性来合并单元格&#xff0c;以适应更复杂的数据展示需求。以下是跨行与跨列属性的介绍&#xff0c;以及两个示例&…

centos环境上:k8s 简单安装教程

本次演示安装3节点k8s环境&#xff0c;无需多言&#xff0c;直接上操作步骤&#xff1a; 1、环境准备 k8s部署前&#xff0c;首先需要准备好环境&#xff0c;除了1.4 步骤&#xff0c;其他步骤在所有&#xff08;3个&#xff09;节点上都要执行&#xff1a; 1.1 关闭防火墙 s…

移动硬盘数据恢复方法哪个好?六个硬盘恢复,新手也能用!

移动硬盘数据恢复方法哪个好&#xff1f;移动硬盘&#xff0c;作为我们存储重要数据的常用设备&#xff0c;一旦里面的视频、文档、音频等资料突然消失&#xff0c;确实会令人烦恼和担忧。然而&#xff0c;因为数据丢失的原因可能多种多样&#xff0c;因此恢复方法也会有所不同…

ABBYY Finereader 15软件下载及安装教程

ABBYY FineReader 是一款功能强大的 OCR&#xff08;Optical Character Recognition&#xff09;软件&#xff0c;可以将扫描的文档转换为可编辑的文本文件。它不仅可以识别文本&#xff0c;还可以识别表格、图像和布局&#xff0c;使得文档的转换更加准确和方便。 安 装 包 获…

【计算机毕业设计】基于Springboot的车辆管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

基于51单片机的烟雾报警器设计-ADC0809

一.硬件方案 火灾报警器采用51单片机为核心控制器&#xff0c;利用气体传感器MQ-2、ADC0809模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片&#xff0c;当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号&#xff0c;以…

使用python绘制三维曲线图

使用python绘制三维曲线图 三维曲线图定义特点 效果代码 三维曲线图 三维曲线图&#xff08;3D曲线图&#xff09;是一种用于可视化三维数据的图表&#xff0c;它展示了数据在三个维度&#xff08;X、Y、Z&#xff09;上的变化。 定义 三维曲线图通过在三维坐标系中绘制曲线…

Arduino入门2——常用函数及用法

Arduino入门2——串口驱动函数及用法 IO串口 上期&#xff0c;我们简单的认识了一下Arduino&#xff0c;浅浅的入了个门&#xff0c;这一期我们介绍以下Arduino串口常用的函数及用法 IO 常用串口库函数如下&#xff1a; 函数名用法及解析pinMode()用于IO口初始化digitalWrite…

新政出台,房市热闹起来,卖房容易了,上海二手房东多卖360万

在517新政之后&#xff0c;上海的中介和房地产商售楼部都表示&#xff0c;如今咨询买房的人士大幅增长&#xff0c;而二手房东也迅速调涨价格&#xff0c;某二手房东表示当天调价&#xff0c;当天就成功卖出&#xff0c;卖出价格比之前增加了360万。 据悉该房东其实早已有意卖房…

数据结构01 栈及其相关问题讲解【C++实现】

栈是一种线性数据结构&#xff0c;栈的特征是数据的插入和删除只能通过一端来实现&#xff0c;这一端称为“栈顶”&#xff0c;相应的另一端称为“栈底”。 栈及其特点 用一个简单的例子来说&#xff0c;栈就像一个放乒乓球的圆筒&#xff0c;底部是封住的&#xff0c;如果你想…