2022年江苏省高校计算机等级考试二级C语言上机真题答题要点 .docx
精选学习资料 - - - - - - - - - 【上机题命题及答题要点】1、 近年来江苏省高校上机题目难度有所下降;本轮上机命题的难度系数与全国运算机等级考试二级 C语言接近;2、 改错题通常有 34 个错误;错误分为两大类,一类是语法出错,这类错误比较查错和简洁修改,即在编译时报的错误;另一类是结果出错,即程序的算法出错,这类错误需仔细审题;3、 编程题必需把握 C 语言的文件,应熟识文件指针的定义,文件的打开及文件的输入输出;编程题的固定框架;必需记忆;以 C01 的编程为例;#include <stdlib.h> /* 库函数 exit0 需要 */ #include <stdio.h> /* 定义文件指针时需要的头文件 */ .int palindromechar *str, char *r 函数编程,按【编程要求】 1.编写函数 int palindromechar *str, char *r ;. 要点:函数首部完整照抄;参数为指针时,如对指针不熟识, 在函数体内可以按数组编程;void main FILE *fp ;全部数据类型的说明和定义 iffp=fopen"t:myf2.out","w"=NULL printf"nCan't open the file."; exit 0 ; 函数调用(详细问题详细分析)结果输出 printf"nMy number is:120992340n"; fprintffp,"nMy number is:1292340n"; fclosefp ; 4、 必需熟识常用算法;5、 江苏省高校运算机二级 C 语言上机编程题常考问题:字符串相关问题、素数相关问题、回文数相关问题、矩阵(二维数组)相关问题、特别数问题(如,合数、真因子或质因子之和、水仙花数、亲热数、完数、数制转换、哥德巴赫猜想等);6、把握文件输出操作标准形式;【2022 年 3 月江苏省等考上机真题解读】名师归纳总结 - - - - - - -第 1 页,共 17 页精选学习资料 - - - - - - - - - 江苏省高等学校非运算机专业同学 C01 运算机基础学问和应用才能等级考试上机试卷 二级 C 语言 试卷代号 C01 (本试卷完成时间 70 分钟)一、 改错题 (16 分)【程序功能】判定一个 N× N 方阵( N 为奇数)是否为魔方阵;魔方阵的判定条件是:方阵中每行、每列、主对角 线及副对角线上的数据之和均相等;例如,以下方阵中,主对角线的数据是8、5、2 之和是15,副对角线上的数据6、5、4 之和也是15,并且每行、每列数据之和15,因此该项方阵是魔方阵;8 1 6 3 5 7 4 9 2 【测试数据与运行结果】屏幕输出: 8 1 6 3 5 7 4 9 2 The Array x is a magic square. 1 2 3 5 6 4 9 8 7 The Array x isnt a magic square.【含有错误的源程序】以下源程序已储存在T 盘 myf1.c 文件内,考生可直接打开该文件测试程序;#include <stdio.h> #include <conio.h> #include <stdlib.h> #define N 3 void funint *aN int i,j,m1,m2,row,colum; m1=m2=0 ; fori=0 ; i<N ; i+ m1+=aii; m2+=aiN-i-1; ifm1.=m2 return 0 ; fori=0 ; i<N ; i+ row=colum=i ; forj=0 ; j<N ; j+ row+=aij; colum+=aji ; ifrow.=colum|row.=m1 return 0; return 1;名师归纳总结 - - - - - - -第 2 页,共 17 页精选学习资料 - - - - - - - - - void printint xN int i,j ; fori=0 ; i<N ; i+ forj=0 ; j<N ; j+ printf"%3d,xij"; printf"n" ; int main int xN,N=8,1,6,3,5,7,4,9,2,yN,N=1,2,3,5,6,4,9,8,7; printx ; iffunx printf"The Array x is a magic square.n"; else printf"The Array x isn't a magic square.n" ; printy ; iffuny printf"The Array y is a magic square.n"; else printf"The Array y isn't a magic square.n" ; getch; return 0; 【要求】1.打开 T 盘中 myfl.c 文件或将上述程序录入到myf1.c 文件中,依据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改;2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命 令,但不能增加其它语句,也不能删去整条语句;3.改正后的源程序(文件名myfl.c )储存在 T 盘的根目录中供阅卷使用,否就不予评分;【解读】#include <stdio.h> #include <conio.h> /* 该头文件是调用 getch函数需要的 */ #include <stdlib.h> #define N 3 int funint *aN /1、函数要求调用有返回值,void funint *aN函数类型设置错误 int i,j,m1,m2,row,colum; m1=m2=0 ; fori=0 ; i<N ; i+ m1+=aii; m2+=aiN-i-1; ifm1.=m2 return 0 ; fori=0 ; i<N ; i+ row=colum=i ; forj=0 ; j<N ; j+ row+=aij; colum+=aji ; 名师归纳总结 - - - - - - -第 3 页,共 17 页精选学习资料 - - - - - - - - - ifrow.=colum&&row.=m1 /2、规律表达式出错:row.=colum|row.=m1 return 0; return 1; void printint xN int i,j ; fori=0 ; i<N ; i+ forj=0 ; j<N ; j+ printf"%3d",xij;/3、输出格式出错:printf"%3d,xij "; printf"n" ; int main int xNN=8,1,6,3,5,7,4,9,2,yNN=1,2,3,5,6,4,9,8,7; /4、数组下标定义出错:xN,N 和 yN,N printx ; iffunx printf"The Array x is a magic square.n"; else printf"The Array x isn't a magic square.n"; printy ; iffuny printf"The Array y is a magic square.n"; else printf"The Array y isn't a magic square.n"; getch; return 0; 二、 编程题 (24 分)【程序功能】检查一个字符串中中全部数字字符所对应整数(例如,字符 '1'所对应的整数为 1,其他依次类推)之和是否为 3 的倍数;判定该字符串是否回文字符串(回文字符串:正序和倒序相同的字符串;例如,"ab121ba"是回文字符串);【编程要求】1、编写函数 int palindromechar *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 中;【测试数据与运行结果】测试数据: 33abbba66 屏幕输出: no 测试数据: 12abcba21 屏幕输出: yes 名师归纳总结 - - - - - - -第 4 页,共 17 页精选学习资料 - - - - - - - - - 【要求】1. 源程序文件名为 myf2.c ,输出结果文件名为 myf2.out ;2. 数据文件的打开、使用、关闭均用 C 语言标准库中文件操作函数实现;源程序文件和运行结果文件均需储存到 T 盘上,供阅卷使用;3.4. 不要复制扩展名为 obj 和 exe的文件到 T 盘上;【编程题解题思路】编程的关键是 知道库函数所需要的相应的头文件名;除主函数和函数 palindrome 外,依据 C 语言模块化设计特点,增加了能判定一串字符串是否是回文 字符串的自编函数 int Judgerchar a ,其中判定回文字符串的函数必需要熟记之,与此同时也要记住判定 回文数 data_palindrome 和回文素数的通用函数:#include <stdio.h> int data_palindromelong s long k=s,h=0 ; whilek h=h*10+k%10,k/=10 ; ifh=s return 1 ; return 0; int main long a ; scanf"%ld",&a ; ifdata_palindromea printf"%ld is palindrome",a; else printf"%ld isn't palindrome",a; 【编程题解答: myf2.c】#include <stdio.h> #include <string.h> /库函数 strlen 需要 #include <ctype.h> /库函数 isdigit 、strcpy需要,书 P386int Judgerchar a /判定字符串 int n=0,i,j ; n=strlena;a 是否是回文字符串的通用函数 fori=0,j=n-1 ;i<j ;i+,j- ifai.=aj return 0; return 1; int palindromechar *str, char *r 名师归纳总结 int i=strlenstr-1,j=0,m=0;第 5 页,共 17 页- - - - - - -精选学习资料 - - - - - - - - - whilestri.=-1 /运算字符串str 中数字字符的数字量值之和 ifisdigitstri m+=stri-48 ; i- ; ifm%3=0&&Judgerstr /满意字符串的数字量之和是3 的倍数和回文字符串时返回1,并将 "yes"存入数组元素 strcpyr,"yes" ;j+ ; return 1; else /不满意字符串的数字量之和是3 的倍数和回文字符串时返回0,并将 "no" 存入数组元素 strcpyr,"no" ; j+ ; return 0; void main FILE *fp ;int i ;char a210="33abbba66","12abcba21",r210; iffp=fopen"t:myf2.out","w"=NULL printf"nCan't open the file."; exit 0; fori=0 ;i<2;i+ ifpalindromeai,ri printf"n%sn%s",ai,ri,fprintffp,"n%sn%s",ai,ri; else ; printf"n%sn%s",ai,ri,fprintffp,"n%sn%s",ai,ri printf"nMy number is:120992340n";fprintffp,"nMy number is:1292340n"; fclosefp ; /* 操作终止,关闭文件 fp */ 蓝色的内容需记忆,并且printf函数与 fprintf函数写在一起,用逗号分隔,这样程序不简洁江苏省高等学校非运算机专业同学 C04 运算机基础学问和应用才能等级考试上机试卷 二级 C 语言 试卷代号 C04 一、 改错题 (16 分)(本试卷完成时间 70 分钟)【程序功能】子串查找并替换;函数 substition 的功能是在s 指向的字符串(简称s 串)中查找t 指向的子串(简称t串),并用 g 指向的字符串(简称【测试数据与运行结果】g 串)替换 s串中全部的 t 串;测试数据: s: aaacdaaaaaaaefaaaghaa t: aaa g: 22 屏幕输出: 22cd2222aef22ghaa 【含有错误的源程序】名师归纳总结 以下源程序已储存在T 盘 myf1.c 文件内,考生可直接打开该文件测试程序;第 6 页,共 17 页- - - - - - -精选学习资料 - - - - - - - - - #include <stdio.h> #include <string.h> #include <conio.h> void substitutionchar*,char*,char*;int main char s80=" aaacdaaaaaaaefaaaghaa",t2="aaa",g="22" ; putss; substitutions,t,g ; putss; getch; void substitutionchar *,char *,char * ; int i,j,k ; char temp80 ; fori=0 ;si='0' ; i+ forj=i,k=0 ;sj=tk&&tk.='0';j+,k+ ; iftk='0' temp=s+j ; strcpys+i,g ; strcats,temp; i+=strleng-1 ; 【要求】1打开 T 盘中 myfl.c 文件或将上述程序录入到 系对程序中的错误进行修改;myf1.c 文件中,依据题目要求及程序中语句之间的规律关2 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但 不能增加其它语句,也不能删去整条语句;3 改正后的源程序(文件名 myfl.c )储存在 T 盘的根目录中供阅卷使用,否就不予评分;二、 编程题 (24 分)【程序功能】在一组数值不全全的整数中查找次大数;【编程要求】1、编写函数int findsecmaxint data, int count;函数功能:在data 数组的前 count 个整数中查找次大数;2、编写函数 main;函数功能:声明一个整型数组 a 并用测试数据初始化,用数组 a 及数组元素个 数作实参调用 findsecmax 函数找出次大数,然后将原数组及次大数输出到屏幕及数据文件 myf2.out 中;myf2.out 中;最终将考生本人的准考证号字符串输出到文件【测试数据与运行结果】测试数据: 1,9,2,8,3,7,4,6,10,10 屏幕输出:1 9 2 8 3 7 4 6 10 10 名师归纳总结 - - - - - - -第 7 页,共 17 页精选学习资料 - - - - - - - - - Sec_max: 9 【要求】1.源程序文件名为myf2.c ,输出结果文件名为myf2.out ;2.数据文件的打开、使用、关闭均用C 语言标准库中文件操作函数实现;3.源程序文件和运行结果文件均需储存到 T 盘上,供阅卷使用;4.不要复制扩展名为 obj 和 exe的文件到 T 盘上;【改错题解答: myf1.c】此题比较简洁;依据标准,原程序存在 6 个错误,所以每个错误,如改正,就得 3 分;实际命题老师只认4 个错误: 1、2、5、 6,此时每题 4 分;#include <stdio.h> #include <string.h> #include <conio.h> void substitutionchar*s,char*t,char*g;/1 、 自 定 义函 数 的 声 明 语 句出 错void substitutionchar*,char*,char* ;int main char s80=" aaacdaaaaaaaefaaaghaa",t4="aaa",g3="22" 符数加 1 putss; substitutions,t,g ; putss; /2、字符串数组下标填写为大于或等于字 getch; return 0; /3、主函数有类型定义,在TC30 编译时必需有返回语句 void substitutionchar *s,char *t,char *g /4 、 自 定 义 函 数 的 函 数 头 出 错void substitutionchar*,char*,char* ; int i,j,k ; char temp80 ; fori=0 ;si.='0' ;i+ /5、循环语句终结条件出错: forj=i,k=0 ;sj=tk&&tk.='0';j+,k+ ; iftk='0' si='0' ;否就不执行循环语句 strcpytemp,s+j ; /6、字符串赋值用库函数strcpy:temp=s+j ; strcpys+i,g ; strcats,temp; i+=strleng-1 ; 【编程题解答: myf2.c】解题思路:;编程的关键是需要知道库函数所需要的相应的头文件名;此题较简洁;#include <stdio.h> int findsecmaxint data, int count 名师归纳总结 int i, j=0,secmax=0,max=data0,b10;max 第 8 页,共 17 页 fori=1 ;i<count;i+ /查找整数数组的最大值 ifdatai>max max=datai;- - - - - - -精选学习资料 - - - - - - - - - fori=0 ;i<count ;i+ /排除最大值后的整数数据放入暂时数组 b ifdatai.=max bj+=datai; fori=0 ;i<j ;i+ /在暂时数组 b 中找最大值,即是次大值 ifdatai>secmax secmax=datai ; return secmax;void main FILE *fp ;int i,a20=1,9,2,8,3,7,4,6,10,10,count=10,sec_max; iffp=fopen"myf2.out","w"=NULL printf"nCan't open the file."; exit 0; sec_max=findsecmaxa,count ;fori=0 ;i<count ;i+ printfi+1%5=0."%4dn":"%4d",ai,fprintffp,i%5=0."%4dn":"%4d",ai;printf"nsec_max:%4d",sec_max,fprintffp, "nsec_max:%4d",sec_maxprintf"nMy number is:120992340n";fprintffp,"nMy number is:1292340n"; fclosefp ; /* 操作终止,关闭文件fp */ 江苏省高等学校非运算机专业同学 C05 运算机基础学问和应用才能等级考试上机试卷 二级 C 语言 试卷代号 C05 (本试卷完成时间 70 分钟)一、改错题 (16 分)【程序功能】找出找出全部符合条件的数列:由 6 个素数组成; 数列中每一项的值在 7360 之 间; 数列是一个公差为 30的等差数列;简称这样的数列为等差素数数列;例如,7 37 67 97 127 157就是符合上述条件的一个等差素数数列;a 指向的二维数 函数 series将 xy 范畴内全部符合上述条件的等差素数数列依次储存到 组中(一行储存一个数列);【测试数据与运行结果】屏幕输出: 7 37 67 127 157 107 137 167 197 227 257 【含有错误的源程序】T 盘 myf1.c 文件内,考生可直接打开该文件测试程序;以下源程序已储存在#include<stdio.h> #include<math.h> #include<conio.h> int primeint n ; int i ; fori=2 ;i<=intsqrtn ;i+ ifn%i=0 return 0; return 1; int seriesint a6,int x,int y 名师归纳总结 - - - - - - -第 9 页,共 17 页精选学习资料 - - - - - - - - - int d=30,i=0,n=x,j,f; whilen=2|primen n+; whilen<y-5*d f=1 ; forj=0 ;j<6 ; j+ ifprimen+j*d=0 f=0 ; break; iff forj=0 ; j<6;j+ aij=n+j*d; i+ ; n+=2; return i; int main ; int a306,i,j,count count=seriesint a6,7,360 ; fori=0 ;i<count ;i+ forj=0 ;j<6;j+ printf"%5d",aij; printf"n" ; getch; return 0; 【要求】1.打开 T 盘中 myfl.c 文件或将上述程序录入到 系对程序中的错误进行修改;myf1.c 文件中,依据题目要求及程序中语句之间的规律关2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句;3.改正后的源程序(文件名 myfl.c )储存在 T 盘的根目录中供阅卷使用,否就不予评分;二、 编程题 (24 分)【程序功能】将一个字符串中全部数字字符次序交移,其他字符次序后移,生成一个新的字符串;【编程要求】1、编写函数 void movechar *s;函数功能:将 s 指向的字符串中全部数字字符次序前移,其他字符次序后移,所生成的新字符串仍旧存放在 s 指向的数组中;2、编写函数 main ;函数功能:声明一个字符型数组 s 并用测试数据初始化,用 s 作实参调用 move 函数,将结果字符串输出到屏幕及数据文件 到文件 myf2.out 中;【测试数据与运行结果】myf2.out 中;最终将考生本人的准考证号字符串输出名师归纳总结 - - - - - - -第 10 页,共 17 页精选学习资料 - - - - - - - - - 测试数据: "asd123fgh5#43df" 屏幕输出: 123543asdfgh#df 【要求】1.源程序文件名为myf2.c ,输出结果文件名为myf2.out ;2.数据文件的打开、使用、关闭均用C 语言标准库中文件操作函数实现;3.源程序文件和运行结果文件均需储存到 T 盘上,供阅卷使用;4.不要复制扩展名为 obj 和 exe的文件到 T 盘上;【改错题解答: myf1.c】依据标准,原程序存在 3 个错误,所以每个错误,如改正,就得 4、8、4 分;第 2 个错误是本改错题关键所在;其分值较高;该段程序的目的是确保初始值 n 是素数;读者也可用实参 a,4,360 去试验,同样 可得相同结果;但考生一般会修改为 whilea=0&&primen,这样用实参 a,4,360 去试,就使下面程序为死循环,对此要扣 8 分的;#include<stdio.h> #include<math.h> #include<conio.h> int primeint n /1、函数的形参出错 int n ;int n int i ; fori=2 ;i<=intsqrtn ;i+ ifn%i=0 return 0; return 1; int seriesint a6,int x,int y int d=30,i=0,n=x,j,f;n=2|primen .primen ,不改就造成下面程序死循环 while.primen /2、规律表达式出错 n+; /其实这段循环目的是确保n 是素数; whilen<y-5*d f=1 ; forj=0 ;j<6 ; j+ ifprimen+j*d=0 f=0 ; break; iff forj=0 ; j<6;j+ ; aij=n+j*d i+ ; n+=2; return i ; int main 名师归纳总结 int a306,i,j,count;int a6,7,360 a,7,360第 11 页,共 17 页 count=seriesa,7,360; /3、函数调用的实参出错:- - - - - - -精选学习资料 - - - - - - - - - fori=0 ;i<count ;i+ forj=0 ;j<6;j+ printf"%5d",aij; printf"n" ; getch; return 0; 【编程题解题思路】此题解题思路是挑字符串s 中数字字符存入数组a;其余数字存入数组b,最终将其合并,再由合并后的字符串复制入形参数组s;其次是,需要知道库函数所需要的相应的头文件名,下面一一予以注释;【编程题解答: myf2.c】#include <stdio.h> #include <string.h> / 库函数 strcat和 strcpy需要 #include <ctype.h> / 库函数 isdigit 需要 #include <stdlib.h> / 库函数 exit0 需要 #include <conio.h> / 库函数 getch需要 void movechar *s int i=0, j=0,k,m=strlens; char a20,b20 ; fork=0 ;k<m;k+ ifisdigitsk ai+=sk; /数字串 s 中数字字符次序存入数组 a else bj+=sk ;/其余字符次序存入数组 b ai='0' ; bj='0' ;/加字符串的截止符 strcata,b;/变化后字符全部存入数组 a strcpys,a; void main char s20="asd123fgh5#43df" ; FILE *fp ; iffp=fopen"myf2.out","w"=NULL printf"nCan't open the file."; exit 0; moves; printf"n%s",s,fprintffp, "n%s",s; fprintffp,"nMy number is:1292340n"; printf"nMy number is:120992340n" fclosefp ; /* 操作终止,关闭文件 fp 书 P334 */ getch; 江苏省高等学校非运算机专业同学 C06 运算机基础学问和应用才能等级考试上机试卷名师归纳总结 - - - - - - -第 12 页,共 17 页精选学习资料 - - - - - - -