建立动态数组用来输入五个学生的成绩,另外用一个函数来判断有没有不及格的,并输出
思路:
-
1.先写函数check用来检查有没有不及格的,注意:参数类型是指针变量
-
2.在组函数中用malloc函数开辟一个动态数组,用来存放学生的成绩,得到的是动态区域第一个字节的地址,它的基类型是void类型
-
3.用一个指针变量指向动态数组的各个元素,用p1+i,再输出这些元素的值
代码:
#include <stdlib.h>
void check(int *p); //函数声明
int main(){
int *p1,i; //实参要与p有区分
p1 = (int *)malloc(5* sizeof(int)); //malloc函数是空类型的所以需要类型转换成int*类型,再赋给p,也可以不写,系统自动转换,但是这样更规范
printf("please input five score:\n");
for (i = 0; i <5; i++)
scanf("%d",p1+i); //输入学生的成绩
check(p1); //调用check函数
return 0;
}
void check(int *p){ //定义一个函数,形式参数是指针变量
int i;
printf("not pass are:\n");
for ( i = 0; i<5; i++)
if (p[i]<60)printf("%3d",p[i]);
}
结果:
45,78,43,67,99
not pass are:
45
Process finished with exit code 0
问题:为什么最后只有第一个元素的地址传到形参中?如果第一个数是大于60的就没有输出任何结果?
原因:输入数字的时候格式错误,要空格隔开,默认情况下。否则系统认为遇到逗号结束
scanf输入数据的时候一定要空格隔开(本题中是"%d",如果“%d,%d"输入的就要有逗号)在对应的位置上输入格式同样的字符。
修改之后的
88 45 23 13 80
not pass are:
45 23 13
Process finished with exit code 0