9396C语言试题.docx

上传人:b****4 文档编号:3812121 上传时间:2022-11-25 格式:DOCX 页数:17 大小:21.35KB
下载 相关 举报
9396C语言试题.docx_第1页
第1页 / 共17页
9396C语言试题.docx_第2页
第2页 / 共17页
9396C语言试题.docx_第3页
第3页 / 共17页
9396C语言试题.docx_第4页
第4页 / 共17页
9396C语言试题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

9396C语言试题.docx

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

9396C语言试题.docx

9396C语言试题

第93套

1.填空题

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

求n!

例如7!

=5040。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

main()

{

inti,n;

longf=1;

clrscr();

printf("Inputn:

");

scanf("%d",【1】);

for(【2】;i<=n;i++)

【3】;

printf("%d!

=%ld\n",n,f);

}

【1】&n【2】i=1或i=2【3】f*=i

【解析】填空1:

本题考查对调用标准输入函数scanf()的掌握,地址列表中都是地址值,所以在变量名前要加上取址运算符&。

填空2:

n的阶乘是将1、2、3……n累积相乘,所以for循环中i从1开始取数。

但因为1乘以任何数都等于这个数本身,所以i也可以从2开始取数。

填空3:

掌握了阶乘的算法,这空就非常简单了。

2.改错题

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

从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。

在每组中,可以没有黑球,但必须要有红球和白球。

组合数作为函数值返回。

正确的组合数应该是15。

程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

注意:

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

试题程序:

#include

intfun()

{inti,j,k,sum=0;

printf("\nTheresult:

\n\n");

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

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

{for(j=1;j<=5;j++)

{k=8-i-j;

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

if(k>=1&&k<=6)

{sum=sum+1;

printf("red:

%4dwhite:

%4dblack:

%4d\n",i,j,k);

}

}

}

returnsum;

}

main()

{intsum;

sum=fun();

printf("sum=%4d\n\n",sum);

}

(1)错误:

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

正确:

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

(2)错误:

if(k>=1&&k<=6)

正确:

if((k>=1&&k<=6)&&(i!

=0)&&(j!

=0)||(k==0))

【解析】该题是一道教材习题的变体,如果单纯从数学的排列组合角度来分析,实在简单不过,那怎么才能用C语言实现题目中的要求呢?

这就需要我们有一个清晰的编程思想。

红球数i的总数为3,但最小值为1,循环条件中,i的值是从0开始的,所以不应该是for(i=0;i<=3;i++),而是for(i=1;i<=3;i++),另外,在if(k>=1&&k<=6)中,程序旨在说明题干中的"在每组中,可以没有黑球,但必须要有红球和白球"信息,一一满足后,正确的条件应该是if((k>=1&&k<=6)&&(i!

=0)&&(j!

=0)||(k==0))。

 

3.编程题

请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1+x+x2/2!

+x3/3!

+…+xn/n!

例如,当n=10,x=0.3时,函数值为1.349859。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#include

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.3,10));

}

【解析】本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。

doublefun(doublex,intn)

{

inti;

doubles=1.0,s1=1.0;

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

{s1=s1*i;/*各项中的阶乘*/

s=s+pow(x,i)/s1;/*按公式求出*/

}

returns;

}

第94套

1.填空题

数组xx[N]保存着一组4位无符号整数,其元素的个数通过变量num传入函数fun()。

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

从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。

例如:

当xx[8]={1111,2413,2321,2222,4245,3333,1414,

5335}时,bb[6]={11112321,2222,4245,3333,1414}。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#defineN1000

intfun(intxx[],intbb[],intnum)

{

inti,n=0;

intg,b;

for(i=0;i

{

g=【1】;

b=xx[i]/100%10;

if(g==b)

【2】;

}

return【3】;

}

main()

{

intxx[8]={1111,2413,2321,2222,4245,

3333,1414,5335};

intyy[N];

intnum=0,n=0,i=0;

num=8;

clrscr();

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

for(i=0;i

printf("%u",xx[i]);

printf("\n\n\n");

n=fun(xx,yy,num);

printf("\nyy=");

for(i=0;i

printf("%u",yy[i]);

}

【1】xx[i]%10【2】bb[n++]=xx[i]【3】n

【解析】填空1:

变量b存放了4位数的百位数字,所以变量g应该存放4位数的个位数字,将这个4位数对10求余,则得到这个数的个位数字。

填空2:

将个位数字与百位数字相等的整数存于数组bb中。

填空3:

变量n记录了个位数字等于百位数字的整数的个数,题目要求个数由函数fun()返回,所以应返回n。

2.改错题

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

求整数x的y次方的低3位值。

例如,整数5的6次方为15625,此值的低3位值为625。

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

注意:

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

试题程序:

#include

longfun(intx,inty,long*p)

{inti;

longt=1;

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

for(i=1;i

t=t*x;

*p=t;

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

t=t/1000;

returnt;

}

main()

{longt,r;intx,y;

printf("\nInputxandy:

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

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=%ld\n\n",x,y,r,t);

}

(1)错误:

for(i=1;i

正确:

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

(2)错误:

t=t/1000;

正确:

t=t%1000;

【解析】我们先用简单的思想理解一下该程序,如果当x=y=1时,程序的问题出在哪儿?

很简单吧,所以for(i=1;i

 

3.编程题

假定输入的字符串中只包含字母和*号。

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

将字符串中的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:

\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:

\n");puts(s);

【解析】在前面的改错题和编程题中,相关试题已经出现好多次了,我们在此提供另一种解答方法。

#include

voidfun(char*a)

{char*p=a;

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

strcpy(a,p);

}

}

voidfun(char*a)

{

char*p=a;

while(*p=='*')p++;/*指针p指向字符串第一个字母*/

for(;*p!

='\0';p++,a++)

*a=*p;/*从第一个字母开始,其后的字符都放入指针a所指的字符串中*/

*a='\0';/*在字符串最后加上结束标记符*/

}

第95套

1.填空题

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

把文本文件B中的内容追加到文本文件A的内容之后。

例如,文件B的内容为"I'mten.",文件A的内容为"I'mastudent!

",追加之后文件A的内容为"I'mastudent!

I'mten."

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#defineN80

main()

{

FILE*fp,*fp1,*fp2;

inti;

charc[N],t,ch;

clrscr();

if((fp=fopen("A.dat","r"))==NULL)

{

printf("fileAcannotbeopened\n");

exit(0);

}

printf("\nAcontentsare:

\n\n");

for(i=0;(ch=fgetc(fp))!

=EOF;i++)

{

c[i]=ch;

putchar(c[i]);

}

fclose(fp);

if((fp=fopen("B.dat","r"))==NULL)

{

printf("fileBcannotbeopened\n");

exit(0);

}

printf("\n\n\nBcontentsare:

\n\n");

for(i=0;(ch=fgetc(fp))!

=EOF;i++)

{

c[i]=ch;

putchar(c[i]);

}

fclose(fp);

if((fp1=fopen("A.dat","a"))【1】(fp2

=fopen("B.dat","r")))

{

while((ch=fgetc(fp2))!

=EOF)

【2】;

}

else

{

printf("CannotopenAB!

\n");

}

fclose(fp2);

fclose(fp1);

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

if((fp=fopen("A.dat","r"))==NULL)

{

printf("fileAcannotbeopened\n");

exit(0);

}

for(i=0;(ch=fgetc(fp))!

=EOF;i++)

{

c[i]=ch;

putchar(c[i]);

}

【3】;

}

【1】&&【2】fputc(ch,fp1)【3】fclose(fp)

【解析】填空1:

当两个文件都被成功打开时,才能将文件B中的内容追加到文件A中,所以应该用"与"运算符--"&&"。

填空2:

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

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

填空3:

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

调用形式为:

fclose(文件指针);。

2.改错题

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

用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。

π/4≈1-1/3+1/5-1/7+…

例如,程序运行后,输入0.0001,则程序输出3.1414。

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

注意:

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

试题程序:

#include

#include

floatfun(floatnum)

{ints;

floatn,t,pi;

t=1;pi=0;n=1;s=1;

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

while(t>=num)

{

pi=pi+t;

n=n+2;

s=-s;

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

t=s%n;

}

pi=pi*4;

returnpi;

}

main()

{floatn1,n2;

clrscr();

printf("Enterafloatnumber:

");

scanf("%f",&n1);

n2=fun(n1);

printf("%6.4f\n",n2);

}

(1)错误:

while(t>=num)

正确:

while(fabs(t)>=num)

(2)错误:

t=s%n;

正确:

t=s/n;

【解析】函数fun()中while语句的含义是,当新的一项大于给定参数时,循环累计,计算s的值。

而题目要求是最后一项的绝对值小于给定参数,因此循环条件应当为while(fabs(t)>=num),而非while(t>=num)。

 

3.编程题

假定输入的字符串中只包含字母和*号。

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

使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为****A*BC*DEF*G*******,若n的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G*******。

n的值在主函数中输入。

在编写函数时,不得使用C语言提供的字符串函数。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

voidfun(char*a,intn)

{

}

main()

{chars[81];intn;

printf("Enterastring:

\n");gets(s);

printf("Entern:

");scanf("%d",&n);

fun(s,n);

printf("Thestringafterdeleted:

\n");puts(s);

}

【解析】while()循环的作用是计算出前部星号的个数;if()的作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后记得在字符串最后加上结束标志位。

voidfun(char*a,intn)

{

inti=0,k=0;

char*p,*t;

p=t=a;/*开始时,p与t同时指向数组的首地址*/

while(*t=='*')/*用k来统计前部星号的个数*/

{k++;t++;}

if(k>n)/*如果k大于n,则使p的前部保留n个星号,其后的字符依次存入数组a中*/

{while(*p)

{a[i]=*(p+k-n);

i++;

p++;

}

a[i]='\0';/*在字符串最后加上结束标志位*/

}

}

第96套

1.填空题

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

寻找两个整数之间的的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。

例如,输入6和21,则输出为:

71113171921。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#defineN1000

intfun(intn,intm,intbb[N])

{

inti,j,k=0,flag;

for(j=n;j<=m;j++)

{

【1】;

for(i=2;i

if(【2】)

{

flag=0;

break;

}

if(【3】)

bb[k++]=j;

}

returnk;

}

main()

{

intn=0,m=0,i,k;

intbb[N];

clrscr();

printf("Inputn\n");

scanf("%d",&n);

printf("Inputm\n");

scanf("%d",&m);

for(i=0;i

bb[i]=0;

k=fun(n,m,bb);

for(i=0;i

printf("%4d",bb[i]);

}

【1】flag=1【2】j%i==0【3】flag==1

【解析】填空1:

由flag决定当前判断的数是否为素数,先置flag为1,如果判断出当前数不是素数,则将flag清零。

填空2:

如果一个数能被除了1和其自身之外的数整除,即余数为0,则这个数不是素数。

填空3:

如果flag等于1,则说明当前数是素数,则把它存入数组bb中。

2.改错题

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

计算并输出下列级数的前N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值为50.0,则函数值为49.394948。

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

注意:

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

试题程序:

#include

#include

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

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

{

t=s;

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

s=s+(n+1)/n;

n++;

}

printf("n=%d\n",n);

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

returns;

}

main()

{clrscr();

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

}

(1)错误:

doublefun(doubleq)

正确:

doublefun(intq)

(2)错误:

s=s+(n+1)/n;

正确:

s=s+(double)(n+1)/n;

(3)错误:

returns;

正确:

returnt;

【解析】该程序中多次出现了函数调用过程中定义混乱的错误,关于类似问题,我们在前面的试题中已经做过比较详细的解释,主要是对基础知识的把握。

在这里我们再对函数调用规则做一简单说明。

C语言规定,在以下几种情况下可以不在调用函数前对被调用函数做类型说明。

(1)如果函数的值(函数的返回值)是整型或字符型,可以不必进行说明,系统对它们自动按整型说明。

但为清晰起见,建议都加以说明为好。

(2)如果被调用函数的定义出现在主调函数之前,可以不必加以说明。

因为编译系统已经先知道了已定义的函数类型,会自动处理的。

也就是说,将被调用的函数的定义放在主调函数之前,就可以不必另加类型说明。

(3)如果已在所有函数定义之前,在文件的开头,在函数的外部已说明了函数类型,则在各个主调函数中不必对所调用的函数再做类型说明。

除了以上3种情况外,都应该按上述介绍的方法对所调用函数的返回值做类型说明,否则编译时就会出现错误。

 

3.编程题

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

计算并输出下列多项式的值。

S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)

例如,若主函数从键盘给n输入50后,则输出为S=1.960784。

注意:

部分源程序给出如下。

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

试题程序:

#include

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nInputn:

");

scanf("%d",&n);

s=fun(n);

print

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

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1