【真题1】 函数fun()它的功能是计算: s=(1-ln(1)-ln(2)-ln(3)-…-ln(m))2 s 作为函数值返回。 在C 语言中可调用log(n)函数求ln(n)。log函数的引用说明是double log (double x)。 例如,若m 的值为15,则fun()函数值为723.570801。 注意:部分源程序给出如下。 试题程序: #include < conio.h >#include < stdio.h >#include < math.h >double fun(int m) { int i; double s=1.0; for(i=1;i< =__1__;i++) s=s-log(i); /*计算s=1-ln(1)-ln(2)-ln(3)-…-ln(m)*/ return (__2__); /*对s 求平方并返回*/ } main() { printf("%f\n ",fun(15)); } (2011年2月) 解析: 首先,题目要求计算1依次减去从1 到m 的对数,可用从1 到m的循 环,每次循环都减一个数的对数。该题需要注意之处是,log()函数的形式参数 应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。最 后在返回的时候求平方。 答案:1: m 2: s*s 【真题2】 给定程序modi.c 中的函数Creatlink 的功能是创建带头结点的单向链 表,并为各结点数据域赋0 到m-1 的值。请改正函数Creatlink 中指定部位的错 误,使它能得出正确的结果。注意:不要改动main 函数, #include < stdio.h >#include < conio.h >#include < stdlib.h >typedef struct aa { int data; struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; /**********found***********/ p=(NODE )malloc(sizeof(NODE)); h=p; p- >next=NULL; for(i=1; i< =n; i++) { s=(NODE *)malloc(sizeof(NODE)); s- >data=rand()%m; s- >next=p- >next; p- >next=s; p=p- >next; } /**********found***********/ return p; } outlink(NODE *h) { NODE *p; p=h- >next; printf("\n\nTHE LIST :\n\n HEAD "); while(p) { printf("- >%d ",p- >data); p=p- >next; } printf("\n"); } main() { NODE *head; clrscr(); head=Creatlink(8,22); outlink(head); } (2011年2月) 解析: 本题的考核点是建立链表并为各结点赋值。 提示思路:设三个指针变量:h、p、s,它们都指向结构体类型数据。先用 malloc函数开辟一个结点,并使h 指向它,通过循环再开辟新的结点,并使s 指向新开辟的结点,将读入的随机数给s 所指的结点,即为s 结点赋值。 程序中的第一个错误:p=(NODE )malloc(sizeof(NODE)); 应改为: p=(NODE *)malloc(sizeof(NODE)); 程序中的第二个错误:return p; 应改为:return h; 【真题3】 请编写一个函数 void fun (int x, int pp[], int *n),它的功能是:求 出能整除 x 且不是奇数的各整数,并放在数组pp 中, 这些除数的个数由 n 返回。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >void fun ( int x, int pp[], int *n ) {……} main( ) { int x, aa[1000], n, i ; clrscr() ; printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ; fun(x, aa, &n ) ; for( i = 0 ; i < n ; i++ ) printf("%d ", aa[i]) ; printf("\n") ; } (2011年2月) 解析: 本题的考核点是C语言的指针及循环的嵌套。 解题思路: 1、通过循环找出能整除 x 且不是奇数的整数; 2、在函数中的循环中,一旦找到能整除 x 且不是奇数的整数,立即将其存入数 组pp[]中; 3、定义计数器j,在循环查找特定整数的过程中,j 对特定整数的数目进行记 录; 4、循环查找完毕后,将特定整数的数目传给n。 /*由于要求的数不能是奇数故编程(www.cppentry.com)时从0 开始循环而步长为2 这样正好保正i 永远是偶数。这里也要注意存放结果的数组pp的下标变化方式*/ void fun(int x, int pp[], int *n) { int i,j=0; for( i=0;i< =x;i=i+2) /*i从0 开始循环而步长为2 这样正好保正i永远是 偶数*/ if( x%i==0) /*判断x能否被i整除*/ pp[j++]=i; /*将符合条件的数存入数组pp[]中*/ *n=j; /*将统计的符合条件的数的个数传给*n*/ } |