建立动态数组用来输入五个学生的成绩,另外用一个函数来判断有没有不及格的,并输出

建立动态数组用来输入五个学生的成绩,另外用一个函数来判断有没有不及格的,并输出

思路:
  •   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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微莱羽墨

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值