四川省计算机等级考试二级C语言机试题(第二十七次)答案
2009-03-29 16:43:50
27-1套 参考答案:
一、程序调试题(文件名为 test1-1.c)( 40 分 )
# include "stdio.h"
# define N 10
void fun(int a[],int m) /* 改为: int */
{ int low=0,high=N-1,mid;
while(low<=high)
{ mid=(low+high)%2; /* 改为:/ */
if(m<a[mid])
high=mid-1;
else if(m>a[mid])
low=mid+1;
else
return ; /* 改为: return mid */
}
return -1;
}
void main()
{
int i,a[]={-3,4,7,9,11,13,45,60,66,70},k,m;
printf("\n array a:\n");
for(i=0;i<N;i++)
printf("%d,",a[i]);
printf("\n\nEnter m:\n");
scanf("%d",m); /* 改为:&m */
k=fun(a[N],m); /* 改为:a */
if(k>=0)
printf("m=%d,index=%d\n",m,k);
else
printf("Not be found!\n");
}
评分标准:每改对一处得8分
二、编程题(程序文件取名为 test1-2.c)(60分)
评分标准:
1、while循环编写正确,数字提取正确 30分 2、文件打开、关闭、数据写入正确 15分
3、指针定义和使用正确 5分 4、屏幕输出正确 5分 5、程序结构合理 5分
参考程序:
# include <stdio.h>
# define LEN 256
void main()
{ char line[LEN],b[20],*ptr1,*ptrb;
int n=0,j,a[50];
FILE *fp;
printf("Please enter the strings:\n");
gets(line);
ptr1=line;
while(*ptr1!='\0')
{ ptrb=b;
for(j=0;*ptr1>='0' && *ptr1<='9';ptr1++,ptrb++,j++)
*ptrb=*ptr1;
if(j)
{ *ptrb='\0';
*(a+n)=atoi(b);
n++;
}
if(*ptr1!='\0') ptr1++;
}
fp=fopen("test1-2.dat","w");
if(fp==NULL)
{ printf("Cannot open file!\n");
exit(0);
}
printf("Result:\n");
for(j=0;j<n;j++)
{ printf("%10d\n",*(a+j));
fprintf(fp,"%10d\n",*(a+j));
}
fclose(fp);
}
27-2套 参考答案:
一、程序调试题(文件名为 test2-1.c)( 40 分 )
# include "stdio.h"
# include "ctype.h"
int UpperNum(char str[])
{
int n,i=0; /* 改为:n=0 */
while((str+i)) /* 改为:*(str+i) */
{
if(isupper(str[i]))
n++;
i++;
}
return i; /* 改为:n */
}
void main()
{
char str[]; /* 改为:str[80] */
printf("\n Input a string:\n");
gets(str);
printf("\nThe Number of Upper Letter is: %d\n",UpperNum(str[])); /* 改为:str */
}
评分标准:每改对一处得8分
二、编程题(程序文件取名为 test2-2.c)(60分)
评分标准:
1、被调函数编写正确(具体参照程序注释)(30分)
2、文件打开、关闭、数据读入正确 (15分)
3、函数调用正确(5分) 4、屏幕输出正确(5分) 5、程序结构合理(5分)
参考程序:
# include <stdio.h>
# include <string.h>
int mystrcmp(char *q1,char *q2)
{
int k=0,t;
while(*(q1+k)!='\0'||*(q2+k)!='\0') /* 5分 */
{ if(*(q1+k)!=*(q2+k)) /* 10分 */
{ t=*(q1+k)-*(q2+k);
break;
}
else
t=0; /* 5分 */
k++; /* 5分 */
}
return t; /* 5分 */
}
void main()
{
FILE *fp;
int t;
char s1[20],s2[20];
fp=fopen("test2-2.dat","r");
if(fp==NULL)
{ printf("File cannot oepn\n");
exit(0);
}
fgets(s1,80,fp);
fgets(s2,80,fp);
puts(s1);
puts(s2);
t=mystrcmp(s1,s2);
printf("\nThe comparing result of strings is : %d\n",t);
fclose(fp);
}
27-3套 参考答案:
一、程序调试题(文件名为 test3-1.c)( 40 分 )
# include "stdio.h"
# define N 100
int fun(int s,int n) /* 改为:*s */
{ int i,j,k,a,b,c;
j=0;
for(i=100;i<=n;i++)
{
k=j; /* 改为:i */
a=k%10;
k/=10;
b=k%10;
k/=10;
c=k;
if(a==b||a==c) /* 改为:&& */
s[j++]=i;
}
return i; /* 改为:j */
}
void main()
{
int a[N],n,num=0,i;
do
{ printf("Enter n(100~1000):\n\n");
scanf("%d",&n);
}while(n>1000) /* 改为:while(n>1000); */
num=fun(a,n);
printf("\n\nThe result:\n");
for(i=0;i<num;i++)
printf("%5d",a[i]);
printf("\n");
}
评分标准:每改对一处得8分
二、编程题(程序文件取名为 test3-2.c)(60分)
评分标准:
1、被调函数编写正确(具体参照程序注释)(30分)
2、文件打开、关闭、数据读入正确 (15分)
3、函数调用正确(5分) 4、屏幕输出正确(5分) 5、程序结构合理(5分)
参考程序:
# include <stdio.h>
void fun(char *s,int *t) /* 函数定义、形参书写正确10分 */
{
int i;
*t=0; /* 5分 */
for(i=0;*(s+i)!='\0';i++) /* 算法正确,指针使用正确 15分 */
if(*(s+i)>='0'&& *(s+i)<='9') (*t)++;
}
void main()
{
char str[80];
FILE *fp;
int i=0,count;
if((fp=fopen("test3-2.in","r"))==NULL)
{ printf("Cannot open file!\n");
exit(0);
}
while(!feof(fp))
{ str[i]=fgetc(fp);
i++;
}
str[i]='\0';
fclose(fp);
fun(str,&count);
printf("Count=%d\n",count);
}
第27-4套 参考答案
一、程序调试题(文件名为 test4-1.c)( 40 分 )
# include "stdio.h"
int fun1(int *n) /* 改为: n */
{
int i;
for(i=2;i<=n;i++) /* 改为:< */
if!(n%i) /* 改为:(!(n%i)) */
return 0;
return ; /* 改为:return 1 */
}
void main()
{
int j,k;
printf("\nPlease enter a integer number 2~10000:");
scanf("%d",k); /* 改为:&k */
printf("\nThe prime factor(s) of %d is(are) : ",k);
for(j=2;j<=k;j++)
if(!(k%j)&&fun1(j))
printf("\n%4d",j);
printf("\n");
}
评分标准:每改对一处得8分
二、编程题(程序文件取名为 test4-2.c)(60分)
评分标准:
1、被调函数编写正确(具体参照程序注释)(30分)
2、文件打开、关闭、数据读入正确 (15分)
3、函数调用正确(5分) 4、屏幕输出正确(5分) 5、程序结构合理(5分)
参考程序:
# include <stdio.h>
void convert(char str[]) /* 函数定义、形参书写正确10分 */
{ int i=0;
while(str[i]!='\0') /* 5分 */
{ if(str[i]>='a' && str[i]<='z') /* 5分 */
str[i]-=32; /* 5分 */
i++; /* 5分 */
}
}
void main()
{
FILE *fp;
char str[100];
if((fp=fopen("test4-2.dat","r"))==NULL)
{ printf("Cannot open file!\n");
exit(0);
}
while(!feof(fp))
{ fgets(str,81,fp);
convert(str);
puts(str);
}
fclose(fp);
}
第27-5套 参考答案
一、程序调试题(文件名为 test5-1.c)( 40 分 )
# include "stdio.h"
# define N 80
void fun(int *s,int *t,int k) /* 改为:*k */
{
int i,m;
*k=0;
m=*s;
for(i=1;i<(*t-1);i++)
if(m<s+i) /* 改为:*(s+i) */
{
m=*(s+i);
*k=i;
}
s[i+1]=m;
*t++; /* 改为:(*t) */
}
void main()
{
int a[N]={876,675,896,101,301,401,980,431,451,777};
int i,n=10,mi;
fun(a[N],&n,&mi); /* 改为:a */
printf("The index of max is :%d\n",mi);
printf("The result:\n");
for(i=0;i<n;i++) printf("%4d",a); /* 改为: a[i] */
}
评分标准:每改对一处得8分
二、编程题(程序文件取名为 test4-2.c)(60分)
评分标准:
1、被调函数编写正确(具体参照程序注释)(30分)
2、文件打开、关闭、数据读入正确 (15分)
3、函数调用正确(5分) 4、屏幕输出正确(5分) 5、程序结构合理(5分)
参考程序:
# include <stdio.h>
# define N 80
char *fun(char *s,char *t) /*函数定义、形参书写正确10分 */
{ char *p,*ss,*tt;
ss=s;
tt=t;
while(*ss)
{ n++; ss++; } /* 5分 */
while(*tt)
{ m++; tt++; } /* 5分 */
if(n>=m) /* 5分 */
p=s;
else
p=t;
return p;