计算机二级C语言上机技巧.docx
- 文档编号:30044366
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:38
- 大小:45.73KB
计算机二级C语言上机技巧.docx
《计算机二级C语言上机技巧.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言上机技巧.docx(38页珍藏版)》请在冰豆网上搜索。
计算机二级C语言上机技巧
上机技巧
一、填空题
字符串考试内容占30%,数学类型题占25%,结构体类型题占25%,数组内容占20%,文件内容占5%,有些既有文件又有结构体,如填空题第22题,有些既有字符串又有结构体,如填空题第2题。
填空题注意的事项:
1、在每个/*found*/下有一空需要我们填写,标记如“__1__”。
2、把标记如“__1__”等去掉后填写正确内容。
3、不要改变程序其他任何地方,也不得增加或删除一行。
4、运行程序(自动提示保存程序),根据运行结果检验答案是否正确。
(一)、定义变量或类型名
1、给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。
当调用正确时,程序输出:
x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
doublef1(doublex)
{returnx*x;}
doublef2(doublex,doubley)
{returnx*y;}
/**********found**********/
__1__fun(inti,doublex,doubley)
{if(i==1)
/**********found**********/
return__2__(x);
else
/**********found**********/
return__3__(x,y);
}
main()
{doublex1=5,x2=3,r;
r=fun(1,x1,x2);
r+=fun(2,x1,x2);
printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n\n",x1,x2,r);
}
其中第一空填写的就是函数返回值的类型名,根据return后面的表达式的值的类型就是函数返回值的类型,而return__2__(x);和return__3__(x,y);这样的表达形式只有在函数中存在,而我们定义的f1和f2函数在后面没有用到,不可能无缘无故的使用变量或函数,所以可以分析出这两空一定是填f1,f2函数,具体填哪个,根据他们的形式参数来确定,f1有一个形参,f2有两个形参,实际参数跟形式参数个数一致,类型一致,一一对应,所以第2空填写f1,第3空填写f2,第一空很明显填写double型。
运行后如果得到=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000,那就说明做正确了。
2、程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。
函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
#include
#include
structstudent{
longsno;
charname[10];
floatscore[3];
};
voidfun(structstudenta[],intn)
{
/**********found**********/
__1__t;
inti,j;
/**********found**********/
for(i=0;i<__2__;i++)
for(j=i+1;j /**********found**********/ if(strcmp(__3__)>0) {t=a[i];a[i]=a[j];a[j]=t;} } main() {structstudents[4]={{10001,"ZhangSan",95,80,88},{10002,"LiSi",85,70,78}, {10003,"CaoKai",75,60,88},{10004,"FangFang",90,82,87}}; inti,j; printf("\n\nTheoriginaldata: \n\n"); for(j=0;j<4;j++) {printf("\nNo: %ldName: %-8sScores: ",s[j].sno,s[j].name); for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]); printf("\n"); } fun(s,4); printf("\n\nThedataaftersorting: \n\n"); for(j=0;j<4;j++) {printf("\nNo: %ldName: %-8sScores: ",s[j].sno,s[j].name); for(i=0;i<3;i++)printf("%6.2f",s[j].score[i]); printf("\n"); } } 这道题是有关结构体的题目,首先看清楚题目的要求,按照姓名的字典顺序从小到大排序,第一空就是函数体内的定义部分,定义t的类型,根据t=a[i];我们发现他们的类型是一致的,已有定义structstudenta[],很明显t也是这个类型,这样第一空填structstudent。 第2空是填写循环条件,根据for(i=0;i<__2__;i++)for(j=i+1;j 运行后按照姓名的字典序(从小到大)排序,说明这题做对了。 (二)、while、if、for语句的表达式 8、给定程序中,函数fun的功能是: 在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。 ss所指字符串数组中共有N个字符串,且串长小于M。 #include #include #defineN5 #defineM10 intfun(char(*ss)[M],intk) {inti,j=0,len; /**********found**********/ for(i=0;i<__1__;i++) {len=strlen(ss[i]); /**********found**********/ if(len<=__2__) /**********found**********/ strcpy(ss[j++],__3__); } returnj; } main() { Charx[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"}; inti,f; printf("\nTheoriginalstring\n\n"); for(i=0;i f=fun(x,7); printf("Thestringwitchlengthislessthanorequalto7: \n"); for(i=0;i } 这道题是有关字符串的题目,x[N][M]有5个字符串,删除所有串长超过k的字符串,第1空填写循环结束条件,比较完5个字符串长度是否超过k就结束,所以这空填N(常量5),第2空跟k比较长度,很明显填k,最后一空是字符串函数strcpy复制字符串,strcpy两个参数都必须为指针,这空只能填ss[i],把长度小于等于k的字符串全部复制到ss[j]中,j++实现j自增。 运行检验结果。 (三)、函数调用 5、给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。 例如,主函数中输入字符串: 32486和12345,在主函数中输出的函数值为: 44831。 #include #include #include #defineN9 longctod(char*s) {longd=0; while(*s) if(isdigit(*s)){ /**********found**********/ d=d*10+*s-__1__; /**********found**********/ __2__;} returnd; } longfun(char*a,char*b) { /**********found**********/ return__3__; } main() {chars1[N],s2[N]; do {printf("Inputstrings1: ");gets(s1);} while(strlen(s1)>N); do {printf("Inputstrings2: ");gets(s2);} while(strlen(s2)>N); printf("Theresultis: %ld\n",fun(s1,s2)); } 这道题是有关字符串的,把字符串转成数据并相加。 其中有2个函数,ctod和fun函数,其中fun函数内容很简单,直接return表达式,ctod函数定义后,主函数中没有被调用,所以第三空填写ctod函数调用。 isdigit函数是判断是否有数字,if(isdigit(*s))如果是数字,则执行语句d=d*10+*s-__1__;,,具体减去什么,我们发现*s的内容是字符,如‘2’字符如何转化为数字2,我们只有通过ASCII码转换,减去48(‘0’的ASCII码码值)即可得到相应的数字。 所以第一空填‘0’,第二空是循环体的一部分,循环是由*s来控制,如果没变化就会产生死循环,所以第二空使指针s下移,不断地接收字符串中的值。 第3空根据题目要求要把两个数加起来,但是ctod参数只有一个,每一次只能转化一个字符串,所以这空填ctod(a)+ctod(b)。 运行后入字符串: 32486和12345,得到44831,说明做正确了。 函数调用特别要注意实际参数必须与形参个数一致,类型一致,一一对应,特别注意字符串函数stycpy,strcmp,strlen等函数的调用形式。 (四)、初值 6、给定程序中,函数fun的功能是: 计算下式前n项的和作为函数值返回。 例如,当形参n的值为10时,函数返回: 9.612558。 #include doublefun(intn) {inti;doubles,t; /**********found**********/ s=__1__; /**********found**********/ for(i=1;i<=__2__;i++) {t=2.0*i; /**********found**********/ s=s+(2.0*i-1)*(2.0*i+1)/__3__; } returns; } main() {intn=-1; while(n<0) {printf("Pleaseinput(n>0): ");scanf("%d",&n);} printf("\nTheresultis: %f\n",fun(n)); } 这是一道有关数学的题目,先把这数学式子看下,思考下分子和分母有什么规律,然后再做题,第一空填的是s的初值,根据s=s+(2.0*i-1)*(2.0*i+1)/__3__;我们可以看出s是用来求整个式子的和,式子的每一项都存在规律,所以初值为0,那么第一空就填0,第二空是控制循环的条件,这个式子(2.0*i-1)*(2.0*i+1)/__3__跟题目给出的式子比较,发现i最大只能为n,所以第二空填n,第三空之前有定义了一个变量t,没被用到过,所以第三空肯定是填跟t有关内容,根据分析第三空填t*t。 运行输入10,值为9.612558,说明做对了。 (五)、变量或指针的自增自减 14、给定程序中,函数fun的功能是: 将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参s所指的字符串为: abs5def126jkm8,程序执行后的输出结果为: 22。 #include #include #include intfun(char*s) {intsum=0; while(*s){ /**********found**********/ if(isdigit(*s))sum+=*s-__1__; /**********found**********/ __2__; } /**********found**********/ return__3__; } main() {chars[81];intn; printf("\nEnterastring: \n\n");gets(s); n=fun(s); printf("\nTheresultis: %d\n\n",n);} 这道题跟第5题有点类似,都是把字符串中的数字字符转为对应的数值,不同的是第5题是把两个字符串转成面值相同的整数并相加,这道题把1个字符串中的各个数值相加。 第一空是把所有是数字的加进sum中,所以同样的第一空填写’0’,第2空指针下移,填写s++,最后一空返回的是这些数值的累加和,而sum正是求这些数值的累加和,所以填sum。 输入abs5def126jkm8,程序执行后的输出结果为22,则正确。 (六)、return表达式 前面的第1题,第5题,第14题都使用到return,这里就不再列举。 (七)、文件指针 28、给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 #include #include voidfun(char*s,inta,doublef) { /**********found**********/ __1__fp; charstr[100],str1[100],str2[100]; inta1;doublef1; fp=fopen("file1.txt","w"); fprintf(fp,"%s%d%f\n",s,a,f); /**********found**********/ __2__; fp=fopen("file1.txt","r"); /**********found**********/ fscanf(__3__,"%s%s%s",str,str1,str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf("\nTheresult: \n\n%s%d%f\n",str,a1,f1); } main() {chara[10]="Hello! ";intb=12345; doublec=98.76; fun(a,b,c); } 这是一道典型的文件题目,第一空很明显填写定义指针的形式,回忆下文件那张,定义文件指针为FILE*fp,一定要大写还要记得加*号。 接着以写的方式打开文件,第二空之后又出现了以读的方式打开文件,我们知道文件打开完了要关闭文件,才能再对文件进行其他的读写操作。 所以第二空填写关闭文件,关闭文件调用fclose(文件指针),第二空填fclose(fp)。 fscanf函数中的第一个参数是我们要填写的,fscanf(文件指针,格式控制字符串,输入项表),所以第三空填fp。 运行检验结果。 文件中考得多的就是文件指针,如FILE*fp,feof(fp),fclose(fp),fp,还有就是文件打开方式读文本文件r、读二进制文件rb,写文本文件w、写二进制文件wb。 (八)、指向结构体成员运算符--->和结构体成员运算符. 23、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。 函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量t中的学号、姓名、和三门课的成绩依次是: 10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为: 10004、"LiJie"、93、85、87。 #include #include structstudent{ longsno; charname[10]; floatscore[3]; }; voidfun(structstudent*b) {inti; /**********found**********/ b__1__=10004; /**********found**********/ strcpy(b__2__,"LiJie"); } main() {structstudentt={10002,"ZhangQi",93,85,87}; inti; printf("\n\nTheoriginaldata: \n"); printf("\nNo: %ldName: %s\nScores: ",t.sno,t.name); for(i=0;i<3;i++)printf("%6.2f",t.score[i]); printf("\n"); /**********found**********/ fun(__3__); printf("\nThedataaftermodified: \n"); printf("\nNo: %ldName: %s\nScores: ",t.sno,t.name); for(i=0;i<3;i++)printf("%6.2f",t.score[i]); printf("\n"); } 这是一道结构体题,考的内容是函数之间结构体变量的数据传递,函数fun的功能是对形参b所指结构体变量中的数据进行修改,所以传递的是结构体变量的地址,第三空考的是函数调用,实际参数就是&t,所以第三空填&t,t中的学号10002变成10004,所以结构体指针变量b指向学号(sno)变成10004;所以bsno=10004,第一空填—>,strcpy(b__2__,"LiJie");这是对姓名进行赋值的一种方式,所以第二空填name>。 运行后结果为10004、"LiJie"、93、85、87,则正确。 47、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。 所有学生数据均以二进制方式输出到文件中。 函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。 #include #defineN5 typedefstructstudent{ longsno; charname[10]; floatscore[3]; }STU; voidfun(char*filename) {FILE*fp;inti,j; STUs[N],t; /**********found**********/ fp=fopen(filename,__1__); fread(s,sizeof(STU),N,fp); fclose(fp); for(i=0;i for(j=i+1;j /**********found**********/ if(s[i].sno__2__) {t=s[i];s[i]=s[j];s[j]=t;} fp=fopen(filename,"wb"); /**********found**********/ __3__(s,sizeof(STU),N,fp); fclose(fp); } main() {STUt[N]={{10005,"ZhangSan",95,80,88},{10003,"LiSi",85,70,78}, {10002,"CaoKai",75,60,88},{10004,"FangFang",90,82,87}, {10001,"MaChao",91,92,77}},ss[N]; inti,j;FILE*fp; fp=fopen("student.dat","wb"); fwrite(t,sizeof(STU),5,fp); fclose(fp); printf("\n\nTheoriginaldata: \n\n"); for(j=0;j {printf("\nNo: %ldName: %-8sScores: ",t[j].sno,t[j].name); for(i=0;i<3;i++)printf("%6.2f",t[j].score[i]); printf("\n"); } fun("student.dat"); printf("\n\nThedataaftersorting: \n\n"); fp=fopen("student.dat","rb"); fread(ss,sizeof(STU),5,fp); fclose(fp); for(j=0;j {printf("\nNo: %ldName: %-8sScores: ",ss[j].sno,ss[j].name); for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]); printf("\n");} } 这道题既有结构体又有文件,所有学生数据均以二进制方式输出到文件中。 函数fun的功能是从形参filename所指的文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 上机 技巧
![提示](https://static.bdocx.com/images/bang_tan.gif)