当前位置: 首页 > news >正文

C语言三子棋解析

目录(标2的是我自己写的一堆问题不知道怎么改)

  • 开始菜单1
  • 打印棋盘1
  • 玩家下棋1
  • 电脑下棋1
  • 判断输赢1
  • 开始菜单2
  • 打印棋盘2
  • 选择先后2
  • 玩家下棋2
  • 电脑下棋2
  • 判断输赢2
  • 完整代码
    • 文件else.h
    • 文件else.c
    • 文件test.c

开始菜单1

void menu()//打印菜单
{printf("******************\n");printf("******1.play******\n");printf("******0.exit******\n");printf("******************\n");
}

打印棋盘1

//存放下棋数据
char board[ROW][COL] = { 0 };
//初始化棋盘为全空格
InitBoard(board, ROW, COL);
//初始化棋盘为空格
void InitBoard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){board[i][j] = ' ';}}
}
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘
{//打印数据int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ",board[i][j]);//别忘记board[i][j]if (j < col - 1){printf("|");}}printf("\n");//打印分割行if (i < row-1)//记住   row-1{for (j = 0; j < col; j++){printf("---");if (j < col - 1){printf("|");}}printf("\n");}}
}

玩家下棋1

//玩家下棋
void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下棋\n");while (1){printf("请输入坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标被占用,请重新输入\n");}}else{printf("非法坐标,请重新输入\n");}}

电脑下棋1

void computer_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("电脑下棋:>\n");while (1){x = rand() % 3;//范围(a,b)用rand表示就是rand()%(b-a+1)y = rand() % 3;if (board[x][y] == ' ')//判断是否为空格,因为只有这一个条件,所以满足这个条件就可以下{board[x][y] = '#';break;}}
}

判断输赢1

while (1)//玩家和电脑轮流下棋,直到一方胜利{   //玩家下棋player_move(board, ROW, COL);//打印棋盘DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}//电脑下棋computer_move(board, ROW, COL);//打印棋盘DisplayBoard(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}}if (ret == '*'){printf("玩家获胜\n");}else if (ret == '#'){printf("电脑获胜\n");}else // (ret == 'Q'){printf("平局\n");}DisplayBoard(board, ROW, COL);
}//判断输赢
char is_win(char board[ROW][COL], int row, int col)
{//判断每一行是否都相等int i = 0;for (i = 0; i < col; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' '){return  board[i][1];}}//判断每一列是否都相等for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[i][1];}}//判断对角线是否都相等if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局if (is_full(board, row, col) == 1){return 'Q';}//继续return 'C';
}

开始菜单2

int  begin()
{printf("##########请选择##########\n");printf("##########1:play##########\n");printf("##########0:exit##########\n");printf("##########################\n");int a = 0;scanf("%d", &a);if (a == 0 || a == 1)return 1;else{printf("输入错误,请重新输入\n");return 0;}
}

打印棋盘2

void play(char arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (j < 2)printf(" %c |", arr[i][j]);elseprintf(" % c  ", arr[i][j]);}printf("\n");printf("___|___|___\n");}
}

选择先后2

int  select()
{int select1;printf("##########################\n");printf("######请选择先后顺序######\n");printf("#########1:玩家先#########\n");printf("#########2:电脑先#########\n");printf("##########################\n");scanf("%d", &select1);if(select1==1||select1==2)return select1;else{printf("输入错误,请重新输入\n");return 0;}
}

玩家下棋2

 int  player(char arr[3][3])
{printf("请输入坐标\n");int x , y ;scanf("%d %d", &x, &y);if (x >= 1 && x <= 3 && y >= 1 && y <= 3 && arr[x-1][y-1] != '@'){arr[y - 1][x - 1] = '*';return 1;}else{printf("输入错误,请重新输入\n");return 0;}
}

电脑下棋2

void computer(char arr[3][3])
{while (1){srand((unsigned int)time(NULL));int r1 = 0 + rand() % (2 - 0 + 1);int r2 = 0 + rand() % (2 - 0 + 1);if (arr[r1][r2] == '#'){arr[r1][r2] = '@';break;}}
}

判断输赢2

这里不想思考了所以直接就把这些情况都列举出来了

 int  over(char arr[3][3])
{if (arr[0][0] =='*' && arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0])//横着的第一行为*{printf("玩家获胜\n");return 1;}else if (arr[1][0] == '*' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//横着的第二行为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] == '*' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//横着的第三行为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '*' && arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2])//竖着的第一列为*{printf("玩家获胜\n");return 1;}else if (arr[1][0] == '*' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//竖着的第二列为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] == '*' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//竖着的第三列为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '*' && arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//对角线左到右为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] = '*' && arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2])//对角线右到左为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '@' && arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0])//横着的第一行为*{printf("电脑获胜\n");return 1;}else if (arr[1][0] == '@' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//横着的第二行为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] == '@' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//横着的第三行为*{printf("电脑获胜\n");return 1;}else if (arr[0][0] == '@' && arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2])//竖着的第一列为*{printf("电脑获胜\n");return 1;}else if (arr[1][0] == '@' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//竖着的第二列为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] =='@' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//竖着的第三列为*{printf("电脑获胜\n");return 1;}else if (arr[0][0] =='@' && arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//对角线左到右为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] == '@' && arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2])//对角线右到左为*{printf("电脑获胜\n");return 1;}else{int count = 0;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (arr[i][j] != '#')count++;}}if (count == 9){printf("平局\n");return 2;}}
}

完整代码

文件else.h

#pragma once
int  begin();
void play(char arr[3][3]);
int  select();
void computer(char arr[3][3]);
int  player(char arr[3][3]);
int  over(char arr[3][3]);

文件else.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int  begin()
{printf("##########请选择##########\n");printf("##########1:play##########\n");printf("##########0:exit##########\n");printf("##########################\n");int a = 0;scanf("%d", &a);if (a == 0 || a == 1)return 1;else{printf("输入错误,请重新输入\n");return 0;}
}
void play(char arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (j < 2)printf(" %c |", arr[i][j]);elseprintf(" % c  ", arr[i][j]);}printf("\n");printf("___|___|___\n");}
}
int  select()
{int select1;printf("##########################\n");printf("######请选择先后顺序######\n");printf("#########1:玩家先#########\n");printf("#########2:电脑先#########\n");printf("##########################\n");scanf("%d", &select1);if(select1==1||select1==2)return select1;else{printf("输入错误,请重新输入\n");return 0;}
}
void computer(char arr[3][3])
{while (1){srand((unsigned int)time(NULL));int r1 = 0 + rand() % (2 - 0 + 1);int r2 = 0 + rand() % (2 - 0 + 1);if (arr[r1][r2] == '#'){arr[r1][r2] = '@';break;}}
}int  player(char arr[3][3])
{printf("请输入坐标\n");int x , y ;scanf("%d %d", &x, &y);if (x >= 1 && x <= 3 && y >= 1 && y <= 3 && arr[x-1][y-1] != '@'){arr[y - 1][x - 1] = '*';return 1;}else{printf("输入错误,请重新输入\n");return 0;}
}int  over(char arr[3][3])
{if (arr[0][0] =='*' && arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0])//横着的第一行为*{printf("玩家获胜\n");return 1;}else if (arr[1][0] == '*' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//横着的第二行为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] == '*' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//横着的第三行为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '*' && arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2])//竖着的第一列为*{printf("玩家获胜\n");return 1;}else if (arr[1][0] == '*' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//竖着的第二列为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] == '*' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//竖着的第三列为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '*' && arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//对角线左到右为*{printf("玩家获胜\n");return 1;}else if (arr[2][0] = '*' && arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2])//对角线右到左为*{printf("玩家获胜\n");return 1;}else if (arr[0][0] == '@' && arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0])//横着的第一行为*{printf("电脑获胜\n");return 1;}else if (arr[1][0] == '@' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//横着的第二行为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] == '@' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//横着的第三行为*{printf("电脑获胜\n");return 1;}else if (arr[0][0] == '@' && arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2])//竖着的第一列为*{printf("电脑获胜\n");return 1;}else if (arr[1][0] == '@' && arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2])//竖着的第二列为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] =='@' && arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2])//竖着的第三列为*{printf("电脑获胜\n");return 1;}else if (arr[0][0] =='@' && arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//对角线左到右为*{printf("电脑获胜\n");return 1;}else if (arr[2][0] == '@' && arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2])//对角线右到左为*{printf("电脑获胜\n");return 1;}else{int count = 0;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (arr[i][j] != '#')count++;}}if (count == 9){printf("平局\n");return 2;}}
}

文件test.c

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"else.h"
int main()
{int r = 0;char arr[3][3] = { {'#','#','#'},{'#','#','#'},{'#','#','#' } };while (1){if (begin() == 1)break;}play(arr);while (1){r = select();if(r==1||r==2)break;}while (1){if (r == 1){while (1){while (1){if (player(arr) == 0)break;play(arr);printf("\n");computer(arr);play(arr);printf("\n");over(arr);}}}else{while (1){computer(arr);play(arr);printf("\n");player(arr);	play(arr);printf("\n");over(arr);}}}return 0;
}

相关文章:

C语言三子棋解析

目录&#xff08;标2的是我自己写的一堆问题不知道怎么改&#xff09; 开始菜单1打印棋盘1玩家下棋1电脑下棋1判断输赢1开始菜单2打印棋盘2选择先后2玩家下棋2电脑下棋2判断输赢2完整代码文件else.h文件else.c文件test.c 开始菜单1 void menu()//打印菜单 {printf("*****…...

【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】

1、问题描述 Jenkins打包服务运行dockerfile里的FROM java:8报错manifest for java : 8 not fourd Caused by: com.spotify. docker.client.exceptions.DockerException: manifest for java:8 not found2、解决方法 在网上查找许多方法后得出这是由于Docker官方已经弃用java…...

读SQL学习指南(第3版)笔记06_连接和集合

1. 连接 1.1. 笛卡儿积 1.1.1. 交叉连接&#xff08;cross join&#xff09; 1.1.2. 查询并没有指定两个数据表应该如何连接&#xff0c;数据库服务器就生成了笛卡儿积 1.1.2.1. 两个数据表的所有排列组合 1.1.3. 很少会用到&#xff08;至少不会特意用到&#xff09; 1.…...

C#学习,结构,面向对象,类

结构和类 结构是从过程化程序设计中保留下来的一种数据类型&#xff0c;类则是面向对象程序设计中最基本的、也是最重要的概念。 结构 结构是一种值类型&#xff0c;通常用来封装一组相关的变量&#xff0c;结构中可以包含构造函数、变量、字段、方法、属性、运算符、事件和…...

【PHP】文件操作

文章目录 文件编程的必要性目录操作其它目录操作递归遍历目录PHP5常见文件操作函数PHP4常见文件操作函数其他文件操作函数 文件编程的必要性 文件编程指利用PHP代码针对文件&#xff08;文件夹&#xff09;进行增删改查操作。 在实际开发项目中&#xff0c;会有很多内容&…...

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略

科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金&#xff08;ETF&#xff09;&#xff0c;旨在跟踪科创板50指数的表现&#xff0c;下文介绍科创板50ETF期权交易&#xff1a;详细规则、费用、保证金和开户攻略&am…...

怎么把图片放大并且清晰?有详细的方法步骤

怎么把图片放大并且清晰&#xff1f;数字图像处理中的图片放大是许多行业和领域中广泛应用的一项技术。常规的放大方法通过插值或复制像素的方式增加像素数&#xff0c;但这会导致失真和模糊。无损放大是一种特殊的放大方法&#xff0c;它可以通过数学算法来增加图片的尺寸&…...

C++ 构造函数、析构函数调用虚函数

C虚函数是通过虚表实现的&#xff0c;虚函数的地址记录在需表中&#xff0c;只对象完成构造完成后&#xff0c;虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造&#xff0c;所以构造时没法调用到派生类的虚函数&#xff0c;也就是说只能调用到自己&#x…...

工业状态监测如何选择合适的无线技术?

工业领域的状态监测在提高生产效率和产品质量方面起着关键作用。过去依赖于预防性维护和例行检查的方式已经不再能满足日益复杂的生产需求&#xff0c;随着工业物联网&#xff08;IIoT&#xff09;的兴起&#xff0c;设备状态监测逐渐成为一种关键策略&#xff0c;催生了预测性…...

Mysql45讲学习笔记

前言&#xff1a;这篇文章主要总结事务&#xff0c;锁、索引的一些知识点&#xff0c;然后分享一下自己学习小心得&#xff0c;我会从点到线在到面展开说说&#xff0c;对于学习任何知识&#xff0c;我们都应该藐其全貌&#xff0c;不要一开始就选入细节 基础 一、基础架构&a…...

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

报错描述 情景一 1Panel在"主机-->进程守护"通过命令"nohup /opt/tomcat/bin/startup.sh > /opt/supersivor/tomcat/nohup.log &"创建守护进程&#xff0c;运行日志如下&#xff1a; #--------------------------------------------------------…...

opencv 水果识别+UI界面识别系统,可训练自定义的水果数据集

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 测试图片结果界面&#xff1a; 自定义图片结果界面&#xff1a; 二、原理介绍&#xff1a; 图像预处理 HOG特征提取算法 数据准备 SVM支持向量机算法 预测和评估 完整演示视频&#xff1a; 完整代码链接 一、…...

TypeScript数组和对象的操作

TypeScript数组和对象的操作 一、数组的声明二、数组初始化三、数组元素赋值、添加、更改四、删除五、合并、断开数组六、查找数组元素七、连接数组元素八、排序、反序数组九、遍历数组&#xff0c;对象 一、数组的声明 let arr1: Array<number>; let arr2: number[];二…...

docker之Compose与DockerSwarm

目录 Compose 简介 概念 为什么需要&#xff1f; 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…...

VS Code 使用 clang++ 编译,使用 cppvsdbg 或 lldb 调试的配置方法

需要安装的 VS Code LLVM VS Code 需要安装的插件&#xff1a; C/C&#xff08;用来配置 c_cpp_properties.json&#xff09; CodeLLDB&#xff08;如果你要用 lldb 调试&#xff0c;那么这个插件就需要安装&#xff0c;用来连接到 lldb 调试器&#xff09; 流程 我们都…...

android11,12 Launcher3编译什么

1首先看看手机里的是什么 adb shell pm path com.android.launcher3 package:/system_ext/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk 然后就编译Launcher3QuickStep 2push apk 没什么说的&#xff0c;push到对应的文件夹 /system_ext/priv-app/Launcher3Quick…...

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结。 01 前言 在使用 Go 语言进行 Web 开发时&#xff0c;我们往往会选择一些优秀的库来简化 HTTP 请求的处理。其中&#xff0c;go-resty 是一个被广泛使用的 HTTP 客户端。…...

【C语言】#define 宏定义初步使用

使用宏定义可以防止出错&#xff0c;提高可移植性&#xff0c;可读性&#xff0c;方便性等。 下面列举了一些成熟软件中常用的宏定义。 重新定义一些基本类型 重新定义一些类型&#xff0c;防止由于各种平台和编译器的不同&#xff0c;而产生的类型字节数差异&#xff0c;方便…...

项目里面怎么解决跨域的?

一.前端配置跨域 proxy解决跨域 在vue.config.js中通过proxy devServer中配置反向代理。 devServer: {port: port,open: true,overlay: {warnings: false,errors: true},// 配置反向代理proxy: {// 当地址中有/api的时候会触发代理机制/api: {target: http://ihrm-java.ithe…...

Oracle 批量导出表注释和主键

–查询分表&#xff08;目前分了16张表&#xff09; –先查询注释为空的表&#xff0c;也就是11表做示例&#xff0c;统计出来以后11批量修改成1 select owner,column_name,comments,table_name from all_col_comments a where a.table_name like ‘TB%1’ and a.comments is n…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...