江苏省高校计算机等级考试二级C语言上机真题第1页共18页【上机题命题及答题要点】1、近年来江苏省高校上机题目难度有所下降。本轮上机命题的难度系数与全国计算机等级考试二级C语言接近。2、改错题通常有3~4个错误。错误分为两大类,一类是语法出错,这类错误比较查错和容易修改,即在编译时报的错误。另一类是结果出错,即程序的算法出错,这类错误需认真审题。3、编程题必须掌握C语言的文件,应熟悉文件指针的定义,文件的打开及文件的输入输出。编程题的固定框架。必须记忆。以C01的编程为例。#includestdlib.h/*库函数exit(0)需要*/#includestdio.h/*定义文件指针时需要的头文件*/…………..intpalindrome(char*str,char*r){}voidmain(){FILE*fp;所有数据类型的说明和定义if((fp=fopen(t:\\myf2.out,w))==NULL){printf(\nCan'topenthefile!);exit(0);}函数调用(具体问题具体分析)结果输出printf(\nMynumberis:120992340\n);fprintf(fp,\nMynumberis:1292340\n);fclose(fp);}4、必须熟悉常用算法。5、江苏省高校计算机二级C语言上机编程题常考问题:字符串相关问题、素数相关问题、回文数相关问题、矩阵(二维数组)相关问题、特殊数问题(如,合数、真因子或质因子之和、水仙花数、亲密数、完数、数制转换、哥德巴赫猜想等)。6、掌握文件输出操作标准形式。【2013年3月江苏省等考上机真题解析】函数编程,按【编程要求】1.编写函数intpalindrome(char*str,char*r)。.....要点:函数首部完整照抄。参数为指针时,若对指针不熟悉,在函数体内可以按数组编程。江苏省高校计算机等级考试二级C语言上机真题第2页共18页江苏省高等学校非计算机专业学生(C01)计算机基础知识和应用能力等级考试上机试卷二级C语言(试卷代号C01)(本试卷完成时间70分钟)一、改错题(16分)【程序功能】判断一个N×N方阵(N为奇数)是否为魔方阵。魔方阵的判定条件是:方阵中每行、每列、主对角线及副对角线上的数据之和均相等。例如,以下方阵中,主对角线的数据是8、5、2之和是15,副对角线上的数据6、5、4之和也是15,并且每行、每列数据之和15,因此该项方阵是魔方阵。816357492【测试数据与运行结果】屏幕输出:816357492TheArrayxisamagicsquare.123564987TheArrayxisn’tamagicsquare.【含有错误的源程序】以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件测试程序。#includestdio.h#includeconio.h#includestdlib.h#defineN3voidfun(int(*a)[N]){inti,j,m1,m2,row,colum;m1=m2=0;for(i=0;iN;i++){m1+=a[i][i];m2+=a[i][N-i-1];}if(m1!=m2)return0;for(i=0;iN;i++){row=colum=i;for(j=0;jN;j++){row+=a[i][j];colum+=a[j][i];}if((row!=colum)||(row!=m1))return0;江苏省高校计算机等级考试二级C语言上机真题第3页共18页}return1;}voidprint(intx[][N]){inti,j;for(i=0;iN;i++){for(j=0;jN;j++)printf(%3d,x[i][j]);printf(\n);}}intmain(){intx[N,N]={{8,1,6},{3,5,7},{4,9,2}},y[N,N]={{1,2,3},{5,6,4},{9,8,7}};print(x);if(fun(x))printf(TheArrayxisamagicsquare.\n);elseprintf(TheArrayxisn'tamagicsquare.\n);print(y);if(fun(y))printf(TheArrayyisamagicsquare.\n);elseprintf(TheArrayyisn'tamagicsquare.\n);getch();return0;}【要求】1.打开T盘中myfl.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。3.改正后的源程序(文件名myfl.c)保存在T盘的根目录中供阅卷使用,否则不予评分。【解析】#includestdio.h#includeconio.h/*该头文件是调用getch()函数需要的*/#includestdlib.h#defineN3intfun(int(*a)[N])//1、函数要求调用有返回值,voidfun(int(*a)[N])函数类型设置错误{inti,j,m1,m2,row,colum;m1=m2=0;for(i=0;iN;i++){m1+=a[i][i];m2+=a[i][N-i-1];}if(m1!=m2)return0;for(i=0;iN;i++){row=colum=i;江苏省高校计算机等级考试二级C语言上机真题第4页共18页for(j=0;jN;j++){row+=a[i][j];colum+=a[j][i];}if((row!=colum)&&(row!=m1))//2、逻辑表达式出错:(row!=colum)||(row!=m1)return0;}return1;}voidprint(intx[][N]){inti,j;for(i=0;iN;i++){for(j=0;jN;j++)printf(%3d,x[i][j]);//3、输出格式出错:printf(%3d,x[i][j]);printf(\n);}}intmain(){intx[N][N]={{8,1,6},{3,5,7},{4,9,2}},y[N][N]={{1,2,3},{5,6,4},{9,8,7}};//4、数组下标定义出错:x[N,N]和y{N,N}print(x);if(fun(x))printf(TheArrayxisamagicsquare.\n);elseprintf(TheArrayxisn'tamagicsquare.\n);print(y);if(fun(y))printf(TheArrayyisamagicsquare.\n);elseprintf(TheArrayyisn'tamagicsquare.\n);getch();return0;}二、编程题(24分)【程序功能】检查一个字符串中中所有数字字符所对应整数(例如,字符'1'所对应的整数为1,其他依次类推)之和是否为3的倍数;判断该字符串是否回文字符串(回文字符串:正序和倒序相同的字符串。例如,ab121ba是回文字符串)。【编程要求】1、编写函数intpalindrome(char*str,char*r)。函数功能:①检查str指向的字符串中所有数字字符所对应的整数之和是否为3的倍数,若是则将yes存储到r指向的数组中,否则将no存储到r指向的数组中.②判断str指向的字符串是否是回文字符串,若是则函数返回1,否则返回0。2、编写函数main()。函数功能:声明字符型数组a和r,输入一个字符串到a数组,用a、r作实寻调用palindrome函数,若字符串中所有数字字符所对应的整数之和是3的倍数且字符串双是回文字符串,则输出该字符串及yes到屏幕及数据文件myf2.out中,否则输出no到屏幕及数据文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out中。江苏省高校计算机等级考试二级C语言上机真题第5页共18页【测试数据与运行结果】测试数据:33abbba66屏幕输出:no测试数据:12abcba21屏幕输出:yes【要求】1.源程序文件名为myf2.c,输出结果文件名为myf2.out。2.数据文件的打开、使用、关闭均用C语言标准库中文件操作函数实现。3.源程序文件和运行结果文件均需保存到T盘上,供阅卷使用。4.不要复制扩展名为obj和exe的文件到T盘上。【编程题解题思路】编程的关键是①知道库函数所需要的相应的头文件名。②除主函数和函数palindrome外,根据C语言模块化设计特点,增加了能判断一串字符串是否是回文字符串的自编函数intJudger(chara[]),其中判断回文字符串的函数必须要熟记之,与此同时也要记住判断回文数(data_palindrome)和回文素数的通用函数:#includestdio.hintdata_palindrome(longs){longk=s,h=0;while(k)h=h*10+k%10,k/=10;if(h==s)return1;return0;}intmain(){longa;scanf(%ld,&a);if(data_palindrome(a))printf(\%ldispalindrome,a);elseprintf(\%ldisn'tpalindrome,a);}【编程题解答:myf2.c】#includestdio.h#includestring.h//库函数strlen()需要#includectype.h//库函数isdigit()、strcpy()需要,书P386intJudger(chara[])//判断字符串a是否是回文字符串的通用函数江苏省高校计算机等级考试二级C语言上机真题第6页共18页{intn=0,i,j;n=strlen(a);for(i=0,j=n-1;ij;i++,j--)if(a[i]!=a[j])return0;return1;}intpalindrome(char*str,char*r){inti=strlen(str)-1,j=0,m=0;while(str[i]!=-1)//计算字符串str中数字字符的数字量值之和{if(isdigit(str[i]))m+=(str[i]-48);i--;}if(m%3==0&&Judger(str))//满足字符串的数字量之和是3的倍数和回文字符串时返回1,并将yes存入数组元素{strcpy(r,yes);j++;return1;}else//不满足字符串的数字量之和是3的倍数和回文字符串时返回0,并将no存入数组元素{strcpy(r,no);j++;return0;}}voidmain(){FILE*fp;inti;chara[2][10]={33abbba66,12abcba21},r[2][10];if((fp=fopen(t:\\myf2.out,w))==NULL){printf(\nCan'topenthefile!);exit(0);}for(i=0;i2;i++){if(palindrome(a[i],r[i]))printf(\n%s\n%s,a[i],r[i]),fprintf(fp,\n%s\n%s,a[i],r[i]);elseprintf(\n%s\n%s,a[i],r[i]),fprintf(fp,\n%s\n%s,a[i],r[i]);}printf(\nMynumberis:120992340\n);fprintf(fp,\nMynumberis:1292340\n);fclose(fp);/*操作结束,关闭文件fp*/}蓝色的内容需记忆,并且printf函数与fprintf函数写在一起,用逗号分隔,这样程序不容易江苏省高校计算机等级考试