C语言补充题库.docx
- 文档编号:26730648
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:43
- 大小:48.84KB
C语言补充题库.docx
《C语言补充题库.docx》由会员分享,可在线阅读,更多相关《C语言补充题库.docx(43页珍藏版)》请在冰豆网上搜索。
C语言补充题库
1.输入一个5行5列的二维数组,编程实现:
(1)求出其中的最大值和最小值及其对应的行列位置;
(2)求出上三角各元素之和。
voidfindmaxmin(floatarrary[5][5]);//求最大值和最小值及其对应的行列位置
floatupright(floatarrary[5][5]);//求上三角上各元素之和(上三角的元素a[i][j],i+j<5)
voidmain()
{
floatarrary[5][5];
printf("pleaseinputarrary:
\n");
for(inti=0;i<5;i++)//输入一个5行5列的二维数组
{
for(intj=0;j<5;j++)
{
Scanf(“%f”&arrary[i][j]);
}
}
findmaxmin(arrary);//求最大值和最小值及其对应的行列位置
printf("上三角各元素之和为:
%f\n",upright(arrary));//求上三角上各元素之和
}
voidfindmaxmin(floatarrary[5][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=%f\tmaxrow=%d\tmaxcolum=%d\n",max,maxrow,maxcolum); printf(“min=%f\tminrow=%d\tmincolum=%d\n",min,minrow,mincolum); } floatupright(floatarrary[5][5])//求上三角上各元素之和 { floatsum=0; inti,j; for(i=0;i<5;i++) { for(j=i;j<5;j++) { sum=sum+arrary[i][j]; } returnsum; } } 2.编写程序实现求ex的幂级数。 x和n的值从键盘输入。 doubleex(intn,doublex); longfac(intn); doublefxi(inti); voidmain() { intn; doublex; print("pleaseinputn,x\n"); scanf(“%d%f”,&n,&x); printf(“%f”,ex(n,x)); } doublefxi(intm)//求x的n次方 { doublefx=1; for(inti=0;i<=m;i++) { fx=fx*i; } returnfx; } longfac(intn)//求n! { longf; if(n<0) { printf("n<0,dataerror! \n"); f=-1; } elseif(n==0||n==1) { f=1; } else { f=fac(n-1)*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-1;i++) { for(j=0;j<50-j-1;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+1].num=studtemp.num; stu[i+1].score=studtemp.score; } } } } voidoutput(studentstu[50]) { inti; for(i=0;i<50;i++) { printf(“%s%d%f\n”,stu[i].name,stu[i].num,stu[i].score); } } 4.从键盘输入4个字符串,编程求出它们中最小的一个。 voidmain() { charstring[20]; charstr[4][20]; inti; for(i=0;i<4;i++) { gets(str[i]); } strcpy(string,str[0]); 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(“inputastring: \n”); gets(str); for(i=0;str[i]! =’\0’;i++) { len++; } for(len=len-1;len>=0;len--) { printf(“%c”,str[len]); } } 6.求下列式子之和,假定n=10 S=1+(1+2)+(1+2+3)+……+(1+2+3+……+n) longsum(intn)//求1+2+...+n之和 { longsumtemp=0; for(inti=1;i<=n;i++) { sumtemp=sumtemp+i; } returnsumtemp; } voidmain() { intn; longS=0; scanf(“%d”,&n); for(inti=1;i<=n;i++) { S=S+sum(i); } printf(“%ld\n”,S); } 7.编程实现: 求某字符串中前n个字符中的最大字符。 要求: 字符串和n均由键盘键入。 charmax(stringstr,intn)//求出字符串str中前n个字符中的最大字符 { charch; ch=str[0]; for(inti=1;i { if(str[i]>ch) { ch=str[i]; } } returnch; } voidmain() { charstr[100]; intn; printf("pleaseinputastring: "\n); gets(str); printf("pleaseinputanumbern: \n"); 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: \n"); gets(str); len=strlen(str); printf("pleaseinputasubstring: \n"); scanf(“%s”,substr); printf("count(%c%c)=%d\n",substr[0],substr[1],Counter(str,substr,len)); } intCounter(charsorcstr[],chardeststr[2],intn) { intcount=0;//记录deststr子字符串出现的次数 inti; for(i=0;i { if(sorcstr[i]==deststr[0]&&sorcstr[i+1]==deststr[1]) { count=count+1; } } returncount; } 9.勾股数就是满足 的自然数,打印出50以内的所有勾股数。 voidmain() { intx,y,z; for(x=1;x<=50;x++) { for(y=x+1;y<=50;y++) { for(z=2;z<=50;z++) { if(x*x+y*y==z*z) { printf("(%d,%d,%d)\n”,x,y,z); } } } } } 10.利用卡尔丹公式计算三次方程 的一个实根。 卡尔丹公式: voidmain() { floatp,q,x1,x2,x; printf(”请输入p,q值\n”); scanf(“%f%f”,&p,&q); x1=(-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=x1+x2; printf(“x=%f”,x); } 11.编写程序实现从键盘输入字符串,当遇到“! ”时结束输入,并将输入的字符按倒序输出。 voidmain() { charstring[100]; inti=0; printf(“inputastring: \n”); while (1) { scanf(“%c”,&string[i]); if(srting[i]==’! ’) { break; } else {i++;} } len=strlen(string); for(;len>=0;len--) { printf(“%c”,string[len]); } } 12.编写程序计算下面函数的值。 voidmain() { intx,n; floatp(int,int); printf("inputn&x: "); scanf(“%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 (1); elseif(n==1) return(x); else return(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n); } 13.某公司选领导,现有3个侯选人,有50位选民。 请设计一个程序,计算选票,选出胜利者,并打印出他们的选票数。 structPerson//声明结构体类型Person { charname[20]; intcount; }; voidmain() { Personleader[3]={"Li",0,"Zhang",0,"Fun",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)==0) { leader[j].count++;//如果与某一候选人的姓名相同,就给他加一票 } } } cout< for(i=0;i<3;i++)//输出3个候选人的姓名与最后得票数 { cout< "< } return0; } 14.有两个5*5的矩阵,编程求出它们的和与积。 voidmain() { floatArraryA[5][5],ArraryB[5][5]; floatMul[5][5]={0},Sum[5][5]; inti,j,k; //输入数组A的数据 printf("pleaseinputArraryA: \n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) { scanf(“%f”,&ArraryA[i][j]); } } //输入数组B的数据 printf("pleaseinputArraryB: \n"); 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++) { printf(“%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: \n"); 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: \n",i); for(j=0;j<5;j++) { scanf(“%f”,&p->score[j]); } } } voidaverscor(studentstu[])//计算平均成绩 { student*p=stu; floattemp; inti,j; for(i=0;i<30;i++,p++) { temp=0; 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=1;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*p1,*p2; intn=0; p1=p2=(structnode*)malloc(sizeof(structnode));//开辟一个新单元,并使p1,p2指向它 printf("请输入一个数据: \n"); scanf("%d",p1->data); head=NULL; while((*p1).data! =0) { n=n+1; if(n==1) { head=p1; } else { p2->next=p1; } p2=p1; p1=(structnode*)malloc(sizeof(structnode)); printf("请输入一个数据: \n"); scanf("%d",p1->data); } p2->next=NULL; returnhead; } voidprintchain(node*p)////查找节点并打印信息 { node*p1; if(p==NULL)//是空表 { printf("listnull! \n"); } p1=p; while(p1! =NULL)//p1指向的不是所要找的结点且后面还有结点 { printf("%d\t",p1->data); p1=p1->next; }//p1后移一个结点 } voidmain() { node*p; p=creat();//创建链表 printchain(p);//查找节点并打印信息 } 17.建立一个学生的结构体,学生信息包括: 学号、姓名、三门功课成绩(politic、maths、english),建立一个有30个成员的结构体数组,从键盘输入学号进行查询,当查找到该学号时,显示该生所有信息,否则显示“无此学生”。 structstudent { intsno; charname[20]; floatscore[3]; }; voidmain() { studentstu[30]; intsno; //输入30个成员的数据 input(stu); //按学号查找学生并显示信息 pri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 补充 题库