前言:
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)<1
注意审题,不用想太多,考虑根号什么的
(4)※
答:
(r%13 == 0) +(s%13 == 0) +(t%13 == 0) +(u%13 == 0) +(v%13 == 0) +(w%13 == 0) >= 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 > 12 )||(p >= 8 && p <= 12 && k >12)) && !(k < 8 && p < 8)
备注:
分析,不是优秀,也不是良好,也不是一般就是中等了,根据这个思想取反即可
2019年(12分)
(1)(2)
答:
(1)
!(c >= '0' && c <= '9')
注意:
这里不能写数字,必须写字符
,二者含义不一样,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 <= 0.3
备注:
需要积累一些常见的公式
(2)※
答:
(a >= 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);//1 printf("%d", 0 && 1 || 1);//1 printf("%d", 0 || 1 && 0);//0
2.逗号表达式
(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 <= ‘Z’
④:i++
2017年(20分)
(1)递归(阶乘问题)
答:
①:n*fac(n-1)
(2)逆序打印
答:
②:*ph=*pt
③:data[k]
拓展:
可以利用本题指针的大小关系进行反转
(3)进制转换 ※
答:
④:h[i] <= 'F' && h[i] >= 'A'
⑤:p*h[i]
2018年(20分)
(1)完数(利用sqrt函数,课本经典程序)※
答:
①:m=sqrt(n)
②:s-=m
拓展:
C语言的复合赋值运算问题
x += 3 /* 等价于x=x+3 /
y = x + 6 / 等价于y=y(x+6),而不是y=y*x+6 */
(2)数组中元素的和及平均值(课本程序)※
答:
③:a,10,&avg,&sum
④:*psum = 0
⑤:(*psum)+=a[i]
拓展:
1.此题尤其注意方法传参的书写格式,形参接收的参数为指针,实参需要传递地址!
2.使用复合赋值运算符时,指针引用时加上括号
2019年(20分)
(1)主串中寻找子串 ※
①:
t[j] != '\0'
②:i++
拓展:
此题第②空i++有点牵强,属于该题特有的特殊情况
(2)二维数组(加权平均成绩)※
答:
①:int s[4][N],int c[N]
②:sum2+=c[i]
③:sum1+=s[i][j]*c[j]
补充:
1.本题还可以使用指针的方式进行表达
2.注意方法的声明,方法的声明里涵盖了参数类型信息
2020年(20分)
(1)二维数组(矩阵)
答:
①:a[i][k]=a[n-1-k][n-1-i]
②:found == 0
(2)字符串信息提取 ※
答:
③:num = num * 10 + (int)(*p-'0')
④:flag = 0
⑤:p++
拓展:
注意char类型的类型转换
2021年(20分)
(1)字符转换
答:
①:str[i]-'A'
②:str[i]-'a'
(2)类型转换 ※
答:
③:s++
④:k*=10
⑤:-d
2022年(15分)
(1)数组的综合
答:
①:arr1[arrSize-1]=temp;
②:arr1Rotate(arr1,ctr,N)
(2)二维数组(统计字符串)
答:
①:words[j][k++]
②:k=0
③:j=k-1;j>=0;j--
总结
1.早一些年份的题目读懂题就能填了,20年后的题需要进行反复阅读研究
2.可以关注一些重要线索,例如头文件信息,有时会给予填空提示
3.填空有时具有对称性,填不出来时可以猜
4.多阅读课本上的一些经典程序,有时候就是原题挖空的
5.注意在填空时,char类型数据有时可能需要数据转换