1.卷子中的部分答案并非唯一,仅供参考 2.本总结是按题型进行分类的 3.2022年题型略微进行了改变,添加了程序分析题
1. 根据要求写出C语言表达式 2016年(20分) (1)三元运算符 ※答:f(n) = (n==1)?2:2*n*f(n-1);
(2)※答: (6*pow(x,4)+5*pow(y,3))/(4*a-2*pow(b,2))+(2*pow(x,5)-3*pow(y,2))/3*a*b 总结:
不用考虑a/b这些变量是否有定义,直接当成定义好就行了,不需要写int a、b,此题中,x的4次方可以写成x*x*x*x,但建议使用pow函数注意添加必要的括号,增加阅读性和准确性(3)※答:(x*x)/(a*a)+(y*y)/(b*b)= 2
2017年(20分) (1)※答: (a1+a2+a3+a4)>= 315 && a1 >= 50 && a2 >= 75 && a3 >= 50 && a4 >= 75 备注: 注意不要漏了总分的情况
(2)答: cos(5*a+3*b)/(4*pow(x,2)-7*pow(y,2))+sin(6*c-5*d)/(5*pow(x,3)+2*pow(y,3))
(3)答: (c-a)*d - (c-b)*e
(4)答: (x%3 == 0)+(y%3 == 0)+(z%3 == 0)>=2 && (x%5 == 0)+(y%5== 0)+(z%5 == 0)>=2
2018年(10分) (1)答: (x > 0 && x < 100) + (y > 0 && y < 100) + (z > 0 && z < 100) >= 2 备注: 注意细节问题:0-100一般不包含0和100
(2)取反 ※答: !(k > 12 && p > 12) && !((k >= 8 && k 12 )||(p >= 8 && p 12)) && !(k < 8 && p < 8) 备注: 分析,不是优秀,也不是良好,也不是一般就是中等了,根据这个思想取反即可
2019年(12分) (1)(2)答: (1) !(c >= '0' && c =0,是ASCII码大于等于0,而c>=‘0’,是c大于0的ASCII码 (2) 答: n % 1000 % 100 % 10 == n % 1000 / 100
(3)方法的定义 ※答: int find(char a[10],char b[10]){} 备注: 注意参数类型,变量名不要重复
(4)文件的操作 ※答: str = fgets(str,10,fp) 备注: 复习文件的基本操作,读写的函数参数!
2020年 (10分) (1)答: (x > 0)+ (y > 0)+(z > 0)>= 2
(2)答: gender = age >= 60?m:f
2021年(10分) (1)勾股定理 ※答: (a == sqrt(b*b +c*c))|| (b == sqrt(a*a +c*c)) || (c == sqrt(b*b +a*a))
(2)答: (a >= 85) && ((b >= 1) + (c >= 1) + (d >=1) >= 2) 备注: 注意条件的阅读
2022年(10分) (1)增长率问题 ※答: (s2-s1) / s1 = 80) + (b >= 70) + (c >= 70) == 3 || ((a >= 80) + (b >= 70) + (c >= 70) >=2 && (a+b+c)>=240 ) 备注: 要特别注意审题!
总结注意: 1.此种类型的题目要求一个语句搞定,不能出现多个语句 2.细心读懂题目给出的条件,注意且和或等字眼 3.注意常见的数学公式:勾股定理、增长率(2022年)等…… 4.使用数字来表示条件表达式的出题形式每年必出!! 5.注意一些函数公式:pow、sqrt等…… 6.注意书写格式:乘除号、括号、恒等比较==、三元运算符 7.有时可以利用取反的思想来解决问题(2018年第二题) 8.有时候还会出现书写方法的题型(2019年第三题) 9.注意考察文件操作(2019年出现过)
2. 写出表达式的值(2018年新增题型) 2018年(12分)答: ※(1)4 (2)2 (3)0 (4)-1 备注: 注意数据类型,不要看错数
2019年(12分)答: (1)1 (2)3 (3)3 (4)20 备注: 1.注意各运算符的优先级 2.注意自增自减运算符的数值变化 3.注意数据类型的转化 4.注意逻辑运算符的判断及短路
2020年(12分)答: ※(1)0.800000 (2)6 (3)1 (4)5 备注: 1.浮点型数据默认保留6位小数 2.注意三元运算符的计算
2021年(12分)答: (1)16.000000 (2)-2 (3)1 (4)8.800000
2022年(12分)答: (1)1 ※(2)1※ (3)0 ※(4)1.000000 备注: 1.逗号表达式 2.短路的运算规则
总结1.&&的优先级大于||
printf("%d", 1 || 1 && 0);//1printf("%d", 0 && 1 || 1);//1printf("%d", 0 || 1 && 0);//02.逗号表达式
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。 (2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。 (3) 逗号运算符的优先级别在所有运算符中最低。
3.注意数据类型和小数位(默认保留6位) 4.逗号表达式并不会马上赋值,而是先计算 例如:x=(x,2)-x先计算小括号等于2,再减去x原来的值,作差得到新值
3. 程序阅读题(2016-2021年)、程序分析题(2022年新增) 2016年(30分) (1)条件累加求和答: t=63
(2)打印左直角三角形答: ********* ******* ***** *** *
(3)递归问题答: 结果是:-39
(4)二维数组答: 5,6,29,31, Sum=31
(5)字符串删除元素+指针+字符串函数(strcpy)※
答: 976680415029 分析: 补充: 1.strcpy(参数1,参数2):是整体替换,参数2替换参数1,如上图 2.字符串类型如果使用*p作为判断,一直到’\0’结束,int类型数组会遇到0结束
2017年(30分) (1)左直角三角形答: 555555555 4444444 33333 222 1
(2)查找字符在字符串中的位置(二分查找)答: 字符k的位置是:6 补充: 使用了二分查找
(3)字符串排序问题(strcpy)
答: 结果是:bcefjkmswy
(4)递归(取个位、十位、百位)※答: 6,9,3, 备注: 注意打印的格式!
(5)数组的综合应用
0 6 1 0 0 4 0 1 补充: 1.%3d代表长度为3,默认右对齐即【空格空格数字】,数据长度大于3时无效
2018年(30分) (1)方法的调用、返回值答: 1
(2)字符串元素的删除(strcpy)
答: bc@jxf.d.cn
(3)递归(static关键字、求阶乘)※
答: 5 4 3 2 1 120 补充: 1.static关键字只会执行一次,全局共享全局唯一
(4)删除数组中指定的元素(双指针法)答: mzing 补充: 1.%s会以’\0’作为结束输出
(5)二维数组答: 0 2 4 6 8 10
2019年(30分) (1)方法的调用答: 9
(2)求和、方法调用、循环、数组答: i=1:sum=20 i=2:sum=30 i=3:sum=45
(3)数组+指针答: 6.0,20
(4)二维数组(查找元素的位置)答: a[3][0] a[3][1] a[2][1] a[2,1]=7
(5)递归(倒叙打印数字)答: 0 8 9 7
2020年(30分) (1)嵌套循环(3层)答: 210 310 320 321 410 420 421 430 431 432 count=10
(2)递归(逆序输出字符串字符) (3)方法的调用(static)答: 1 3 6 10 15
(4)二维数组、嵌套循环、指针的操作答: 0 2 4 1 3 5 2 4 6 补充: 1.指针-指针=间隔步长
(5)数组+指针(大小写转换)
答: Hello world!
2021年(30分) (1)循环、判断答: x=2,y=0 x=3,y=0 x=6,y=6 x=9,y=18 x=12,y=36 x=15,y=60 x=18,y=90 x=21,y=126 x=24,y=168 x=27,y=216 x=30,y=270 x=33,y=330
(2)递归(打印字符串)
答: goodforyou
(3)数组+循环(打印30内的所有质数)答: 2 3 5 7 11 13 17 19 23 29
(4)方法调用(static、三元运算符)答: 1 -1 2 -2 3
(5)二维数组(矩阵的乘法)答: 30 60 70 140
2022年(30分) (1)找最大最小数(打擂台)※答: (1)不能确保a、b、c、d均能被赋初值。例如:当用户输入第一个数为正数时,只有a、c被赋予了初值,b、d此时并未被赋值,这会导致在后续输入时有可能将输入的数与未被赋初值的b、d进行大小比较,程序会出错。 (2)未考虑输入值为0的情况。0不属于正整数或负整数,而示例代码却将负整数与0归为一类进行处理,这会导致当用户输入0时,最大负整数的取值恒为0,显然不合理。 备注: 这种类型的题目主要难在讨论出所有情况
(2)方法调用、数组、指针(strcmp)※
答: 9998665128 补充: strcmp函数说明
(3)递归(static、进制转换)※
答: before:110 after:1232 该程序将输入的十进制整数转化为四进制整数后输出显示
(4)字符串压缩存储答: The result is: 3ab2c3b 该程序将输入的字符串进行压缩存储,压缩规则为:如果有多个连续相同的字符,则以“连续重复出现次数+1个该字符”的方式存储,比如将“aaa”存储为“3a”
(5)二维数组(对称矩阵)
答: 0 0 1 0 1 0 1 0 0 True.
总结1.总体来说,此类题型难度较小 2.2022年题型大改,需要找出程序中出现的错误,并且说明程序的作用,可以借阅课本经典程序,了解一些常用的程序设计 3.要知道字符串函数strcmp、strcpy几乎必考 4.要知道递归、static等语法的使用 5.要知道指针的几种表示方式及使用 6.要了解二维数组的基本概念及操作 7.要注意printf函数打印的内容,避免遗漏,注意换行和类型等,例如:%3d、%.1f、\n……
4. 程序填空题 2016年(20分) (1)折半查找法
答: ①:key ②:pos+1 补充: 1.数组的长度可以用数组的sizeof除数组类型的sizeof
(2)文件的操作③:ch =0;j--
总结1.早一些年份的题目读懂题就能填了,20年后的题需要进行反复阅读研究 2.可以关注一些重要线索,例如头文件信息,有时会给予填空提示 3.填空有时具有对称性,填不出来时可以猜 4.多阅读课本上的一些经典程序,有时候就是原题挖空的 5.注意在填空时,char类型数据有时可能需要数据转换