题目描述
找找谁的身高超过全家的平均身高。全家n口人,输入输出数据如下: (平均身高保留一位小数)
输入
第一行有一个整数n( 1 < n < 11 )。第二行是n个整数代表全家人的身高,用空格隔开。
输出
第一行为全家的平均身高(保留一位小数);第二行有若干个数,为超过平均身高的人的身高厘米数。
样例输入
7
175 160 172 158 178 162 142
样例输出
163.9
175 172 178
C++ 中的 printf 输出详解
在 C++ 中,printf 是一个非常常用的函数,用于格式化输出。它源自 C 语言的标准库,但在 C++ 中仍然可以使用,尤其是在需要与 C 代码兼容或更高效的输出时。
1. printf 的头文件
为了使用 printf 函数,需要包含 C 标准 I/O 库的头文件 stdio.h。在 C++ 中,我们可以继续使用这个头文件:
2. 基本用法
printf 函数用于将格式化的字符串输出到标准输出(通常是控制台)。它的基本语法如下:
printf(“format string”, arguments…);
“format string”: 格式化字符串,包含要输出的文本及格式说明符。
arguments: 可选参数,与格式说明符对应的实际值。
3. 格式说明符
printf 使用格式说明符(placeholders)来指定不同类型的变量输出方式。以下是一些常见的格式说明符:
%d: 输出整数类型 (int)。
%f: 输出浮点数 (float 或 double)。
%c: 输出单个字符。
%s: 输出字符串(字符数组)。
%x: 输出整数的十六进制表示。
%p: 输出指针地址。
示例代码
#include <stdio.h>
int main() {
int num = 42;
float pi = 3.14;
char ch = 'A';
const char* str = "Hello, World!";
printf("整数: %d\n", num);
printf("浮点数: %f\n", pi);
printf("字符: %c\n", ch);
printf("字符串: %s\n", str);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
运行运行
输出结果:
整数: 42
浮点数: 3.140000
字符: A
字符串: Hello, World!
1
2
3
4
4. 格式化输出的高级用法
除了基本用法外,printf 还支持各种格式化选项来控制输出的宽度、精度、对齐方式等。
4.1. 控制输出宽度
int main() {
int num = 42;
printf(“宽度为5的整数: [%5d]\n”, num);
printf(“宽度为3的整数: [%3d]\n”, num);
return 0;
}
1
2
3
4
5
6
AI助手
输出结果:
宽度为5的整数: [ 42]
宽度为3的整数: [ 42]
1
2
AI助手
4.2. 设置浮点数精度
int main() {
float pi = 3.14159;
printf(“默认精度: %f\n”, pi);
printf(“保留两位小数: %.2f\n”, pi);
return 0;
}
1
2
3
4
5
6
AI助手
输出结果:
默认精度: 3.141590
保留两位小数: 3.14
1
2
AI助手
4.3. 左对齐与右对齐
默认情况下,printf 的输出是右对齐的。可以使用 - 标志来左对齐输出:
int main() {
int num = 42;
printf(“右对齐: [%5d]\n”, num);
printf(“左对齐: [%-5d]\n”, num);
return 0;
}
1
2
3
4
5
6
AI助手
输出结果:
右对齐: [ 42]
左对齐: [42 ]
1
2
AI助手
5. 注意事项
printf 的强类型要求: printf 不会进行类型检查,因此使用不正确的格式说明符可能会导致未定义行为。例如,如果你尝试使用 %d 来输出一个 float,程序可能会崩溃或输出不正确的结果。
安全性问题: printf 是不安全的,尤其是在处理用户输入的字符串时,可能会导致格式化字符串漏洞。在 C++ 中,建议尽量使用 std::cout 代替 printf,除非有特殊需要。
#include <iostream>
using namespace std;
int main()
{
int n,i,a[11];
float pj=0.0,sum=0.0;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
sum=sum+a[i];
}
pj=sum/n;
printf("%.1f\n",pj);
for(i=0;i<n;i++){
if(a[i]>pj) cout<<a[i]<<" ";
}
return 0;
}