【真题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); /*返回结果*/ } |