概述
目录
一:数据类型
1.整数类型
2.浮点类型
编辑
3.字符类型
4.类型转换
5.逻辑类型
二:悍匠招新试题及学习
1;理论试题部分
理论试题1:麦克纳姆轮
理论试题2:开闭环控制系统
理论试题3:PID
编辑
理论试题4:有关单片机 及通讯协议
二:编程题
第一题(略)
第二题:
第三题:
第一小题的代码:
第二小题的代码:(初用数组)
一:数据类型
1.整数类型
2.浮点类型
3.字符类型
4.类型转换
5.逻辑类型
二:悍匠招新试题及学习
1;理论试题部分
理论试题1:麦克纳姆轮
理论试题2:开闭环控制系统
理论试题3:PID
理论试题4:有关单片机 及通讯协议
UART、I2C、SPI的优缺点和区别
协议 | UART | SPI | IIC |
总线 | 3(RX、TX、GND) | 4(CS、CLK、MOSI、MISO) | 4(VCC、GND、SCL、SDA) |
同/异步 | 异步 | 同步 | 同步 |
全/半双工 | 全双工 | 全双工 | 半双工 |
传输速度 | 低 | 高 | 中 |
应用场景 | 板内/间 | 板内(不同芯片之间) | 板内 |
模式 | 一对一 | 一对多 | 一对多/多对多 |
一主多从实现 | X | 各CS | 地址 |
二:编程题
第一题(略)
第二题:
- RoboMaster比赛的车里有各种各样的通讯协议,现有一个这样的通讯协议:
-
-
- 每次通讯发送100以内的非负整型
- 如果发送的报文不是一百以内的非负整型,主控底层逻辑出现故障。
- 为了避免通讯失准,每个报文重复发送10次
- 有三种报文,它们是33,66,99,主控接收到他们之后,就会进入“紧急状态”,进入“紧急状态“后,主控不再接收报文,打印出error,终止程序。
- 在非紧急状态下,主控返回报文内容,即打印输入的报文
-
-
请实现此协议,并且保证主控底层逻辑不出故障(请写一个保护程序,如输入不是100内的非负整型则忽略这次输入)。
样例输入:
1
101
33
输出:
1
1
1
1
1
1
1
1
1
1
error
代码:
#include<stdio.h>
int main()
{
int n=0;
while (n != 33 && n != 66 && n != 99) { //能够一直发通讯,直到进入紧急状态!
printf("请发送报文(为100内的非负整数):");
//用户先输入100以内的非负整数,否则忽略用户的输入:
do {
scanf_s("%d", &n);
if (n >= 0 && n <= 100 && n != 33 && n != 66 && n != 99) {
for (int i = 1; i <= 10; i++) {
printf("%dn", n);
}//每个报文重复发送10次(非紧急状态)
}
else if (n == 33 || n == 66 || n == 99) {
printf("errorn");
}//进入紧急状态
else {
printf("您输入的数不是100以内的非负整数,请重新输入一个符合范围的数:");
}
} while (n < 0 || n>100);
}
return 0;
}
第三题:
由于RoboMaster机甲大师赛具有备赛时间长的特点,进入备赛后期后,队员们会出现疲惫、厌倦等情绪;此外,队员们旷工、怠工、不注意实验室卫生等问题都是运营组所需要管理的。现在运营组希望电控组能为其编写一个用于队员管理的软件,运营组所提出的需求如下:
- 每名队员对应一个分数,在每个月的月初时分数重置为50分。
- 这个月内的最终分数由队员们的贡献和负贡献决定的。
- 贡献加分细则:
- 负贡献扣分细则:
- 队员们最终的分数将会在月底进行清算,不同的分数会有不同的奖励或惩罚。细则如下:
- 若该月所有队员平均分数>75分,举行一次团建活动。
编号 | 行为 | 加分值 |
1 | 扫地 | 2 |
2 | 整合开源资料 | 4 |
3 | 完成部分赛季规划/中期评审/完整形态考核任务 | 8 |
编号 | 行为 | 扣分值 |
1 | 乱丢垃圾 | 2 |
2 | 玩游戏 | 4 |
3 | 违反实验室安全守则 | 8 |
分数 | 奖惩措施 |
≤0 | 退队 |
<20 | 整理全队物资 |
<40 | 扫地 |
≥60 | 获得队内周边 |
≥80 | 获得大疆200元以内RM周边 |
≥100 | 获得大疆绝版RM周边 |
题目:
- 实验室人数固定5人(编号为1~5),请用C语言实现上述管理软件功能。
- (附加题) 实验室人数变化,请在上述功能的基础上实现新人入队后增加新人信息,人员离队后减少人员信息的功能。(新队员所分配的编号为最小的未绑定队员的编号,老队员离开队伍后,其他队员编号不变)
输入格式:
队员编号(1~10)
贡献行为编号 该月完成该贡献的次数
贡献行为编号 该月完成该贡献的次数
0(表示贡献行为输入结束)
负贡献行为编号 该月完成该负贡献的次数
负贡献行为编号 该月完成该负贡献的次数
0(表示贡献行为输入结束)
该队员奖惩情况
样例:(蓝色字体为电脑输出,红色字体为电脑输入)
请输入队员编号:
1
分别输入贡献行为编号和次数,用空格隔开:
2 3
分别输入贡献行为编号和次数,用空格隔开:
1 1
分别输入贡献行为编号和次数,用空格隔开:
0
分别输入负贡献行为编号和次数,用空格隔开:
2 1
分别输入负贡献行为编号和次数,用空格隔开:
0
该队员1清算分数为60分,获得奖励:队内周边
请输入队员编号:
……
该队员X清算分数为36分,获得惩罚:扫地
请输入队员编号:
0
退出程序
请输入操作(0:退出程序;1:增加队员;2:减少队员;3:清算分数):
1
欢迎新队员,分配编号为13;
请输入操作(0:退出程序;1:增加队员;2:减少队员;3:清算分数):
2
请输入减少队员编号:
7
该队员7已踢出队伍,其他队员编号不变。
请输入操作(0:退出程序;1:增加队员;2:减少队员;3:清算分数):
3
请输入队员编号:
7
该队员暂不存在。
请输入队员编号:
(见第一题样例)
……
该队员X清算分数为19分,获得惩罚:整理全队物资
请输入队员编号:
0
由于该月平均清算分数大于75分,获得奖励:团建一次。
请输入操作(0:退出程序;1:增加队员;2:减少队员;3:清算分数):
0
退出程序
第一小题的代码:
#include<stdio.h>
int main()
{
int n;//n表示队员编号,当输入的n的值为0时,退出程序
printf("请输入队员编号:");
scanf_s("%d",&n);
while (n != 0) {
int score = 50;//score表示一位队员的得分情况(每月初有50的基础分)
int a = 1;//用a表示贡献行为的编号,当a为0时退出有关“贡献行为编号和次数”的循环
int b = 1;//b和a作用相同,但用在有关”负贡献行为编号和次数”的循环上
int c = 0;//用c表示单个编号的执行次数
while (a != 0) {
printf("分别输入贡献行为编号和次数,用空格隔开:");
scanf_s("%d %d", &a, &c);//要想退出该循环,应当输入“0 0”而不能只输入一个0
switch (a) {
case 1:
score += 2 * c;
break;
case 2:
score += 4 * c;
break;
case 3:
score += 8 * c;
break;
}
}
while (b != 0) {
printf("分别输入负贡献行为编号和次数,用空格隔开:");
scanf_s("%d %d", &b, &c);//要想退出该循环,应当输入“0 0”而不能只输入一个0
switch (b) {
case 1:
score -= 2 * c;
break;
case 2:
score -= 2 * c;
break;
case 3:
score -= 8 * c;
break;
}
}
//算出得分后就要进行奖惩措施的判断了
if (score <= 0)
printf("该队员%d清算分数为%d分,获得惩罚:退队n",n,score);
else if (score > 0 && score < 20)
printf("该队员%d清算分数为%d分,获得惩罚:整理全队物资n", n, score);
else if (score >= 20 && score < 40)
printf("该队员%d清算分数为%d分,获得惩罚:扫地n", n, score);
else if (score >= 60 && score < 80)
printf("该队员%d清算分数为%d分,获得奖励:队内周边n",n, score);
else if (score >= 80 && score < 100)
printf("该队员%d清算分数为%d分,获得奖励:大疆200元以内RM周边n", n, score);
else if (score >= 100)
printf("该队员%d清算分数为%d分,获得奖励:大疆绝版RM周边n", n, score);
else
printf("无n");
printf("请输入队员编号:n");//重新输入n,以达到反复查询队员奖惩情况的目的,或输入0退出程序
scanf_s("%d", &n);
}
printf("退出程序");
return 0;
}
第二小题的代码:(初用数组)
#include<stdio.h>
int main()
{
int x;//用x来进行操作指令的存储
int n;//n表示队员编号
int number[1000];//用number存入队员的人数与编号
int delect;//用delect表示要删去的队员的编号
double sum = 0;//用sum表示已经进行了分数结算的成员的分数总和(默认:当在“清算分数”中输入0并退出该循环时,全队成绩均已结算,将会自动结算平均分)
double average = 0;//用average表示全队平均分
int cnt = 0;//用cnt表示已经进行了结算的成员的个数
for (n= 1; n <= 12; n++) { //根据3.2题样例中给出的第一次加入的新成员的编号为13猜测,现在对内成员有12位?
number[n] = n;
}
do {
printf("请输入操作(0:退出程序;1:增加队员;2:减少队员;3:清算分数):n");
scanf_s("%d", &x);
switch (x) {
case 1:
n = 1;
do {
if (n != number[n]) {
number[n] = n;
break;
}
n++;
} while (n == number[n]);
printf("欢迎新队员,分配编号为%d;n", n);
number[n] = n;
break;
case 2:
printf("请输入减少队员编号:");
scanf_s("%d", &delect);
n = 1;
do {
if (delect == n) {
number[n] = 0;
break;
}
n++;
} while (n == number[n]);
printf("该队员%d已移除队伍,其他队员编号不变。n",delect);
break;
case 3:
printf("请输入队员编号:");
scanf_s("%d", &n);
while (n != 0) {
int e = 1; //先用e来判断队员编号是否有效
for (e = 1; e < n; e++) {
}
if (e != number[n]) {
printf("该队员暂不存在。n");
printf("请输入队员编号:");
scanf_s("%d", &n);
continue;//当队员编号无效时,让用户重新输入一个编号
}
int score = 50;//score表示一位队员的得分情况(每月初有50的基础分)
int a = 1;//用a表示贡献行为的编号,当a为0时退出有关“贡献行为编号和次数”的循环
int b = 1;//b和a作用相同,但用在有关”负贡献行为编号和次数”的循环上
int c = 0;//用c表示单个编号的执行次数
while (a != 0) {
printf("分别输入贡献行为编号和次数,用空格隔开:");
scanf_s("%d %d", &a, &c);//要想退出该循环,应当输入“0 0”而不能只输入一个0
switch (a) {
case 1:
score += 2 * c;
break;
case 2:
score += 4 * c;
break;
case 3:
score += 8 * c;
break;
}
}
while (b != 0) {
printf("分别输入负贡献行为编号和次数,用空格隔开:");
scanf_s("%d %d", &b, &c);//要想退出该循环,应当输入“0 0”而不能只输入一个0
switch (b) {
case 1:
score -= 2 * c;
break;
case 2:
score -= 2 * c;
break;
case 3:
score -= 8 * c;
break;
}
}
//算出得分后就要进行奖惩措施的判断了
if (score <= 0) {
printf("该队员%d清算分数为%d分,获得惩罚:退队n", n, score);
int N = n;//用N表示要退队的队员的编号
n = 1;
do { //执行退队操作
if (N == n) {
number[n] = 0;
break;
}
n++;
} while (n == number[n]);
}
else if (score > 0 && score < 20)
printf("该队员%d清算分数为%d分,获得惩罚:整理全队物资n", n, score);
else if (score >= 20 && score < 40)
printf("该队员%d清算分数为%d分,获得惩罚:扫地n", n, score);
else if (score >= 60 && score < 80)
printf("该队员%d清算分数为%d分,获得奖励:队内周边n", n, score);
else if (score >= 80 && score < 100)
printf("该队员%d清算分数为%d分,获得奖励:大疆200元以内RM周边n", n, score);
else if (score >= 100)
printf("该队员%d清算分数为%d分,获得奖励:大疆绝版RM周边n", n, score);
else
printf("无n");
sum += score;
cnt++;
printf("请输入队员编号:n");//重新输入n,以达到反复查询队员奖惩情况的目的,或输入0退出程序
scanf_s("%d", &n);
}
average = sum / cnt;
if (average > 75) {
printf("由于该月平均清算分数大于75分,获得奖励:团建一次。n");
}
}
} while (x != 0);
printf("退出程序");
return 0;
}
最后
以上就是洁净小熊猫为你收集整理的C语言初步(第五周)与悍匠招新学习一:数据类型二:悍匠招新试题及学习 的全部内容,希望文章能够帮你解决C语言初步(第五周)与悍匠招新学习一:数据类型二:悍匠招新试题及学习 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复