一、知识点
1、scanf()的返回值
scanf()返回值类型为int,返回转换成功的个数
有代码int temp; scanf("%d",&temp);
在屏幕输入一个数字,比如5,回车,scanf()返回1
在屏幕输入一个字符或字符串,比如h或helloworld,回车,scanf()返回0,表示转换失败
2、结束scanf()的不定数量读取
基于1,可以通过非法输入,结束scanf()的不定数量读取
3、数组不一定要先存储后处理
对数组的处理不一定需要把数组读完存储起来再处理,可以边读边处理,也就是说不一定需要存储数组
二、题目
1、描述
输入 n 个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
2、数据范围
1<= n <=50000;每个数都满足 |val|<=10^6
3、输入
输入任意个整数,每行输入一个
4、输出
输出负数个数以及所有非负数的平均值
三、自己写的代码
#include<stdio.h>
int main() {
int count_fu = 0, count_zheng = 0, temp;
float sum = 0;
while (scanf("%d", &temp) == 1) {
if (temp < 0) {
count_fu++;
} else {
sum += temp;
count_zheng++;
}
}
printf("%d\n", count_fu);
if (count_zheng == 0) {
printf("0.0\n");
} else {
sum = sum / count_zheng;
printf("%.1f\n", sum);
}
return 0;
}
四、测试
五、自己写的其他代码
和三的主要不同之处在于结束scanf()不定数量读取的判断条件
1、while(scanf()>0)
#include<stdio.h>
int main() {
int count_fu = 0, count_zheng = 0, temp;
float sum = 0;
while (scanf("%d", &temp) > 0) {
if (temp < 0) {
count_fu++;
} else {
sum += temp;
count_zheng++;
}
}
printf("%d\n", count_fu);
if (count_zheng == 0) {
printf("0.0\n");
} else {
sum = sum / count_zheng;
printf("%.1f\n", sum);
}
return 0;
}
2、while(scanf()!=EOF)
#include<stdio.h>
int main() {
int count_fu = 0, count_zheng = 0, temp;
float sum = 0;
while (scanf("%d", &temp) != EOF) {
if (temp < 0) {
count_fu++;
} else {
sum += temp;
count_zheng++;
}
}
printf("%d\n", count_fu);
if (count_zheng == 0) {
printf("0.0\n");
} else {
sum = sum / count_zheng;
printf("%.1f\n", sum);
}
return 0;
}
标签:count,zheng,HWOD,temp,记录,sum,正负数,printf,scanf
From: https://blog.csdn.net/zhg2546179328/article/details/137252958