资源描述
,Logo,*,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title stylea,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,二级C语言强化班上机培训讲义,2,1、考生开考前30前钟进入候考室,交验准考证和身份证。,2、开考之前,先运行一下VC和看一下输入法是否符合自己的习惯。,3、记得保存一份试题目录中的所有文件,以免出错或去掉注释符后自己都不知道自己改了什么。,4、调试程序的时候,可以在调试窗口设变量显示中间值看正不正确。,5、如果调试运行时死循环,可以按CtrlBreak中断死循环,不需要重新启动机器。,6、出现异常应该举手报告监考老师,他们有各种密码,包括抽题密码、重抽密码和延时密码。,上机考试注意事项,3,考生文件夹是放置题目提供的源程序、考生存放答题结果的唯一位置。,考生做完题目后必须将结果存放在考生文件夹中,否则结果必然是零分。,考生文件夹的命名是系统默认的,一般为准考证号的前四位和后四位。单机版路径为,“,C:WEXAM准考证号前四位+后四位,”,;而网络版的路径为,“,K:用户目录文件夹准考证号前四位+后四位,”,。,考生文件夹,4,最好控制在60分钟内完成,上机题类型,18,分,18,分,24,分,填空题,改错题,编程题,5,改错题目的错误之处的前一行都有*found*标志!其实,评分程序就是根据这个标志,从考生的modi.*(扩展名随程序语言的不同而有所不同)文件中抽取它的下一行(或第二行)信息,和标准答案进行比较。通常,标准答案会有多种,只要考生的答案和其中一个对应上了即可得到相应的分数。,结论:,A,、即使你的改错程序能够正确执行,也未必可以得分!,B、改错程序修改完毕后,无所谓运行与否,这与得分无关!,上机题打分方法,sj=si;,不得增行或删行,也不得更改程序的结构!,7、若错误行中见到整型1除以某个表达式时,一概改成1.,4、在循环语句中如果使用到的是while(!feof()空格中填写的文件指针,表明判断的是文件指针是否已经指到了文件的末尾。,如:5-1,6-1,7-1,8-1,9-1,10-1,16-1,B 49 题第一空int j,c,float xa=0.,char*p;,2、if或while语句,(6)2 题第二空:wihle 应该改为while。,循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m 项或者是第n 项,如果到了第m 或者第n 项,则在循环中的第二个表达式中用到的是i=m 或者是i=n;,带参宏定义的时候展开的时候有括号就有括号,没括号不要画蛇添足。,通常,标准答案会有多种,只要考生的答案和其中一个对应上了即可得到相应的分数。,-1/m*m 这个表达式,在这个题目中第一空有这样的for语句for(i=2;im;i+)y-=1/(i*i);从题目中不难发现i 是一个变量,它的取值范围从整数2 开始到m-1 结束,最终计算的结果为y=1-1/2*2-1/3*3-.,/*found*/,_1_ fp;,如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1 或者是1.,printf(“enter a string:”);,printf(%4d,aij);,6,对于题空题,评分程序先是读取考生文件夹下的BLAN.C文件,再找到其中需要填空的代码所在的行数,然后将考生填写的答案和题库中的事先给出答案进行对比,正确就得分,不正确就不得分;,但是存在这样一个问题,如果一个题有多个答案,题库中不可能把所有答案都列举得出来,所以考生最好用最常见的一个,确保正确;,需要提醒考生注意的是,填空题和改错题的要求中明确声明:不得删减或增加程序行,就是这个道理;,7,对于编程题,评分程序先是读取考生文件夹下的扩展名为.DAT的文件,再其中的数据与评分程序中的提供的数据进行对比,因此,考生在编程后,一定要运行程序,以生成扩展名为.DAT的输出文件!,评分程序是按照最终生成的文件给分的!且:,只要考生能生成最终答案文件,均可得分!,很多最终答案文件只有少数若干行数据,分数由正确答案的行数决定!例如,真考题库中有这样一道题,要求计算cos(x)-x=0的一个近似根,其答案是0.739085,最终要求生成的文件OUT.DAT中只有一行数据。有这个文件,并且该文件只有一行数据0.739085的话,就可以得到100分!,当然,有多行答案的文件的格式是由程序中的输出部分决定的(而这个部分是不允许考生修改的!),考生必须能够看懂输出程序段的输出格式,否则会适得其反!,8,第1章 程序改错题,改错题解题技巧,常见错误分类,典型改错题举例,9,改错题解题技巧,做题方法:,(1)首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。,(2)当在VC环境下调出源程序后,审视/*found*/“所在函数,根据题义理解程序所采用的基本算法,做到心里有数。,(3)对测试程序进行编译,看是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。,10,(4)当不再出现语法错时,使用执行程序,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。,(5)当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。,(6)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。,11,改错题的特点和注意事项,求分数和的时候请注意整除问题。如2-2,循环的初值、条件、和终值问题。如3-2,注意关键词:如NULL与Null的区别,如9-2;,“,0,”,与,0,的区别,如8-2。,大小写问题:For与for,Int与int,如8-2、14-2。,形态相似字符:小写字符l与数字1的区别如1-2,字符o与数字0的区别。,符号问题:(1),“,”,与,“,/,”,的区别,如4-2,5-2;(2),“,=,”,与,“,=,”,的区别,如4-2。,加漏符号(*或;)问题:如6-2,7-2,9-2,10-2,11-2,12-2,13-2,15-2,19-2,12,注意比较值时,指针(位置)与指针值(内容)的问题。如1-2,19-2,注意理解题意,如:14-2,参数或变量类型不一致的问题,参数及函数名前面的类型一般不可以省。如指针与普通变量。如2-2,6-2,9-2,10-2,19-2,两个数相互交换应该借助临时变量来实现,而不能直接赋值。如x与y互换,借助t,则:t=x;x=y;y=t;,带参宏定义的时候展开的时候有括号就有括号,没括号不要画蛇添足。反过来,如果展开的时候必需要有括号,那个在定义的时候请加上括号。IF语句的条件加括号。如10-2,注意:源程序存放在考生文件夹下的BLANK1.,for(i=0;i ;i+)pj+i=ti;,A、即使你的改错程序能够正确执行,也未必可以得分!,5、字符数组结束时都有一个结束符:0;在字符数组中的题目中的结束后要加上一个结束符。,#define N 20,错误的性质基本分为语法错误和逻辑错误两种,也有些试题要求把语句添加在下划线处。,/*found*/,#define N 9,for(j=0;jN;j+)printf(%2d ,tij);,int i=35;if(i%5=0|i%7=0)printf(“%d”,i);,11 题第二空、12 题第一空和13 题第二空、4 题第二空都可以用这样的方法。,puts(s);,printf(m=%5.,t=(char*)malloc(n*sizeof(char);,即:strlen、strcmp、strcpy、sizeof、strcat 的使用格式。,13,变量有没有定义及赋初值。如5-2,如s为指针变量,请注意s与*s的区别及用法。,如10-2,15-2,C语言的结束标志为分号(;),写在同一行上的一段代码,如果是尾于不同的语句应用分号隔开。如int a,b,float c;应改为:int a,b;float c;,是否漏写了C语言的结束标志为分号(;),如10-2,是否多写C语言的结束标志为分号(;),如12-2,如:switch(a);,应改为switch(a),int f(int n);,应改为int f(int n),for(i=1;i=5;i+;),应改为,for(i=1;i y),应改为,if(!(x y),变量1=变量2,如:p=q,应改为q=p,交换两个变量的值,如:t=x,y=x,y=t,应改为t=x,x=y,y=t“,变量初值或类型错误,如:int x=1,应改为double x=0,15,函数类型或形参类型说明错误,int f(int a),应改为,double f(int a),实参是地址(数组名),形参应是指针或数组名,int f(int p),应改为int f(int*p)或者改为int f(int p);,其他错误,如:a=c-o,应改为a=c-0,scanf(%f,i),应改为scanf(%d,&i),case 0;,应改为case 0:,16,例1:给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!,#include,#include,#define MAXLINE 20,fun(char*pstr6),int i,j;,char*p;,for(i=0;i 5;i+),/*found*/,for(j=i+1,j 0),p=*(pstr+i);,/*found*/,*(pstr+i)=pstr+j;,*(pstr+j)=p;,main(),int i;,char*pstr6,str6MAXLINE;,for(i=0;i 6;i+)pstri=stri;,printf(nEnter 6 string(1 string at each line):n);,for(i=0;i 6;i+)scanf(%s,pstri);,fun(pstr);,printf(The strings after sorting:n);,for(i=0;i 6;i+)printf(%sn,pstri);,17,例2:给定程序MODI1.C中函数 fun 的功能是:求出数组中最大数和次最大数,并把最大数和a0中的数对调、次最大数和a1中的数对调。,请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!,#include,#define N 20,void fun(int *a,int n),int i,m,t,k;,for(i=0;i2;i+),/*found*/,m=0;,for(k=i+1;kam)k=m;,t=ai;ai=am;am=t;,main(),int bN=11,5,12,0,3,6,9,7,10,8,n=10,i;,for(i=0;in;i+)printf(%d ,bi);,printf(n);,fun(b,n);,for(i=0;i=,”,,但是在考试的时候可能出现将它写为,“,=,”,49 题第二空就是这样的错误。,B 当题目中需要比较某个字符是否是大写字母或是小写字母、数字时,必须将,“,与,”,、,“,或,”,、,“,非,”,记住。,32,判断某个字符是否是大写字母:char ch;if(ch=,A,&ch=,a,&ch=,0,&ch0|b0),应改为if(a0&b0),a 10,应改为a=10,35,3.表达式的取值范围出错:,当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。,例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-,.-1/m*m 这个表达式,在这个题目中第一空有这样的for语句for(i=2;im;i+)y-=1/(i*i);从题目中不难发现i 是一个变量,它的取值范围从整数2 开始到m-1 结束,最终计算的结果为y=1-1/2*2-1/3*3-,.-1/(m-1)*(m-1)和题目要求的不符,因此将im改为i=m。,做这样的题目看两点:一看题目中的表达式,二看for语句中变量的取值范围。31 题第二空同样的考点。,36,4.C语言中的除法运算:,这个考点同样考查表达式的相关知识。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-,.-1/m*m 这个表达式,在这个题目中第一空有这样的for 语句for(i=2;i)、小于(next;第二个空改为:p=p-next;.,2、不带头结点的链表,不带头结点的链表的第一个空的改为:p=h;第二个空改为:p=p-next;.,45,10.其它,循环语句、if语句、复合语句的花括号后多加了分号,赋值号与等号混淆,引号或括号不对称(只有一边),复合语句少了“”,变量的初值不正确或未赋初值,46,利用scanf()函数给变量赋值时忘记加地址运算符“&”,输入输出的数据类型与所用格式说明符不一致,输入数据时,企图规定精度,如:scanf(%7.2f,switch语句中漏写break语句,在引用数组元素时,将定义数组时的下标值作为数组最后一个元素的下标,使用scanf()函数时,输入数值型数据的方式与要求不符,或输入字符格式与要求不一致,(此类错误虽不方便出改错题,但对任何C程序设计的学习者来说却是必须注意的地方),47,#include,void fun(char*s),int i,j;,for(i=j=0;si!=0;i+),if(si!=c),/*found*/,sj=si;,/*found*/,si=0;,main(),char s80;,printf(“enter a string:”);,gets(s);,printf(“The original string:”);,put(s);,fun(s);,printf(“The string after deleted:”);,puts(s);,printf(“n”);,sj+=si,sj=0,这是前移问题,请注意赋值号左右两端的数组下标(或指针)都得往后移,同时注意字符串的末尾手动加一个结束标志0。,例3.在给定的程序中,函数fun的功能是:从s所指字符串中删除所有小写字母c。,48,例,4,:下列给定程序的功能是:读入一个整数,k,(,2,=k,=10000,),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数,2310,,则应输出:,2,、,3,、,5,、,7,、,11,。请改正程序中的错误,使程序能得出正确的结果。注意:不要改动,main,函数,不得增行或删行,也不得更改程序的结构!,#include,#include,stdio,h,/*found*/,IsPrime(int n),;,int i,,,m,;,m,1,;,for(i,2,;,i,n,;,i+,),/*found*/,if !(n%i,),m,0,;,break,;,return,(,m,);,(1),去掉;(,2,),if,后加括号,main(),int j,k,;,clrscr(),;,printf(“nPlease enter an,integer number between 2,and 10000:”),;,scanf(“%d”,k),;,printf(“nnThe prime,factor(s)of%d is(are):”,,,k),;,for(j=2,;,jm=2),的值,在,m,X,m,的二维数组中存放如下所示的数据,由,main(),函数输出,例如:若输入,2,若输入,4,则输出,1 2,则输出,1 2 3 4,2 4 2 4 6 8,3 6 9 12,4 8 12 16,请改正程序中的错误,使它能得出正确的结果。注意:不要改动,main,函数,不得增行或删行,也不得更改程序的结构!,51,#include,#include,#define M 10,int aMM=0;,/*found*/,fun(int*a,int m),int j,k;,for(j=0;jm;j+),for(k=0;km;k+),/*found*/,ajk=k*j;,main(),int i,j,n;,clrscr();,printf(Enter n:);scanf(%d,fun(a,n);,for(i=0;in;i+),for(j=0;jn;j+),printf(%4d,aij);,printf(n);,void fun(int aMM,int m),ajk=(k+1)*(j+1);,二级,C,应试辅导,52,例,7,:下列给定程序中,函数,fun,的功能是:删除数列中值为,x,的元素,,n,中存放的是数列元素的个数。请改正程序中的错误,使它能得出正确的结果。,#include,#define N 20,fun(int*a,int n,int x),int p=0,i;,an=x;,while(x!=ap),p=p+1;,/*found*/,if(P=n)return-1;,else,for(i=p;in;i+),/*found*/,ai+1=ai;,return n-1;,53,#include,#define N 20,fun(int*a,int n,int x),int p=0,i;,an=x;,while(x!=ap),p=p+1;,/*found*/,if(P=n)return-1;,else,for(i=p;in;i+),/*found*/,ai+1=ai;,return n-1;,main(),int wN=-3,0,1,5,7,99,10,15,30,90,x,n,i;,n=10;,printf(The original data:n);,for(i=0;in;i+)printf(%5d,wi);,printf(nInput x(to delete):);scanf(%d,printf(Delete :%dn,x);,n=fun(w,n,x);,if(n=-1)printf(*Not be found!*nn);,else,printf(The data after deleted:n);,for(i=0;in;i+)printf(%5d,wi);printf(nn);,if(p=n)return-1;,ai=ai+1;,54,第2章 程序填空题,填空题是计算机等级考试中的难点,占有的分值为20 分。填空题答题技巧:,若需要填的空出现在程序前面部分,多数是定义变量,此时需要观察后续那个变量尚未定义;,若出现在中间部分,则赋值号左边填的内容和该语句之后的语句相关;赋值号右边填的内容和该语句之前的语句相关;,若出现在打印语句之前,则填空内容和打印项相关;,若出现在打印语句中,则填空内容和该语句前面最后一条可执行语句中赋值号左边的变量相关。,55,填空题上机填空题一般包含三个空。,试题中用,“,/*found*/,”,来提示在下一行在有填空。,要填空的位置用,1,、,2,、,3,表示。,考生在考试时应删除标识,1,、,2,、,3,及下划线并填入相应的代码。,特别要注意的是:只能在要填空的位置上进行修改,不要添行、删行、合并或分解行,不要改动程序的顺序,不要自己另编程序。,注意事项,1.填写参数时注意主调函数与被调函数类型一致。数组名作形参可以不指定大小。,如:1-1,2-1,10-1,2.根据题目意思,再从函数中找出对应的变量填写表达式。,如:3-1,4-1,5-1,6-1,7-1,8-1,9-1,11-1,12-1,13-1,14-1,3.可以根据上下文的函数形式找出相应填写内容。,如:5-1,6-1,7-1,8-1,9-1,10-1,16-1,57,填空题解题步骤,Step1:仔细阅读题目要求和功能,尤其是题目给出的输入和输出示例,以便检验填空后程序运行结果是否正确。,Step2:在VC+6.0环境下调出源程序,读懂程序代码,根据“(数字)”出现的位置和题目要求填写空白内容。,Step3:按F7键编译源程序,若发现有语法错误,重新检查或调整答题思路。,Step4:按Ctrl+F5执行程序,按照试题示例中给出的数据进行测试,如果结果与给出的输出结果相同,该题就完成了;如果测试的结果与给出的结果不同,就需要进一步检查程序的逻辑错误。,Step5:最后得到正确结果后,一定保存程序,否则不得分。,58,填空题分类,(一)、数学题目,例如:6、13、25、29、36、37、38、44、46,1.如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0 或者是0.0;如果以后用到的是乘除运算,则赋初值为1 或者是1.0;,2.循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m 项或者是第n 项,如果到了第m 或者第n 项,则在循环中的第二个表达式中用到的是i=m 或者是i,”,运算符。如16.2。得到结构体中学生分数,a,scorei。,63,(四)函数题目1、,27,1,、看函数的返回类型,函数的返回类型必须和return 语句返回的表达式的类型一致。,2、函数的调用的情况,函数调用时只用写函数的名称,以及函数的参数。如:第一题中的第二和第三空的内容就是调用函数,填写时只用填写函数的名称和参数,故填f1(x)和f2(x,y);,3、函数指针的调用格式,类型名(*f)();27 题中第一空。,4、函数参数的传递时的调用的格式,如果函数传递的是二维数组,则在函数的传递过程中形式参数必须使用的是由m 个元素组成一行的指针变量。第10 题中的第一个答案:(ss)M。,64,(五)链表题目:15、42、43、,50,1,、首先看清楚题目要求和意思。看清楚链表有没有带头结点,如果带有头结点,第一空填的内容是p=h,next;如果是不带有头结点,则第一个空填写的是p=h;,2、如果第二个空是在循环语句while 的括号中的时候里面的内容填写的是p 或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p,next;,3、如果是排序的时候,从小到大的时候是大于号,从大到小的时候是小于号。如果出现了r,则在后面的空中填的是r。,65,(六)文件类型的填空28、30、32、,47,1,、文件类型的题目,看清楚题目意思,定义一个文件的指针,第一个位置出现fp 的时候要,填FILE*;,2、掌握文件中fopen、fprintf、fscanf、fputs、fputc、fgets、fgetc、fseek、fwrite、fread、rewind函数的使用的格式。,fopen(,“,文件名,”,,,“,打开方式,”,);,fclose(文件指针);,fscanf(文件指针,格式控制字符串,输入列表项),fprintf(文件指针,格式控制字符串,输出列表项),66,fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);,fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针);,3、文件打开之后要注意关闭文件,关闭文件的函数fclose(文件指针);,4、在循环语句中如果使用到的是while(!feof()空格中填写的文件指针,表明判断的是文件指针是否已经指到了文件的末尾。备注:如果文件指针指到了文件的末尾,则feof 返回的是非零值,如果没有指在文件的末尾,返回的是0 值。,67,(七)、数组题目,例如:3、4、7、17、20、24、26、31、34、39、40、41,数组填空题在C 语言考试中出现的频率很高,数组分为一维数组和二维数组。一维数组较二维数组来说简单一些。,一维数组中存在这样一些类型:3、17、20、24、31、41,1、求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时,首先定义一个变量来存放平均分,平均分一般用av 变量来代替,如果av 已经定义但是没有赋初值,那么这个空填写的内容的为:av=0;,68,2、求算平均值值时有两种方法:,第一种是算出总的分数,最后再除以总的个数即可,如算1 到6 之间的数的平均值,首先算出1 到6 的和,其次用综合除以总的个数6,即可以得到平均值;,第二种方法是用每一个数除以6 再把所有的和加起来。即1/6+2/6+3/6+4/6+5/6+6/6;所以在执行的一维数组中算平均值时也是存在来中情况,如果在for 语句的后面有av=av/N;则第二个空一般的填写时av+=si;如果说没有av=av/N;则填写的是:av+=si/N;,69,3、在后面的一个空的填写的时候要注意变量的使用情况,如果变量使用了j 和i,那么这一个空的填写的内容为:j+;,4、如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候,这种题目的解答时这样的,第一个空一般填写的内容为:j+;第二个空填写的内容是-1;,5、对数组进行排序时:如果是从大到小的排序的时候,用的是小于符号,如果是从小到大排序时使用的是大于符号。,70,二维数组中的题目类型以及解决的技巧:,例如:4、7、26、34、39、40,1、二维数组的题目,填空的时候一般是填在函数调用,函数在调用时候写的应该是而为数,组的名字;在定义函数的时候使用的是函数的类型和由m 各元素组成一行的指针变量,假设二维数组的名字是ss,那么填写的内容是:(*ss)M;如果调用的是普通变量则填写的内容为:int n;,2、二维数组遍历时,使用的是两个循环,使用的是循环的嵌套使用,第二个循环的使用的时候填写的内容为:j=0;(特殊的特殊处理),71,3、交换两个变量的值的使用的格式为:,t=a;a=b;b=t;,记住交换变量的格式和顺序。,4、如果二维数组是字符串的题目的时候,要记住字符串中函数的使用的格式;即:strlen、strcmp、strcpy、sizeof、strcat 的使用格式。注意里面的格式中使用的都是和指针。,5、特殊的特殊处理。第7 题的填空的内容记住。,72,例1:给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:30.500000 主函数中输出:m=30,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。,注意:源程序存放在考生文件夹下的BLANK1.C中。,不得增行或删行,也不得更改程序的结构!,#include ,#include ,#define N 10,double fun(double x,double *av),int i,j;double d,s;,s=0;,for(i=0;iN;i+)s=s+xi;,/*found*/,_1_=s/N;,d=32767;,for(i=0;iN;i+),if(xi*av&*av-xi=d),/*found*/,d=*av-xi;j=_2_;,/*found*/,return _3_;,main(),int i;double xN=46,30,32,40,6,17,45,15,48,26;,double av,m;,for(i=0;iN;i+)printf(%4.0f,xi);,printf(n);,m=fun(x,printf(nThe average is:%fn,av);,printf(m=%5.0f,m);,printf(n);,1,:*,av 2.i 3.aj,73,例2:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。,注意:源程序存放在考生文件夹下的BLANK1.C中。,不得增行或删行,也不得更改程序的结构!,#include ,#include ,void fun(char *s,int a,double f),/*found*/,_1_ fp;,char str100,str1100,str2100;,int a1;double f1;,fp=fopen(file1.txt,w);,fprintf(fp,%s%d%fn,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(nThe result:nn%s%d%fn,str,a1,f1);,main(),char a10=Hello!;int b=12345;,double c=98.76;,fun(a,b,c);,74,例3:给定程序中,函数fun的功能是:有NN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:,1 2 3 7 4 1,4 5 6 计算结果为 8 5 2,7 8 9 9 6 3,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。,注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!,#include ,#define N 4,void fun(int (*t)N),int j,rN;,for(j=0;jN;j+)rj=t0j;,for(j=0;jN;j+),/*found*/,t0N-j-1=tj_1_;,for(j=0;j=0;_2_),tN-1N-1-j=tjN-1;,for(j=N-1;j=0;j-),/*found*/,tjN-1=r_3_;,main(),int tN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10,i,j;,printf(nThe original array:n);,for(i=0;iN;i+),for(j=0;jN;j+)printf(%2d ,tij);,printf(n);,fun(t);,printf(nThe result is:n);,for(i=0;iN;i+),for(j=0;jN;j+)printf(%2d ,tij);,printf(n);,1.0 2.j-3.j,75,#include,#include,#include,#include,char *fun(char*s),int i,j,k,n;char*p,*t;,n=strlen(s)+1,t=(char*)malloc(n*sizeof(char);,p=(char*)malloc(n*sizeof(char);,j=0,k=0;,for(i=0;in;i+),if(isdigit)(si),/*found*/,p,=si;j+;,else,tk=si;k+;,/*found*/,for(i=0;iN);,do,printf(“Input string s2:”);,get(s2);,while(strlen(s2)N);,printf(“The result is:%ldn”,fun(s1,s2);,#include,#include,#include,#define N 9,long ctod(char*s),long d=0;,while(*s),if(isdigit(*s),/*found*/,d=d*10+*s-,;,/*ound*/,;,return d;,long fun(char*a,char*b),0,s+,ctod(a)+ctod(b),例5.在给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。如输入32486和12345,输出得:44831。,77,例6.在给定的程序中,函数fun的功能是:找出N*N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。,#include,#define N 4,void fun(int(*a)N,int*b),int i,j;,for(i=0;iN;i+),/*found*/,bi=,;,for(j=0;jN;j+),/*found*/,if(bi,aji),bi=aji;,main(),int xNN=12,5,8,7,6,1,9,3,1,2,3,4,2,8,4,3,yN,i,j;,printf(“nThe matrix:n”);,for(i=0;iN;i+),for(j=0;jN;j+),printf(“%4d”,xij);,printf(“n”);,/*found*/,fun(,);,printf(“nThe result is”);,for(i=0;iN;i+)printf(“%3d”,yi);,printf(“n”);,78,#include,#include,struct student,long sno;,char name10;,float score3;,;,void fun(struct student a),struct student b;,int i;,/*found*/,b=,;,b.sno=10002;,/*found*/,strcpy(,“LiSi”);,printf(“学号:%d 姓名:%-8s 各科成绩:”,b.sno,b.name);,for(i=0;i3;i+),/*found*/,printf(“%6.2f”,b.,);,printf(“n”);,void main(),struct student s=1001,“zhangsan”,95,80,88;,int i;,printf(“学号:%d 姓名:%-8s 各科成绩:”,s.sno,s.name);,for(i=0;i3;i+),printf(“%6.2f”,s.scorei);,printf(“n”);,a,scorei,例7:在给定程序中,通过对结构体变量的定义,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的结构体变量整体赋值,修改新变量中的学号和姓名并打印出来。,谢谢观看!,
展开阅读全文