~scanf()简析

九度做题的时候遇到好多循环输入,while(~scanf("%d",&n))简析


#include <stdio.h>

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		printf("%d\n",n);
	}
	return 0;
}

EOF

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以 字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。

while(~scanf("%d",&n))

<=>  while(scanf("%d",&n)!=EOF)


1.正常输入的时候,scanf返回输入的数字如1,2,3等等,对这些数字取非,不会成为0,就会执行循环;


2.错误输入指的就是没有输入的时候,scanf返回的是EOF(End Of File),EOF=-1,对EOF取非,就是对-1取非

[~是位运算,它是将数据在内存中的每一位(当然是二进制)取反。-1在内存中所有位全部为1,~(-1)=0,即对-1取非就是0]

就会跳出循环。


。函数接口定义: double f( int n, double a[], double x ); 其中给定阶数为n,系数为a[0] ... a[n],给出x,函数返回f(x)的值。 裁判测试程序样例: #include <stdio.h> #define MAXN 10 double f( int n, double a[], double x ); int main() { int n, i; double a[MAXN], x; scanf("%d %lf", &n, &x); for ( i=0; i<=n; i++ ) scanf("%lf", &a[i]); printf("%.1f\n", f(n, a, x)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 2 1.1 1 2.5 -38.7 输出样例: -35.0 输入样例: 3 -1.5 0 0 0 -1 输出样例: -1.0 【题目简析】 此题目为多项式函数拟合。 多项式函数拟合是一种数学方法,用来拟合一组数据点,从而得到一个多项式函数,这个函数可以用来预测新的数据点。 多项式函数的一般形式:f(x)=a0+a1x+a2x2+...+anxn 其中,a0,a1,a2,...,an是系数,而x是变量。 对于简单情况,通常使用一次函数,即f(x)=a0+a1x,对于复杂情况,可以使用2次函数、3次函数甚至更高阶函数。 【解题思路】 此题目要求我们实现一个多项式函数的计算,即给出一个多项式的系数和阶数,再给出一个x值,我们需要计算出该多项式在x值处的值。 简单来说,可以用for循环依次计算每个系数和x的乘积,再将结果累加起来即可。 伪代码如下: double f( int n, double a[], double x ) { double res = 0; for (int i = 0; i <= n; i++) { res += a[i] * pow(x, i); } return res; } 【注意事项】 1.在计算幂时,可以使用pow函数,该函数的头文件为<math.h>,用法如下: double pow(double x, double y); 其中,x是底数,y是指数,函数的返回值是x的y次方。 2.在计算系数和幂的乘积时,可以直接使用乘号*,将系数和幂相乘即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值