燕山大学23级经济管理学院 10.18 C语言作业
文章目录
- 燕山大学23级经济管理学院 10.18 C语言作业
- 1
- C语言的基本数据类型主要包括以下几种:
- 为什么设计数据类型?
- 数据类型与知识体系的对应
- 使用数据类型时需要考虑的因素
- 2
- 1. 逻辑运算符
- 2. 真值表
- 3. 硬件实现
- 4. 应用场景
- 3
- 代码
- 运行截图
- 4
- 代码
- 运行截图
- 5
- 代码
- 运行截图
1
了解C语言所有的基本的数据类型。考虑为什么计算机要设计数据类型?对比计算机数据类型与我们已知的知识体系的什么是相关的,对应的。有什么异同?针对这些异同,当我们在计算机编程中使用数据类型的时候,你认为需要考虑什么?
C语言的基本数据类型主要包括以下几种:
-
整型(int):用于表示整数,通常占用4个字节(32位)。
-
字符型(char):用于表示单个字符,通常占用1个字节(8位)。
-
短整型(short):用于表示较小的整数,通常占用2个字节(16位)。
-
长整型(long):用于表示较大的整数,至少占用4个字节(32位),在某些系统中可能占用8个字节(64位)。
-
长长整型(long long):用于表示更大的整数,至少占用8个字节(64位)。
-
浮点型(float):用于表示带小数的数,通常占用4个字节。
-
双精度浮点型(double):用于表示更高精度的带小数的数,通常占用8个字节。
-
无符号整型(unsigned int、unsigned short、unsigned long、unsigned long long):这些类型用于表示非负整数,其范围从0开始,具体大小取决于对应的有符号类型。
这里查书,看看老师讲解的是否有第8个类型!
为什么设计数据类型?
计算机设计数据类型是为了:
- 内存管理:不同的数据类型占用不同的内存空间,计算机需要知道数据的类型以有效地分配和管理内存。
- 数据处理:数据类型决定了如何处理和操作数据。比如,整型可以进行加法和减法,浮点型可以进行小数运算。
- 类型安全:通过明确的数据类型,减少了类型不匹配的错误,确保程序运行的正确性。
数据类型与知识体系的对应
相似性:
- 数据类型在计算机中与数学中的数值类型、集合等概念相似。
- 在日常生活中,数据类型类似于物品的分类,比如:整数像是有数量的物品,字符像是标签。
相同点
- 分类:两者都涉及对信息的分类。例如,计算机将数据分为整型、字符型等,而知识体系将信息分为概念、类别等。
- 属性:计算机数据类型有特定的属性(如大小、范围),而知识概念也有定义和特征。
不同点
- 灵活性:计算机数据类型是固定的,定义明确,而知识体系中的概念可以更为灵活和抽象,可能会随上下文而变化。
- 处理方式:计算机对数据的处理基于明确的规则和运算,而知识体系中的概念理解可能依赖于主观判断和经验。
- 精度与安全性:计算机数据类型的转换可能导致精度丢失,反之,知识体系中的概念转换通常不会出现类似问题。
使用数据类型时需要考虑的因素
- 选择合适的数据类型:根据所需的范围和精度选择合适的类型,避免不必要的内存浪费或溢出。
- 类型转换:了解不同数据类型之间的转换规则,避免因转换错误导致程序异常。
- 性能:不同数据类型的运算性能可能有所不同,考虑在性能敏感的应用中使用合适的类型。
- 可读性和维护性:选择清晰、易于理解的数据类型,有助于提高代码的可读性和可维护性。
2
除了数学运算,计算机还可以进行逻辑运算?那么计算机如何进行逻辑运算?逻辑运算可以帮助我们处理哪些问题?请你举几个现实例子。
计算机进行逻辑运算的方式通常涉及布尔代数,通过逻辑运算符和逻辑电路实现。以下是如何进行上述逻辑运算的具体方法:
1. 逻辑运算符
在编程中,逻辑运算通常通过特定的运算符来表示,常见的有:
- 与(AND):
&&
- 或(OR):
||
- 非(NOT):
!
- 异或(XOR):通常在编程中使用
^
,但在某些语言中需要自定义实现。 - 与非(NAND):可以通过组合运算实现,即
!(A && B)
。 - 或非(NOR):同样可以通过组合运算实现,即
!(A || B)
。 - 同或(XNOR):可以通过
!(A ^ B)
实现。
2. 真值表
逻辑运算的结果可以通过真值表来表示,以下是每种运算的真值表示例:
-
与(AND)
A B A AND B true true true true false false false true false false false false -
或(OR)
A B A OR B true true true true false true false true true false false false -
非(NOT)
A NOT A true false false true -
异或(XOR)
A B A XOR B true true false true false true false true true false false false -
与非(NAND)
A B A NAND B true true false true false true false true true false false true -
或非(NOR)
A B A NOR B true true false true false false false true false false false true -
同或(XNOR)
A B A XNOR B true true true true false false false true false false false true
3. 硬件实现
在计算机硬件层面,逻辑运算通过逻辑门(如与门、或门、非门等)来实现。每个逻辑门根据输入的电平(高电平或低电平)执行相应的逻辑运算,并输出结果。
4. 应用场景
- 条件判断:如在
if
语句中使用逻辑运算来决定程序执行的路径。 - 循环控制:使用逻辑运算来判断循环是否继续。
- 状态管理:在复杂应用中,根据多个条件判断系统状态或用户权限。
逻辑运算可以帮助我们处理多种现实问题,以下是几个例子:
- 用户登录验证:在网站中,逻辑运算用于检查用户名和密码是否正确。例如,只有当用户名存在且密码匹配时,用户才能登录。
- 购物车结算:在电商平台,逻辑运算可以用于检查用户是否符合优惠条件,比如“如果用户是会员并且购物满100元,则可以使用折扣”。
- 交通信号控制:在交通信号灯系统中,逻辑运算用于控制灯的切换,例如“如果有车辆在检测区且信号灯是红灯,则变为绿灯”。
- 权限控制:在企业内部系统中,逻辑运算用于判断用户是否具有某项操作的权限,如“如果用户是管理员或是特定角色,则可以访问敏感数据”。
这些例子展示了逻辑运算在决策和控制流程中的重要性。
3
S连锁淘宝店共有3家,分别用a,b,c代表。a每天销售额1000元,b每天销售额3000元,c每天销售额2500元,毛利率是75%。
(1)S品牌每天各个店铺的毛利收入是多少钱?总共多少钱?
(2) 销售额分别是15英镑,35英镑,25英镑,毛利率是75%,S品牌每天各个店铺的毛利收入是多少钱?总共多少钱?整数部分是多少钱?
代码
#include <stdio.h> // 包含标准输入输出库
int main() {
// 问题(1)
// 每家店铺的销售额
float sales_a = 1000.0; // a店铺每天销售额
float sales_b = 3000.0; // b店铺每天销售额
float sales_c = 2500.0; // c店铺每天销售额
// 毛利率
float profit_margin = 0.75; // 毛利率设定为75%
// 计算每家店铺的毛利收入
float profit_a = sales_a * profit_margin; // a店铺的毛利收入
float profit_b = sales_b * profit_margin; // b店铺的毛利收入
float profit_c = sales_c * profit_margin; // c店铺的毛利收入
// 总毛利收入
float total_profit = profit_a + profit_b + profit_c; // 计算总毛利收入
// 输出结果
printf("问题(1):\n"); // 输出问题提示
printf("a店铺毛利收入: %.2f元\n", profit_a); // 输出a店铺的毛利收入
printf("b店铺毛利收入: %.2f元\n", profit_b); // 输出b店铺的毛利收入
printf("c店铺毛利收入: %.2f元\n", profit_c); // 输出c店铺的毛利收入
printf("总毛利收入: %.2f元\n\n", total_profit); // 输出总毛利收入
// 问题(2)
// 每家店铺的新销售额
float sales_a_new = 15.0; // a店铺的新销售额
float sales_b_new = 35.0; // b店铺的新销售额
float sales_c_new = 25.0; // c店铺的新销售额
// 计算新毛利收入
float profit_a_new = sales_a_new * profit_margin; // a店铺的新毛利收入
float profit_b_new = sales_b_new * profit_margin; // b店铺的新毛利收入
float profit_c_new = sales_c_new * profit_margin; // c店铺的新毛利收入
// 新总毛利收入
float total_profit_new = profit_a_new + profit_b_new + profit_c_new; // 计算新的总毛利收入
// 取整部分
int integer_part = (int)total_profit_new; // 获取总毛利收入的整数部分
// 输出结果
printf("问题(2):\n"); // 输出问题提示
printf("a店铺毛利收入: %.2f英镑\n", profit_a_new); // 输出a店铺的新毛利收入
printf("b店铺毛利收入: %.2f英镑\n", profit_b_new); // 输出b店铺的新毛利收入
printf("c店铺毛利收入: %.2f英镑\n", profit_c_new); // 输出c店铺的新毛利收入
printf("总毛利收入: %.2f英镑\n", total_profit_new); // 输出新的总毛利收入
printf("总毛利收入的整数部分: %d\n", integer_part); // 输出总毛利收入的整数部分
return 0; // 返回0,表示程序正常结束
}
运行截图
4
请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如:字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’I’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5分别变为’G’,’l’,’m’,’r’,’e’。分别用putchar函数和printf函数输出这5个字符。
代码
#include <stdio.h> // 包含标准输入输出库
// 定义加密函数,用于根据规律加密字母
char encrypt(char c) {
// 计算替代字符,使用取模处理字母环绕
return (c - 'A' + 4) % 26 + 'A'; // 将字符转换为相应的加密字符
}
int main() {
// 定义字符变量并赋初值,表示原字符串“China”
char c1 = 'C'; // c1初始化为'C'
char c2 = 'h'; // c2初始化为'h'
char c3 = 'i'; // c3初始化为'i'
char c4 = 'n'; // c4初始化为'n'
char c5 = 'a'; // c5初始化为'a'
// 处理并替代每个字符,进行加密
c1 = encrypt(c1 + 32); // 将大写字符'C'转换为小写处理并加密
c2 = encrypt(c2); // 对字符'h'进行加密
c3 = encrypt(c3); // 对字符'i'进行加密
c4 = encrypt(c4); // 对字符'n'进行加密
c5 = encrypt(c5); // 对字符'a'进行加密
// 使用putchar逐个输出字符
putchar(c1); // 输出加密后的c1
putchar(c2); // 输出加密后的c2
putchar(c3); // 输出加密后的c3
putchar(c4); // 输出加密后的c4
putchar(c5); // 输出加密后的c5
putchar('\n'); // 输出换行符
// 使用printf一次性输出所有加密后的字符
printf("%c%c%c%c%c\n", c1, c2, c3, c4, c5); // 输出所有字符
return 0; // 返回0,表示程序正常结束
}
运行截图
5
用switch语句实现,如下的成绩转换:
A:90-100;B:80-89;C:70-79;D:60-69;E:failed。”
代码
#include <stdio.h> // 包含标准输入输出库
int main() {
int score; // 定义变量score用于存储用户输入的成绩
char grade; // 定义变量grade用于存储转换后的成绩等级
// 提示用户输入成绩
printf("请输入成绩(0-100):");
scanf_s("%d", &score); // 从标准输入读取成绩。这里也可以写“scanf”
// 检查输入成绩的范围
if (score < 0 || score > 100) { // 如果成绩小于0或大于100
printf("成绩输入错误,请输入0-100之间的成绩。\n"); // 输出错误提示
return 1; // 返回1,表示程序异常结束
}
// 使用switch语句根据成绩范围转换为等级
switch (score / 10) { // 将成绩除以10,用于判断成绩等级
case 10: // 处理特殊情况,score为100
case 9: // 处理成绩在90-99之间
grade = 'A'; // 赋值为'A'
break; // 退出switch语句
case 8: // 处理成绩在80-89之间
grade = 'B'; // 赋值为'B'
break; // 退出switch语句
case 7: // 处理成绩在70-79之间
grade = 'C'; // 赋值为'C'
break; // 退出switch语句
case 6: // 处理成绩在60-69之间
grade = 'D'; // 赋值为'D'
break; // 退出switch语句
case 5: // 处理成绩在50-59之间
case 4: // 处理成绩在40-49之间
case 3: // 处理成绩在30-39之间
case 2: // 处理成绩在20-29之间
case 1: // 处理成绩在10-19之间
case 0: // 处理成绩在0-9之间
grade = 'E'; // 赋值为'E',表示不及格
break; // 退出switch语句
}
// 输出转换后的成绩等级
printf("成绩等级为:%c\n", grade); // 输出成绩等级
return 0; // 返回0,表示程序正常结束
}
运行截图