江苏省高校计算机等级考试二级C语言上机真题的答题要点.docx
《江苏省高校计算机等级考试二级C语言上机真题的答题要点.docx》由会员分享,可在线阅读,更多相关《江苏省高校计算机等级考试二级C语言上机真题的答题要点.docx(24页珍藏版)》请在冰豆网上搜索。
江苏省高校计算机等级考试二级C语言上机真题的答题要点
【上机题命题及答题要点】
1、近年来江苏省高校上机题目难度有所下降。
本轮上机命题的难度系数与全国计算机等级考试二级C语言接近。
2、改错题通常有3~4个错误。
错误分为两大类,一类是语法出错,这类错误比较查错和容易修改,即在编译时报的错误。
另一类是结果出错,即程序的算法出错,这类错误需认真审题。
3、编程题必须掌握C语言的文件,应熟悉文件指针的定义,文件的打开及文件的输入输出。
编程题的固定框架。
必须记忆。
以C01的编程为例。
#include/*库函数exit(0)需要*/
#include/*定义文件指针时需要的头文件*/
…………..
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月江苏省等考上机真题解析】
江苏省高等学校非计算机专业学生(C01)
计算机基础知识和应用能力等级考试上机试卷
二级C语言(试卷代号C01)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
判断一个N×N方阵(N为奇数)是否为魔方阵。
魔方阵的判定条件是:
方阵中每行、每列、主对角线及副对角线上的数据之和均相等。
例如,以下方阵中,主对角线的数据是8、5、2之和是15,副对角线上的数据6、5、4之和也是15,并且每行、每列数据之和15,因此该项方阵是魔方阵。
816
357
492
【测试数据与运行结果】
屏幕输出:
816
357
492
TheArrayxisamagicsquare.
123
564
987
TheArrayxisn’tamagicsquare.
【含有错误的源程序】
以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件测试程序。
#include
#include
#include
#defineN3
voidfun(int(*a)[N])
{inti,j,m1,m2,row,colum;
m1=m2=0;
for(i=0;i{m1+=a[i][i];
m2+=a[i][N-i-1];
}
if(m1!
=m2)return0;
for(i=0;i{row=colum=i;
for(j=0;j{row+=a[i][j];
colum+=a[j][i];
}
if((row!
=colum)||(row!
=m1))
return0;
}
return1;
}
voidprint(intx[][N])
{inti,j;
for(i=0;i{for(j=0;jprintf("%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盘的根目录中供阅卷使用,否则不予评分。
【解析】
#include
#include/*该头文件是调用getch()函数需要的*/
#include
#defineN3
intfun(int(*a)[N])//1、函数要求调用有返回值,voidfun(int(*a)[N])函数类型设置错误
{inti,j,m1,m2,row,colum;
m1=m2=0;
for(i=0;i{m1+=a[i][i];
m2+=a[i][N-i-1];
}
if(m1!
=m2)return0;
for(i=0;i{row=colum=i;
for(j=0;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;i{for(j=0;jprintf("%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中。
【测试数据与运行结果】
测试数据:
33abbba66
屏幕输出:
no
测试数据:
12abcba21
屏幕输出:
yes
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中文件操作函数实现。
3.源程序文件和运行结果文件均需保存到T盘上,供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T盘上。
【编程题解题思路】
编程的关键是
①知道库函数所需要的相应的头文件名。
②除主函数和函数palindrome外,根据C语言模块化设计特点,增加了能判断一串字符串是否是回文字符串的自编函数intJudger(chara[]),其中判断回文字符串的函数必须要熟记之,与此同时也要记住判断回文数(data_palindrome)和回文素数的通用函数:
#include
intdata_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】
#include
#include//库函数strlen()需要
#include//库函数isdigit()、strcpy()需要,书P386
intJudger(chara[])//判断字符串a是否是回文字符串的通用函数
{intn=0,i,j;
n=strlen(a);
for(i=0,j=n-1;iif(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;i<2;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]);
else
printf("\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函数写在一起,用逗号分隔,这样程序不容易
江苏省高等学校非计算机专业学生(C04)
计算机基础知识和应用能力等级考试上机试卷
二级C语言(试卷代号C04)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
子串查找并替换。
函数substition的功能是在s指向的字符串(简称s串)中查找t指向的子串(简称t串),并用g指向的字符串(简称g串)替换s串中所有的t串。
【测试数据与运行结果】
测试数据:
s:
aaacdaaaaaaaefaaaghaa
t:
aaa
g:
22
屏幕输出:
22cd2222aef22ghaa
【含有错误的源程序】
以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件测试程序。
#include
#include
#include
voidsubstitution(char*,char*,char*);
intmain()
{chars[80]="aaacdaaaaaaaefaaaghaa",t[2]="aaa",g[]="22";
puts(s);
substitution(s,t,g);
puts(s);
getch();
}
voidsubstitution(char*,char*,char*);
{inti,j,k;
chartemp[80];
for(i=0;s[i]=='\0';i++)
{
for(j=i,k=0;s[j]==t[k]&&t[k]!
='\0';j++,k++);
if(t[k]=='\0')
{temp=s+j;
strcpy(s+i,g);
strcat(s,temp);
i+=strlen(g)-1;
}
}
}
【要求】
1.打开T盘中myfl.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
3.改正后的源程序(文件名myfl.c)保存在T盘的根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
在一组数值不全全的整数中查找次大数。
【编程要求】
1、编写函数intfindsecmax(intdata[],intcount)。
函数功能:
在data数组的前count个整数中查找次大数。
2、编写函数main()。
函数功能:
声明一个整型数组a并用测试数据初始化,用数组a及数组元素个数作实参调用findsecmax函数找出次大数,然后将原数组及次大数输出到屏幕及数据文件myf2.out中。
最后将考生本人的准考证号字符串输出到文件myf2.out中。
【测试数据与运行结果】
测试数据:
1,9,2,8,3,7,4,6,10,10
屏幕输出:
19283
7461010
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
#include
#include
voidsubstitution(char*s,char*t,char*g);//1、自定义函数的声明语句出错voidsubstitution(char*,char*,char*);
intmain()
{chars[80]="aaacdaaaaaaaefaaaghaa",t[4]="aaa",g[3]="22";//2、字符串数组下标填写为大于或等于字符数加1
puts(s);
substitution(s,t,g);
puts(s);
getch();return0;//3、主函数有类型定义,在TC30编译时必须有返回语句
}
voidsubstitution(char*s,char*t,char*g)//4、自定义函数的函数头出错voidsubstitution(char*,char*,char*);
{inti,j,k;
chartemp[80];
for(i=0;s[i]!
='\0';i++)//5、循环语句终结条件出错:
s[i]=='\0'。
否则不执行循环语句
{
for(j=i,k=0;s[j]==t[k]&&t[k]!
='\0';j++,k++);
if(t[k]=='\0')
{strcpy(temp,s+j);//6、字符串赋值用库函数strcpy:
temp=s+j;
strcpy(s+i,g);
strcat(s,temp);
i+=strlen(g)-1;
}
}
}
【编程题解答:
myf2.c】
解题思路:
。
编程的关键是需要知道库函数所需要的相应的头文件名。
此题较简单。
#include
intfindsecmax(intdata[],intcount)
{inti,j=0,secmax=0,max=data[0],b[10];
for(i=1;iif(data[i]>max)max=data[i];
for(i=0;iif(data[i]!
=max)b[j++]=data[i];
for(i=0;iif(data[i]>secmax)secmax=data[i];
returnsecmax;
}
voidmain()
{FILE*fp;
inti,a[20]={1,9,2,8,3,7,4,6,10,10},count=10,sec_max;
if((fp=fopen("myf2.out","w"))==NULL)
{printf("\nCan'topenthefile!
");exit(0);}
sec_max=findsecmax(a,count);
for(i=0;iprintf((i+1)%5==0?
"%4d\n":
"%4d",a[i]),fprintf(fp,i%5==0?
"%4d\n":
"%4d",a[i]);
printf("\nsec_max:
%4d",sec_max),fprintf(fp,"\nsec_max:
%4d",sec_max);
printf("\nMynumberis:
120992340\n");
fprintf(fp,"\nMynumberis:
1292340\n");
fclose(fp);/*操作结束,关闭文件fp*/
}
江苏省高等学校非计算机专业学生(C05)
计算机基础知识和应用能力等级考试上机试卷
二级C语言(试卷代号C05)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
找出找出所有符合条件的数列:
⑴由6个素数组成;⑵数列中每一项的值在7~360之间;⑶数列是一个公差为30的等差数列。
简称这样的数列为等差素数数列。
例如,7376797127157就是符合上述条件的一个等差素数数列。
函数series将x~y范围内所有符合上述条件的等差素数数列依次保存到a指向的二维数组中(一行保存一个数列)。
【测试数据与运行结果】
屏幕输出:
73767127157
107137167197227257
【含有错误的源程序】
以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件测试程序。
#include
#include
#include
intprime(intn;)
{inti;
for(i=2;i<=(int)sqrt(n);i++)
if(n%i==0)
return0;
return1;
}
intseries(inta[][6],intx,inty)
{intd=30,i=0,n=x,j,f;
while(n==2||prime(n))
n++;
while(n{f=1;
for(j=0;j<6;j++)
if(prime(n+j*d)==0)
{f=0;break;}
if(f)
{for(j=0;j<6;j++)
a[i][j]=n+j*d;
i++;
}
n+=2;
}
returni;
}
intmain()
{inta[30][6],i,j,count;
count=series(inta[][6],7,360);
for(i=0;i{for(j=0;j<6;j++)
printf("%5d",a[i][j]);
printf("\n");
}
getch();
return0;
}
【要求】
1.打开T盘中myfl.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
3.改正后的源程序(文件名myfl.c)保存在