#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n , m;
double a ,s=0 ,p=0;
cin >> n;
m=n;
for(n--)
{
cin >> a;
p+=a/m;
s+=a;
}
printf("%.0lf %.5lf\n",s,p);
return 0;
}
修改后效果图
源代码运行效果如图
修改过后的代码 如有帮助给个采纳谢谢
#include <iostream>
using namespace std;
int main() {
int n, m;
double a, s = 0, p = 0;
cin >> n;
m = n;
while (n--) {
cin >> a;
p += a / m;
s += a;
}
cout.precision(0);
cout << fixed << s << " " << p << endl;
return 0;
}
// #include <iostream>
// using namespace std;
// int main() {
// int n, m;
// double a, s = 0, p = 0;
// cin >> n;
// m = n;
// while (n--) {
// cin >> a;
// p += a / m;
// s += a;
// }
// printf("%.0lf %.5lf\n", s, p);
// return 0;
// }
可以写cout,cout里也有控制格式的代码,但是比较复杂,不像printf这样传一个格式化字符串
x86平台VC6.0编译器中,stdarg.h头文件内变参宏定义如下,本次实现也printf函数也采用此定义:
变参宏根据堆栈生长方向和参数入栈特点,从最靠近第一个可变参数的固定参数开始,依次获取每个可变参数的地址。
typedef char * va_list;
#define _INTSIZEOF(n) ( (sizeof(n)+sizeof(int)-1) & ~(sizeof(int)-1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap, type) ( *(type *)((ap += _INTSIZEOF(type)) - _INTSIZEOF(type)) )
#define va_end(ap) ( ap = (va_list)0 )
各宏的含义如下:
①_INTSIZEOF
宏考虑到某些系统需要内存地址对齐。从宏名看应按照sizeof(int)即堆栈粒度对齐,即参数在内存中的地址均为sizeof(int)=4的倍数。例如,若在1≤sizeof(n)≤4,则_INTSIZEOF(n)=4;若5≤sizeof(n)≤8,则_INTSIZEOF(n)=8。
为便于理解,简化该宏为:
#define _INTSIZEOF(n) ((sizeof(n) + x) & ~(x))
x = sizeof(int) - 1 = 3 = 0b’0000 0000 0000 0011
~x = 0b’1111 1111 1111 1100
一个数与(~x)相与的结果是sizeof(int)的倍数,即_INTSIZEOF(n)将n圆整为sizeof(int)的倍数。
② va_start宏根据(va_list)&v得到第一个可变参数前的一个固定参数在堆栈中的内存地址,加上_INTSIZEOF(v)即v所占内存大小后,使ap指向固定参数后下个参数(第一个可变参数地址)。
固定参数的地址用于va_start宏,因此不能声明为寄存器变量(地址无效)或作为数组类型(长度难定)。
③va_arg宏取得type类型的可变参数值。首先ap+=_INTSIZEOF(type),即ap跳过当前可变参数而指向下个变参的地址;然后ap-_INTSIZEOF(type)得到当前变参的内存地址,类型转换后返回当前变参值。
va_arg宏的等效实现如下:
#define va_arg(ap,t) (ap = ap + _INTSIZEOF(t), *(t *)(ap - _INTSIZEOF(t)))
④va_end宏使ap指针指向空,防止野指针
要实现与printf相同的输出效果,可以使用cout和<<运算符来代替printf函数。以下是一个示例代码:
#include <iostream>
using namespace std;
int main() {
int a = 3;
cout << "a的值是" << a << endl;
int a1 = 1;
int a2 = 10;
int a3 = 100;
cout << "The result is " << a1 << endl;
cout << "The result is " << setw(3) << a1 << endl;
cout << "The result is " << setw(3) << a2 << endl;
cout << "The result is " << setw(3) << a3 << endl;
float b = 2.01;
cout << "The result is " << b << endl;
cout << "The result is " << fixed << setprecision(3) << b << endl;
double c = 5.01;
cout << "The result is " << c << endl;
cout << "The result is " << fixed << setprecision(3) << c << endl;
return 0;
}
这段代码使用了cout和<<运算符来进行输出,使用了iomanip库来设置输出格式。可以通过设置setw来控制整数输出的宽度,通过设置fixed和setprecision来保留小数的位数。
需要注意的是,要使用cout和相关的功能,必须在代码文件的开头引入iostream和iomanip头文件,并且在使用cout之前加上using namespace std;语句,以便使用std命名空间中的cout函数。
希望以上代码能够解决您的问题。如果还有其他疑问,请随时提问。