寻高手做两个题目,C语言程序设计问题!急~~

【问题四描述】
编写一个函数,这个函数同时求出10个学生成绩的最高分、最低分、平均分以及超过平均分的人数,并编写主函数完成:
(1) 输入n个学生的成绩;
(2) 调用此函数进行统计;
(3) 输出统计结果。
【数据类型的组织(或数据结构)】

【算法思想】

【源程序】

【C编译系统下的编辑示图】

【C编译系统下的编译、连接、运行示图】

【C编译系统下的运行结果示图】

【问题五描述】
约瑟夫问题:n个人围成一圈,从第1个人开始数数,数到3的人出圈,输出出圈人的顺序。

【数据类型的组织(或数据结构)】

【算法思想】

【源程序】

【C编译系统下的编辑示图】

【C编译系统下的编译、连接、运行示图】

【C编译系统下的运行结果示图】
我目前只学到了谭浩强那本C课程设计的指针的那章,另外最好能附上算法思想,谢谢各位了,我一经验证源程序没有错误,我会追加给那位10分的。万分感谢啊~

楼主注意素质哈,不要拿了程序不给分哈

麻烦加分了,O(∩_∩)O谢谢

第二题指针的方法补在后面了,自己看下吧。。
第一题:源程序
#include<stdio.h>
#define M 10 //控制输入的人数

float deal_the_mark(float a[M],float *max,float *min,float aver,int *beyond_aver);//处理分数的函数

void main()
{
float a[M];
float max,min;//分别为最高分,和最低分
float aver=0.0;//平均成绩
int beyond_aver=0;//超出平均成绩的人数
int i;
for(i=0;i<M;i++)
scanf("%f",&a[i]);
max=min=a[0];

aver=deal_the_mark(a,&max,&min,aver,&beyond_aver);

printf("平均成绩:%f\n ",aver);
printf("最高分: %f\n",max);
printf("最低分:%f\n",min);
printf("超过平均成绩的人数: %d\n",beyond_aver);
}
float deal_the_mark(float a[M],float *max,float *min,float aver,int *beyond_aver)
{
int i=0;
float all_mark=0;//总成绩

for(i=0 ; i<M; i++)//遍历数组找出最大最小值
{
all_mark+=a[i];//求出总成绩

if (*max<a[i])
{
*max=a[i];
}

if (*min>a[i])
{
*min=a[i];
}
}

aver=all_mark*1.0/M;//求出平均成绩

for (i=0;i<M;i++)//遍历数组求出超过平均成绩的人数
{
if (a[i]>=aver)
{
*beyond_aver=*beyond_aver+1;
}

}
return aver;
}
第二题:
拿链表做的不知道可不可以
#include<stdio.h>
#include<stdlib.h>

struct people
{
int a;
people *next;
};

struct people *build_the_people(people *head);
struct people *deal_the_problem(people *head);
void main()
{
people *head,*tail;
head=tail=NULL;
head=build_the_people(head);
deal_the_problem(head);
}
struct people *build_the_people(people *head)
{
people *tail,*new_people;

head=tail=NULL;
while(1)
{
new_people=new people;
scanf("%d",&new_people->a);
if (new_people->a<0)
{
delete new_people;
break;
}

new_people->next=NULL;

if (tail==NULL)
{
head=tail=new_people;
}
else
{
tail->next=new_people;
tail=new_people;
}

}
tail->next=head;
return head;
}
struct people *deal_the_problem(people *head)
{
people *tail=head,*temp=head;
int count=1;
while(tail->next!=tail)
{

if (count==3)
{
tail=temp->next->next;
temp->next=tail;
count=1;
continue;
}
temp=tail;
tail=tail->next;
count++;

}
printf("%d",tail->a);
return tail;
}
第二题: 指针的方法
#include <stdio.h>
#include <stdlib.h>
#define N 7//控制人数
void main()
{
int *p=(int *)malloc(N*sizeof(int));
int i;
int k=1;
int m=0;
for (i=0;i<N;i++)
{
*(p+i)=i+1;
}
while (1)
{
if (i==N)
{
i=0;
}
if (m==N-1)
{
break;
}
if (k==3&&*(p+i)!=0)
{
*(p+i)=0;
k=1;
m++;
}
if (*(p+i)!=0)
{
k++;
}
i++;

}
i=0;

while (1)
{
if (*(p+i)!=0)
{
break;
}
i++;
}
printf("%d",*(p+i));
}
麻烦加分了。。。。O(∩_∩)O谢谢。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-24
你是只要程序部分还是要一份完整的课程设计报告?
第2个回答  2009-12-24
你去看看清华大学出的数据结构那本书吧
第3个回答  2009-12-24
4)-3编写一程序实现以下功能: 15分
设有20名歌手(编号为1-20)参加歌咏比赛,另有10名评委打分,
每位歌手的得分从键盘输入,先输入第1个歌手的10位评委打分
(10分制,分数有1位小数,分数之间使用空格分隔),
再输入第2个,...。
计算出每位选手的最终得分(扣除一个最高分和一个最低分后的平均分),
最后按最终得分由高到低的顺序输出每位选手的编号及最终得分。

考查点:从键盘读取数据及其控制,多重循环与排序。
*/

#include <stdio.h>
#define GSS 20 /*歌手数*/
#define PWS 10 /*评委数*/
/*歌手类型结构体定义*/
struct xuanshou
{
int xh;/*选手序号*/
float cj[PWS];/*选手的所有成绩*/
float pjf;/*选手最后得分*/
};
/*选择法降序排序*/
void sortjx (struct xuanshou *arr, int size);

void main ()
{
int i, j;
float x, sum, max, min;
struct xuanshou xs[GSS];

/*输入选手成绩*/
printf("\nPlease input xuan shou cheng ji:");
for (i = 0; i < GSS; i++)
{
xs[i].xh = i + 1;
printf("\nPlease input %d hao cheng ji:", xs[i].xh);
for (j = 0; j < PWS; j++)
{
scanf("%f", &x);
xs[i].cj[j] = x;
}
}

/*计算平均分*/
for (i = 0; i < GSS; i++)
{
sum = 0;
max = xs[i].cj[0];
min = xs[i].cj[0];
for (j = 0; j < PWS; j++)
{
sum += xs[i].cj[j];
if (max < xs[i].cj[j])
{
max = xs[i].cj[j];
}
else
{
if (min > xs[i].cj[j])
{
min = xs[i].cj[j];
}
}
}
xs[i].pjf = (sum - max - min) / (PWS - 1 - 1);
}

/*排序*/
sortjx(xs, GSS);

/*输出*/
printf("\nxuan shou cheng ji:\n");
for (i = 0; i < GSS; i++)
{
printf("xuan shou %d: %.1f\n", xs[i].xh, xs[i].pjf);
}
}

/*
函数功能:选择法降序排序
函数参数:参数1,歌手数据
参数2,歌手人数(数组长度)
*/
void sortjx (struct xuanshou *arr, int size)
{
int i, j, maxi;
struct xuanshou tmp;

for (i = 0; i < size -1; i++)
{
maxi = i;
for (j = i; j < size; j++)
{
if (arr[maxi].pjf < arr[j].pjf)
{
maxi = j;
}
}

tmp = arr[maxi];
arr[maxi] = arr[i];
arr[i] = tmp;
}
}
给你一个参考的,可以使你自己能够锻炼自己

C语言简单编程题目两道,求高手做一下。高分!!!
val = tmp % 10; \/\/ 个十百位位的顺序 tmp \/= 10; \/\/ 每次除10, 以去掉个位数 if (val == 0 || val == 2 || val == 4 || val == 6 || val == 8) { \/\/ 取得的数只要是这5个数中任意一个, count计数就加1 count ++;} } if (count == 4) { \/\/...

关于c语言程序设计的问题求大神帮忙!万分感谢!
(1)编辑(把程序代码输入,交给计算机)(2)编译(成目标程序文件.obj)编译是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码...

两题C语言,高手求助啊
第一题:第一次5%2=1,所以执行i--,得i=4,因continue继续,所以用4%2=0,执行case0,i--得3,跳出,跳出后继续--得2,打印输出。下一次循环用2%2=0,执行case 0,i--得1,跳出继续--,得0;所以输出为2和0 第二题:调用函数后,主要看里面的循环情况,第一次循环i=0;c=8;当j=8时...

c语言编程题,请高手帮忙做一下,拜谢,急急急急……
1.include <stdio.h> double funcPi(int);int main(void){ int arg;printf("Input the argument: ");\/\/ \/\/ 无异常输入 \/\/ while (!scanf("%d", &arg)){ printf("Check your input and retry: ");while (getchar()!='\\n'){ continue;} } while (getchar()!='\\n'){ continue...

请高手做下这两道C语言题目,答案好追加100分!
第二题:include <stdio.h> int length( char *p ) { char *q, *r;for ( q=p; *q!='\\0' && *q!='A'; q++ )\/*不是或,是与*\/ ;for ( r=q; *r!='\\0' && *r!='Z'; r++ );return r-q-1; \/*要再减1*\/ } main() { char str[81];int n;gets( str)...

几道c语言题目 菜鸟望高手解答
第一道题:输出的是:0 1 3 4 \/\/因为for循环 i从0到4 但是当i等于2的时候执行了continue,也就是直接跳转到下一次循环,所以2没有输出 第二题:t为2 因为 if-else 结构中的else是和最近一个if相匹配的,又因为if(x<y)不成立,所以直接执行输出语句,即输出2 第三题:3 6 9 因为x被...

c语言编程问题,求高手解答(高分)
你的程序没有大的问题,可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d...

计算机C语言编程问题 高手来 回答好了加分
那行程序相当于:for(i=0 ; i<4 ; i++) a[i]=++a[0];\/\/你应该好好区分一下“*”在不同位置不同的含义、、、有三种含义;(1)变量的声明时,int a[5];int* p=a;\/\/p就相当于一个a指向的地址的别名。注意:是p而不是*p (2)取值操作:比如在操作语句中,*p表示取位于地址p上...

C语言程序设计的设计问题啊,求高手解决小CASE~
main(){ int i;float m;printf("请输入你购买商品的件数:");scanf("%d",&i);if(i<10)m=i*2.85;else if(i<=100)m=i*2.85*0.95;else m=i*2.85*0.9;printf("%.2f",m);}

c语言程序设计有关编程题,急求答案
1题#include "stdio.h"main(){ int n,i;float sum=0,t,a=1.0,b=1;printf("please input n:");scanf("%d",&n);for(i=0;i<n;i++){ t=a\/b;sum+=t;b=b+2;} printf("sum=%f\\n",sum);} 2题#include "stdio.h"include"math.h"main(){ int n,bai,shi,ge;while(1)...

相似回答