C语言:数组与指针实践项目
2017-08-16 18:15
253 查看
任务代码:
【项目1-反转数组】
下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。
同上:
【项目2:成绩处理函数版】
执行情况:
项目1:
项目2:
心得体会:
记住数组作为 实际参数传递时,只能使用数组名作为实际参数,而不能用带[]的数组!
【项目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:
心得体会:
记住数组作为 实际参数传递时,只能使用数组名作为实际参数,而不能用带[]的数组!
相关文章推荐
- 《C语言及程序设计》实践项目——数组与指针
- 第14周 《C语言及程序设计》实践项目——数组与指针
- 《C语言及程序设计》实践项目——二维数组与指针
- 程序设计基石与实践之C语言指针和数组基础
- 《C语言及程序设计》实践项目——字符数组与字符串处理
- 《C语言及程序设计》实践项目——指针及其运算
- 《C语言及程序设计》实践项目——字符串数组
- C++程序设计-第16周字符数组及指针上机实践项目
- 第1周 《C语言及程序设计》实践项目1——指针及其运算
- 《C语言及程序设计》实践项目——动态数组 ->【项目2-动态数组排序】
- 《C语言及程序设计》实践项目——数组与函数应用
- 《C语言及程序设计》实践项目——动态数组 ->【项目1-学生人数没个准】
- 《C语言及程序设计》实践项目——动态数组 ->【项目3-为动态数组扩容】
- C语言学习大纲--数组与指针
- 第三周上机实践项目5——数组作数据成员
- C语言中字符数组和字符串指针分析
- C语言 通过指针,数组名 遍历一位数组
- c语言 指针数组 数组指针
- C语言指针详述(2):数组与指针
- 《C语言及程序设计》实践项目——数值型数据的存储原理