《编程语言基础-C语言》(高教版第5版)期末复习卷(三)(山东版)

2026-03-25
| 2份
| 17页
| 27人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 第3章 分支结构程序设计,第5章 数组,第6章 函数
类型 题集-专项训练
知识点 数据类型和简单程序设计,分支结构,循环结构,数组,函数
使用场景 同步教学-期末
学年 2026-2027
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 131 KB
发布时间 2026-03-25
更新时间 2026-03-25
作者 xkw_063129603
品牌系列 学易金卷·期末模拟卷
审核时间 2026-03-25
下载链接 https://m.zxxk.com/soft/56997003.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

《编程语言基础-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元(优惠金额为实际减免的金额)。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

《编程语言基础-C语言》(高教版第5版)期末复习卷(三)(山东版)
1
《编程语言基础-C语言》(高教版第5版)期末复习卷(三)(山东版)
2
《编程语言基础-C语言》(高教版第5版)期末复习卷(三)(山东版)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。