问题描述
设计函数求一元多项式的导数。
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
输入样例: 3 4 -5 2 6 1 -2 0
输出样例: 12 3 -10 1 6 0
code
#include<stdio.h>
int main()
{
int a[1000]={0};
int i=0;
do
scanf("%d",&a[i++]);
while(getchar()!='\n');
int j;
for(j=0;j<i;j+=2)
{
if(a[j+1]!=0)
{
if(j!=i-2) printf("%d %d ",a[j]*a[j+1],a[j+1]-1);
else printf("%d %d",a[j]*a[j+1],a[j+1]-1);
}
}
return 0;
}
对scanf函数的进一步认识
1.scanf函数的原型
int scanf(char const *format,…)
scanf从标准输入stdin读取格式化字符串,当字符串到达末尾或者读取的输入不再匹配格式字符串所指定的类型,输入就停止。在任何一种情况下被转换的输入值的数目作为函数的返回值返回。
2.scanf函数的format参数:”d%d\t \n”
空白字符:
空白字符为(空格、跳格键(TAB)、回车键),它们与输入中任意的一种或者多种空白字符串匹配,空白字符被从缓冲区中读取出来并作丢弃处理,一直读取到非 空白字符为止。scanf(“%d\t\n”) 则输入一个数字后,再输入多个空格回车等空格键后然提示输入,那么直到输入其他字符并遇到\n或EOF为止。
格式代码:
它们指定函数如何解释输入的字符。
其他字符:
当任何其他的字符出现在格式代码字符串中,输入字符必须与它匹配。如果不匹配,将不再读取,直接返回,同时将此不匹配字符继续保存在缓冲区中。
对于有多个格式字符读取的(eg:scanf(“%d%d”,%m,%n)),匹配完第一个格式字符输入,如果不符合则第一个格式字符对应的第一个变量未读取任何输入,则保持原值,而输入继续匹配余下的格式字符直到所有的格式字符均已做出匹配为止。其中在匹配开始就遇到不符合格式字符的空白字符均作丢弃处理,不再保留在缓冲区。
3.返回值
int ,成功读取到格式代码值个数。
4.举例说明
gets遇到EOF或者\n停止读取,并将\n或者、EOF转换为’\0’。printf函数对%s输出也是遇到’\0’停止输出。
在对应格式的输入中,表示整体输入结束,都要enter,也就是’\n’来表示输入终止,可以用getchar()或者gets获取。
5.再说一点不相关的
scanf(“%d%d”,&a[i++],%a[i++]);
不同的编译器执行的顺序不同,有可能从右到左,一般对于有副作用的i++等分开来写。先后输入1,2,可能对应的是2,1。
scanf(“%s”,&a[i++]);
scanf(“%s”,&a[i++]);