<=60为"E"60~69为"D"70~79为"C"80~89为"B"90以上为"A"<0或>100提示成绩输入出错
时间: 2023-07-19 17:38:52 浏览: 153
好的,以下是一个修改后的C语言程序,实现了您的需求:
```
#include <stdio.h>
int main() {
int score;
printf("请输入学生的成绩(0-100): ");
scanf("%d", &score);
if (score < 0 || score > 100) {
printf("成绩输入出错");
} else if (score >= 90) {
printf("成绩评定为:A");
} else if (score >= 80) {
printf("成绩评定为:B");
} else if (score >= 70) {
printf("成绩评定为:C");
} else if (score >= 60) {
printf("成绩评定为:D");
} else {
printf("成绩评定为:E");
}
return 0;
}
```
这个程序要求用户输入学生的成绩,然后根据成绩的范围进行评定,最后输出评定结果。如果输入的成绩小于0或大于100,则会提示成绩输入出错。
相关问题
C语言将一串字符串拼接为2位16进制数组
假设你有一个字符串 `str`,其长度为 `len`,你想将其拼接成一个长度为 `len/2` 的 16 进制数组 `hex`,可以按照以下步骤进行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[] = "54686520717569636b2062726f776e20666f78206a756d70"; // 输入的字符串
int len = strlen(str); // 获取字符串长度
if (len % 2 != 0) { // 长度必须为偶数,否则无法拼接为 16 进制数
printf("Invalid length\n");
return 1;
}
int hex_len = len / 2; // 计算拼接后的 16 进制数组长度
unsigned char *hex = (unsigned char *)malloc(hex_len * sizeof(unsigned char)); // 动态分配内存
for (int i = 0; i < hex_len; i++) {
char byte_str[3] = {str[i*2], str[i*2+1], '\0'}; // 获取两个字符组成的字节串
hex[i] = (unsigned char)strtol(byte_str, NULL, 16); // 将字节串转换为 16 进制数
}
for (int i = 0; i < hex_len; i++) { // 输出拼接后的 16 进制数组
printf("%02x", hex[i]);
}
printf("\n");
free(hex); // 释放动态分配的内存
return 0;
}
```
在上述代码中,我们使用了 `strtol` 函数将字节串转换为 16 进制数。同时,我们也需要注意字符串长度必须为偶数,否则无法按照两个字符组成一个字节进行拼接。
.模为80的BCD码计数器,要求: (1) 输入clk,clear;输出qout。 (2) 行为描述,异步清零,高电平有效。
以下是一个基于行为描述的异步清零、模为80的BCD码计数器的Verilog代码:
```verilog
module bcd_counter(
input clk, // 时钟信号
input clear, // 清零信号,高电平有效
output reg [7:0] qout // 输出BCD码计数器的值
);
reg [6:0] count; // 计数器的计数值
always @ (posedge clk or posedge clear) begin
if (clear) begin
count <= 0;
qout <= 8'b0000_0000;
end
else begin
count <= count + 1;
if (count == 80) begin
count <= 0;
end
case (count)
7'd0: qout <= 8'b0000_0000;
7'd10: qout <= 8'b0000_0001;
7'd20: qout <= 8'b0000_0010;
7'd30: qout <= 8'b0000_0011;
7'd40: qout <= 8'b0000_0100;
7'd50: qout <= 8'b0000_0101;
7'd60: qout <= 8'b0000_0110;
7'd70: qout <= 8'b0000_0111;
7'd80: qout <= 8'b0000_1000;
endcase
end
end
endmodule
```
在上面的代码中,我们定义了一个名为`bcd_counter`的模块,它有一个时钟信号`clk`、一个异步清零信号`clear`和一个8位的输出信号`qout`。模块中还有一个名为`count`的7位寄存器,用于存储计数器的计数值。
在`always`块中,我们使用了一个异步清零的逻辑。如果`clear`信号为高电平,那么计数器会被重置为0,`qout`输出也被设置为0。如果`clear`信号不为高电平,那么计数器会在每个时钟上升沿时加1。
当计数器的值达到80时,它会被重置为0。同时,我们使用一个`case`语句来根据计数器的值设置`qout`的输出值。在这个例子中,我们将计数器的值分别与0、10、20、30、40、50、60、70和80进行比较,并根据比较结果设置`qout`的输出值,从而实现模为80的BCD码计数器。
阅读全文