用c语言解决数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言解决数组相关的知识,希望对你有一定的参考价值。
实验目的,
1.用数组结构存放10个学生各门功课的成绩(3门)
2.调用子函数,求每门总分。
3,调用子函数,统计每门功课的最高最低分。
4.调用子函数,求每门功课平均成绩和每个学生的平均成绩
不要捣乱,我急用
//
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <time.h>
//每个学生 的成绩
typedef struct _STU_SCORE
unsigned int uiScoreOne;
unsigned int uiScoreTwo;
unsigned int uiScoreThree;
STU_SCORE, *LPSTU_SCORE;
void CalcScores(STU_SCORE* ssScore);//计算每门总分
void GetMaxMinScore(STU_SCORE* ssScore);//每门功课的最高最低分。
void GetAvgScore(STU_SCORE* ssScore);//每门功课平均成绩和每个学生的平均成绩
//先输入学生成绩
void ScanfStuScore(STU_SCORE* ssScore)
for (int i = 0; i < 10; ++i)
srand((unsigned)time( NULL));
ssScore[i].uiScoreOne = rand()%100 + i * 5;
ssScore[i].uiScoreTwo = rand()%100 + i * 6;
ssScore[i].uiScoreThree = rand()%100 + i * 7;
//计算每门总分
void CalcScores(STU_SCORE* ssScore)
unsigned int uiOne = 0;
unsigned int uiTwo = 0;
unsigned int uiThree = 0;
for (int i = 0; i < 10; ++i)
uiOne += ssScore[i].uiScoreOne;
uiTwo += ssScore[i].uiScoreTwo;
uiThree += ssScore[i].uiScoreTwo;
printf("第一门成绩总分为%u\n第二门成绩总分为%u\n第三门成绩总分为%u\n",
uiOne, uiTwo, uiThree);
void CalcMaxMin(unsigned int uiScore[], unsigned int& uiMin, unsigned int& uiMax)
uiMin = uiMax = uiScore[0];
for (int i = 1; i < 10; ++i)
if (uiMin > uiScore[i])
uiMin = uiScore[i];
if (uiMax < uiScore[i])
uiMax = uiScore[i];
void CalcMaxMinScore(STU_SCORE* ssScore, unsigned int& uiMin, unsigned int& uiMax, unsigned int uiGrade)
switch (uiGrade)
case 1:
unsigned int uiOneScore[10] = 0;
for (int i = 0; i < 10; ++i)
uiOneScore[i] = ssScore[i].uiScoreOne;
CalcMaxMin(uiOneScore, uiMin, uiMax);
break;
case 2:
unsigned int uiTwoScore[10] = 0;
for (int i = 0; i < 10; ++i)
uiTwoScore[i] = ssScore[i].uiScoreTwo;
CalcMaxMin(uiTwoScore, uiMin, uiMax);
break;
case 3:
unsigned int uiThreeScore[10] = 0;
for (int i = 0; i < 10; ++i)
uiThreeScore[i] = ssScore[i].uiScoreThree;
CalcMaxMin(uiThreeScore, uiMin, uiMax);
break;
default:
break;
void GetMaxMinScore(STU_SCORE* ssScore)//每门功课的最高最低分。
unsigned int uiOneMin = 0, uiOneMax = 0;
unsigned int uiTwoMin = 0, uiTwoMax = 0;
unsigned int uiThreeMin = 0, uiThreeMax = 0;
//
CalcMaxMinScore(ssScore, uiOneMin, uiOneMax, 1);
CalcMaxMinScore(ssScore, uiTwoMin, uiTwoMax, 2);
CalcMaxMinScore(ssScore, uiThreeMin, uiThreeMax, 3);
printf("第一门功课的最高分为%u, 最低分为%u\n", uiOneMax, uiOneMin);
printf("第二门功课的最高分为%u, 最低分为%u\n", uiTwoMax, uiTwoMin);
printf("第三门功课的最高分为%u, 最低分为%u\n", uiThreeMax, uiThreeMin);
//每门功课平均成绩和每个学生的平均成绩
void GetAvgScore(STU_SCORE* ssScore)
unsigned int uiAvgOne = 0, uiAvgTwo = 0, uiAvgThree = 0;
for (int i = 0; i < 10; ++i)
uiAvgOne += ssScore[i].uiScoreOne;
uiAvgTwo += ssScore[i].uiScoreTwo;
uiAvgThree += ssScore[i].uiScoreThree;
printf("第一门功课的平均分为%u,第2门功课的平均分为%u,第3门功课的平均分为%u\n\n",
uiAvgOne /= 10,
uiAvgTwo /= 10,
uiAvgThree /= 10);
for (int i = 0; i < 10; ++i)
int iAvg = 0;
iAvg += ssScore[i].uiScoreOne;
iAvg += ssScore[i].uiScoreTwo;
iAvg += ssScore[i].uiScoreThree;
printf("第%d个学生的平均分为%u\n", i, iAvg / 3);
int _tmain(int argc, _TCHAR* argv[])
STU_SCORE ssScore[10] = 0;
ScanfStuScore(ssScore);//输入成绩,这里先自动生成一些
CalcScores(ssScore);//计算每门总分
printf("----------------------------------------\n");
GetMaxMinScore(ssScore);
printf("----------------------------------------\n");
GetAvgScore(ssScore);
system("pause");
return 0;
参考技术A 完整的
#include<stdio.h>
void TotalScoreOfEachSubject(float ob[][4])
int i;
float sum = 0;
printf("The total score is:\n");
for(i = 0; i < 10; i++)
sum += ob[i][0] + ob[i][1] + ob[i][2];
printf("%6.1f\n", sum);
void MaxAndMinOfEachSubject(float ob[][4])
int i, j;
float max, min;
for(i = 0; i < 3; i++)
min = max = ob[0][i];
for(j = 1; j < 10; j++)
if(max < ob[j][i])
max = ob[j][i];
if(min > ob[j][i])
min = ob[j][i];
if(!i)
printf("Chinese max and min:\n");
else if(i == 1)
printf("Math max and min:\n");
else
printf("English max and min:\n");
printf("%6.1f %6.1f\n", max, min);
void AveOfEachSubject(float ob[][4])
int i, j;
float sum;
for(i = 0; i < 3; i++)
sum = 0;
for(j = 0; j < 10; j++)
sum += ob[j][i];
if(!i)
printf("Chinese ave:\n");
else if(i == 1)
printf("Math ave:\n");
else
printf("English ave:\n");
printf("%6.1f\n", sum / 10);
void AveOfEachStudent(float ob[][4])
int i;
for(i = 0; i < 10; i++)
ob[i][3] = (ob[i][0] + ob[i][1] + ob[i][2]) / 3;
printf("Each student ave:\n");
for(i = 0; i < 10; i++)
printf("Num %d: %6.1f\n", i + 1, ob[i][3]);
int main()
int i;
float ob[10][4];
for(i = 0; i < 10; i++)
printf("The %d :\n", i + 1);
printf("Chinese score:");
scanf("%f", &ob[i][0]);
printf("Math score:");
scanf("%f", &ob[i][1]);
printf("English score:");
scanf("%f", &ob[i][2]);
TotalScoreOfEachSubject(ob);
MaxAndMinOfEachSubject(ob);
AveOfEachSubject(ob);
AveOfEachStudent(ob);
return 0;
参考技术B 伪代码
double stu[10][3]=....;
int i,j;
求每门总分:
double sum(double array[][])
double sum[3]=0,0,0;
for(i=0;i<3;i++)
for(j=0;j<10;j++)
sum[i]+=array[j][i];
return sum[3];
统计最高最低分:
最高分:
double max(double array[][])
double max[3];
for(i=0;i<3;i++)
for(j=0;j<9;j++)
if(array[i][j]>=array[i][j+1])
max[i]=array[i][j];
else max[i]==array[i][j+1];
return max[3];
现写的,大概就这样,剩下的照着写吧。有点仓促,希望能帮到你。 参考技术C 用二维数组a[10][3]存储 参考技术D #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
char name[10];
float s1;
float s2;
float s3;
stu[10],temp;
void main()
int i,j;
char ch,t[6];
for(i=0;i<10;i++)
printf("please input the data of student %d\n",i+1);
gets(stu[i].name);
gets(t);
stu[i].s1=atoi(t);
gets(t);
stu[i].s2=atoi(t);
gets(t);
stu[i].s3=atoi(t);
第5个回答 2012-05-02 这个太简单了噻~!
C语言申请内存?
我想知道这句申请内存的语句的意思怎么用?是什么意思?
int *p,n;
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
1
2
#include<stdio.h>
#include<stdlib.h>
int main(int arcv, char * argv[])
int arrLen;
char *array;
char c;
int i;
printf("please set the size of the len:\n");
scanf("%d", &arrLen);
array = (char *)malloc(arrLen*sizeof(char));
if(array == NULL)
printf("malloc fail\n");
return -1;
for(i = 0; i < arrLen;i++)
c = getchar();
array[i] =c;//*array++ =c;
for( i = 0; i < arrLen; i++)
printf("this array is %c\n", array[i]);
free(array);
return 0;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mallco和free成对出现,在用完申请的内存之后及时释放,否则会造成内存泄漏。
我们在一些项目中经常出现内存泄漏 参考技术A 如果c语言申请,但是它的内存的话可以清理掉,然后再重新的申请。 参考技术B #include
<stdio.h>
#include
<malloc.h>
void
main()
int
a=10;
int
p*;//定义了一个整数类型的指针
p=malloc(sizeof(int)*a);//分配40个字节的内存空间
*p=5;
*(p+1)=6;
//将分配的内存空间的前两个整数赋值为5和6
free(p);
//使用完之后释放内存空间
参考技术C 语言申请内存就是把语句说的清楚呃,游离让别人能听出来他这个什么意思?不能胡说乱说。 参考技术D 在C语言中,使用malloc函数来申请内存。函数原型如下:
#include<stdlib.h>
void *malloc(size_t size);
参数size代表需要动态申请的内存的字节数,若内存申请成功,函数返回申请到的内存的起始地址,若申请失败,返回NULL, 在使用该函数时应注意以下几点
1.只关心申请内存的大小,该函数的参数很简单,只有申请内存的大小,单位是字节
2.申请的是一块连续的内存,该函数一定是申请一块连续的区间,可能申请到内存比实际申请的大,但也有可能申请不到,若申请失败,则返回NULL
3.返回值类型是void*,函数的返回值是void*,不是某种具体类型的指针,可以理解成该函数只是申请内存,对在内存中存储什么类型的数据,没有要求,因此,返回值是void*,实际编程中,根据实际情况将void*转换成需要的指针类型
4.显示初始化,注意:堆区是不会自动在分配时做初始化的(包括清零),所以程序中需要显示的初始化
以上是关于用c语言解决数组的主要内容,如果未能解决你的问题,请参考以下文章