知ing

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

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

゛Zirro、Y 上传

查看本书

06套: 

给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时程序输出: 

x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000 

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

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

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

给定源程序: 

#include <stdio.h> 

double f1(double x) 

{ return x*x; } 

double f2(double x, double y) 

{ return x*y; } 

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

__1__ fun(int i, double x, double y) 

{ if (i==1) 

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

return __2__(x); 

else 

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

return __3__(x, y); 

main() 

{ double x1=5, x2=3, r; 

r = fun(1, x1, x2); 

 

r += fun(2, x1, x2); 

printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r); 

解题思路: 

本题是根据给定的公式来计算函数的值。 

第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。 

第二处:当i等于1时,则返回f1函数的值,所以应填:f1。 

第三处:如果i不等于1,则返回f2函数的值,所以应填:f2。 

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

给定程序MODI1.C中函数fun的功能是比较两个字符串,将长的那个字符串的首地址作为函数值返回。 

请改正函数fun中指定部位的错误使它能得出正确的结果。 

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

给定源程序: 

#include <stdio.h> 

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

char fun(char *s, char *t) 

{ int sl=0,tl=0; char *ss, *tt; 

ss=s; tt=t; 

while(*ss) 

{ sl++; 

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

(*ss)++; 

while(*tt) 

{ tl++; 

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

(*tt)++; 

if(tl>sl) return t; 

else return s; 

main() 

{ char a[80],b[80],*p,*q; int i; 

printf("\nEnter a string : "); gets(a); 

printf("\nEnter a string again : "); gets(b); 

printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); 

解题思路: 

第一处试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t) 

第二处取字符串指针ss的下一个位置,所以应改为:ss++;。 

第三处:取字符串指针tt的下一个位置,所以应改为:tt++;。 

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

请编写函数fun,函数的功能是移动字符串中的内容,移动的规则如下把第1到第m个字符平移到字符串的最后把第m+1到最后的字符移到字符串的前部。 

例如字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动后字符串中的内容应该是: DEFGHIJKABC。 

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

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

给定源程序: 

#include <stdio.h> 

#include <string.h> 

#define N 80 

void fun1(char *w) / * 本函数的功能是将字符串中字符循环左移一个位置 */ 

int i; char t; 

t=w[0]; 

for(i=0;i<strlen(w)-1;i++) 

w[i]=w[i+1]; 

w[strlen(w)-1]=t; 

void fun(char *w, int m) / * 可调用fun1函数左移字符 */ 

main() 

{ char a[N]= "ABCDEFGHIJK"; 

int m; 

printf("The original string:\n");puts(a); 

printf("\n\nEnter m: ");scanf("%d",&m); 

fun(a,m); 

printf("\nThe string after moving:\n");puts(a); 

printf("\n\n"); 

NONO(); 

解题思路: 

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

1. 由于函数fun1是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串。 

2. 利用循环for语句来操作多少个字符(m)需要循环左移。 

参考答案: 

void fun1(char *w) / * 本函数的功能是将字符串中字符循环左移一个位置 */ 

int i; char t; 

t=w[0]; 

for(i=0;i<strlen(w)-1;i++) 

w[i]=w[i+1]; 

w[strlen(w)-1]=t; 

void fun(char *w, int m) / * 可调用fun1函数左移字符 */ 

int i; 

for(i = 0 ; i < m ; i++) fun1(w); 

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


查看更多