C典型题目.docx

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

C典型题目.docx

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

C典型题目.docx

C典型题目

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);

//按学号查找学生并显

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

当前位置:首页 > 工程科技 > 电力水利

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

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