计算机二级C语言上机真题(75)【附详解】
【真题1】 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成
绩。函数fun 的功能是将形参a 所指结构体变量中的数据赋给函数中的结构体变量
b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a 所指变量中的学
号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改
后输出b 中的数据应为:10002、"LiSi"、95、80、88。
#include < stdio.h >#include < string.h >struct student {
long sno;
char name[10];
float score[3];
};
void fun(struct student a)
{ struct student b; int i;
/**********found**********/
b = __1__;
b.sno = 10002;
/**********found**********/
strcpy(__2__, "LiSi");
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);
/**********found**********/
for (i=0; i< 3; i++) printf("%6.0f ", b.__3__);
printf("\n");
}
main()
{ struct student s={10001,"ZhangSan", 95, 80, 88};
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i< 3; i++) printf("%6.0f ", s.score[i]);
printf("\n");
fun(s);
}
(2011年2月)
解析: 本题的考核点是结构体类型变量的定义和引用。
在fun 函数中定义了结构体变量b,并将形参a所指结构体变量中的数据赋给
结构体变量b,所以第一个空填:a; strcpy 函数的作用是将后一字符串内容
(源字符串)拷贝到前一字符串(目的字符串)中,所以第二个空填:
b.name;函数中for 循环的作用是输出结构体变量b中3 门课的成绩,所以第
三个空填:score[i]。
答案:【1】a 【2】b.name 【3】score[i]
【真题2】 给定程序modi.c 中函数 fun 的功能是:计算正整数num 的各位上的
数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该
是:0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < stdio.h >#include < conio.h >long fun (long num)
/************found************/
{ long k;
do
{ k*=num%10 ;
/************found************/
num\=10 ;
} while(num) ;
return (k) ;
}
main( )
{ long n ;
clrscr() ;
printf("\Please enter a number:") ; scanf("%ld",&n) ;
printf("\n%ld\n",fun(n)) ;
}
(2011年2月)
解析: 本题的考核点是变量的赋值与初始化。
提示思路:使用循环语句依次将正整数各位的数值取出并累积起来。本题中用
到了中间变量k作为累积变量,此变量必须要初始化或赋以初始值,此外赋值
运算符中不存在"\="符号,应将其改为"/="运算符或其他赋值方式。
【真题3】 请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只
剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,一维数组中的数据是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后数组中的内容应该是:2 3 4
5 6 7 8 9 10。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include< stdio.h >#define N 80
int fun(int a[],int n)
{……}
main()
{int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf(“The original data:\n”);
for(i=0;i< n;i++) printf(“%3d”,a[i]);
n=fun(a,n); printf(“\n\nThe data after deleted:\n”);
for(i=0;i< n;i++) printf(“%3d”,a[i]);
printf(“\n\n”);
}
(2011年2月)
解析: 本题的考核点是从一维数组中删除相同数据元素的算法。
解题思路:从数组中的第一个数据开始,依次与其后面的数据进行比较,若相
同,则将它之后的字符逐个向前移动一个位置,即将该数据删除,n--;,j--;,
继续进行下一个数据的循环判断,最终删除一维数组中所有相同的数,使之只
剩一个,并返回删除后数组中数据的个数。
int fun(int a[], int n)
{int i,j,x; /*定义三个整型变量*/
for(i=0;i< n-1;i++) /*从数组中的第一个数据开始,依次与其后面的数据进
行比较,若相同,则将它之后的字符逐个向前移动一个位置,即将该数据删除
*/
for(j=i+1;j< n;j++)
if(a[j]==a[i])
{for(x=j+1;x< n;x++)
a[x-1]=a[x];
n--;
j--;
}
return(n); /*返回结果*/
}
绩。函数fun 的功能是将形参a 所指结构体变量中的数据赋给函数中的结构体变量
b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a 所指变量中的学
号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改
后输出b 中的数据应为:10002、"LiSi"、95、80、88。
#include < stdio.h >#include < string.h >struct student {
long sno;
char name[10];
float score[3];
};
void fun(struct student a)
{ struct student b; int i;
/**********found**********/
b = __1__;
b.sno = 10002;
/**********found**********/
strcpy(__2__, "LiSi");
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);
/**********found**********/
for (i=0; i< 3; i++) printf("%6.0f ", b.__3__);
printf("\n");
}
main()
{ struct student s={10001,"ZhangSan", 95, 80, 88};
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i< 3; i++) printf("%6.0f ", s.score[i]);
printf("\n");
fun(s);
}
(2011年2月)
解析: 本题的考核点是结构体类型变量的定义和引用。
在fun 函数中定义了结构体变量b,并将形参a所指结构体变量中的数据赋给
结构体变量b,所以第一个空填:a; strcpy 函数的作用是将后一字符串内容
(源字符串)拷贝到前一字符串(目的字符串)中,所以第二个空填:
b.name;函数中for 循环的作用是输出结构体变量b中3 门课的成绩,所以第
三个空填:score[i]。
答案:【1】a 【2】b.name 【3】score[i]
【真题2】 给定程序modi.c 中函数 fun 的功能是:计算正整数num 的各位上的
数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该
是:0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,
#include < stdio.h >#include < conio.h >long fun (long num)
/************found************/
{ long k;
do
{ k*=num%10 ;
/************found************/
num\=10 ;
} while(num) ;
return (k) ;
}
main( )
{ long n ;
clrscr() ;
printf("\Please enter a number:") ; scanf("%ld",&n) ;
printf("\n%ld\n",fun(n)) ;
}
(2011年2月)
解析: 本题的考核点是变量的赋值与初始化。
提示思路:使用循环语句依次将正整数各位的数值取出并累积起来。本题中用
到了中间变量k作为累积变量,此变量必须要初始化或赋以初始值,此外赋值
运算符中不存在"\="符号,应将其改为"/="运算符或其他赋值方式。
【真题3】 请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只
剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,一维数组中的数据是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后数组中的内容应该是:2 3 4
5 6 7 8 9 10。
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include< stdio.h >#define N 80
int fun(int a[],int n)
{……}
main()
{int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf(“The original data:\n”);
for(i=0;i< n;i++) printf(“%3d”,a[i]);
n=fun(a,n); printf(“\n\nThe data after deleted:\n”);
for(i=0;i< n;i++) printf(“%3d”,a[i]);
printf(“\n\n”);
}
(2011年2月)
解析: 本题的考核点是从一维数组中删除相同数据元素的算法。
解题思路:从数组中的第一个数据开始,依次与其后面的数据进行比较,若相
同,则将它之后的字符逐个向前移动一个位置,即将该数据删除,n--;,j--;,
继续进行下一个数据的循环判断,最终删除一维数组中所有相同的数,使之只
剩一个,并返回删除后数组中数据的个数。
int fun(int a[], int n)
{int i,j,x; /*定义三个整型变量*/
for(i=0;i< n-1;i++) /*从数组中的第一个数据开始,依次与其后面的数据进
行比较,若相同,则将它之后的字符逐个向前移动一个位置,即将该数据删除
*/
for(j=i+1;j< n;j++)
if(a[j]==a[i])
{for(x=j+1;x< n;x++)
a[x-1]=a[x];
n--;
j--;
}
return(n); /*返回结果*/
}