当前位置:首页 » 编程语言 » 案例式c语言程序设计思考题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

案例式c语言程序设计思考题

发布时间: 2023-02-03 14:08:26

c语言编程问题

编程发现的最长的单词在字符串中的一个已知的,它假定该字符串只包含字母和空格,空格用来分隔不同的话!

方法:

/ / VC + + 6.0编译器

包括
无效的主要() BR /> {
字符STR [] =“世界你好我的名字是曹寻医!”;
的char * p = STR,* P1;
MAX = 0,计数= 0,我
而(* P)
{
计数= 0;
而(* p =='')P + +;
(* P!='' && * p)
{/ /我们必须注意的判断* P! = 0来判断,或到最后一个字,它已被添加到背面直到满足空间,所以将超级部门。
P + +;
计数+ +;
}
(MAX <计数)
{
最大计数;
P1 =对数;
}
}
printf的(“人数最多的是:%d条\ n”);,最大
printf的(“最大的一句话是:”);
(* P1 ='' && * P1)/ /这里要判断* P1! ='\ 0',因为结尾的字符串中最长的单词,如果你不判断* P1! ='\ 0',也界。
{
的putchar(* P1);
P1 + +;
}
的putchar('\ n');
}
BR /> / *
在字符串中寻找最长的单词。注:A B.如果在一个循环中循环,以确保不仅在环路B,数组但是行业。
而且里面的数组A,但也是扇区,以确保循环。像上面的例子。现在提供一个更容易理解的例子。
而(* P)
{
而(* P!='' && * p)
{
P + +;
}
}
外循环和内循环的循环条件没有必然的,但对于一个指针数组(如果变量标
访问数组下标减法还要注意),加法和减法应该引起人们的注意,必须确保不流溢。
* /

方法:

/ / VC + + 6.0编译通过。

#包括
包括中
无效的主要()
{
字符STR [] =“我我的学生“;
的char * p = str中,数组[10] [20] = {0};
INT I = 0,J = 0,最大值= 0;
而( * P)
{
而(* p =='')* p + +;
(* P && * p!='')
{
>阵列[I] [J + +] = * p;
P + +;
}
i + +; J = 0;
}
= 0;
最大= strlen的(阵列[I]);
P =阵列[I];
(strlen的(阵列[I]))
{
(最大的strlen(阵列[I]))
{
最大值= strlen的(ARRAY [I]);
P =阵列[I];
} <BR /我+ +;
}
printf的(“%e\ n%s的\ n”,最大,P);
}

/ *
>寻求中最长的单词的字符串(不区分词与词之间包含非字母数字字符),法官的二维数组的形式。
定义了一个两维数组,每个元素都用于存储一个字符串(每个分离的字)。
然后判断的时间最长。

比较第一种方法,这种方法更清楚地了解?一些。但缺点是,你要分配一个二维数组来存储分离
字,占用存储空间。
* /

实现任何十进制将R十六进制数2-16(R)

转换为二进制:
/ / VC + + 6.0编译通过

#包括
包括
无效的主要()
{ />诠释A,B [30],我
scanf的(“%d”,&A);
(i = 0;了!= 0;我+ +)
{
B?[我] = 2%;
= A / 2;
}
( - I I> = 0;我 - )
{
printf的(“%d”,B [I]);
}
的putchar('\ n');
}

/ /二进制的转换,也可以使用位移运算符。一定的数量,如1相的二进制
系统的最低位按位“与”,得到的位移,然后得到的二进制最低位,等等。

转换为八进制:

/ VC + + 6.0编译器。

#包括
#,包括
无效的主要()
{
整数A,B [20]我
scanf的(“%d”,&A);
为(i = 0;了!= 0; i + +)
{
B [我] = 8%;
= A / 8;
}
( - I I> = 0; I - )
{
printf的(“% D“,B [I]);
}
的putchar('\ n');
}

/ *
8转换到那里没有十六进制这么大的麻烦,它并不需要定义一个用于存储
所有的基数十六进制的字符数组,但可以直接输出。同时保存他和十六进制基数。从0到F
* /

转换为16进制:

/ / VC + + 6.0编译通过

stdio.h中>
#,包括
无效的主要()
{
整数A,B [20],我基础= 16;
字符X [16] = {'0','1','2','3','4','5','6','7','8','9','A' ,'B','C','D','E','F'};
scanf的(“%d”,&A);
(i = 0;了! 0; i + +)
{
B [我] =%的基础;
= A /基地;
}
( - ; = 0; I - )/ /开始 - 我
{
诠释J = B [我];
printf的(“%c”的,X [J]); BR />}
printf的(“\ n”);
}

/ *
一般其他十六进制数转换为十进制数更容易,准备乘法公式,我们使用。
十进制数转换为十六进制数,则要使用除法。的想法?这个问题是明确的,应该是
典型的算法来解决这些问题。

它的十进制数转换成二进制数,在除了使用部门,但还带着几分算术。

主要的问题是值得理解这两个词:

B [我] =%的基础;
= A /基地;
我们一般采用两种循环使用,得到一个整数的数字,这也恰好说明我们得到了
整数位的方法,它是一个十进制数转换为十进制数的算法
,是,我们得到一个小数位数字的过程,实际上是寻找他的过程中,转换为十进制
数字(虽然本身无需转换本身的时候,就已经是一个十进制数)。事实可以预计相同
十进制数转换成十六进制数的过程中,这是类似的。

然后在第一个输出的结果,取余数的结果,年底的数字,在低位。

* /

解决方案:

#包括
包括的
>无效的主要()
{
诠释一个[10] = {0,1,2,9,10,5,12,7,8,15};
(INT I = 9;我= 0; I - )
{
(A [I]> = 10)
开关([I])
{
10:printf的(“%c”的,'A');突破;
案例11:printf的(“C”,“B”);
情况下,12:printf(“请%C “,'C');休息;
案例13:printf的(”C“,”D“);
情况下,14:printf的(”%c“的,'E');打破;
情况下,15:printf的(“%c”时,'F');休息;
}
其他
printf的(“%d”的,一个[i]);
}
}

/ *
事实上,二进制的转换算法,我们知道的是,我们希望将其转换成16进制数(如果十六进制) />取余数,剩下的结果存储在一个数组里面四舍五入重新分配给他的,那就是扔掉的其余部分,
相当于外商前面的步骤,然后采取余数,再取整。如此循环,直到0为止。

事实上,上述算法,它提醒我们一个十进制数转换成二进制数计算,是不难理解的,
是相通的。

现在的关键是,如果这些东西都是好的,那就是,其余的被放置在一个数组中,现在要做的,
阵列反向输出就OK了。二进制或八进制,只要它的直接输出,但如果
十六进制,不能的情况下,也就是说,如果一个元素的数组里面是14的话,我不能作为输出/>,则必须输出E,因为E是十六进制内底,但也有相应的十进制数14。
一个二进制或八进制,可以直接输出,因为阵列的数量是0,1(二进制)

(0 .... 8),这些数字的二进制和八进制基地。

所面临的问题在这里是输出一个整数,这个整数满足一定的条件下,输出字
突破,例如:如果该整数等于14'E'字符的输出。

当然,我们可以使用.. else语句,以确定特殊字符的十六进制数,它是唯一的A,B,C,D,E,F 6
以确定是否...否则太麻烦了。当然,我们也可以使用开关来确定这更有组织。代码
更清晰。

当然,这是一个十六进制数,我们可以判断,但如果在现实生活中遇到的问题,这一点
条件或交换机上太麻烦了类似的信件,代码是不直观,但也容易出错。

在这个时候,我们可以定义一个字符数组,分别把字符,我们要输出的对应关系如下:

10 A
11 B BR /> 12?
13e
14 -
15 F
16?
17 H
18我
19 J
>
该数组,把数字,里面的字符数组b数组,一个里面的数字是10,当输入
'A',而不是输出10,等等(见上面的对应)课程我上面的对应关系是连续的,其实
的数字和字符的顺序可能不乱,当然,这取决于实际遇到的问题是什么。
以上,如果...否则以确定它是否会过于繁琐。因此,我们定义了一个字符数组来存储
字符。因此,如何接触数字和字符,如何让一个[i],价值10时,但14失去
'E'输出'A',我们可以定义b数组:
/>字符B [30] = {0};
B [10] ='A';
B [11] ='B';
B [12] ='C'
B [13] ='D';
B [14] ='E';
...
B [19] ='J';

因此,这意味着,当该元素的值一个[i] 10:00输出[10] 11输出[11];这和数字对应
。我们可以使用:

诠释吨= [];
printf的(“%c”时,B [T]),[i]的值,我们输出B [多少]

对于上面的例子中,它可以是:

如果(一个[i]> = 10 &&一个[i] <= 19)/ /对应关系是连续的,可以判断
{
诠释吨= [];
printf的(“%c”时,B [T]);
}
其他
{
printf的(“%d”,一个[i]);/ /如果你不属于特殊字符的定义相应的输出。

}

当然,上面是相应的连续十进制和二进制,八进制,十六进制的转换,是连续的。
相应的连续,即如何做到这一点:

20'A'
25'B'
30'D'
50'G' /> 53“H”
58的'C'
100'Z'
200'W'

以上,没有规律性,和数目,这些去定义一个数组的200个元素,
有点划不来。因此,如果是上面这种情况下,有没有更好的办法。只有在判断语句,当然,如果有超过20
字符的对应关系来确定语句是不恰当的,那么有没有更好的办法。同时进一步探讨......

* /

这是我的测试计算机等级考试主题碰到哦,算法相当,一些书,一些扩展。还是自己严重的哦。 。 。

由于太多的文字提出的第三个问题不上来,哦。 。抱歉。 。 。

Ⅱ 求助一道C语言的题目. (速度).....

/*一副扑克有52张牌,打升级时应将牌分给四个人。请设计一个程序完成自动发牌的工作。

要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。

问题分析与算法设计
按照打升级的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。
为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号
:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,…
然后从52 张牌中随机的为每个人抽牌(也可以采取其它的编号方式)。
这里可以采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。

运行示例:
S K J 8
H A J 5 3
D Q 8
C K J 7 5

S A T 6 4 2
H 4 2
D 7 6 4
C Q T 9

S 9 7 5 3
H K Q T 9
D J 3 2
C 8 2

S Q
H 8 7 6
D A K T 9 5
C A 6 4 3
思考题(必须完成):完成2副牌的自动发牌,每人应当有26张牌,而且需将每家所得的牌进行排序。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

#define CARD_NUM_OF_A_PACK 52
#define NUM_OF_PLAYERS 4
#define NUM_ONEPACK_OF_PLAYER (CARD_NUM_OF_A_PACK/4)

#define SIZE (sizeof(Card_t)*CARD_NUM_OF_A_PACK)

typedef struct tagCard
{
char value;
char color;
}Card_t;

void CardInit(Card_t **pInCard)
{
Card_t *pCard = *pInCard;
Card_t *pTempCard = NULL;
int i;
int j;

memset(pCard,0,SIZE);
pTempCard = pCard;

for(j = 1;j <= 4;j++)
{
for (i = 1;i <= CARD_NUM_OF_A_PACK/4;i++)
{
if (1 == j)
{
pTempCard->color = 'S';
}
else if (2 == j)
{
pTempCard->color = 'H';
}
else if (3 == j)
{
pTempCard->color = 'D';
}
else if (4 == j)
{
pTempCard->color = 'C';
}

if (i <= 10)
{
pTempCard->value = i;
}
else if(i == 11)
{
pTempCard->value = 'J';
}
else if(i == 12)
{
pTempCard->value = 'Q';
}
else if(i == 13)
{
pTempCard->value = 'K';
}
pTempCard++;
}
}

return;

}

void CardFree(Card_t **pCard)
{
if (*pCard)
{
free(*pCard);
*pCard = NULL;
}
}

void Deal(Card_t **pInCard)
{
Card_t players[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
int i;
int j;
int k;
int temp;
long cardUsedNum = 0;
int packOfCard = 0;
int playerNo = 0;
int playerCardNo = 0;
Card_t tempCard = {0};
int CartCount = 0;
Card_t *pCard = *pInCard;
int run = 1;
int cCount[NUM_OF_PLAYERS];
int hCount[NUM_OF_PLAYERS];
int dCount[NUM_OF_PLAYERS];
int sCount[NUM_OF_PLAYERS];

char c[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char h[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char d[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];
char s[NUM_OF_PLAYERS][CARD_NUM_OF_A_PACK/NUM_OF_PLAYERS];

CartCount = CARD_NUM_OF_A_PACK;
memset(players,0,sizeof(players));
memset(c,0,sizeof(c));
memset(h,0,sizeof(h));
memset(d,0,sizeof(d));
memset(s,0,sizeof(s));

if (NULL == pCard)
{
return;
}

srand((int)time(0));

while(run)
{
temp = (int)(CartCount*rand()/(RAND_MAX+1.0));

players[playerNo][playerCardNo].color = pCard[temp].color;
players[playerNo][playerCardNo].value = pCard[temp].value;

pCard[temp].color = pCard[CartCount-1].color;
pCard[temp].value = pCard[CartCount-1].value;

pCard[CartCount-1].color = players[playerNo][playerCardNo].color;
pCard[CartCount-1].value = players[playerNo][playerCardNo].value;

CartCount-=1;
if (CartCount < 0)
{
packOfCard++;
if(packOfCard >= 1)
{
run = 0;
}
CartCount = CARD_NUM_OF_A_PACK;
}

playerCardNo+=1;
if (playerCardNo >= NUM_ONEPACK_OF_PLAYER)
{
playerNo+=1;
playerCardNo = 0;
}
}

for(i = 0;i < NUM_OF_PLAYERS;i++)
{
sCount[i] = 0;
hCount[i] = 0;
dCount[i] = 0;
cCount[i] = 0;
for (j = 0;j < NUM_ONEPACK_OF_PLAYER;j++)
{
if ('S' == players[i][j].color)
{
s[i][sCount[i]] = players[i][j].value;
sCount[i]++;
}
else if ('H' == players[i][j].color)
{
h[i][hCount[i]] = players[i][j].value;
hCount[i]++;
}
else if ('D' == players[i][j].color)
{
d[i][dCount[i]] = players[i][j].value;
dCount[i]++;
}
else if ('C' == players[i][j].color)
{
c[i][cCount[i]] = players[i][j].value;
cCount[i]++;
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < cCount[i] ;j++)
{
for(k = 1;k < cCount[i]-j;k++)
{
if(c[i][j] > c[i][k])
{
temp = c[i][j];
c[i][j] = c[i][k];
c[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < hCount[i] ;j++)
{
for(k = 1;k < hCount[i] -j;k++)
{
if(h[i][j] > h[i][k])
{
temp = h[i][j];
h[i][j] = h[i][k];
h[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < dCount[i] ;j++)
{
for(k = 1;k < dCount[i] -j;k++)
{
if(d[i][j] > d[i][k])
{
temp = d[i][j];
d[i][j] = d[i][k];
d[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
for (j = 0;j < sCount[i] ;j++)
{
for(k = 1;k < sCount[i] - j;k++)
{
if(h[i][j] > h[i][k])
{
temp = s[i][j];
s[i][j] = s[i][k];
s[i][k] = temp;
}
}
}
}

for (i = 0;i < NUM_OF_PLAYERS;i++)
{
printf("Player:%d\n",i+1);
printf("S:");
for (j = 0;j < sCount[i];j++)
{
if (s[i][j] <= 10)
printf("%d ",s[i][j]);
else
printf("%c ",s[i][j]);
}
printf("\nH:");
for (j = 0;j < hCount[i];j++)
{
if (h[i][j] <= 10)
printf("%d ",h[i][j]);
else
printf("%c ",h[i][j]);
}
printf("\nD:");
for (j = 0;j < dCount[i];j++)
{
if (d[i][j] <= 10)
printf("%d ",d[i][j]);
else
printf("%c ",d[i][j]);
}
printf("\nC:");
for (j = 0;j < cCount[i];j++)
{
if (c[i][j] <= 10)
printf("%d ",c[i][j]);
else
printf("%c ",c[i][j]);
}

printf("\n");
}
}

int main()
{
Card_t *pCard = NULL;

pCard = (Card_t *)malloc(SIZE);
if (NULL == pCard)
{
printf("error");
return;
}

CardInit(&pCard);

Deal(&pCard);

free(pCard);

}

Ⅲ C语言程序设计思考题。救急!!!!

  1. 如何实验验证实参数组元素和形参数组元素共享同一内存?

可以将实参数组元素的内存地址和形参数组元素的内存地址比较,相同则为同以内存

比如: int x ; x = &FC[0];可以得到第一个元素的内存地址。


2. Average函数内查找最大值和最小值时需要更新pmax和pmin的值还是*pmax和*pmin的值?为什么?这两种做法有何区别、对main的影响如何


两者都可以;因为*pmax和*pmin是数值,pmax和pmin只是指针,指向数据的地址。两者修改都可以达到效果。对main的没有影响!

Ⅳ c语言。。12题。写程序。。后面思考题,写答案

1 编程
1.1 打印出以下图案
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*

#include<stdio.h>
intmain()
{
inti=0,j;
for(;i<3;i++){
j=0;
for(;j<i*2+1;j++)printf("*");
printf(" ");
}
for(;i>=0;i--){
j=0;
for(;j<i*2+1;j++)printf("*");
printf(" ");
}
return0
}

1.2编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5)

1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1

#include<stdio.h>
intmain()
{
inti=0,j,n,k;
scanf("%d",&n);//输入
for(;i<n-1;i++){
j=0;k=1;
for(;j<=n+i;j++){
if(j<n-i)
printf("");
elseif(j<n)
{
printf("%d",k++);

}
else{
printf("%d",k--);
}
}
printf(" ");
}
for(;i>=0;i--){
j=0;k=1;
for(;j<=n+i;j++){
if(j<n-i)
printf("");
elseif(j<n)
{
printf("%d",k++);
}
else{
printf("%d",k--);
}
}
printf(" ");
}
return0;
}

2 思考题
1.以下不是死循环的语句是 。
A)for (y=1,x=9;x>++y ; x=i++) i=x ;
B)for ( ; ; x++=i ) ;
C)while (1) { x++ ; }
D)for (i=10 ; ; i--) sum+=i ;

A,思路:排除法;


2. 下面程序段的运行结果是 。
x=y=0;
while (x<15) y++,x+=++y ;
printf(“%d,%d”,y,x);
A)20,7 B)6,12 C)20,8 D)8,20

D;运行一下就知道了


3. 以下for循环的执行次数是 。
for (x=0,y=0; (y=123) && (x<4) ; x++) ;
A)无限循环 B)循环次数不定 C)4次 D)3次

C;


4.写出下面程序运行的结果。
main ( )
{ int i,b,k=0 ;
for (i=1; i<=5 ; i++) {
b=i%2;
while (b--==0) k++ ;
}
printf(“%d,%d”,k,b);
}

答:2,0;


5. 写出下面程序运行的结果。
main ( )
{ int a,b;
for (a=1,b=1 ; a<=100 ; a++) {
if (b>=20) break;
if (b%3==1) { b+=3 ; continue ; }
b-=5;
}
printf(“%d ”,a);
}

答:8


6. 写出下面程序运行的结果。
main ( )
{ int k=1,n=263 ;
do { k*= n%10 ; n/=10 ; } while (n) ;
printf(“%d ”,k);
}

答:36

Ⅳ c语言程序设计苏小红版第七章课后实验答案

不知道你说的是不是这一次实验

2.2.7实验7:二维数组和函数综合编程练习

成绩排名次

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

【思考题】请读者思考如下问题。

①如果增加一个要求:要求按照学生的学号由小到大对学号、成绩等信息进行排序,那么程序如何修改呢?

②如果要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的操作,那么程序如何修改呢?



答案



#include <stdio.h>


#define STU 30

#define COURSE 3


void Input(long num[],int score[][COURSE],int n);

void GetSumAver(int score[][COURSE],int n,int sum[],float aver[]);

void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[]);

void Print(long num[],int score[][COURSE],int n,int sum[],float aver[]);

int Search(long num[], int n, long x);


main()

{

int n, score[STU][COURSE], sum[STU], pos;

long num[STU], x;

float aver[STU];


printf("Please enter the total number of the students(n<=30):");

scanf("%d", &n); /*输入参加考试的学生人数*/


printf("Enter No. and score as: MT EN PH ");

Input(num, score, n); /*输入学生成绩*/


GetSumAver(score, n, sum, aver); /*计算总分和平均分*/

printf("Before sort: ");

Print(num, score, n, sum, aver);


Sort(num, score, n, sum, aver); /*排名次*/

printf("After sort: ");

Print(num, score, n, sum, aver);


printf("Please enter searching number:");

scanf("%ld", &x); /*以长整型格式输入待查找学生的学号*/

pos = Search(num, n, x); /*名次查询*/

if (pos != -1)

{

printf("position: NO MT EN PH SUM AVER ");

printf("%8d %4ld %4d %4d %4d %5d %5.0f ",

pos+1,num[pos], score[pos][0],score[pos][1],

score[pos][2], sum[pos],aver[pos]);

}

else

{

printf("Not found! ");

}

}


/* 函数功能:输入某班学生期末考试三门课程成绩

函数参数:长整型数组num,存放学生学号

整型数组score,存放学生成绩

整型变量n,存放学生人数

函数返回值:无

*/

void Input(long num[], int score[][COURSE], int n)

{

int i, j;


for (i=0; i<n; i++)

{

scanf("%ld", &num[i]);

for (j=0; j<COURSE; j++)

{

scanf("%d", &score[i][j]);

}

}

}


/* 函数功能:计算每个学生的总分和平均分

函数参数: 整型数组score,存放学生成绩

整型变量n,存放学生人数

整型数组sum,计算得到的每个学生的总分

实型数组aver,计算得到的每个学生的平均分

函数返回值:无

*/

void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])

{

int i, j;


for (i=0; i<n; i++)

{

sum[i] = 0;

for (j=0; j<COURSE; j++)

{

sum[i] = sum[i] + score[i][j];

}

aver[i] = (float)sum[i] / COURSE;

}

}


/* 函数功能:按总分成绩由高到低排出成绩的名次

函数参数:长整型数组num,存放学生学号

整型数组score,存放学生成绩

整型变量n,存放学生人数

整型数组sum,存放每个学生的总分

实型数组aver,存放每个学生的平均分

函数返回值:无

*/

void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[])

{

int i, j, k, m;

int temp1;

long temp2;

float temp3;


for (i=0; i<n-1; i++)

{

k = i;

for (j=i+1; j<n; j++)

{

if (sum[j] > sum[k]) k = j;

}

if (k != i)

{

temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;

temp2 = num[k]; num[k] = num[i]; num[i] = temp2;

temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;

for (m=0; m<COURSE; m++)

{

temp1 = score[k][m];

score[k][m] = score[i][m];

score[i][m] = temp1;

}

}

}

}


/* 函数功能: 打印名次表,表格内包括学生编号、各科分数、总分和平均分

函数参数: 长整型数组num,存放学生学号

整型数组score,存放学生成绩

整型变量n,存放学生人数

整型数组sum,存放每个学生的总分

实型数组aver,存放每个学生的平均分

函数返回值:无

*/

void Print(long num[], int score[][COURSE], int n,

int sum[], float aver[])

{

int i, j;


printf(" NO | MT EN PH SUM AVER ");

printf("---------------------------------------------------- ");

for (i=0; i<n; i++)

{

printf("%ld | ", num[i]);

for (j=0; j<COURSE; j++)

{

printf("%4d ", score[i][j]);

}

printf("%5d %5.0f ", sum[i], aver[i]);

}

}


/* 函数功能:在学号数组中顺序查找学生的学号

函数参数:长整型数组num,存放学生学号

整型变量n,存放学生人数

长整型变量x,存放待查找学生的学号

函数返回值:找到时,返回学生学号在学号数组中的下标位置,否则返回值-1

*/

int Search(long num[], int n, long x)

{

int i;


for (i=0; i<n; i++)

{

if (num[i] == x) return(i);

}

return (-1);

}