【真题1】 给定程序的功能是:读入一个整数k(2≤k≤10000),打印它的所有质 因子(即所有为素数的因子)。 例如,若输入整数:3410,则应输出:2、5、11、31。 #include < stdio.h >IsPrime ( int n ) { int i, m; m = 1; for ( i = 2; i < n; i++ ) /************found************/ if (!( n ___1___ i )) { /************found************/ m = 0; ___2___ ; } return ( m ); } main( ) { int j, k; printf( "\nPlease enter an integer number between 2 and 10000: " ); /************found************/ scanf( "%d", ___3___ ); printf( "\n\nThe prime factor(s) of %d is( are ):", k ); for( j = 2; j < = k; j++ ) if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n %4d", j ); printf("\n"); } (2011年2月) 解析: 本题的考核点是C语言中算术运算符的用法以及输入输出语句和break 语句的使用。 题中第一个空填"%":"%"为模运算符,或称求余运算符,%两侧均应为整型 数据。只有当"n%i==0"时,循环才继续执行。 题中第二个空填"break":break语句用来从循环体内跳出循环体,即提前结束 循环,接着执行循环下面的语句。 题中第三个空填"&k":scanf函数为格式输入函数,其一般形式为: scanf(格式控制,地址表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。 "地址表列"是由若干个地址组成的表列,可以是变量的地址,或字符串的首地 址。 答案:【1】% 【2】break 【3】&k 【真题2】 文件modi.c 中程序的功能是:判断两个整数m 和n 是否互质(即是否 有公共的因子)(m≠1,n≠1)。 方法是: 用2 到t(t 取m 和n 中较小的那个 数)之间的数分别去除m 和n,若m 和n 能同时被某个数除尽,则m 和n 不互 质;否则它们互质。 例如,若输入187 和85,则应输出No(表示它们不互质,它们有公因子17)。若 输入89 和187,则应输出Yes(表示它们互质)。 请改正程序中的错误,使它能计算出正确的结果。 注意: #include < conio.h >#include < stdio.h >int IsThat( int m, int n ) { int k, t, mk=1; t=m; if (m >n) t=n; /************found**********/ for( k=1; k< =t; k++ ) if( m%k==0 && n%k==0 ){ mk=0; break; } return( mk ); } main( ) { int m, n; clrscr(); printf( "\nPlease enter 2 numbers:\n" ); /************found**********/ scanf( "&d &d", &m, &n ); if( IsThat( m, n ) ) printf( "Yes\n" ); else printf( "No\n" ); } (2011年2月) 解析: 本题的考核点是C语言中for循环语句及scanf函数的使用。 题目要求判断从2 到t之间的数值是否互质,所以IsThat函数的for 循环从1 到t判断m 和n是否互质与题义不符,应该改为"for(k=2;k< =t;k++)"或相 同作用的语句。 scanf函数的格式字符串的前缀是%,而不是&,所以应该把原程序中的 "scanf( "&d &d", &m, &n );"语句改为"scanf( "%d %d", &m, &n );"或相 同作用的语句。 【真题3】 请编写一个函数void fun(char a[],int k,int n),其功能是:删除字符 串规定下标开始的n 个字符。其中,a 指向字符串,k 中存放指定的下标。 例如,字符串内容为:Hellollo World!,k 中的值为:5,n 中的值为:3,则调用 该函数的结果为:Hello World!。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#define N 80 void fun(char *a,int k,int n) {……} main() { char s[N]="Hellollo World!"; int k,n; printf("\nThe original string:%s\n",s); printf("Enter index ———————— k: "),scanf("%d",&k); printf("Enter number to delete —— n: ");scanf("%d",&n); fun(s,k,n); printf("\nThe string after deleted: %s\n",s); } (2011年2月) 解析: 本题的考核点是删除字符串规定下标开始的n 个字符算法。 提示思路:从指定下标加上n后开始的元素依次放在指定下标开始的位置,来 达到删除的目的。 void fun(char *a,int k,int n) {int i;i=k; while (a[i-1]!='\0')/*判断指定要删除的字符是否存在或其后的全部字符是否 已全部前移*/ { a[i]=a[i+n]; i=i+1; } } |