97100C语言试题.docx

上传人:b****3 文档编号:10903924 上传时间:2023-05-28 格式:DOCX 页数:21 大小:21.48KB
下载 相关 举报
97100C语言试题.docx_第1页
第1页 / 共21页
97100C语言试题.docx_第2页
第2页 / 共21页
97100C语言试题.docx_第3页
第3页 / 共21页
97100C语言试题.docx_第4页
第4页 / 共21页
97100C语言试题.docx_第5页
第5页 / 共21页
97100C语言试题.docx_第6页
第6页 / 共21页
97100C语言试题.docx_第7页
第7页 / 共21页
97100C语言试题.docx_第8页
第8页 / 共21页
97100C语言试题.docx_第9页
第9页 / 共21页
97100C语言试题.docx_第10页
第10页 / 共21页
97100C语言试题.docx_第11页
第11页 / 共21页
97100C语言试题.docx_第12页
第12页 / 共21页
97100C语言试题.docx_第13页
第13页 / 共21页
97100C语言试题.docx_第14页
第14页 / 共21页
97100C语言试题.docx_第15页
第15页 / 共21页
97100C语言试题.docx_第16页
第16页 / 共21页
97100C语言试题.docx_第17页
第17页 / 共21页
97100C语言试题.docx_第18页
第18页 / 共21页
97100C语言试题.docx_第19页
第19页 / 共21页
97100C语言试题.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

97100C语言试题.docx

《97100C语言试题.docx》由会员分享,可在线阅读,更多相关《97100C语言试题.docx(21页珍藏版)》请在冰点文库上搜索。

97100C语言试题.docx

97100C语言试题

第97套

1.填空题

请补充函数fun,该函数的功能是比较字符串str1和str2的大小,并返回比较的结果。

例如:

当str1="cdef",str2="cde"时,函数fun()返回">"。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#defineN80

char*fun(char*str1,char*str2)

{

char*p1=str1,*p2=str2;

while(*p1&&*p2)

{

if(【1】)

return"<";

if(【2】)

return">";

p1++;

p2++;

}

if(*p1==*p2)

return"==";

if(*p1==【3】)

return"<";

else

return">";

}

main()

{

charstr1[N],str2[N];

clrscr();

printf("Inputstr1:

\n");

gets(str1);

printf("Inputstr2:

\n");

gets(str2);

printf("\n*****theresult*****\n");

printf("\nstr1%sstr2",fun(str1,str2));

}

【1】*p1<*p2【2】*p1>*p2【3】′\0′

【解析】填空1:

比较两个字符串的大小,是从第一个字符开始比较,如果两字符不相等,则由字符的大小决定字符串的大小;如果两字符相等,则继续比较下一个字符,如果所有字符都相等,则两字符串相等。

指针P1指向字符串str1,指针P2指向字符串str2,如果p1所指的字符小于p2所指的字符,则字符串str1小于字符串str2。

填空2:

如果p1所指的字符大于p2所指的字符,则字符串str1大于字符串str2。

填空3:

如果str1是str2的前一部分,则str1的所有字符都等于str2中的对应字符,而字符串结束标记符'\0'小于其他字符,所以,这里如果p1所指的字符等于'\0',则表示字符串str1小于字符串str2。

2.改错题

下列给定程序中,函数fun()的功能是:

求S的值。

S=(22/(1*3))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1))

例如,当k为10时,函数的值应为1.533852。

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

注意:

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

试题程序:

#include

#include

#include

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

fun(intk)

{intn;floats,w,p,q;

n=1;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

}

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

returns

}

main()

{clrscr();

printf("%f\n",fun(10));

}

(1)错误:

fun(intk)

正确:

doublefun(intk)

(2)错误:

returns

正确:

returns;

【解析】这样一道数学题要是用C程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。

一个是简单的函数调用的定义,另一个是语法错误。

 

3.编程题

请编写函数fun(),该函数的功能是:

计算并输出

S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5+…+n0.5)

例如,若主函数从键盘给n输入20后,则输出为s=534.188884。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\n\nInputn:

");

scanf("%d",&n);

s=fun(n);

printf("\n\ns=%f\n\n",s);

}

【解析】我们先用数学的思路读懂该程序,并用1个字符表示"()"内的值。

在本程序中用s1来表示题中每个小括号内的值,第1项相当于有1个10.5次方(它还是1),第2项相当于第1项的值加上20.5次方,第3项相当于第2项的值加上30.5次方,…,依次类推。

函数pow(x,y)的功能是求出x的y次方,该函数已在库函数中定义(即可直接使用)。

要程序中用s来表示总的结果,每1次循环加1次s1即加1项。

doublefun(intn)

{

inti;

doubles=0.0,s1=0.0;

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

{s1=s1+pow(i,0.5);/*求每一项*/

s=s+s1;/*按公式求出s*/

}

returns;

}

第98套

1.填空题

请补充函数fun(),该函数的功能是建立一个带头结点的单向链表并输出到文件"out98.dat"和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#include

typedefstructss

{

intdata;

structss*next;

}NODE;

voidfun(intn,char*filename)

{

NODE*h,*p,*s;

FILE*pf;

inti;

h=p=(NODE*)malloc(sizeof(NODE));

h->data=0;

for(i=1;i

{

s=(NODE*)malloc(sizeof(NODE));

s->data=【1】;

【2】;

p=【3】;

}

p->next=NULL;

if((pf=fopen(filename,"w"))==NULL)

{

printf("Cannotopenout98.dat!

");

exit(0);

}

p=h;

fprintf(pf,"\n***THELIST***\n");

printf("\n***THELIST***\n");

while(p)

{

fprintf(pf,"%3d",p->data);

printf("%3d",p->data);

if(p->next!

=NULL)

{

fprintf(pf,"->");

printf("->");

}

p=p->next;

}

fprintf(pf,"\n");

printf("\n");

fclose(pf);

p=h;

while(p)

{

s=p;

p=p->next;

free(s);

}

}

main()

{

char*filename="out98.dat";

intn;

clrscr();

printf("\nInputn:

");

scanf("%d",&n);

fun(n,filename);

}

【1】i【2】p->next=s【3】p->next

【解析】填空1:

题目要求各结点的值为对应的下标,头结点的值为0,其他结点的值从1开始,所以此空应填i。

填空2:

为了将结点p和结点s连接起来,应将结点p的next指针指向结点s。

填空3:

为了通过for循环形成链表,每执行完一次循环操作,都要将指针p指向下一个结点。

2.改错题

下列给定程序中,函数fun()的功能是:

计算

S=f(-n)+f(-n+1)+…+f(0)+f

(1)+f

(2)+…f(n)

的值。

例如,当n为5时,函数值应为10.407143。

f(x)函数定义如下:

(x+1)/(x-2)x>0

f(x)=0x=0或x=2

(x-1)/(x-2)x<0

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

注意:

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

试题程序:

#include

#include

#include

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

f(doublex)

{

if(x==0.0||x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

}

doublefun(intn)

{

inti;doubles=0.0,y;

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

{y=f(1.0*i);s+=y;}

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

returns

}

main()

{clrscr();

printf("%f\n",fun(5));

}

(1)错误:

f(doublex)

正确:

doublef(doublex)

(2)错误:

returns

正确:

returns;

【解析】该程序的流程是,fun()程序对f(n)项循环累加,fun()程序采用条件选择语句计算函数f(x)的值。

本题错误在于未定义函数f(doublex)的返回值类型。

C语言规定,在未显式声明的情况下,函数返回值默认为int型。

 

3.编程题

请编写一个函数voidfun(chara[],charb[],intn),其功能是:

删除一个字符串中指定下标的字符。

其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#defineLEN20

voidfun(chara[],charb[],intn)

{

}

main()

{

charstrl[LEN],str2[LEN];

intn;

clrscr();

printf("Enterthestring:

\n");

gets(strl);

printf("Enterthepositionofthestringdeleted:

");

scanf("%d",&n);

fun(strl,str2,n);

printf("Thenewstringis:

%s\n",str2);

}

【解析】本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。

所以要用if(i!

=n),注意不能写成"=="运算。

voidfun(chara[],charb[],intn)

{

inti,k=0;

for(i=0;a[i]!

='\0';i++)

if(i!

=n)/*将不是指定下标的字符存入数组b中*/

b[k++]=a[i];

b[k]='\0';/*在字符串最后加上结束标记*/

}

第99套

1.填空题

请补充main函数,该函数的功能是:

先以只写方式打开文件"out99.dat",再把字符串str中的字符保存到这个磁盘文件中。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。

试题程序:

#include"stdio.h"

#include"conio.h"

#defineN80

main()

{

FILE*fp;

inti=0;

charch;

charstr[N]="I'mastudent!

";

clrscr();

if((fp=fopen(【1】))==NULL)

{

printf("cannotopenout99.dat\n");

exit(0);

}

while(str[i])

{

ch=str[i];

【2】;

putchar(ch);

i++;

}

【3】;

}

【1】″out99.dat″,″w″【2】fputc(ch,fp)【3】fclose(fp)

【解析】填空1:

本题考查对文件操作的掌握。

打开一个文件的调用方式是,fp=fopen(文件名,使用文件方式);,题目要求以只写的方式打开文件"out99.dat",所以文件使用方式为"w"。

填空2:

fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:

fputc(要输出的字符,文件指针)。

填空3:

对一个文件进行操作后,应该关闭它,以防它再被误用。

调用形式为:

fclose(文件指针);。

2.改错题

下列给定程序中,函数fun()的功能是:

计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。

其中x和y不相等,z和y不等。

例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。

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

注意:

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

试题程序:

#include

#include

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

#defineFU(m,n)(m/n)

floatfun(floata,floatb,floatc)

{floatvalue;

value=FU(a+b,a-b)+FU(c+b,c-b);

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

return(Value);

}

main()

{floatx,y,z,sum;

printf("Inputxyz:

:

");

scanf("%f%f%f",&x,&y,&z);

printf("x=%f,y=%f,z=%f\n",x,y,z);

if(x==y||y==z){printf("Dataerror!

\n");exit(0);}

sum=fun(x,y,z);

printf("Theresultis:

%5.2f\n",sum);

}

(1)错误:

#defineFU(m,n)(m/n)

正确:

#defineFU(m,n)(m)/(n)

(2)错误:

return(Value);

正确:

return(value);

【解析】如果从数学思想来说,这是一道简单的小学数学题,当然,用C语言的别的办法实现的话,也用不了三两句的程序,但是,这道题的考查点在C语言的宏定义上(这样的问题比较隐蔽),它的格式为#define标识符 字符串,中间要用空格分开,在该题中,标识符为FU(m,n),而字符串则是(m/n),由题干信息易知,应该是#defineFU(m,n)(m)/(n)。

 

3.编程题

请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

例如:

w值为5923,则函数返回923;若w值为923,则函数返回23。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedintegernumber:

");

scanf("%u",&x);

printf("Theoriginaldatais:

%u\n",x);

if(x<10)

printf("Dataerror!

");

else

printf("Theresult:

%u\n",fun(x));

}

【解析】我们首先应该明白无符号整数的定义形式,若它大于10000(5位)时,将10000对它求余则结果为后4位;当它大于1000(4位)时,将1000对它求余则结果为后3位,依此类推。

特别注意这里所有if()的顺序不能颠倒。

unsignedfun(unsignedw)

{

if(w>=10000)

returnw%10000;/*求出n位整数w的后n-1位的数*/

if(w>=1000)

returnw%1000;

if(w>=100)

returnw%100;

if(w>=10)

returnw%10;

}

第100套

1.填空题

请补充函数fun(),该函数的功能是:

把从键盘输入的3个整数按从小到大输出。

例如:

输入"337825",结果输出"253378"。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

main()

{

intx,y,z,t;

clrscr();

printf("Inputx,y,z\n");

scanf("%d%d%d",&x,&y,&z);

if(【1】)

{

t=x;

x=y;

y=t;

}/*交换x,y的值*/

if(【2】)

{

t=z;

z=x;

x=t;

}/*交换x,z的值*/

if(【3】)

{

t=y;

y=z;

z=t;

}/*交换z,y的值*/

printf("******theresult*******\n");

printf("fromsmalltobig:

%d%d%d\n",

x,y,z);

}

【1】x>y【2】x>z【3】y>z

【解析】填空1:

由最后的输出函数printf()可以推测,变量x中存放最小的数,变量y中其次,变量z中存放最大的数。

如果x大于y,则将两数进行交换。

填空2:

如果x大于z,则将两数进行交换。

填空3:

如果y大于z,则将两数进行交换。

2.改错题

数列中,第一项为3,后一项都比前一项的值增5。

下列给定程序中,函数fun()的功能是:

计算前n(4≤n≤50)项的累计和。

在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。

如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。

符合此条件的累加值应为42,126,366,570,1010。

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

注意:

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

试题程序:

#include

#defineN20

intfun(intn,int*a)

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

{inti,j,k,sum;

sum=0;

for(k=3,i=0;i

{sum=sum+k;

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

if(sum%4=2)

a[j++]=sum;

}

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

returnj;

}

main()

{inta[N],d,n,i;

printf("\nEntern(4<=n<=50):

");

scanf("%d",&n);

d=fun(n,a);

printf("\n\nTheresult:

\n");

for(i=0;i

}

(1)错误:

inti,j,k,sum;

正确:

inti,j=0,k,sum;

(2)错误:

if(sum%4=2)

正确:

if(sum%4==2)

(3)错误:

returnj;

正确:

returnj++;

【解析】按照老办法,我们先看数学思路,该题是一个公差为5的等差数列,简单吧,要是用数学的办法解决也就是一个公式两个符号,迎刃而解,所以这样很有规律的等差数列前n项和用C语言来求的话,也相当简单,关键看细节!

i,k,sum都分别定义了,那么j呢?

所以,正确的应该是inti,j=0,k,sum;,再往下看,if(sum%4=2)是在说明题干中"在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数",那么"余2"的表示方法呢?

不用看就知道应该是if(sum%4==2),后面的返回错误就不提了吧,看看a[j++]=sum;语句,难道还能返回给j吗?

 

3.编程题

请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:

若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。

注意:

部分源程序给出如下。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2