知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

95套: 

给定程序中,函数fun的功能是:计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵: 

1 2 3 

4 5 6 

7 8 9 

fun函数首先累加159,然后累加357,函数的返回值为30。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#define N 4 

fun(int t[][N], int n) 

{ int i, sum; 

/ **********found**********/ 

___1___; 

for(i=0; i<n; i++) 

/ **********found**********/ 

sum+=___2___ ; 

for(i=0; i<n; i++) 

/ **********found**********/ 

sum+= t[i][n-i-___3___] ; 

return sum; 

main() 

{ int t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j; 

printf("\nThe original data:\n"); 

for(i=0; i<N; i++) 

{ for(j=0; j<N; j++) printf("%4d",t[i][j]); 

printf("\n"); 

printf("The result is: %d",fun(t,N)); 

解题思路: 

第一处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=0。 

第二处:对主对角线元素值累加,所以应填:t[i][i]。 

第三处:对反向对角线元素值累加,所以应填:t[i][n-i-1]。 

*************************************************** 

例如,若给m输入 -100,给n输入90,则函数求得的一个根值为2.000。 

请改正程序中的错误,使它能得出正确结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 

给定源程序: 

#include <stdio.h> 

#include <math.h> 

double funx(double x) 

{ return(2*x*x*x-4*x*x+3*x-6); } 

double fun( double m, double n) 

/ ************found************/ 

int r; 

r=(m+n)/2; 

/ ************found************/ 

while(fabs(n-m)<0.001) 

{ if(funx(r)*funx(n)<0) m=r; 

\TAB else n=r; 

\TAB r=(m+n)/2; 

return r; 

main( ) 

{ double m,n, root; 

printf("Enter m n : \n"); scanf("%lf%lf",&m,&n); 

root=fun( m,n ); 

printf("root = %6.3f\n",root); 

解题思路: 

第一处:变量r应该定义为实数型double或浮点型float变量。 

第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.001)。 

*************************************************** 

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 

例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。 

注意部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

void fun( char *a, char *h,char *p ) 

main() 

{ char s[81],*t, *f; 

printf("Enter a string:\n");gets(s); 

t=f=s; 

while(*t)t++; 

t--; 

while(*t=='*')t--; 

while(*f=='*')f++; 

fun( s , f,t ); 

printf("The string after deleted:\n");puts(s); 

NONO(); 

解题思路: 

本题是考察字符串的操作。 

1. r指针左边的字符仍存放字符串a首地址开始的位置上。 

2. r指针和p指针中间的字符进行判断,其字符是否是'*',如果不是'*',则把这些字符放到第1步操作字符串a的后面。 

3. p指针右边的字符放到第2步操作字符串a的后面。 

4. 最后给字符串a加上结束符。 

参考答案: 

void fun( char *a, char *h,char *p ) 

int j=0; 

char *q=a; 

while(*q && q < h) a[j++] = *q++ ; 

while(*h && *p && h < p) { 

if(*h != '*') a[j++] = *h ; 

h++; 

while(*p) a[j++] = *p++ ; 

a[j] = 0 ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多