二级C上机题库_第1页
二级C上机题库_第2页
二级C上机题库_第3页
二级C上机题库_第4页
二级C上机题库_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.填空题

下列给定程序中,函数fim()的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z・y)的值。其中x和y不相等,z和y不等。

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

试题程序:

#include<stdio.h>

#include<math.h>

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

floatfun(floata,floatb,floatc)

{【1】value;

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

return(value);

}

main()

{floatx,y,z,sum;

printf(nInputxyz::n);

nM

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

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

if(x==y[2]y==z){printf("Dataerror!\n");}

sum=fun(x,y,z);

printf("Theresultis:%5.2f\n0,[3]);

}

2.改错题

F列给定程序中,函数ftm()的作用是:将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若

输入“Ab,cD",则输出“ab,cd\

请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序:

•include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

(

inti;

for(i=0;tt[i];i++)

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

{if(('A'<=tt[i]II(tt[i]<='Z'))

tt[i]+=32;}

return(tt);

}

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringis:\n%su,fun(tt));

)

3.编程题

请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,

则不转换)。

例如,若输入abc4E怆,则应输出aBc4EFg。

注意:部分源程序给出如下。

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

}

main()

(

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80characters:\n");

gets(tt);

printf(n\n\nAfterchanging,thestring\n\%s",tt);

fun(tt);

nn

printf(\nbecomes\n\%s\nztt);

}

1.填空题

[I]float[2]||[3]sum

【解析】填空1:在子程序中我们看到value是作为存放函数值的变量而使用的,由题目的分析我们知道函数值是浮

点型的,因此这里我们用float对变量进行声明。

填空2:在题目中我们看到x和y不相等,z和y不相等,由选择支我们知道这里是判断自变量是否符合要求的,而这

两个条件任何一个不满足就会使函数结果无意义,因此这里用〃||"符号。

填空3:在主程序中,函数的返同值赋给了sum,由输出语句我们知道这是输出结果的语句,所以这里填变量sum。

2.改错题

错误:if(CAy=tt[i]||(tt[i]v=,Z'))

正确:'Ar)&&(tt[i]<='Z'))

【解析】从ASCII码表中灯以看出,小写字母的ASCII码值比对应大写字母的ASCH码值大32。将字符串中的大写字

母改为小写字母的方法是,从字符串第1个字符开始,根据ASCII码值判断该字母是不是大写字母,若是,则ASCII

码值加32即可;重复执行以上过程直至字符串尾。本题可利用条件选择语句和循环语句来实现。

3.编程题

voidfun(char*ss)

(

inti;

for(i=0;ss(i]!=1\0';i++)/*将ss所指

1.填空题

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

S=f(-n)+f(-n+l)+-+f(0)+f(l)+f(2)+-f(n)

的值。

例如,当n为5时,函数值应为10.407143。Rx)函数定义如下:

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

心)=0x=0或x=2

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

试题程序:

#include<conio.h>

•include<stdio.h>

#include<math.h>

【1】f(doublex)

-

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

return0.0;

elseif(x<0.0)

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

【2】

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

}

doublefun(【3】)

(

inti;doubles=0.0,y;

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

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

returns;

)

main()

(

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

2.改错题

下列给定程序中,函数ftm()的功能是:求出两个数的最大公约数,并作为函数值返回。例如,若给numl和mim2输

入49和21,则输出的最大公约数为7;若给numl和num2分别输入27和81,则输出最大公约数为27。

请改正函数Am。中的错误,使它能得出正确的结果。

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

试题程序:

♦include<stdio.h>

intfun(inta,intb)

{intr,t;

if(a<b)

/……*……**…*…found

{t=a;b=a;a=t;}

r=a%b;

while(r!=0)

{a=b;b=r;r=a%b;}

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

return(a);

}

main()

{intnuml,num2,a;

printf("Inputnumlnum2:n);scanf("%d%d",Snuml,&num2);

printf(nnuml=%dnum2=%d\n\nn,numl,num2);

a=fun(numl,num2);

printf("Themaximuncommondivisoris%d\n\n"za);

)

3.编程题

请编写•个函数它的功能是:找出维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形

参传回。数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

注意:部分源程序给出如下。

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

试题程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

main()

(

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d"zx(i]);/*输出一个随机数组*/

}

printf("\nn);

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\nn,max,index);

1.填空题

[1]double[2]else[3]intn

【解析】填空1:C语言规定,在未进行声明的情况卜,函数返回值默认为int型。显然本函数的返回值是双精度型

的。

填空2:读程序上下文可以看出这是1喈句的另一个分支,所以应填else。

填空3:从上函数中调用该函数的语句中看到,这个函数的型参是int型的,然后在函数中发现n是没有定义的局部变

量,由此可以知道这里应是声明n为int型的一条语句。

2.改错题

(1)错误:{t=a;b=a;a=t;}

正确:{t=a;a=b;b=t;}

(2)错误:rcturn(a);

正确:return(b);

【解析】若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是最大公约数;若余数为0,则

最大公约数为a。该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此

可以得到a,b的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。

3.编程题

voidfun(inta[],intn,int*max,int*d)

(

inti;

*max=a(0];

*d=0;

for(i=0;i<n;i++)/*将最大的元素放入指

1.填空题

下列给定程序中,函数fun()的功能是:求S的值。设

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

例如,当k为10时,函数的值应为L533852.

试题程序:

#include<conio.h>

♦include<stdio.h>

#include<math.h>

doublefun(intk)

{intn;

doubles,w,p,q;

_LJ_;

s=l.0;

while(n<=k)

{w=2.0*n;

p=w-l.0;

q=w+l.0;

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

n++;

}

[21

)

main()

{

printf(n%f\nn,fun(10)[3);

)

2.改错题

下列给定程序中函数ftm()的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原申。

注意:字符串的长度最长允许79。

请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

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

voidfun(chars[],intn)

(

chara[80],*p;

inti;

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

s=p;

for(i=0;i<n;i++)a[i]='**;

do

{a[i]=*p;

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

i++;

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

printf(H\nEnterastring:n);gets(s);

M

printf(\nThestring\%s\n"zs);

nn

printf("\nEntern(numberof*):");scanf(%dz&n);

fun(s,n);

printf(M\nThestringafterinster:\%s\nn,s);

1

3.编程题

请编写一个函数fun(),它的功能是:求出1到m(含m)之内能被7或“整除的所有整数放在数组a中,通过n返回这些

数的个数。

例如,若传给m的值为50,则程序输出:

711142122283335424449

注意:部分源程序给出如下。

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

试题程序:

#include<conio.h>

#include<stdio.h>

#defineM100

voidfun(intm,int*a,int*n)

main()

(

intaa(M],n,k;

clrscr();

fun(50,aa,&n);

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

if((k+1)%20==0)/*每行输出20个数*/

nn

{printf(%4dzaa[k]);

printf(M\nn);

}

else

printf("%4d,,,aa[k]);

printf(n\nn);

1.填空题

[I]n=l[2]returns;[3])

【解析】填空1:在这个空之前我们可以看到定义了整型变量n,下面紧接着对n的值进行了比较,可见该语句应该

是对n进行赋值,由下面的语句我们可以看•到n作为级数的项数应该从1开始,所以这里对n赋初值1。

填空2:这是一个double型的函数,而且在函数末尾,因而必定要在这里填返回值语句。

填空3:这是•个语法错误,它提醒我们在写程序时定要注意这些小的语法错误。

2.改错题

(1)错误:voidfiin(chars[],intn)

正确:voidfun(char*s,intn)

(2)错误:s=p;

正确:p=s;

(3)错误:i++;

正确:i++;p++;

(4)错误:a[i]=0;

正确:a[i]='\0';

【解析】在本题中,s是数组名,代表数组首地址,在编译时对S数组分配了一段内存单元,因此在程序运行期间S

是一个常量,不能再被赋值。因此s=p是错误的,如果把"chars口;〃改成“char*s;〃,则程序正确。此时s是指向字符数

组的指针变量,p=s是合法的,它将字符串的首地址赋给指针变量p,然后在printf函数语句中输出字符串s。因此,应当

弄清楚字符数组与字符指针变量用法的区别。

3.编程题

voidfun(intm,int*a,int*n)

(

inti,j=0;

for(i=l;i<=m;i++)

if(i%7==0||i%ll==0)/*求出1至ljm(

1.填空题

下列给定程序中,函数ftm()的功能是:计算并输出下列级数的前N项之和SM直到SN+1大于q为止,q的值通过形参

传入。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

doublefun([1])

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

(

t=s;

s=s+_[2_]_(n+1)/n;

n++;

}

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

[3];

}

main()

(

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

)

2.改错题

下列给定程序中,函数fun()的功能是:根据以下公式求冗的值,并作为函数值返回。例如,给指定精度的变量eps输

入0.0005时,应当输出Pi=3.140578。

n/2=l+l/3+l/3*2/5+l/3*2/5*3/7+l/3*2/5*3/7*4/9♦•…

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doubleeps)

{doubles,t;intn=l;

s=0.0;

******found***********************

t=l;

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

while(t>eps)

{s+=t;

t=t*n/(2*n+l);

n++;

)

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

return(s);

}

main()

{doublex;

printf(n\nPleaseenteraprecision:");scanf(n%lf",&x);

n

printf("\nPi=%lf\nffun(x));

3.编程题

请编写一个函数fun(),它的功能是:根据以下公式求兀的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

71/2=1+1/3+1*2/(3*5)+l*2*3/(3*5*7)+l*2*3*4/(3*5*7*9)+-+l*2*3*—*n/(3*5*7*-*(2n+l))

程序运行后,如果输入精度0.0005,则程序输出3.140578。

注意:部分源程序给出如下。

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

试题程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

(

}

main()

(

doublex;

printf("Inputeps:");

nn

scanf(%lfz&x);

nn

printf(\neps=%lf,PI=%lf\nzxzfun(x));

1.填空题

[1]intq[2](double)[3]returnt

【解析】填空1:由main函数中对子程序的调用我们知道,实参是一个整型数据•,再对子程序的分析我们可以得出q

就是那个形参。

填空2:对题目要求进行分析后我们知道本题要计算•个级数,而在本函数中,n及n+1是整型变量,它们的运算结

果也是整型数,为了不丢失数据我们可将n+1强制类型转换为double型变量。

填空3:该空在子程序的最后,可以看到此子程序是double型的,因此•定有返回值,经分析知道s是最终要返回的

结果。

2.改错题

(1)错误:t=0;

正确:t=1.0

(2)错误:while(t>eps)

正确:while(t>=eps)

(3)错误:retum(s);

正确:retum(s*2);

【解析】该题中,我们首先看函数ftm()中while语句的含义,当新的一项大于给定参数时,循环累加。根据题意我们可

以看出,最后一项应该小于给定参数,因此,循环条件应当为while(t>=eps)。至于return(s);错误,是一个数学常识,应

该是retum(s*2);o

3.编程题

doublefun(doubleeps)

(

doubles=l.0,sl=l.0;

intn=l;

while(sl>=eps)/*当某项大于精度要求时,继续求下一项*/

{sl=sl*n/(2*n+l);/*求多项式的每一项*/

s=s+sl;/*求和*/

n++;

)

return2*s;

)

【解析】从第2项开始以后的每•项都是其前面项乘以n/(2*n+l),程序中用si来表示每•项,s来表示总和后的结

果。要注意si,s的初值都为1.0,返回时要乘以2即retum2*s,这跟数学思想有关系,学习者理解后就很简单了。

1.填空题

下列给定程序中,函数fun()的功能是:用下面的公式求冗的近似值,直到最后一项的绝对值小于指定的数(参数num)

为止。

H/4^1-I/3+1/5-I/7+-

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

试题程序:

#include<math.h>

♦include<stdio.h>

floatfun(floatnum)

{ints;

floatn,t,pi;

t=l;pi=0;n=l;s=l;

while([11>=num)

{-

pi=pi+t;

n=n+2;

s=-s;

t=[2];

}

pi=pi*4;

[31;

}

main()

{floatnl,n2;

printf("Enterafloatnumber:");

scanf(n%f",&nl);

n2=fun(nl);

printf(n%6.4f\n*•,n2);

2.改错题

下列给定程序中,函数ftin()的功能是:先从键盘上输入•个3行3列的矩阵的各个元素的值,然后输出主对角线元素

之和。

请改正函数fun()中的错误,使它能得出正确的结果。

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

试题程序:

#include<stdio.h>

intfun()

{

inta[3][3],sum;

inti,j;

/**********************fouricl***********************/

sum=l;

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

{for(j=0;j<3;j++)

/**********************founcj***********************/

scanf(n%dn,a[i][j]);

}

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

sum=sum+a[i][i];

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

}

main()

(

fun();

}

3.编程题

请编写•个函数它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数

返回较长的字符串。若两个字符串长度相等,则返回第1个字符串。

例如,输入beijing〈CR>shanghai<CR>(〈CR>为回车键),函数将返回shanghai。

注意:部分源程序给出如下。

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

试题程序:

#include<stdio.h>

char*fun(char*s,char*t)

}

main()

{

chara[20],b[10],*p,*q;

inti;

printf(nInput1thstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf(n%sn,fun(a,b));

}

1.填空题

[1]fabs(t)[2]s/n;[3]returnpi

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

是最后•项的绝对值小于给定参数,因此循环条件应当为while(自bs(t)>=mim),而非while(t>=mim)。

填空2:由函数可知,t是作为级数的每一项的值的变量来定义的,s是分子变量,n是分母变量。

填空3:很明显,这是一个实型函数,应该返回一个实型值,由题意可知应返回pi。

2.改错题

(1)错误:sun=l

正确:sum=0;

(2)错误:scanf(n%dH,a[i][j])

正确:scanf("%d”,&a[i][j])

【解析】该题依然考查对循环语句的掌握和对数组概念的理解,根据题干主线,我们可以看清这样的一个解题思路:先

从键盘输入一个3X3矩阵,然后再循环累加执行循环语句中的sum=sum+a[i][i],所以sum=Oo

3.编程题

char*fun(char*s,char*t)

(

inti,j;

for(i=0;s[i]!=,\0,;i++);/*求字符串的长度*/

for(j=O;t[j]!='\01;j++);

if(i>=j)/*比较两个字符串的长度*/

returns;/*函数返回较长的字符串,若

1.填空题

下列给定程序中,函数fun()的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值

为625。

试题程序:

[1]<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

for(i=l;_[21_;i++)

t=t*x;

*P=t;

[3];

returnt;

}

main()

{longt,r;intx,y;

printf(n\nlnputxandy:n);scanf(n%ld%ldn,&x,&y);

t=fun(xzy,&r);

Mn

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

2.改错题

下列给定程序中,函数ftinO的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指

字符串中的内容为abcdabfab,I所指字符串的内容为ab,则函数返回整数3。

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

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

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*t)

{intn;char*p,*r;

n=0;

while(*s)

{p=s;

r=t;

while(*r)

******found***********************

if(*r==*p){r++;p++}

elsebreak;

**********************found***********************

if(r=='M)

n++;

s++;

)

returnn;

}

main()

{chars[100],t[100];intm;

clrscr();

printf("\nPleaseenterstrings:");scanf(M%s",s);

printf("\nPleaseentersubstringt:*');scanf("%s",t);

m=fun(s,t);

printf(n\nTheresultis:m=%d\nn,m);

)

3.编程题

请编写一个函数fun(),它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数

的函数)。

例如,若输入字符串”-1234”,则函数把它转换为整数值-1234,

注意:部分源程序给出如下。

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

试题程序:

#include<stdio.h>

#include〈string.h>

longfun(char*p)

}

main()

{

chars(6];

longn;

printf("Enterastring:\nn);

gets(s);

n=fun(s);

nn

printf(%ld\nzn);

}

1.填空题

[I]#include[2]i<=y[3]t=t%1000;

【解析】填空1:由C语言的学习我们知道这里是一个头文件的定义,定义头文件要用关键字include,而且要用〃旷

开头。

填空2:这里考查的是循环结束判断语句。由题意知,这个循环是计算xfKjy次舞的,而i从1开始,要计算y次,当然

就要让i自加y次,于是这里用〃<=",而不是。

填空3:题目的意思是求辕的最后3位数字,而求•个十进制数的后几位的最常用的办法莫过于使用对其取余的操作。

2.改错题

(1)错误:iR*r=*p){r++;p++}

正确:if(*r=*p){r++;p++;}

(2)错误:ifO='(y)

正确:if(*U\(y)

【解析】从字符串S中找出子串t的方法是:从第一个字符开始,对字符串进行遍历:若S串的当前字符等于t串的第1

个字符,两字符串的指针自动加1,继续比较下一个字符:若比较至字符串t的结尾,则跳出循环;若S串的字符和t串的

字符不对应相同,则继续对下一个字符进行处理。

3.编程题

longfun(char*p)

{

longn=0;

intflag=l;

if(*p=='-')/*负数时置flag为-1*/

(p++;flag=-1;}

elseif(*p==*+1)/*正数时置flag为1*/

p++;

while(*p!='\0')

(n=n*10+*p-/*将字符串转成相应的整数*/

P++;

)

returnn*flag;

}

【解析】iR)的作用是判断它是正数还是负数。while。循环的作用是将字符串转成相应的整数。注意*p是一个字符

如9,4,并不是•个数,要将其转成相应的数字必须令其减去0(不是即*就得到*p这个字符的相应数字。

如0-0=0,8-0=8等。必须在程序的前面加#include<stdlib.h>,函数atol()的作用是将字符串P转成长整型数,它是一个

库函数。

1.填空题

下列给定程序中,函数ftin()的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为♦组,进行输出。在每组

中,可以没有黑球,但必须要有红球和门球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,

j的值代表白球数,k的值代表黑球数。

试题程序:

#include<stdio.h>

intfun()

{inti,j,kz[1];

printf(n\nTheresult:\n\n");

for([2];i<=3;i++)

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

(k=8-i-j;

if((3])

{sum=sum+l;

printf("red:%4dwhite:%4dblack:%4d\nn,i,j,k);

)

returnsum;

)

main()

{intsum;

sum=fun();

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

}

2.改错题

下列给定程序是建立•个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fim()的作用是求出单向链

表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

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

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

试题程序:

♦include<stdio.h>

♦include<conio.h>

#include<stdlib.h>

typedefstructaa

{intdata;

structaa*next;

}NODE;

****found****

fun(NODE*h)

{intmax=-l;

NODE*p;

p=h->next;

while(p)

{if(p->data>max)

max=p->data;

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

p=h->next;

}

returnmax;

}

outresult(ints,FILE*pf)

{fprintf(pf,n\nThemaxinlink:%d\nn,s);)

NODE*creatlink(intn,intm)

{NODE*hr*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));h->data=9999;

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

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

s->data=rand()%m;s->next=p->next;

p->next=s;p=p->next;

)

p->next=NULL;

returnh;

}

outlink(NODE*hrFILE*pf)

{NODE*p;

p=h->next;

fprintf(pf,n\nTheLIST:\n\nHEAD");

while(p)

{fprintf(pf,n->%d",p->data);p=p->next;}

fprintf(pf,n\n");

}

main()

{NODE*head;intm;

clrscr();

head=creatlink(12,100);

outlink(head,stdout);

m=fun(head);

printf(n\nTheRESULT:\nn);outresult(m,stdout);

}

3.编程题

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fbn(),它的功能

是:找出学生的最高分,由函数值返回。

注意:部分源程序给出如下.

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

试题程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

}

STREC*creat(double*s)

(

STREC*h,*p,*q;

inti=0;

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

p->s=0;

while(i<N)/*产生8个节点的链表,各分数存入链表中*/

{q=(STREC*)malloc(sizeof(STREC));

p->s=s[i];i++;p->next=q;p=q;

}

p->next=0;

returnh;/*返FO链表的首地址*/

)

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head1');

do

{printf("->%2.OfH,p->s);p=p->next;}/*输出各分数*/

while(p!=0);

printf(”\n\nn);

}

main()

{

doubles[N]={85,76,69,85,91,72,64,87},max;

STREC*h;

h=creat(s);

outlist(h);

max=fun(h);

printf(nmax=%6.If\n",max);

1.填空题

[1]sum=0[2]i=l[3](k>=l&&k<=6)&&(i!=0)&&(j!=0)||(k=0)

【解析】填空1:仔细观察函数体中的各项数据,就会发现有一个变量sum是没有定义的,由题意知,函数中的变量

全是整型变量,再看sum的用法,知道它是用来求和的,因此其初值应是0。

填空2:红球数i的总数为3,但最小值为1,循环条件中应该是i=l而不是i=0,切记循环的第•项赋值语句要根据情

况使用,不能一成不变。

填空3:这里考查条件语句的选择,程序旨在说明题干中的“在每组中,可以没有黑球,但必须要有红球和白球”这

个信息,满足条件的语句应该是ifUk>=l&&kv=6)&&(i!=0)&&(j!=0)||(k=0))。

2.改错题

(1)错误:fun(NODE*h)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论