C语言题库补充题答案doc.docx

上传人:b****5 文档编号:6899672 上传时间:2023-01-12 格式:DOCX 页数:34 大小:34.51KB
下载 相关 举报
C语言题库补充题答案doc.docx_第1页
第1页 / 共34页
C语言题库补充题答案doc.docx_第2页
第2页 / 共34页
C语言题库补充题答案doc.docx_第3页
第3页 / 共34页
C语言题库补充题答案doc.docx_第4页
第4页 / 共34页
C语言题库补充题答案doc.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

C语言题库补充题答案doc.docx

《C语言题库补充题答案doc.docx》由会员分享,可在线阅读,更多相关《C语言题库补充题答案doc.docx(34页珍藏版)》请在冰豆网上搜索。

C语言题库补充题答案doc.docx

C语言题库补充题答案doc

C语言程序设计

题库

补充题参考答案

注:

所附答案仅为参考答案,程序中cin和cout为C++语言中的输入输出语句,在C语言中可用scanf和printf语句替换。

第二部分:

补充

1.输入一个5行5列的二维数组,编程实现:

(1)求出其中的最大值和最小值及其对应的

行列位置;

(2)求出上三角各元素之和。

voidfindmaxmin(floatarrary[5][5]);〃求最大值和最小值及其对应的行列位置

floatupright(floatarrary⑸[5]);//求上三角上各元素之和(上三角的元素a[i]fj],i+j<5)voidmain()

{

floatarrary[5][5];

printf("pleaseinputarrary:

\n");

for(inti=0;iv5;i++)〃输入一个5行5列的二维数组

{

fbr(intj=O;j<5;j++)

{

Scanf(u%f,&airaTy[i][j]);

}

}findmaxmin(arrary);//^最大值和最小值及其对应的行列位置printf("_t三角各元素之和为:

%f\n",upright(arrary));//^<上三角上各元素之和

}

voidfindmaxmin(floatarrary⑸[5])//求最大值及其对应的行列位置

{

inti,j,maxrow=0,maxcolum=0,mainrow=0,mincolum=0;

floatmax,min;

max=arrary[0][0];

min=arrary[0][0];

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

{

for(j=0;j<5;j++)

{

if(arrary[i][j]>max)

{

max=arrary[i][j];maxrow=i;

maxcolum=j;

}

if(arrary[i][j]

{

min=arrary[i][j];

minrow=i;

mincolum^j;

}

}

printf("max=%htmaxrow=%d\tmaxcolum=%d\n",max,maxrow,maxcolum);printf(

}

floatupright(floatarrary⑸[5])//求上三角上各元素之和

{

floatsum=0;

inti,j;

for(i=0;i<5;i卄)

{

for(j=i;j<5;j++)

{

sum=sum+arrary[i][j];

}

returnsum;

}

2.编写程序实现求e54的幕级数。

x和n的值从键盘输入。

xXx2xn

e=1+—+——++——

1!

2!

n\

doubleex(intn,doublex);

longfac(intn);

doublefxi(inti);

voidmain()

{

intn;

doublex;

print("pleaseinputn,x\nH);scanf(“%d%f',&n,&x);printf("%fex(n,x));

}

doublefxi(intm)〃求x的n次方

{

doublefx=l;

for(inti=0;i<=m;i++)

{

fx=fx*i;

}

returnfx;

}

longfac(intn)〃求n!

{

longf;

辻(n<0)

{

printf("n<0,dataerror!

\n");

f=-l;

}

elseif(n==0lln==l)

{

f=l;

}

else

{

f=fac(n-l)*n;

}

returnf;

}

doubleex(intn,doublex)

{

inti;

doublefex=0;

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

{

fex=fex+fxi(i)/fac(i);

}returnfex;

}

3.从键盘输入50个学生信息,对学生按成绩进行由小到大排序,并输出排序后学生信息,学生信息结构如下:

structstudent

{

charname[10];

intnum;

floatscore;

};

voidinput(studentstu[50])//学生信息的输入

{

inti;

printf("pleaseinputstudentsinfo:

\n*');

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

{

scanf(<<%s%d%f,,&stu[i].name,&stu[i].num,&stu[i].score);

}

}

voidsort(studentstu[50])//按成绩有小到大排序

{

inti,j;

studentstudtemp;

for(i=0;i<50-l;i++)

{

for(j=0;j<50-j-l;j++)

{

if(stu[i].score>stu[i+1].score)

{

strcpy(studtemp.name,stu[i].name);studtemp.num=stu[i].num;studtemp.score=stu[i].score;

strcpy(stu[i].name,stu[i+1].name);

stu[i].num=stu[i+1].num;

stu[i].score=stu[i+1].score;

strcpy(stu[i+1].name,studtemp.name);

stu[i+l].num=studtemp.num;

stu[i+l].score=studtemp.score;

voidoutput(studentstu[50])

{

inti;

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

{

printf(4t%s%d%f\n,,,stu[i].name,stu[i].num,stu[i].score);

4.从键盘输入4个字符串,编程求出它们中最小的一个。

voidmain()

{

charstring[20];

charstr[4][20];inti;

fbr(i=0;i<4;i++)

{

gets(str[i]);

}

strcpy(string,str[O]);

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

{

if(strcmp(string,str[i])>0)

{

strcpy(string,str[i]);

}

}

printf("minstring=%f\n",string);

5.从键盘输入一个长度为n的字符串,编程实现其逆序输出。

voidmain()

{

charstr[100];

inti,len=0;

printf(

\n‘‘);

gets(str);

for(i=O;str[i]!

=,\O,;i++)

{

len++;

}

for(len=len-l;len>=0;len—)

{

printf(tt%c,,,str[len]);

}

6.求下列式子之和,假定n=10

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

longsum(intn)〃求]+2+...+n之和

{

longsumtemp=0;

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

{

sumtemp=sumtemp+i;

}

returnsumtemp;

}

voidmain()

{

intn;

longS=0;

scanf(“%(f',&n);

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

{

S=S+sum(i);

}

printf(<<%ld\n,,,S);

}

7.编程实现:

求某字符串中前n个字符中的最大字符。

要求:

字符串和n均由键盘键入。

charmax(stringstr,intn)〃求出字符串str中前n个字符中的最大字符

{

charch;

ch=str[O];

for(inti=l;i

{

if(str[i]>ch)

{

ch=str[i];

}

returnch;

}

voidmain()

{

charstr[100];

intn;

printf("pleaseinputastring:

*'\n);

gets(str);

printf("pleaseinputanumbern:

\nH);

scanf(“%d'',&n);

printf("Themaxchar:

%c\n",max(str,n));

8.编程计算从键盘输入的字符串中子串“XY”出现的次数。

intCounter(charsorcstr[],chardeststr[2],intn);〃统计子字符串deststr在字符串sorcstr中出现的次数voidmain()

{

charstr[100];

charsubstr[2];

intlen;

printf("pleaseinputastring:

\nH);

gets(str);

len=strlen(str);

printf("pleaseinputasubstringAn");

scanf("%s",substr);

printf("count(%c%c)=%d\nn,substr[0],substr[l],Counter(str,substr,len));

}

intCounter(charsorcstr[],chardeststr[2],intn)

{

intcount=0;//iB录deststr子字符串出现的次数

inti;

for(i=0;i

{

if(sorcstr[i]==deststr[0]&&sorcstr[i+1]==deststr[1])

{

count=count+1;

}

returncount;

}

222

9.勾股数就是满足*+*='的自然数,打印出50以内的所有勾股数。

voidmain()

{

intx,y,z;

for(x=1;x<=50;x++)

{

for(y=x+l;y<=50;y++)

{

for(z=2;z<=50;z++)

{

if(x*x+y*y==z*z)

{

printf(n(%d,%d,%d)\n,?

x,y,z);

10•利用卡尔丹公式计算三次方程%3+^+^=°的一个实根。

卡尔丹公式:

 

voidmain()

floatp,q,xl,x2,x;

printf(^^请输入p,q值\n”);

scanf(“%f%f',&p,&q);

xl=(-q/2+((p/2)*(p/2)+(q/3)*(q/3)*(q/3))/2)/3;x2=(-q/2-((q/2)*(q/2)+(p/3)*(p/3)*(p/3)"2)/3;x=xl+x2;

printf(“x=%f”,x);

11.编写程序实现从键盘输入字符串,当遇到"时结束输入,并将输入的字符按倒序输出。

voidmain()

{

charstring[100];

inti=0;

printf(

\n‘‘);

while(l)

{

scanf(“%c",&string[i]);

if(srting[i]==,i,)

{

break;

}

else

{i++;}

}

len=strlen(string);

for(;len>=0;len—)

printf(''%c”,string[len]);

}

12.编写程序计算下面函数的值。

?

?

=0

n=1

n>1

1

fn(x)=<*

(2“_1)*X*尢_1(*)_(“_1)*兀_2(工)

voidmain()

{

intx,n;

floatp(int,int);

printf("inputn&x:

H);

scanf(t4%d%d,&n,&x);

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

printf("P%d(x)=\n",n,p(n,x));

}

floatp(intn,intx)

{if(n==0)

return(l);

elseif(n==l)

return(x);

else

return(((2*n-l)*x*p((n-l),x)-(n-l)*p((n-2),x))/n);

}

13.某公司选领导,现有3个侯选人,有50位选民。

请设计一个程序,计算选票,选出胜利者,并打印出他们的选票数。

structPerson〃声明结构体类型Person

{

charname[20];

intcount;

};

voidmain()

{

Personleader[3]={nLin,0,"Zhang",0,nFunn,0};

〃定义Person类型的数组,内容为3个候选人的姓名和当前的得票数

inti,j;

charleader_name[20];//leader_name为投票人所选的人的姓名for(i=0;i<50;i++)

{cin»leader_name;//先后输入50张票上所写的姓名for(j=0;j<3;j++)〃将票上姓名与3个候选人的姓名比较

{

if(strcmp(leader_name,leader[j].name)==O)

{

leader[j].count++;〃如果与某一候选人的姓名相同,就给他加一票

}

}

}

cout«endl;

for(i=0;i<3;i++)〃输出3个候选人的姓名与最后得票数

{cout«leader[i].name«":

"«leader[i].count«endl;

}

return0;

14.有两个5*5的矩阵,编程求出它们的和与积。

voidmain()

{

floatArraryA[5][5],ArraryB⑸[5];

floatMui⑸[5]={0},Sum[5]⑸;

inti,j,k;

〃输入数组A的数据

printf("pleaseinputArraryAAn");

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

{

for(j=0;j<5;j++)

{

scanf(“%f',&ArraryA[i][j]);

}

}

〃输入数组B的数据

printf("pleaseinputArraryBAn");

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

{

for(j=0;j<5;j++)

{

scanf(“%f',&ArraryB[i][j]);

}

〃计算ArraryXArraryB

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

{

for(j=0;j<5;j++)

{

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

{

Mul[i][j]+=ArraryA[i][k]*ArraryB[k][j];

}

}

}

〃输出积的结果

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

{

for(j=0;j<5;j++)

{

printfC'%f\t”,Mul[i][j]);

}

printf(“\n”);

}

〃计算Arrary+ArraryB

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

{

for(j=0;j<5;j卄)

{

Sum[i][j]+=ArraryA[i][j]*ArraryB[i][j];

}

}

〃输出和的结果

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

{

for(j=0;j<5;j++)

{

printf(“%f\t”,Sum[i][j]);

}

printf(“\n”);

}

15.一个班级有30名学生,学生信息包括:

学号、姓名,每个学生有5门功课,请利用有关指针的知识,编写一程序计算每个学生的的平均成绩,并找出总成绩最高的学生并打印其学号。

structstudent

{

intnum;//学号

charname[20];〃姓名

floatscore[5];//5门课程成绩

floatavescore;//平均成绩

};

voidinput(studentstu[30]);〃输入学生信息

voidaverscor(studentstu[]);//计算平均成绩

voidtopsum(studentstu[]);〃计算总成绩,并输出总成绩最高的学生信息voidmain()

{

studentstu[30];

printf("pleaseinput30students'sinfo:

\nH);input(stu);〃输入学生信息averscor(stu);〃计算每个学生的平均成绩topsum(stu);//计算总成绩

return0;

}

voidinput(studentstu[30])〃输入学生信息

{

student*p=stu;

inti,j;

for(i=0;i<30;i++,p++){

printf("pleaseinputstudent[%d]numandname”,i);scanf("%d%s",&(p->num),&(p->name));

printf("pleaseinputstudent[%d]3cource'sscore:

\nH,i);for(j=0;j<5;j++)

{

scanf(tt%f,,&p->score[j]);

}

}

}

voidaverscor(studentstu[])〃计算平均成绩

{

student*p=stu;

floattemp;

inti,j;for(i=0;iv30;i++,p++)

temp=O;

for(j=0;j<5;j++)

{temp=temp+p->score[j];

}

p->avescore=temp/5;

}

}

voidtopsum(studentstu[])〃计算总成绩,并输出总成绩最高的学生信息{

student*p=stu;

floattemp[30];

inti,j;

floattempt;

for(i=0;i<30;i++,p++)〃计算总成绩,并存放于temp数组中

{

temp[i]=0;

for(j=0;j<5;j++)

{

temp[i]=temp[i]+p->score[j];

}

}

〃查找总成绩最高的学生并输出

tempt=temp[0];

j=0;

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

{

if(temp[i]>tempt)

{

tempt=temp[i];

j=i;

}

}

printf("总成绩最高的学生是\n");

printf("no:

%d\tname:

%s\n",stu[j].num,stu[j].name);

}

16.建立带头结点的单链表,从键盘输入一个数,若链表中无该数,则在链表尾插入新结点,

当输入数据为0时,则停止建立链表,并打印该链表所有结点的信息。

结点类型如下:

structnode

{

intdata;

structnode*next;

};

#include

node*creat(void)〃定义函数。

{

node*head;

node*p],*p2;

intn=0;

pl=p2=(structnode*)malloc(sizeof(structnode));〃开辟一个新单元,并使pl,p2指向它

printfC'请输入一个数据:

\nH);

scanf("%dH,pl->data);

head=NULL;

while((*pl).data!

=0)

{

n=n+1;

if(n==l)

{

head=pl;

}

else

{

p2->next=pl;

}

p2=pl;

p1=(structnode*)malloc(sizeof(structnode));

printf(”请输入一个数据:

\nn);

scanf("%d",pl->data);

}

p2->next=NULL;

returnhead;

}

voidprintchain(node*p)//〃查找节点并打印信息

node*pl;if(p==NULL)//是空表printf("listnull!

\n");

}

P1=P;while(pl!

=NULL)//pl指向的不是所要找的结点且后面还有结点{

printf("%d\t",pl->data);pl=pl->next;

}//pl后移一个结点

}

voidmain()

{

node*p;

p=cwat();〃创建链表printchain(p);〃查找节点并打印信息

}

17.建立一个学生的结构体,学生信息包括:

学号、姓名、三门功课成绩(politic>maths>english),建立一个有30个成员的结构体数组,从键盘输入学号进行查询,当查找到该学号时,显示该生所有信息,否则显示“无此学生雹

structstudent

{

intsno;

charname[20];

floatscore[3];

};

voidmain()

{

studentstu[30];

intsno;

〃输入30个成员的数据

input(stu);

〃按学号查找学生并显示信息

printf("输入要查找的学生的学号:

\n");

scanf(<<%d,,,&sno);

search(stu,sno);

}

voidinput(studentstu[30])〃输入30个成员的数据

inti,j;

printf(”输入30个学生的信息:

学号、姓名、三门课程成绩\n”);

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

{

scanf("%d%s",&stu[i].sno,&stu[i].name);

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

{

scanf(4t%f\&stu[i].score[j]);

}

}

}

voidsearch(studentstu[30],intno)//按学号查找学生并显示信息

{

inti,j;

boolflag=l;

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

{

if(stu[i].sno==no)

{

flag=0;

printf(''%d\t%s\t",stu[i].sno,stu[i].name);

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

{

printf("%f,,stu[

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

当前位置:首页 > 法律文书 > 调解书

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

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