资源描述
四川省计算机等级考试二级C语言机试题(第二十三次)
2009-03-29 16:39:03
(第一套)
(60分钟)
一、程序调试题( 文件名 test1-1.c )(40分)
磁盘上有一个名为test1-1.c的C程序文件,其功能是:输入一个字符串,将其中的每一个连续的数字序列看作一个整数,将这些整数检索出来后依次放入一个long int型数组中。请改正程序中的错误,使程序能得出正确的结果。
注意:不要增加或删除行,不要修改程序结构。
源程序如下:
#include <stdio.h>
#include <string.h>
main()
{
char str[100], *p=str, help[15];
static long int num[50];
int i=0, k=0, m, sign=0;
printf("\ninput the string:");
scanf("%s", p);
do
{ if(*p>=0 && *p<=9)
{ sign=1;
help[k++]=*p;
}
else if(sign=1)
{ int n=0;
while(--k>=0)
num[i]+=(help[k]-48)*((long int)pow(n++,10));
i++;
k=0;
sign=0;
}
else
p++;
}while(*(p-1)!='\0');
for(m=0; m<i; m++)
printf("%d,", num[m]);
}
二、编写程序( 程序文件名取为 test1-2.c )(60分)
请用函数调用方式编写程序,要求能实现:
(1)在被调函数中求出1到1000之内能被7或11整除、但不能被7或11同时整除的所有整数,并把它们放到数组a中。
(2)在主函数中将符合上述条件的整数个数和所有整数输出到屏幕以及文件test1-2.dat中。(要求每行输出10个数)
(第二套)
(60分钟)
一、程序调试题( 文件名 test2-1.c )(40分)
磁盘上有一个名为test2-1.c的C程序文件,其功能是:求出数组中值最大的元素在数组中的下标,并将最大值增添在数组的最后。如:
876 675 896 101 301 401 980 431 451 777 (原数组)
876 675 896 101 301 401 980 431 451 777 980 (增添后的数组)
请改正程序中的错误,使程序能得出正确的结果。
注意:不要增加或删除行,不要修改程序结构。
源程序如下:
#include <stdio.h>
#define N 80
void fun(int *s, int *t, int k)
{
int i,m;
*k=0;
m=*s;
for(i=1;i<(*t-1);i++)
if(m<s+i)
{
m=*(s+i);
k=i;
}
s[i+1]=m;
*t++;
}
main()
{
int a[N]={876,675,896,101,301,401,980,431,451,777};
int i, n=10, mi;
fun(a[N], &n, &mi);
printf("\nThe index of max is:%d\n",mi);
printf("The result:\n");
for(i=0;i<n;i++)
printf("%4d", &a[i]);
}
二、编写程序( 程序文件名取为 test2-2.c )(60分)
在三位整数(100至999)中寻找其中有两位数字相同的完全平方数,例如,144、676等,它们既是完全平方数,又有两位数字相同,将符合条件的整数依次从小到大存入数组aa中。要求:
(1)编制函数fine()实现寻找满足条件的完全平方数,并将满足条件的完全平方数的个数通过函数fine()返回。
(2)在main()函数中把符合要求的完全平方数及个数输出到屏幕上和文件test2-2.dat中。
(第三套)
(60分钟)
一、程序调试题( 文件名 test3-1.c )(40分)
磁盘上有一个名为test3-1.c的C程序文件,其功能是:实现将字符串中字母以外的其他字符去掉组成新的字符串输出。运行结果为:abcdEEEa
请改正程序中的错误,使程序能得出正确的结果。
注意:不要增加或删除行,不要修改程序结构。
源程序如下:
#include <stdio.h>
#include <string.h>
void fun(char s)
{
int i,j;
for(i=j=0;s[i];i++);
if(isalpha(s[i]))
s[j]=s[i];
s[i]='\0';
}
void main()
{
char str[80]="a*b$c(d!EEE !!a.";
fun(str[80]);
printf("\n");
puts(str);
}
二、编写程序( 程序文件名取为 test3-2.c )(60分)
编写main函数,从键盘输入任意5个4位正整数存入数组aa中,调用函数sort(),函数sort()的功能是:
按每个数后三位的大小进行升序排列,并将结果依次存入数组bb中,如果后三位的数组相等,则按4位正整数的大小进行降序排列。
例如:输入:6012,5099,9012,7025,8088,则输出结果为:9012,6012,7025,8088,5099。
最后,在main()函数中把排序后的结果输出到文件test3-2.dat中。
注意:程序中不得使用全局变量。
(第四套)
(60分钟)
一、程序调试题( 文件名 test4-1.c )(40分)
磁盘上有一个名为test4-1.c的C程序文件,其功能是:从s所指向的串中,找出包含有t所指字符串的个数。例如:s所指向的串为abcdabfab,t所指字符串为ab,则所求个数为3。请改正程序中的错误,使程序能输出正确的结果。
注意:不得增行或删行,也不得更改程序的结构。
源程序如下:
#include <stdio.h>
#include <string.h>
int fun(char s, char t)
{
int n=0 ;
char *p , *r ;
while(*s)
{
p=s;
r=t ;
while(*r)
if(*r=*p)
{
r++;
p++;
}
else
continue;
if(r=='\0')
n++;
r++;
}
return *s;
}
main()
{
int m ;
char s[100], t[100];
printf("\nPlease enter string s:");
gets(s);
printf("\nPlease enter string t:" );
gets(t);
m=fun(s,t);
printf("\nThe result is: m= %d\n",m);
}
二、编写程序( 程序文件名取为 test4-2.c )(60分)
在main函数中定义一个二维数组a,从已给文件test4-2.in中读入n×n个整数到二维数组a中,其中n的大小由用户在运行程序过程中从键盘上输入(要求n<=5),调用fun函数,fun函数实现:
(1)数组主对角线上各元素的值加1。
(2)其余元素以主对角线划分,右上角各元素的值乘以3,左下角各元素的值乘以2。
最后,在主函数中将修改后的数组按n行n列的格式输出到屏幕和磁盘文件test4-2.out中。
四川省计算机等级考试二级C语言机试题(第二十三次)答案
2009-03-29 16:39:32
23-1套 参考答案:
一、程序调试题(文件名为test1-1.c)(40分)
#include <stdio.h>
#include <string.h> /* 改为: math.h */
main()
{ char str[100], *p=str, help[15];
static long int num[50];
int i=0, k=0, m, sign=0;
printf("\ninput the string:");
scanf("%s", p);
do
{ if(*p>=0 && *p<=9) /* 改为:*p>=’0’ && *p<=’9’ 或 *p>=48 && *p<=57 */
{ sign=1;
help[k++]=*p;
}
else if(sign=1) /* 改为:==*/
{ int n=0;
while(--k>=0)
num[i]+=(help[k]-48)*((long int)pow(n++,10)); /* 改为:pow(10,n++) */
i++;
k=0;
sign=0;
}
else /* 改为:else; */
p++;
}while(*(p-1)!='\0');
for(m=0; m<i; m++)
printf("%d,", num[m]); /* 改为:%ld (即长整型格式输出)*/
}
评分标准:每改对一处得6分,结果正确得4分
二、编程题(程序文件取名为 test1-2.c)(60分)
评分标准:
1.被调函数fun编写正确 20分 2.文件打开和关闭正确 10分
3.函数调用正确 5分 4.屏幕输出和文件输出正确 15分
5.输出格式正确 5分 6.程序结构合理 5分
参考程序:
# include <stdio.h>
# define M 1000
int fun(int *a)
{ int m,k=0;
for(m=1;m<=M;m++)
if( (m%7==0 && m%11!=0) || (m%7!=0 && m%11==0) )
a[k++]=m;
return k;
}
main()
{ int a[M],n,k;
FILE *fp;
clrscr(); /*清屏函数*/
fp=fopen("test1-2.dat","w");
n=fun(a);
printf("%d\n",n);
fprintf(fp,"%d\n",n);
for(k=0;k<n;k++)
{ printf("%5d",a[k]);
fprintf(fp,"%5d",a[k]);
if( (k+1)%10 == 0 )
{ printf("\n");
fprintf(fp,"\n");
}
}
fclose(fp);
}
23-2套 参考答案:
一、程序调试题(文件名 test2-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; /* 改为 *k */
}
s[i+1]=m;
*t++ ; /* 改为 (*t)++ */
}
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("\nThe index of max is:%d\n",mi);
printf("The result:\n");
for(i=0;i<n;i++)
printf("%4d", &a[i] ); /* 改为 a[i] */
}
评分标准:每改对一处得6分,结果正确得4分
二、编程题(程序文件取名为 test2-2.c)(60分)
评分标准:
1.被调函数fun编写正确 20分 2.文件打开和关闭正确 10分
3.函数调用正确 5分 4.屏幕输出和文件输出正确 15分
5.输出格式正确 5分 6.程序结构合理 5分
参考程序:
# include <stdio.h>
# define M 1000
int fun(int *a)
{ int m,k=0;
for(m=1;m<=M;m++)
if( (m%7==0 && m%11!=0) || (m%7!=0 && m%11==0) )
a[k++]=m;
return k;
}
main()
{ int a[M],n,k;
FILE *fp;
clrscr(); /*清屏函数*/
fp=fopen("test1-2.dat","w");
n=fun(a);
printf("%d\n",n);
fprintf(fp,"%d\n",n);
for(k=0;k<n;k++)
{ printf("%5d",a[k]);
fprintf(fp,"%5d",a[k]);
if( (k+1)%10 == 0 )
{ printf("\n");
fprintf(fp,"\n");
}
}
fclose(fp);
}
23-3套 参考答案:
一、程序调试题(文件名 test3-1.c)( 40 分 )
#include <stdio.h>
#include <string.h> /* 改为 ctype.h */
void fun(char s) /* 改为 *s */
{ int i,j;
for(i=j=0;s[i];i++); /* 改为 去掉分号 ;*/
if(isalpha(s[i]))
s[j] =s[i]; /* 改为 s[j++] */
s[i] ='\0'; /* 改为 s[j] */
}
void main()
{
char str[80]="a*b$c(d!EEE !!a.";
fun(str[80]); /* 改为 str */
printf("\n");
puts(str);
}
评分标准:每改对一处得6分,结果正确得4分
二、编程题(程序文件取名为 test3-2.c)(60分)
评分标准:
1.文件定义、打开、关闭正确 10分 2.数据讲稿和文件写入正确 10分
3.函数调用正确 5分 4.函数定义和参数使用正确 20分
5.结果正确 10分 6.程序结构合理 5分
参考程序:
#include <stdio.h>
void sort(int aa[],int bb[])
{ int i,j,data;
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
{ if(aa[i]%1000>aa[j]%1000)
{ data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
else if(aa[i]%1000==aa[j]%1000)
if(aa[i]<aa[j])
{ data=aa[i];
aa[i]=aa[j];
aa[j]=data;
}
}
for(i=0;i<5;i++)
bb[i]=aa[i];
}
void main()
{ int aa[5],bb[5];
FILE *out;
int i;
printf("\nplease input 5 numbers:");
for(i=0;i<5;i++)
scanf("%d",&aa[i]);
sort(aa,bb);
out=fopen("test3-2.dat","w");
printf("\n");
for(i=0;i<5;i++)
{ printf("%5d",bb[i]);
fprintf(out,"%5d",bb[i]);
}
fclose(out);
}
23-4套 参考答案:
一、程序调试题(文件名 test4-1.c)( 40 分 )
#include <stdio.h>
#include <string.h>
int fun(char s, char t) /* 改为 char *s, char *t */
{ int n=0 ;
char *p , *r ;
while(*s)
{ p=s;
r=t ;
while(*r)
if(*r=*p) /* 改为 == */
{ r++;
p++;
}
else continue; /* 改为 break */
if(r=='\0') /* 改为 *r */
n++;
r++; /* 改为 s++ */
}
return *s; /* 改为 n */
}
main()
{ int m ;
char s[100], t[100];
printf("\nPlease enter string s:");
gets(s);
printf("\nPlease enter string t:" );
gets(t);
m=fun(s,t);
printf("\nThe result is: m= %d\n",m);
}
评分标准:每改对一处得6分,结果正确得4分
二、编程题(程序文件取名为 test4-2.c)(60分)
评分标准:
1.被调函数编写正确 20分 2.函数调用正确 5分
3.文件打开和关闭正确 5分 4.文件读、写正确 15分
5.N输入和屏幕输出正确 10分 6.程序结构合理 5分
参考程序:
#include<stdio.h>
#define N 5
void fun(int a[N][N],int n)
{ int i,j;
for(i=j=0;i<n;i++,j++)
a[i][j]=a[i][j]+1;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
a[i][j]=a[i][j]*2;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
a[i][j]=a[i][j]*3;
}
main()
{ int a[N][N],i,j,n;
FILE *fp;
clrscr();
printf(“*****input n *****\n”);
scanf(“%d”,&n);
fp=fopen("test4-2.in","r");
if(fp==NULL)
{ printf("file test4-2.in not open");
exit(0);
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
fscanf(fp,"%d",&a[i][j]);
fclose(fp);
fun(a,n);
fp=fopen("test4-2.out","w");
if(fp==NULL)
{ printf("file test4-2.in not open");
exit(0);
}
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ printf("%5d",a[i][j]);
fprintf(fp,"%d",a[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
展开阅读全文