题目:
设计函数求一元多项式的导数。(注:x
n
(n为整数)的一阶导数为nx
n−1
。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
分析
根据数学知识可知,仅只有常数的时候才会输出0 0;故要通过一个状态量来判断是否仅为一个常数
代码(用while)
#include<stdio.h>
int main(){
int m,n;
// 分别代表系数和指数
char ch;
// 检测是否结束
int flag=1;
// 设置标志来控制输出末尾无空格
while(1){
scanf("%d%d",&m,&n);
// 输入系数和指数
if(n!=0){
// 表明不是常数
if(flag){
// 表明输出的是第一个
printf("%d %d",m*n,n-1);
flag=0;
}
else{
printf(" %d %d",m*n,n-1);
}
}
ch=getchar();
// 读取字符
if(ch=='\n'){
// 判断是否输入结束
break;
}
}
if(n==0&&flag){
// 判断是否仅为常数
printf("0 0");
}
printf("\n");
}
代码
用
do{
}while();
#include<stdio.h>
int main()
{
int m,n;//m表示系数,n为指数
int flag=0;//设置标志
char ch;
do{
scanf("%d%d",&m,&n);
if(n!=0)//不是常数的时候
{
if(!flag)//通过flag来处理末尾无空格的情况
{
printf("%d %d",m*n,n-1);
flag=1;
}
else
{
printf(" %d %d",m*n,n-1);
}
}
ch=getchar();//'\n'也是字符
}while(ch!='\n');//注意不要丢到了分号;
if(n==0&&!flag)//仅有常数时求导才会为0
{
printf("0 0");
}
printf("\n");
}