5132程序设计.docx
《5132程序设计.docx》由会员分享,可在线阅读,更多相关《5132程序设计.docx(20页珍藏版)》请在冰点文库上搜索。
5132程序设计
输入一行以空格分隔的数,把它们存入数组,用逗号分隔的方式输出,并统计数的个数。
输入
输入一行以空格分隔的数。
已知至少输入一个数,至多输入二十个数,且最后一个数后紧跟回车输入。
输出
输出两行。
第一行输出这些数,相邻两数之间用一个逗号隔开。
第二行输出数的个数。
输入示例
20435
输出示例
20,,43,5,
5
数据范围
输入输出均为float范围的浮点数
#include<>
#include<>
#defineN400
voidmain()
{
chara[N];um);
if(strcmp(stu[i].num,"##")==0)ame,stu[i].sex,&stu[i].age);
n++;um,stu[i].name,stu[i].sex,stu[i].age);
}
return0;
}
输入一行以制表符分隔的整数,把它们存入数组。
统计数的个数,并用逗号分隔的方式输出。
输入
输入一行以制表符分隔的整数。
已知至少输入一个数,至多输入二十个数,且最后一个数后紧跟回车输入。
输出
输出两行。
第一行输出整数个数。
第二行输出这些整数,相邻两数之间用一个逗号隔开。
输入示例
2【Tab】3【Tab】4【Tab】5【Tab】6【回车】
输出示例
5
2,3,4,5,6
数据范围
输入为int范围的整数
#include<>
#include<>
#defineN400
intmain()
{
inti,j=1;
charnum[N];Math.Eng.Comp.Ave.”,输出要求每项占8位。
注意:
不要改变函数名称,注意大小写敏感;注意不允许使用全局变量。
输入
输入包含n+1行:
第一行是整数n,代表学生数量,8<=n<=20。
第二行到第n+1行,每行均依照“学号【空格】数学成绩【空格】英语成绩【空格】计算机成绩【回车】”的格式输入。
已知学号长度最大为7,成绩为0到100之间的整数。
输出
依题意输出平均成绩最高的学生的信息。
输出要求每项占8位,平均成绩要求小数点后必须保留2位有效数字(四舍五入),不足补零。
输入示例
8
S131313647273
S131315828486
S131316846171
S131314738268
S121209456050
S131317848180
S131318858883
S131319858881
输出示例
No.Math.Eng.Comp.Ave.
S131318858883
数据范围
输入int范围的整数和字符串
#include<>
#include<>
typedefstructstu
{
charstudentID[20];
intscoreMath;
intscoreEnglish;
intscoreComputer;
floataverage;
}STUDENT;
floatave(STUDENTstu[],intm);
intfind(STUDENTstu[],intn);
voidprint(STUDENTstu[],intk);
intmain()
{
STUDENTstu[20];
intn,m,k;
scanf("%d",&n);
for(m=0;m{
scanf("%s",stu[m].studentID);
scanf("%d",&stu[m].scoreMath);
scanf("%d",&stu[m].scoreEnglish);
scanf("%d",&stu[m].scoreComputer);
stu[m].average=ave(stu,m);
}
k=find(stu,n);
print(stu,k);
return0;
}
floatave(STUDENTstu[],intm)
{
floatAveScore;
intsum;
sum=stu[m].scoreMath+stu[m].scoreEnglish+stu[m].scoreComputer;
AveScore=sum/;
returnAveScore;
}
intfind(STUDENTstu[],intn)
{
inti,j,h=0;
for(i=0;i{
if(stu[i].average>h)
{
h=stu[i].average;
j=i;
}
}
returnj;
}
voidprint(STUDENTstu[],intk)
{
printf("No.Math.Eng.Comp.Ave.\n");
printf("%-8s%-8d%-8d%-8d%",stu[k].studentID,stu[k].scoreMath,stu[k].scoreEnglish,stu[k].scoreComputer,stu[k].average);
}
递归基础之斐波那契
试题描述
1)编写Fib递归函数完成斐波那契数列第i项的计算。
要求将数列数组和第i项作为函数参数。
2)在main函数中输入n,调用递归函数计算斐波那契序列的前n项,最后循环输出斐波那契序列前n项的值。
注意:
不要改变函数名称,注意大小写敏感;注意不允许使用全局变量。
输入
输入一个整数n。
2<=n<=30。
输出
输出数列前n项的值,相邻两项之间用一个空格隔开。
输入示例
5
输出示例
01123
数据范围
输入为int范围的整数,输出为long范围的整数
#include<>
#include<>
longFib(inti,longa[]);;he
输出示例
727
数据范围
输入为字符串
#include<>
#include<>
voidmain()
{
chara[100]={0};
charb[100]={0};
intn1,n2,i,j=0,k,m=0;
gets(a);
gets(b);
n1=strlen(a);
n2=strlen(b);
for(i=0;i{
if(b[j]==a[i])
{
m=0;
k=i;
for(j=0;j{
if(a[k]!
=b[j]||k>=n1)
{
m=1;
}
k++;
}
if(m==0)
{
printf("%d",i+1);
}
j=0;
}
}
}
#include<>
#include<>
#include<>
typedefstruct_foruse//定义单向循环链表结构体及指针
{
struct_foruse*next;
intnumber;
}foruse,*link;
linkcreate(intn)//构造create函数用以建立n阶链表并返回该链表的头指针
{
linkhead=(link)malloc(sizeof(foruse));//申请空间
foruse*tail;
inti;
head->next=head;//修改头指针指向
head->number=1;
tail=head;
for(i=2;i<=n;i++)
{
foruse*p=(foruse*)malloc(sizeof(foruse));
p->number=i;
p->next=tail->next;
tail->next=p;
tail=p;
}
returnhead;
}
voidjoseph(linkhead,intk,intm)//构造joseph函数用以实现目标人员的出列
{
intj;
foruse*p;
foruse*q;
if(m==1&&k==1)
{
p=head;
while(p->next!
=head)
{
printf("%d",p->number);
q=p->next;
free(p);//释放指针的指向内存
p=q;
}
printf("%d\n",p->number);
}
elseif(m==1&&k!
=1)
{
p=head;
for(j=1;jp=p->next;
while(head->next!
=head)
{
q=p->next;
p->next=q->next;
printf("%d",q->number);
if(q==head)
head=q->next;
free(q);
}
printf("%d\n",head->number);
}
else
{
p=head;
for(j=1;jp=p->next;
while(head->next!
=head)
{
for(j=1;jp=p->next;
q=p->next;
p->next=q->next;
printf("%d",q->number);
if(q==head)
head=q->next;
free(q);
p=p->next;
}
printf("%d\n",head->number);
}
}
intmain()
{
linkhead;
intm,n,k;
scanf("%d%d%d",&n,&m,&k);
head=create(n);//调用create函数创建链表并返回头指针
joseph(head,k,m);//调用joseph函数输出要出列人员的标号
return0;
}
#include<>
#defineN100
voidsort(intA[],intm);//(功能为排序的)函数声明
voidintersectionf(intA[],intB[],intC[],intm,intn);//(功能为输出集合交的)函数声明
voidunionf(intA[],intB[],intC[],intm,intn);//(功能为输出集合并的)函数声明
voidsubstractf(intA[],intB[],intC[],intm,intn);//(功能为输出集合差的)函数声明
voidsymdiff(intA[],intB[],intC[],intm,intn);//(功能为输出集合对称差的)函数声明
intmain()
{
intA[N],B[N],C[N],n,m,i;
scanf("%d%d",&n,&m);
for(i=0;i{
scanf("%d",&A[i]);
}
for(i=0;i{
scanf("%d",&B[i]);
}
intersectionf(A,B,C,m,n);//调用函数输出集合A、B的交
unionf(A,B,C,m,n);//调用函数输出集合A、B的并
substractf(A,B,C,m,n);//调用函数输出集合A、B的差
symdiff(A,B,C,m,n);//调用函数输出集合A、B的对称差
return0;
}
voidsort(intA[],intm)//(功能为排序的)函数解释
{
inti,j,temp;
for(i=0;i{
for(j=0;j{
if(A[j]>A[j+1])//前面的数大于后面的数时调换顺序
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
}
voidintersectionf(intA[],intB[],intC[],intm,intn)//(功能为输出集合交的)函数解释
{
inti,j,g=0;
for(i=0;i{
for(j=0;j{
if(A[i]==B[j])
{
C[g]=A[i];
g++;
}
}
}
sort(C,g);//调用函数对集合C进行排序
for(i=0;i{
printf("%d",C[i]);
}
printf("\n");
}
voidunionf(intA[],intB[],intC[],intm,intn)//(功能为输出集合并的)函数解释
{
inti,j,g=0,flag;
for(i=0;i{
C[g]=A[i];
g++;
}
for(j=0;j{
flag=0;
for(i=0;i{
if(B[j]==A[i])//发现集合A中有与集合B中相同的数时做标记
{
flag=1;
}
}
if(flag==0)//向集合C中加入集合B中不与集合A重复的数
{
C[g]=B[j];
g++;
}
}
sort(C,g);
for(i=0;i{
printf("%d",C[i]);
}
printf("\n");
}
voidsubstractf(intA[],intB[],intC[],intm,intn)//(功能为输出集合差的)函数声明
{
inti,j,g=0,flag;
for(i=0;i{
flag=0;
for(j=0;j{
if(A[i]==B[j])
{
flag=1;
}
}
if(flag==0)//向集合C中放入集合A中不与集合B重复的数
{
C[g]=A[i];
g++;
}
}
sort(C,g);
for(i=0;i{
printf("%d",C[i]);
}
printf("\n");
}
voidsymdiff(intA[],intB[],intC[],intm,intn)//(功能为输出集合对称差的)函数声明
{
inti,j,g=0,flag;
for(i=0;i{
flag=0;
for(j=0;j{
if(A[i]==B[j])
{
flag=1;
}
}
if(flag==0)//向集合C中放入集合A中不与集合B重复的数
{
C[g]=A[i];
g++;
}
}
for(j=0;j{
flag=0;
for(i=0;i{
if(B[j]==A[i])
{
flag=1;
}
}
if(flag==0)
{
C[g]=B[j];//向集合C中加入集合B中不与集合A重复的数
g++;
}
}
sort(C,g);
for(i=0;i{
printf("%d",C[i]);
}
printf("\n");
}
#include<>
#include<>
intmain()
{
FILE*fp;
charch;
intn=0;
if((fp=fopen("","r"))==NULL)//当文件无法正常打开时
{
printf("Failuretoopen!
\n");//提示用户文件打开错误
exit(0);
}
while((ch=fgetc(fp))!
=EOF)//当文件可以正常打开时
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//循环结构控制对英文字符(不计大小写)的计数
{
n++;
}
}
printf("%d",n);
fclose(fp);//关闭文件
return0;
}
#include<>
#include<>
intmain()
{
charch,ch1,ch2;
FILE*fp;
intn=1;
if((fp=fopen("","r"))==NULL)//当文件无法正常打开时
{
printf("Faliuretoopenthetext!
\n");//提示用户文件打开错误
exit(0);
}
scanf("%c%c",&ch1,&ch2);//输入指定字符c1和特定字符c2
while((ch=fgetc(fp))!
=EOF)
{
if(ch==ch1)//当字符为指定字符时
{
n++;//计算替换的次数
fputc(ch2,fp);
}//将指定字符替换为特定字符输出
else
fputc(ch,fp);//当字符不为指定字符时照常输出
}
fclose(fp);//关闭文件
printf("%d",n);
return0;
}
#include<>
#include<>
#include<>
intmain()
{
charch;
FILE*fp;
intn=0;
if((fp=fopen("","r"))==NULL)//当文件无法正常打开时
{
printf("Faliuretoopenthetext!
\n");//提示用户文件打开错误
exit(0);
}
while((ch=fgetc(fp))!
=EOF)//计算复制的字节数
{
if(ch!
='\0')
{
n++;
}
}
printf("%d",n);//输出复制的字节数
fclose(fp);//关闭文件
return0;
}