0614,表达式,语句

题目一:

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

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

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=exitEnter 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=exitEnter 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_DOGint 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_dogint 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 };  //注意不能TRUEint 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.mzph.cn/bicheng/27677.shtml

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

相关文章

关于如何使用不到 ¥800 实现电动升降桌自由(双电机)

前言 在房子装修之前&#xff0c;就想着拥有一个书房。但是如果书房里面没有书桌&#xff0c;那不扯淡么&#xff1f;之后想着天天坐这么久&#xff0c;腰部颈部经常不适&#xff0c;所以又开始纠结买哪款人体工学椅子比较合适。 说时迟那时快。当天偶然刷小红书的时候&#x…

微信小游戏插件申请,微信小程序插件管理

微信小游戏的插件申请与小程序不一样&#xff0c;官方没有提供一个统一的管理入口进行申请插件&#xff0c;以及查看插件&#xff0c;没有小程序方便的&#xff1b; 小程序申请查看插件入口如下图所示&#xff1a; 小游戏的插件可以通过以下的方式进行申请&#xff1a; 如下…

建筑八大员证报名一寸彩色照片要求及手机自拍方法解读

在建筑行业&#xff0c;八大员证的持有者是广受尊重的专业人士。然而&#xff0c;要成为一名合格的八大员&#xff0c;首先必须通过资格审核和报名流程。其中重要的一步就是提交一寸彩色照片&#xff0c;以确保个人信息准确无误。那么&#xff0c;你是否清楚报名时照片的要求以…

Linux笔记--权限与属性命令、查找指令、压缩命令、网络指令

权限 使用ls指令查看详细信息时 rwx分别代表读写执行三种权限&#xff0c;book代表book用户&#xff0c;对于权限来说三种权限分别代表二进制一位&#xff0c;即同时拥有rwx就是111&#xff0c;此时这个文件权限为775 改变权限为rw-rwxr-w指令 book100ask:~/Desktop$ chmod …

Vue I18n国际化插件

Vue I18n国际化插件 安装目录结构及文件内容./locales/lang/zh.js./locales/lang/en.js./locales/index.js main.js引入页面具体使用及语言切换&#xff08;Vue3&#xff09;刷新保存原语言&#xff0c;App.vue添加路由守卫注意点 中文文档&#xff1a; https://kazupon.githu…

sprintboot容器功能

容器 容器功能Spring注入组件的注解Component&#xff0c;Controller&#xff0c;Service&#xff0c;Repository案例演示 Configuration应用实例传统方式使用Configuration 注意事项和细节 Import应用实例 ConditionalConditional介绍应用实例 ImportResource应用实例 配置绑定…

【微信小程序开发实战项目】——如何去申请腾讯地图账号和在微信公众平台,配置request路径和添加地图插件

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【算法-力扣】73.矩阵置零,一文彻底搞懂!

目录 一、题目描述 二、解题思路 三、参考答案 一、题目描述 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 进阶&#xff1a; 一个直观的解决方案是使用 O(mn) 的额外空间&#x…

【机器学习】机器学习与物流科技在智能配送中的融合应用与性能优化新探索

文章目录 引言机器学习与物流科技的基本概念机器学习概述监督学习无监督学习强化学习 物流科技概述路径优化车辆调度需求预测 机器学习与物流科技的融合应用实时物流数据分析数据预处理特征工程 路径优化与优化模型训练模型评估 车辆调度与优化深度学习应用 需求预测与优化强化…

远程连接路由器:方法大全与优缺点解析

远程连接路由器的方式主要有以下几种&#xff0c;以下是每种方式的详细说明及其优缺点&#xff1a; 使用Web浏览器登录 方法&#xff1a;通过配置路由器的远程管理功能&#xff0c;允许用户通过互联网浏览器访问路由器的管理界面。用户只需输入路由器的公网IP地址或域名&#…

Flutter系列:关于ensureInitialized()

Flutter系列 关于ensureInitialized() - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28…

【数据结构】遍历二叉树(递归思想)-->赋源码

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 二叉树遍历是指按照一定的顺序访问二叉树中的每个节点&#xff0c;使得每个节点恰好被访问一次。遍历是二叉树上最重要的运算之一&#xff0c;是二叉树上进行其他运算的基础。 一、二叉树遍历概念 二叉树遍历分类 …

C#.Net筑基-类型系统①基础

C#.Net的BCL提供了丰富的类型&#xff0c;最基础的是值类型、引用类型&#xff0c;而他们的共同&#xff08;隐私&#xff09;祖先是 System.Object&#xff08;万物之源&#xff09;&#xff0c;所以任何类型都可以转换为Object。 01、数据类型汇总 C#.NET 类型结构总结如下图…

项目采购管理

目录 1.概述 2.三个子过程 2.1.规划采购管理 2.2.实施采购 2.3.控制采购 2.4.归属过程组 3.应用场景 3.1.十个应用场景 3.2.软件开发项目 3.2.1. 需求识别和分析 3.2.2. 制定采购计划 3.2.3. 发布采购请求 3.2.4. 供应商评估与选择 3.2.5. 合同签订 3.2.6. 采购…

Unity动态添加聊天文本

1.创建一个滚动视图 2.调整滚动视图的位置并删掉这个 3.创建一个输入框和一个按钮 这里插一句一定要给content添加这个组件并设置单元格大小 4创建一个脚本并编写下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using Unity.VisualScrip…

YouTube583美元账户做到一千多万美元,125万粉的顶级交易员

油管125万粉丝的Ross Cameron,一位把583美元账户做到一千多万美元。他说他曾经也是像无头苍蝇一样交易,最终凄惨爆仓,也就是在爆仓之后,他终于开始沉下心来研究交易策略,终于终于,他有一天找到了交易模型,并用它执行至今。 Ross Cameron无疑是最成功的日内交易员之一,而…

The Google File System 论文阅读

2003年USENIX&#xff0c;出自谷歌&#xff0c;开启分布式大数据时代的三篇论文之一 总体设计 假设 硬件损坏是常态&#xff0c;而非意外。例如磁盘损坏&#xff0c;断电&#xff0c;断网。所以持续的监控&#xff0c;错误诊断&#xff0c;错误恢复要纳入系统设计之中文件很…

【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言 在私域知识问答和企业知识工程领域&#xff0c;结合Retrieval-Augmented Generation&#xff08;RAG&#xff09;模型和大型语言模型&#xff08;LLM&#xff09;已成为主流方法。然而&#xff0c;企业中存在着大量的PDF文件&#xff0c;PDF解析的低准确性显著影响了基于…

open-amv开发环境搭建

open-amv是基于rv1103主控芯片的视觉开发板子 1.板子使用 板子使用type c作为调试口&#xff0c;同时供电&#xff0c;请在电脑上下载adb&#xff0c;当板子通过tpye c与电脑连接后&#xff0c;执行命令adb shell就会进入到板子的linux系统命令行。 2.编译环境 2.1 搭建doc…