计算机二级C语言上机真题(76)【附详解】
【真题1】 已知学生的记录由学号和学习成绩构成,N 名学生的数据已存入a 结构
体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。
#include < stdio.h >#include < string.h >#define N 10
typedef struct ss
{ char num[10]; int s; } STU;
fun(STU a[], STU *s)
{
/**************found**************/
___1___ h; int i ;
h = a[0];
for ( i = 1; i < N; i++ )
/**************found**************/
if ( a[i].s < h.s ) ___2___ = a[i];
/**************found**************/
*s = ___3___ ;
}
main()
{ STU
a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;
int i;
printf("***** The original data *****\n");
for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);
fun ( a, &m );
printf ("***** THE RESULT *****\n");
printf ("The lowest : %s , %d\n",m.num, m.s);
}
(2011年2月)
解析: 本题的考核点是结构体类型变量的定义和引用。
提示思路:先从所有的学生数据中找出最低的分值,然后将所有学生分数中与
最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返
回。
答案:【1】STU 【2】h 【3】h
【真题2】 给定程序modi.c 中函数fun的功能是:统计一个无符号整数中各位数
字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数
值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字
值最大的是8。
请改正函数fun 中指定部位的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < stdio.h >int fun(unsigned n, int *zero)
{ int count=0,max=0,t;
do
{ t=n%10;
/**************found**************/
if(t=0)
count++;
if(max< t) max=t;
n=n/10;
}while(n);
/**************found**************/
zero=count;
return max;
}
main()
{ unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
}
(2011年2月)
解析: 本题的考核点是C语言中指针变量作为函数参数和do...while 循环语
句的使用。
提示思路:先对变量count和max 初始化为0,再通过if语句判断各位数上的
数字值是否是0,若是0,则count自加1,然后将各位数上的值分别与统计的
最大值进行比较,即找出该整数中最大的数字值放到变量max中并返回。其
中,zero 形参指针变量,传回主函数的是地址。
本题中的第一个错误:关系表达式使用错误,在c 语言中,"="表示赋值运算
符,关系表达式"=="的值是一个逻辑值,即"真"或"假",所以应该将程序中的
语句"if(t=0)"改为"if(t==0)"或相同作用的语句。
本题中的第二个错误:变量引用错误,zero 为指针变量,count为整型变量,
应该将程序中的语句"zero=count;"改为"*zero=count;"或相同作用的语句。
【真题3】 函数fun 的功能是:将s 所指字符串中除了下标为奇数、同时ASCII值
也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在
t 所指的数组中。
例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符A 的ASCII码
值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1 的ASCII码值为
奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t 所指的
数组中的内容应是:“135”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is :%s\n",t);
}
(2011年2月)
解析: 本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素与2 取余,如果余数不为零
则将其值存入另外一个数组中。
本评析仅供参考。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*将字符串s 中所有下标和ASCII值同时为奇数的字符复制到数组t中*/
for(i=1;i< slenth;i+=2)
if(s[i]%2!=0)
t[n++]=s[i];
t[n]='\0';/*在数组t最后添加字符串结束符*/
}
体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。
#include < stdio.h >#include < string.h >#define N 10
typedef struct ss
{ char num[10]; int s; } STU;
fun(STU a[], STU *s)
{
/**************found**************/
___1___ h; int i ;
h = a[0];
for ( i = 1; i < N; i++ )
/**************found**************/
if ( a[i].s < h.s ) ___2___ = a[i];
/**************found**************/
*s = ___3___ ;
}
main()
{ STU
a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;
int i;
printf("***** The original data *****\n");
for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);
fun ( a, &m );
printf ("***** THE RESULT *****\n");
printf ("The lowest : %s , %d\n",m.num, m.s);
}
(2011年2月)
解析: 本题的考核点是结构体类型变量的定义和引用。
提示思路:先从所有的学生数据中找出最低的分值,然后将所有学生分数中与
最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返
回。
答案:【1】STU 【2】h 【3】h
【真题2】 给定程序modi.c 中函数fun的功能是:统计一个无符号整数中各位数
字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数
值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字
值最大的是8。
请改正函数fun 中指定部位的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < stdio.h >int fun(unsigned n, int *zero)
{ int count=0,max=0,t;
do
{ t=n%10;
/**************found**************/
if(t=0)
count++;
if(max< t) max=t;
n=n/10;
}while(n);
/**************found**************/
zero=count;
return max;
}
main()
{ unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
}
(2011年2月)
解析: 本题的考核点是C语言中指针变量作为函数参数和do...while 循环语
句的使用。
提示思路:先对变量count和max 初始化为0,再通过if语句判断各位数上的
数字值是否是0,若是0,则count自加1,然后将各位数上的值分别与统计的
最大值进行比较,即找出该整数中最大的数字值放到变量max中并返回。其
中,zero 形参指针变量,传回主函数的是地址。
本题中的第一个错误:关系表达式使用错误,在c 语言中,"="表示赋值运算
符,关系表达式"=="的值是一个逻辑值,即"真"或"假",所以应该将程序中的
语句"if(t=0)"改为"if(t==0)"或相同作用的语句。
本题中的第二个错误:变量引用错误,zero 为指针变量,count为整型变量,
应该将程序中的语句"zero=count;"改为"*zero=count;"或相同作用的语句。
【真题3】 函数fun 的功能是:将s 所指字符串中除了下标为奇数、同时ASCII值
也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在
t 所指的数组中。
例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符A 的ASCII码
值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1 的ASCII码值为
奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t 所指的
数组中的内容应是:“135”。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >void
fun(char *s,char t[])
{……}
main()
{ char s[100],t[100];
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
fun(s,t);
printf("\nThe result is :%s\n",t);
}
(2011年2月)
解析: 本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素与2 取余,如果余数不为零
则将其值存入另外一个数组中。
本评析仅供参考。
void fun(char *s, char t[])
{ int i,slenth,n=0;
slenth=strlen(s); /*统计字符串s中字符的个数*/
/*将字符串s 中所有下标和ASCII值同时为奇数的字符复制到数组t中*/
for(i=1;i< slenth;i+=2)
if(s[i]%2!=0)
t[n++]=s[i];
t[n]='\0';/*在数组t最后添加字符串结束符*/
}