您的位置:首页 > 编程语言 > C语言/C++

C语言:数组与指针实践项目

2017-08-16 18:15 253 查看
任务代码:

【项目1-反转数组】

下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。

#include <stdio.h>

void reverse(int array[],int);//函数的声明使用指针

int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
reverse(a, 10);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}

void reverse(int array[],int n)
{
int i,t;
for(i=0;i<n/2;i++)//使用了反转的对称性,a[9]与a[0]交换,a[8]与a[1]交换,直到a[5]时交换完毕
{
t=array[i];
array[i]=array[n-i-1];
array[n-i-1]=t;
}
}


同上:
#include <stdio.h>

void reverse(int *,int);//函数的声明使用指针

int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
reverse(a, 10);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}

void reverse(int *p,int n)
{
int i,t;
for(i=0;i<n/2;i++)//使用了反转的对称性,a[9]与a[0]交换,a[8]与a[1]交换,直到a[5]时交换完毕
{
t=*(p+i);
*(p+i)=*(p+n-i-1);
*(p+n-i-1)=t;
}
}


【项目2:成绩处理函数版】



//
//  main.c
//  test
//
//  Created by 张子蔚 on 2017/8/14.
//  Copyright © 2017年 张子蔚. All rights reserved.
//

#include <stdio.h>
#include <math.h>

void input_score(int s[], int n); //将小组中n名同学的成绩输入数组s
int get_max_score(int s[], int n);  //返回数组s中n名同学的最高成绩值
int get_min_score(int s[], int n);  //返回数组s中n名同学的最低成绩值
double get_avg_score(int s[], int n);  //返回数组s中n名同学的平均成绩值
double get_stdev_score(int s[], int n); //返回数组s中n名同学成绩值的标准偏差
int count(int x, int s[], int n);  //返回在数组s中n名同学中有多少人得x分(实参给出最高/低时,可以求最高/低成绩的人数)
void output_index(int x, int s[], int n); //在函数中输出数组s中n名同学中得x分的学号(下标)

int main( )
{
int score[50]; //将score设为局部变量,通过数组名作函数参数,传递数组首地址,在函数中操作数组
int num;       //小组人数也设为局部变量,将作为函数的实际参数
int max_score,min_score;
printf("小组共有多少名同学? ");
scanf("%d", &num);
printf("请输入学生成绩:\n");
input_score(score, num);  //要求成绩在0-100之间
max_score=get_max_score(score, num);
printf("最高成绩为:%d,共有 %d 人\n", max_score, count(max_score, score, num ));
min_score=get_min_score(score, num);
printf("最低成绩为:%d,共有 %d 人\n", min_score, count(min_score,score, num ));
printf("平均成绩为:%.2f\n", get_avg_score(score, num));
printf("标准偏差为:%.2f\n",get_stdev_score(score, num));
printf("获最高成绩的学生(学号)有:");
output_index(max_score,score, num);
printf("\n获最低成绩的学生(学号)有:");
output_index(min_score,score, num);
printf("\n");
return 0;
}

void input_score(int s[],int n)
{
int i;
int iMark;
for(i=0;i<n;i++)
{

do
{
printf("请输入第%d位同学的成绩:",i+1);
scanf("%d",&iMark);
}while(iMark<0||iMark>100);//判断是否属输入的成绩在规定的0-100之间

s[i]=iMark;
}
}

int get_max_score(int s[], int n)
{
int max=-1;
int i;
for(i=0;i<n;i++)
{
if(s[i]>max)
{
max=s[i];
}
}
return max;
}

int get_min_score(int s[], int n)
{
int min=101;
int i;
for(i=0;i<n;i++)
{
if(s[i]<min)
{
min=s[i];
}
}
return min;
}

double get_avg_score(int s[], int n)
{
int sum=0;
double aver;
int i;
for(i=0;i<n;i++)
{
sum+=s[i];
}

aver=sum/n;
return aver;
}

double get_stdev_score(int s[], int n)
{
double sum=0,result;
int i;
double aver;
aver=get_avg_score(s,n);  //注意这里是s不是s[],因为这里的s数组是作为实际参数,因此是以函数名作为实际参数!
for(i=0;i<n;i++)
{
sum+=pow((s[i]-aver),2);
}
result=sqrt(sum/(n-1));
return result;
}

int count(int x, int s[], int n)
{
int count=0,i;
for(i=0;i<n;i++)
{
if(s[i]==x)
{
count++;
}
}
return count;
}

void output_index(int x, int s[], int n)
{
int i;
for(i=0;i<n;i++)
{
if(s[i]==x)
{
printf("%d ",i);
}
}
}


执行情况:

项目1:



项目2:



心得体会:

记住数组作为 实际参数传递时,只能使用数组名作为实际参数,而不能用带[]的数组!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: