以下算法均在VS2010上 编译通过并运行
1.16 试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值。
#include
void sort(int *a,int n)
{
int temp,i,j;
for (i=0;i for (j=0;j //冒泡法使数组元素按自大至小排列
if(a[j] {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
main()
{
int i, a[3];
printf("请输入数组元素:");
for(i=0;i<3;i++)
scanf("%d",&a[i]); //输入数组
sort(a,3);
for(i=0;i<3;i++) //输出数组
printf("自大至小数组元素%d ",a[i]);
}
1.17 已知k阶斐波那契数列的定义为
f0=0,f1=0,...,fk-2=0, fk-1=1;
fn=fn-1+fn-2+....+fn-k, n=k,k+1,...
试编写求k阶斐波那契的第m项值的函数算法,k和m均以值调用的形式在函
数参数表中出现。
解析:
f(m)=f(m-1)+f(m-2)+f(m-3)+.......+f(m-k)
f(m-1)=f(m-2)+f(m-3)+f(m-4)+.......f(m-k-1)
f(m)=2*f(m-1)-f(m-k-1) 注:数组元素从0开始标号
#include
#define LENGTH 1000
int Fibonacci(int k, int m)
{
int i,s,j,f,t[LENGTH];
if(k<2||m<0)
return 0;
if(m>=1&&m-1 f=0;
else
if (m-1==k-1||m-1==k)
f=1;
else
{
for(i=0;i<=k-2;i++)
t[i]=0; t[k-1]=1; t[k]=1;
s=1; j=0;
for(i=k+1;i<=m;i++,j++)
{
t[i]=2*s-t[j];
s=t[i];
}
f=t[m-1];
}
return f;
}
main()
{
int k,m;
printf("请输入斐波那契序列的阶数k:");
scanf("%d",&k);
printf("请输入序列元素的位置m:");
scanf("%d",&m);
printf("%d阶斐波那契序列的第%d项值为:%d",k,m,Fibonacci(k,m));
}
1.18 假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均
已存入计算机,并构成一张表,表中每一行的形式为
项目名称 性 别 校 名 成 绩 得 分
编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。
解析:
#include
typedef enum {female,male} Sex;
typedef struct {
char sport; // 项目名称
Sex gender; // 性别(女:female;男:male)
char schoolname; // 校名为'A','B','C','D'或'E'
char result[20]; // 成绩 最好定义为数组
int score; // 得分(7,5,4,3,2或1)
}ResultType;
typedef struct{
char schoolname; //学校名
int malescore; // 男子总分
int femalescore; // 女子总分
int totalscore; // 男女团体总分
} ScoreType;
void Scores(ResultType *result, ScoreType *score)
{
int i=0;
while(result[i].sport!=NULL)
{
switch(result[i].schoolname)
{
case'A':
score[0].totalscore+=result[i].score;
if(result[i].gender==male)
score[0].malescore+=result[i].score;
else
score[0].femalescore+=result[i].score;
break;
case'B':
score[1].totalscore+=result[i].score;
if(result[i].gender==male)
score[1].malescore+=result[i].score;
else
score[1].femalescore+=result[i].score;
break;
case'C':
score[2].totalscore+=result[i].score;
if(result[i].gender==male)
score[2].malescore+=result[i].score;
else
score[2].femalescore+=result[i].score;
break;
case'D':
score[3].totalscore+=result[i].score;
if(result[i].gender==male)
score[3].malescore+=result[i].score;
else
score[3].femalescore+=result[i].score;
break;
case'F':
score[4].totalscore+=result[i].score;
if(result[i].gender==male)
score[4].malescore+=result[i].score;
else
score[4].femalescore+=result[i].score;
break;
}
i++;
}
}
main()
{
int i,n;
ResultType result[100];
ScoreType score[100];
for(i = 0; i < 100; i++)
{
result[i].sport = NULL;
score[i].femalescore = score[i].malescore = score[i].totalscore = 0;
}
score[0].schoolname = 'A';
for(i = 1; i < 5; i++)
score[i].schoolname = score[0].schoolname + i;
printf("请输入各院校参赛的总人数:");
scanf("%d",&n);
printf("请输入各院校运动员的项目名称、性别(female--0,male--1)、校名、成绩、得分:\n");
for(i=0;i {
printf("运动员%d:\n",i+1);
fflush(stdin);
printf("输入项目:\n");
scanf("%c",&result[i].sport);
fflush(stdin);
printf("输入性别:\n");
scanf("%d",&result[i].gender);
fflush(stdin);
printf("输入校名:\n");
scanf("%c",&result[i].schoolname);
fflush(stdin);
printf("输入结果:\n");