临沂做网站的,做app封装的网站,成都seo优化推广,杭州免费网站建设一、题目
设计函数求一元多项式的导数。#xff08;注#xff1a;Xn#xff08;n为整数#xff09;的一阶导数为nXn−1。#xff09;输入格式:
以指数递降方式输入多项式非零项系数和指数#xff08;绝对值均为不超过 1000 的整数#xff09;。数字间以空格分隔。输出…一、题目
设计函数求一元多项式的导数。注Xnn为整数的一阶导数为nXn−1。输入格式:
以指数递降方式输入多项式非零项系数和指数绝对值均为不超过 1000 的整数。数字间以空格分隔。输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0但是表示为 0 0。输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0二、代码
方法一、存入数组再处理法
核心函数
判断何时输入结束问题 1如果数中 包含负数包含负号和整数两个字符、空格、换行用char数组存储如果遇到换行符后结束输入是不行的因为这样负数没办法转化所以要换种思路 2由于它在输入的时候第一个是整数第二个是字符所以我们每次输入时候第一个用整形数组赋值第二个用char赋值判断char是不是换行符来结束输入 分析 1输入的数据每两个为一组所以是i2之后进行处理就行 int a int_num[i] * int_num[i1]; int b int_num[i1] - 1; 但是当a为零了要将数组个数减2 2要特殊处理零特征多项式 就是常数。 只要b等于零 就直接输出0 0 易错点
#include iostream
#include stdio.h
using namespace std;int qiudao(int int_num[], int n) {for(int i0; in; i2) {int a int_num[i] * int_num[i1];int b int_num[i1] - 1;if(a ! 0) {int_num[i] a;int_num[i1] b;}else {n n - 2;}}return 0;}int main() {int num[1000];int i 0, j, k0;int temp;char c;while(cin temp) {if(temp 1000) {return 0;}num[i] temp;c getchar();if(c \n) {break; }}if(num[0] 0 || num[1] 0) {cout0 0;}else {qiudao(num, i);for(j0; ji; j) {if( j! i-1){coutnum[j] ;}else {coutnum[j];}}}return 0;
}方法二、不存入直接处理法
核心函数
不存储直接按照两个一组来处理。 cinab 如果遇到空格就会根据a、b的类型进行输入赋值。像本题压根不处理空格 while(cinab)见后面附录
分析
用x来控制是不是零多项式 如果是直接跳出循环直接输出如果不是则将x变为0 这样就会正常输出 空格
#include iostream
using namespace std;int main(){int a,b;int x 1;while(cinab){if(b 0)break;if(!x)cout ;elsex 0;cout a*b b-1;}if(x)cout 0 0;return 0;
}
关于C中while(cina)
cin是输入操作符cina的过程是先取得从键盘的输入值a并将a赋给cin因此while(cina)的意思就是只要输入的值有效那么就执行while体内的语句。
实例设计如下
1、统计输入连续数字的个数while循环结束 跳出流对象的时候打印最后一个数 。通过检测其流的状态来判断结束
1若流是有效的即流未遇到错误那么检测成功。
2若遇到文件结束符或遇到一个无效的输入时例如本题输入的值不是一个整数istream对象的状态会变为无效条件就为假。