内容正文:
《编程语言基础-C语言》(高教版第5版)
期末复习卷(三)解析版
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一、单项选择题(本题共20小题,每小题2分,共40分)
1、下列选项中,均属于C语言关键字的是( )
A. auto int Long B. define printf do
C. static while sizeof D. volatile false default
答案:B
解析: 关键字不能是大写,A选项中的Long第一个字母大写,不是关键字;printf是函数,不是关键字;false不属于C语言关键字。
2、若有定义:int a=5, b=10; 则表达式 (a++) + (++b) + a 的值是( )
A. 21 B. 22 C. 23 D. 24
答案:B
解析: a++先使用a=5,然后a变为6;++b先自增b=11,再使用;然后加上a(此时a=6),结果为5+11+6=22。
3、以下关于switch语句的叙述中,正确的是( )
A. switch语句中的case后面可以是常量表达式,也可以是变量
B. 每个case后面必须加break,否则会出错
C. switch语句可以嵌套使用
D. switch语句中default只能出现一次,且必须放在最后
答案:C
解析: case后必须是常量表达式;break可选,若无则继续执行;default可放在任意位置,但通常放最后;switch可以嵌套。
4、若有定义:int a[3][2] = {1,2,3,4,5,6}; 则 a[2][1] 的值是( )
A. 5 B. 6 C. 4 D. 随机值
答案:B
解析: 二维数组按行存储,a[2][1]是第3行第2列,即6。
5、下列函数定义中,正确的是( )
A. int fun(int a, b) { return a+b; }
B. int fun(int a, int b) { return a+b; }
C. int fun(a, b) { return a+b; }
D. int fun(int a; int b) { return a+b; }
答案:B
解析: 函数参数必须分别指定类型,A中b未指定类型;C中参数未指定类型;D中用分号分隔错误。
6、若有定义:int x=3, y=4, z=5; 则表达式 !(x+y) + y-1 && z/2 的值是( )
A. 0 B. 1 C. 2 D. 3
答案:B
解析: 先算x+y=7,!7=0;0+y-1=3;z/2=2;3&&2为真,结果为1。
7、以下关于指针数组的叙述中,正确的是( )
A. 指针数组的每个元素都是指针变量
B. 指针数组只能存放字符型地址
C. 指针数组名是一个指向指针的常量
D. 指针数组与数组指针是同一个概念
答案:A
解析: 指针数组是数组,元素是指针;可以存放任何类型地址;数组名是地址常量;数组指针是指向数组的指针,两者不同。
8、若有定义:char *s = "C Language"; 则 printf("%c", *s+1); 的输出是( )
A. C B. D C. 68 D. 语法错误
答案:B
解析: *s取首字符'C',ASCII码67,加1得68,对应字符'D',%c输出D。
9、以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
x = 10;
}
main() {
int y = 5;
fun(y);
printf("%d", y);}
A. 5 B. 10 C. 不确定 D. 编译错误
答案:A
解析: 传值调用,形参修改不影响实参。
10、若有定义:int a[10]={0}, *p=a; 则下列表达式不能表示a[1]地址的是( )
A. p+1 B. a+1 C. &a[0]+1 D. *a+1
答案:D
解析: *a是表示a[0]的值,*a+1表示的是a[0]的值+1。
11、以下关于结构体变量初始化的叙述中,错误的是( )
A. 可以在定义时进行初始化
B. 可以整体赋初值
C. 可以只对部分成员初始化
D. 初始化时成员的顺序必须与定义时一致
答案:B
解析: 结构体变量可以在定义时用花括号初始化,但之后不能整体赋值。
12、若有定义:int a=1, b=2, c=3; 则执行 if(a>b) c=a; a=b; b=c; 后,a、b、c的值分别是( )
A. 1,2,3 B. 2,3,2 C. 2,3,3 D. 2,2,3
答案:C
解析: if条件为假,不执行c=a;然后执行a=b使a=2;b=c使b=3;c不变。
13、以下程序的输出结果是( )。
main()
{ int x = 2, y = -1, z = 2;
if (x < y)
if (y < 0) z = 0;
else z + = 1;
printf("%d
",z);
}
A.3 B.2 C.1 D.0
答案:B
解析: x<y为假,if嵌套的if……else语句不执行,z的值保持不变。
14、若有定义:int a[5] = {10,20,30,40,50}; int *p = a+2; 则 p[1] 的值是( )
A. 20 B. 30 C. 40 D. 50
答案:C
解析: p指向a[2](30),p[1]相当于*(p+1)=a[3]=40。
15、以下程序的输出结果是( )
#include <stdio.h>
main() {
int i;
for(i=0; i<3; i++)
switch(i) {
case 0: printf("0");
case 1: printf("1"); break;
case 2: printf("2"); break;
}
}
A. 012 B. 0112 C. 01212 D. 011
答案:B
解析: i=0时,执行case 0,无break,继续case 1,输出"01",然后break跳出switch语句;i=1时,执行case 1,输出"1";i=2时,输出"2"。所以总输出"0112"。
16、关于递归函数,下列说法错误的是( )
A. 递归函数必须有一个结束条件
B. 递归函数适用于任何情况
C. 递归函数一定比非递归函数效率高
D. 递归函数可以解决一些具有递归性质的问题
答案:C
解析: 递归通常效率较低,而且会占用大量内存,因此,是否使用递归函数,要在程序的易读性和性能之间做出抉择。
17、若有定义:char str[20] = "Hello"; 则 strlen(str) 和 sizeof(str) 的值分别是( )
A. 5, 5 B. 5, 20 C. 6, 20 D. 6, 6
答案:B
解析: strlen计算字符串长度,不包括'\0',为5;sizeof计算数组大小,为20。
18、设j为int型变量,则下面for循环语句的执行结果是( )。
for (j = 10; j > 3; j --)
{ if (j % 3) j --;
-- j; -- j;
printf (" %d ", j);
}
A.6 3 B.7 4 C.6 2 D.7 3
答案:B
解析:首先判断 j % 3:若余数非0,则执行 j--。接着连续两次 --j,然后输出当前 j 的值。第一次循环j=10,10%3=1,执行 j-- 得9;两次 --j 后得7;输出7;循环末尾 j-- 得6。第二次循环j=6,6%3=0,不执行 j--;两次 --j 后得4;输出4;循环末尾 j-得3,不满足条件,循环结束。
19、若有定义:int x=5, y=6; 则表达式 (x>y?x:y)++ 是否正确?( )
A. 正确,结果为6
B. 正确,结果为7
C. 错误,因为条件表达式不能作为左值
D. 错误,因为缺少括号
答案:C
解析: 不能对表达式进行自增自减。
20. 以下程序的输出结果是( )
#include <stdio.h>
#define SQR(x) x*x
main() {
int a=3, b;
b = SQR(a+1);
printf("%d", b);
}
A. 16 B. 7 C. 10 D. 9
答案:B
解析: 宏展开为 a+1*a+1 = 3+1*3+1 = 3+3+1=7。
二、多选题(本题共5小题,每小题3分,共15分)
1、以下关于C语言变量的存储类别的叙述中,正确的有( )
A. auto变量在函数调用结束后自动销毁
B. static局部变量在函数调用结束后仍保留其值
C. register变量可以存放在CPU寄存器中
D. extern变量用于声明外部定义的全局变量
答案:ABCD
解析: 所有选项均正确。
2、以下关于字符串处理函数的叙述中,正确的有( )
A. strcpy函数用于复制字符串,会自动添加'\0'
B. strcat函数用于连接字符串,目标数组必须足够大
C. strcmp函数比较两个字符串,相等时返回0
D. strlen函数返回字符串长度,包括'\0'
答案:ABC
解析: strlen不包括'\0',故D错误。
3、以下关于二维数组的叙述中,正确的有( )
A. 二维数组在内存中是按行优先存储的
B. 二维数组名代表首行的首地址
C. 可以通过数组名对二维数组进行自增运算
D. 二维数组的每一行可以看作一个一维数组
答案:ABD
解析: 数组名是常量,不能自增,故C错误。
4、以下关于函数指针的叙述中,正确的有( )
A. 函数指针可以指向不同返回类型和参数类型的函数
B. 函数指针的定义需要指定函数的返回类型和参数类型
C. 函数指针可以作为函数参数
D. 通过函数指针调用函数时,可以不加括号
答案:BC
解析: 函数指针必须与指向的函数类型一致;调用时需加括号和参数;可作为参数。D错误,调用必须加括号。
5、在C语言程序中,以下正确的描述是( )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义必须在调用函数之前定义
D.函数的定义可以在任意位置,如果在调用函数之后,需要在调用函数之前写函数声明
答案:BD
解析: 函数不可以嵌套定义,但可以嵌套调用,函数定义可以在调用函数之前也可以在调用函数之后,若在调用函数之后需要进行函数声明。
三、判断题(本题共10小题,每小题1分,共10分)
1、C语言中,所有函数都是平行的,即函数不能嵌套定义,但可以嵌套调用。( )
答案:√
解析:函数不可以嵌套定义,但可以嵌套调用。
2、在C语言中,数组下标越界编译时一定会报错。( )
答案:×
解析: 编译时不一定报错,运行时可能导致未定义行为。
3、指针变量可以指向数组,也可以指向函数。( )
答案:√
解析:C语言规定指针变量既可以指向数组,也可以指向函数。
4、变量的指针,其含义是指该变量的地址。( )
答案:√
解析:指针就是变量的地址。
5、宏定义 #define 是在编译时进行替换的,不占用内存。( )
答案:√
解析:#define为预处理命令。
6、在C语言中,break 语句只能用于循环语句中。( )
答案:√
解析:break语句可以应用于循环语句和switch语句中。
7、两个结构体变量可以直接用 == 比较是否相等。( )
答案:×
解析: 不能直接比较,需要逐个成员比较。
8、char *p = "hello"; 定义了一个字符指针,指向字符串常量,不能通过p修改字符串内容。( )
答案:√
解析:char *p = "hello"; 中的 "hello" 是字符串常量,通常存储在只读内存区。通过 p 修改其内容会导致未定义行为。若需修改,应定义为字符数组:char p[] = "hello";。
9、在C语言中,static修饰的局部变量在函数调用结束后其值不会丢失,下次调用时仍保持上次的值。( )
答案:√
解析:静态局部变量属于静态存储类型,在静态存储区中分配内存。程序运行开始就给静态局部变量分配内存,运行结束后释放。
10、若有定义int a[10]={5};则语句printf("%d", a++);输出的是6。( )
答案:×
解析:a是数组名,为常量,不能进行自增。
四、填空题(共10小题,每小题1分,共10分)
1、若有定义:int a=5, b=2; 则表达式 a%b 的值是______。
答案:1
2、若有定义:int a=3, b=5, c=7;则表达式(a+=2, b++, c+=a+b)的值是______。
答案:18
解析:逗号运算符从左至右依次计算,整个表达式的值为最后一个表达式的值。先计算a+=2得a=5,再计算b++得b=6,最后计算c+=a+b即c=c+(a+b)得c=18,因此表达式值为18。
3、在C语言中,定义一个指向整型变量的指针变量p,并初始化为指向变量a,语句为______。
答案:int *p = &a;
4、若有定义:char s[] = "World"; 则 printf("%d", sizeof(s)); 输出______。
答案:6
5、函数调用时,如果希望形参的改变影响实参,则应该使用______传递方式。
答案:地址(或指针)
6、若有定义:int a[3][4]; 则 a[2][3] 的另一种指针表示形式是______。
答案:*(*(a+2)+3)
7、若有定义:char s1[20]="Hello", s2[10]="World";则执行strcat(s1, s2);后,s1的内容是______。
答案:"HelloWorld"
解析:strcat函数将s2连接到s1后面,结果保存在s1中,注意字符串末尾自动添加'\0'。
8、若有定义:int x=8; 则执行 x >>= 2; 后x的值为______。
答案:2
解析:右移2位相当于除以4
9、若有定义:struct Student {int num; char name[20];} stu = {1001, "LiMing"};
则stu.num的值是______。
答案:1001
解析:结构体变量stu在定义时进行了初始化,num成员被赋值为1001。
10、以下函数的功能是计算n的阶乘,请将函数补充完整:
int fact(int n) { if (n == 0) return 1; else return __________;}
答案:n * fact(n-1)
解析:递归函数,n的阶乘等于n乘以(n-1)的阶乘,递归结束条件为n=0时返回1。
五、简答题(本题共3题,每题5分,共15分)
1、请简述switch语句的执行流程,并说明break语句在switch中的作用。
答案: switch语句根据表达式的值,依次与各case后的常量表达式匹配,若匹配成功,则从该case处开始执行,直到遇到break或switch结束。break语句用于跳出当前switch结构,防止继续执行后续的case代码。若所有case均不匹配,则执行default分支。
2、请简述for循环与while循环的区别,并举例说明各自适用的场景。
答案: for循环通常用于循环次数已知的情况,将初始化、条件判断、循环变量更新集中在一起,结构清晰;while循环通常用于循环次数未知、仅根据条件判断是否继续的情况,更灵活。例如:遍历数组用for,输入数据直到输入特定值用while。
3、请简述二维数组在内存中的存储方式,并说明如何通过指针访问二维数组元素。
答案: 二维数组在内存中按行优先顺序存储,即先存放第0行所有元素,再存放第1行,依此类推。通过指针访问时,可使用行指针或指针偏移。例如:对于数组int a[3][4],a是首行地址,*(a+i)+j表示第i行第j列元素的地址,*(*(a+i)+j)或a[i][j]表示元素值。
六、编程题(本题共1小题,每小题10分,共10分)
某超市促销活动,顾客购买商品可以参与“满减优惠”。请编写程序实现以下功能:
1、功能要求:
(1)编写函数 int promotion(int *prices, int n, int *discount),计算优惠后的总金额:
通过指针 prices 接收商品单价数组,n 为商品数量;
通过指针 discount 返回优惠金额(即优惠减免的金额);
函数返回优惠后的应付金额。
(2)优惠规则:
计算商品总金额 total;
若 total >= 300,则优惠 total * 0.2(即打8折);
若 200 <= total < 300,则优惠 total * 0.1(即打9折);
若 100 <= total < 200,则优惠 total * 0.05(即打95折);
若 total < 100,则无优惠(优惠0元);
优惠金额向上取整到元(例如优惠23.5元按24元计算)。
(3)主函数要求:
先输入商品数量 n(n ≤ 50);
再输入 n 个商品单价(整数);
调用 promotion 函数计算应付金额和优惠金额;
输出结果格式如:应付金额:256元,优惠金额:32元(优惠金额为实际减免的金额)。
参考答案:
#include <stdio.h>
#include <math.h>
int promotion(int *prices, int n, int *discount) {
int i, total = 0;
float discountAmount = 0;
// 计算总金额
for (i = 0; i < n; i++) {
total += *(prices + i);
}
// 根据总金额计算优惠
if (total >= 300) {
discountAmount = total * 0.2;
} else if (total >= 200) {
discountAmount = total * 0.1;
} else if (total >= 100) {
discountAmount = total * 0.05;
} else {
discountAmount = 0;
}
// 优惠金额向上取整
*discount = (int)ceil(discountAmount);
// 返回应付金额
return total - *discount;
}
main() {
int prices[50];
int n, i, payAmount, discountAmount;
printf("请输入商品数量:");
scanf("%d", &n);
printf("请输入%d个商品单价:", n);
for (i = 0; i < n; i++) {
scanf("%d", prices + i);
}
payAmount = promotion(prices, n, &discountAmount);
printf("应付金额:%d元,优惠金额:%d元
", payAmount, discountAmount);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《编程语言基础-C语言》(高教版第5版)
期末复习卷(三)原卷版
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一、单项选择题(本题共20小题,每小题2分,共40分)
1、下列选项中,均属于C语言关键字的是( )
A. auto int Long B. define printf do
C. static while sizeof D. volatile false default
2、若有定义:int a=5, b=10; 则表达式 (a++) + (++b) + a 的值是( )
A. 21 B. 22 C. 23 D. 24
3、以下关于switch语句的叙述中,正确的是( )
A. switch语句中的case后面可以是常量表达式,也可以是变量
B. 每个case后面必须加break,否则会出错
C. switch语句可以嵌套使用
D. switch语句中default只能出现一次,且必须放在最后
4、若有定义:int a[3][2] = {1,2,3,4,5,6}; 则 a[2][1] 的值是( )
A. 5 B. 6 C. 4 D. 随机值
5、下列函数定义中,正确的是( )
A. int fun(int a, b) { return a+b; }
B. int fun(int a, int b) { return a+b; }
C. int fun(a, b) { return a+b; }
D. int fun(int a; int b) { return a+b; }
6、若有定义:int x=3, y=4, z=5; 则表达式 !(x+y) + y-1 && z/2 的值是( )
A. 0 B. 1 C. 2 D. 3
7、以下关于指针数组的叙述中,正确的是( )
A. 指针数组的每个元素都是指针变量
B. 指针数组只能存放字符型地址
C. 指针数组名是一个指向指针的常量
D. 指针数组与数组指针是同一个概念
8、若有定义:char *s = "C Language"; 则 printf("%c", *s+1); 的输出是( )
A. C B. D C. 68 D. 语法错误
9、以下程序的输出结果是( )
#include <stdio.h>
void fun(int x) {
x = 10;
}
main() {
int y = 5;
fun(y);
printf("%d", y);}
A. 5 B. 10 C. 不确定 D. 编译错误
10、若有定义:int a[10]={0}, *p=a; 则下列表达式不能表示a[1]地址的是( )
A. p+1 B. a+1 C. &a[0]+1 D. *a+1
11、以下关于结构体变量初始化的叙述中,错误的是( )
A. 可以在定义时进行初始化
B. 可以整体赋初值
C. 可以只对部分成员初始化
D. 初始化时成员的顺序必须与定义时一致
12、若有定义:int a=1, b=2, c=3; 则执行 if(a>b) c=a; a=b; b=c; 后,a、b、c的值分别是( )
A. 1,2,3 B. 2,3,2 C. 2,3,3 D. 2,2,3
13、以下程序的输出结果是( )。
main()
{ int x = 2, y = -1, z = 2;
if (x < y)
if (y < 0) z = 0;
else z + = 1;
printf("%d
",z);
}
A.3 B.2 C.1 D.0
14、若有定义:int a[5] = {10,20,30,40,50}; int *p = a+2; 则 p[1] 的值是( )
A. 20 B. 30 C. 40 D. 50
15、以下程序的输出结果是( )
#include <stdio.h>
main() {
int i;
for(i=0; i<3; i++)
switch(i) {
case 0: printf("0");
case 1: printf("1"); break;
case 2: printf("2"); break;
}
}
A. 012 B. 0112 C. 01212 D. 011
16、关于递归函数,下列说法错误的是( )
A. 递归函数必须有一个结束条件
B. 递归函数适用于任何情况
C. 递归函数一定比非递归函数效率高
D. 递归函数可以解决一些具有递归性质的问题
17、若有定义:char str[20] = "Hello"; 则 strlen(str) 和 sizeof(str) 的值分别是( )
A. 5, 5 B. 5, 20 C. 6, 20 D. 6, 6
18、设j为int型变量,则下面for循环语句的执行结果是( )。
for (j = 10; j > 3; j --)
{ if (j % 3) j --;
-- j; -- j;
printf (" %d ", j);
}
A.6 3 B.7 4 C.6 2 D.7 3
19、若有定义:int x=5, y=6; 则表达式 (x>y?x:y)++ 是否正确?( )
A. 正确,结果为6
B. 正确,结果为7
C. 错误,因为条件表达式不能作为左值
D. 错误,因为缺少括号
20. 以下程序的输出结果是( )
#include <stdio.h>
#define SQR(x) x*x
main() {
int a=3, b;
b = SQR(a+1);
printf("%d", b);
}
A. 16 B. 7 C. 10 D. 9
二、多选题(本题共5小题,每小题3分,共15分)
1、以下关于C语言变量的存储类别的叙述中,正确的有( )
A. auto变量在函数调用结束后自动销毁
B. static局部变量在函数调用结束后仍保留其值
C. register变量可以存放在CPU寄存器中
D. extern变量用于声明外部定义的全局变量
2、以下关于字符串处理函数的叙述中,正确的有( )
A. strcpy函数用于复制字符串,会自动添加'\0'
B. strcat函数用于连接字符串,目标数组必须足够大
C. strcmp函数比较两个字符串,相等时返回0
D. strlen函数返回字符串长度,包括'\0'
3、以下关于二维数组的叙述中,正确的有( )
A. 二维数组在内存中是按行优先存储的
B. 二维数组名代表首行的首地址
C. 可以通过数组名对二维数组进行自增运算
D. 二维数组的每一行可以看作一个一维数组
4、以下关于函数指针的叙述中,正确的有( )
A. 函数指针可以指向不同返回类型和参数类型的函数
B. 函数指针的定义需要指定函数的返回类型和参数类型
C. 函数指针可以作为函数参数
D. 通过函数指针调用函数时,可以不加括号
5、在C语言程序中,以下正确的描述是( )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义必须在调用函数之前定义
D.函数的定义可以在任意位置,如果在调用函数之后,需要在调用函数之前写函数声明
三、判断题(本题共10小题,每小题1分,共10分)
1、C语言中,所有函数都是平行的,即函数不能嵌套定义,但可以嵌套调用。( )
2、在C语言中,数组下标越界编译时一定会报错。( )
3、指针变量可以指向数组,也可以指向函数。( )
4、变量的指针,其含义是指该变量的地址。( )
5、宏定义 #define 是在编译时进行替换的,不占用内存。( )
6、在C语言中,break 语句只能用于循环语句中。( )
7、两个结构体变量可以直接用 == 比较是否相等。( )
8、char *p = "hello"; 定义了一个字符指针,指向字符串常量,不能通过p修改字符串内容。( )
9、在C语言中,static修饰的局部变量在函数调用结束后其值不会丢失,下次调用时仍保持上次的值。( )
10、若有定义int a[10]={5};则语句printf("%d", a++);输出的是6。( )
四、填空题(共10小题,每小题1分,共10分)
1、若有定义:int a=5, b=2; 则表达式 a%b 的值是______。
2、若有定义:int a=3, b=5, c=7;则表达式(a+=2, b++, c+=a+b)的值是______。
3、在C语言中,定义一个指向整型变量的指针变量p,并初始化为指向变量a,语句为______。
4、若有定义:char s[] = "World"; 则 printf("%d", sizeof(s)); 输出______。
5、函数调用时,如果希望形参的改变影响实参,则应该使用______传递方式。
6、若有定义:int a[3][4]; 则 a[2][3] 的另一种指针表示形式是______。
7、若有定义:char s1[20]="Hello", s2[10]="World";则执行strcat(s1, s2);后,s1的内容是______。
8、若有定义:int x=8; 则执行 x >>= 2; 后x的值为______。
9、若有定义:struct Student {int num; char name[20];} stu = {1001, "LiMing"};
则stu.num的值是______。
10、以下函数的功能是计算n的阶乘,请将函数补充完整:
int fact(int n) { if (n == 0) return 1; else return __________;}
五、简答题(本题共3题,每题5分,共15分)
1、请简述switch语句的执行流程,并说明break语句在switch中的作用。
2、请简述for循环与while循环的区别,并举例说明各自适用的场景。
3、请简述二维数组在内存中的存储方式,并说明如何通过指针访问二维数组元素。
六、编程题(本题共1小题,每小题10分,共10分)
某超市促销活动,顾客购买商品可以参与“满减优惠”。请编写程序实现以下功能:
1、功能要求:
(1)编写函数 int promotion(int *prices, int n, int *discount),计算优惠后的总金额:
通过指针 prices 接收商品单价数组,n 为商品数量;
通过指针 discount 返回优惠金额(即优惠减免的金额);
函数返回优惠后的应付金额。
(2)优惠规则:
计算商品总金额 total;
若 total >= 300,则优惠 total * 0.2(即打8折);
若 200 <= total < 300,则优惠 total * 0.1(即打9折);
若 100 <= total < 200,则优惠 total * 0.05(即打95折);
若 total < 100,则无优惠(优惠0元);
优惠金额向上取整到元(例如优惠23.5元按24元计算)。
(3)主函数要求:
先输入商品数量 n(n ≤ 50);
再输入 n 个商品单价(整数);
调用 promotion 函数计算应付金额和优惠金额;
输出结果格式如:应付金额:256元,优惠金额:32元(优惠金额为实际减免的金额)。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$