由于本人非科班出身,刷题时遇到许多麻烦,发现也几乎没有专门用C语言整理的PAT乙级答案,故写此总结希望能帮助一些像我一样刚开始遇到困难的初学者。不过本人水平有限,有的题会得不了满分,也希望大佬能帮助本人指出错误。
详细思路有时间再写吧,代码都是自己手动敲的,如果有疑问可以评论或者私信我
本文末有个别函数及原理简单补充。
题目原地址
(注意:的时候把中文注释删掉,不然可能报错或扣分)
(得分)(满分)
1001(15)(15)
1002(20)(20)
1003(20)(20)
1004(20)(20)
1005(25)(25)
1006(15)(15)
1007(18)(20)
1008(20)(20)
1009(20)(20)
1010(25)(25)
1011(15)(15)
1012(19)(20)
1013(19)(20)
1014(18)(20)
1015(25)(25)
1016(15)(15)
1017(18)(20)
1018(18)(20)
1019(13)(20)
1020
1021(15)(15)
1022(20)(20)
1023(20)(20)
1024(20)(20)
这些是自己的话总结的,为了方便理解,有些不是很严谨,见谅。
1.scanf函数的用法
(1)scanf("%s",str);
遇到空格即结束。 用scanf("%[^\n]",str);
代表遇到回车键才终止
2.sprintf函数用法
简单记法:char a[100]; int b=99; sprintf(a,"C://SD%d.sd32",b);
将数组a进行了以上操作后a=="C://SD99.sd32"
。
也就是把sprintf()中双引号部分都赋值给了a,每个字符保存到一个a[i]中,如果双引号中有输入输出控制符,例如%d,那么要在后面加上这些数
3.char类型都是以ASCII码储存的,可以对照查表
例如char a='1';char b='!';printf("%c,%d,%c,%d",a,a,b,b);
最后输出结果应该是1 49 ! 33
因为在ASCII码中,字符‘1’(注意数字1和字符’1’是两个概念)对应的编号是49,字符’!'对应的编号是33
故可以把char类型当做int类型来用,但是要查找符号对应的数字编号,例如char a=7; int b=3; b=a-48; printf("%d",b);
最后输出的是7,b=a-'0'
也是一样效果。不清楚的可以查一下ASCII码。
4.qsort函数用法
函数原型:void qsort(void *base,size_t num,size_t width,int (*compare)(const void*,const void*))
qsort 函数一共有四个参数,第一个参数是数组的首地址,第二个参数是数组的元素个数,第三个参数是每个元素的字节数,第四个参数是一个指向函数的指针,表示调用的比较函数的函数名。
假如要对一个整型数组排序的话,比较函数应该写成以下形式:
int fun(const void *a1,const void *a2)
{
int *b1=( int *)a1;
int *b2=( int *)a2;
if (b1<b2)
return -1; //ruturn -1代表a1排在a2前面,即b1排在b2前面,即升序
if (b1==b2)
return 0;
else return 1;//return 1代表a1排在a2后面,与-1相反
}