网站做换肤,做网站点击挣钱不,公司网站注意事项,南宁专业网站建设公司本文结合PTA专项练习带领读者掌握循环结构#xff0c;刷题为主注释为辅#xff0c;在代码中理解思路#xff0c;其它不做过多叙述。 7-1 二分法求多项式单根
二分法求函数根的原理为#xff1a;如果连续函数f(x)在区间[a,b]的两个端点取值异号#xff0c;即f(a)f(b)0… 本文结合PTA专项练习带领读者掌握循环结构刷题为主注释为辅在代码中理解思路其它不做过多叙述。 7-1 二分法求多项式单根
二分法求函数根的原理为如果连续函数f(x)在区间[a,b]的两个端点取值异号即f(a)f(b)0则它在这个区间内至少存在1个根r即f®0。
二分法的步骤为
检查区间长度如果小于给定阈值则停止输出区间中点(ab)/2否则如果f(a)f(b)0则计算中点的值f((ab)/2)如果f((ab)/2)正好为0则(ab)/2就是要求的根否则如果f((ab)/2)与f(a)同号则说明根在区间[(ab)/2,b]令a(ab)/2重复循环如果f((ab)/2)与f(b)同号则说明根在区间[a,(ab)/2]令b(ab)/2重复循环。
本题目要求编写程序计算给定3阶多项式f(x)a3x3a2x2a1xa0在给定区间[a,b]内的根。
输入格式
输入在第1行中顺序给出多项式的4个系数a3、a2、a1、a0在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。
输出格式
在一行中输出该多项式在该区间内的根精确到小数点后2位。
输入样例
3 -1 -3 1
-0.5 0.5输出样例
0.33#include stdio.h
double a3, a2, a1, a0; double f(double x)
{ double result; resulta3*x*x*xa2*x*xa1*xa0; return result;
}int main()
{ double a, b; scanf(%lf%lf%lf%lf,a3,a2,a1,a0); scanf(%lf%lf,a,b); double left,mid,right; lefta; rightb; ///大于阈值时使用二分法求出单根程序结束while(right-left0.001f(left)*f(right)0) { if(f(left)0) { printf(%.2f,left); return 0; } if(f(right)0) { printf(%.2f,right); return 0; } mid(leftright)/2; if (f(mid)*f(left)0) { leftmid; } else //由于先决条件为f(left)*f(right)0因此此时else语句等价于f(mid)与f(left)异号即与f(right)同号{ rightmid; } } 不大于阈值时输出中点printf(%.2f,mid); return 0;
} 7-2 循环-十进制转化
小白龙新学了十进制的转换。现在他想把十进制数转化成其他进制的数聪明的学弟学 妹们能帮帮他吗因为小白龙还没有学习到数组所以他希望这道题能够不用数组的相关知 识就可以解决。
输入格式:
输入只有两个整数N,M。 N ( 0 N 100 ) 表示十进制数N。M 2 M 9 表示转换成M进制。
输出格式:
将N转化为M进制后然后输出。
输入样例:
在这里给出一组输入。例如
50 4输出样例:
在这里给出相应的输出。例如
302//题目暗示数组可以实现
#include stdio.hint main() {int n,m,a[100],i0;scanf(%d%d,n,m);while(n){a[i] n%m; //从a[0]开始赋值n/m;}while(i--){//逆序输出printf(%d,a[i]);}
}7-3 梅森数
形如2n−1的素数称为梅森数Mersenne Number。例如2^2−13、23−17都是梅森数。1722年双目失明的瑞士数学大师欧拉证明了231−12147483647是一个素数堪称当时世界上“已知最大素数”的一个记录。
本题要求编写程序对任一正整数nn20输出所有不超过2n−1的梅森数。
输入格式
输入在一行中给出正整数nn20。
输出格式
按从小到大的顺序输出所有不超过2n−1的梅森数每行一个。如果完全没有则输出“None”。
输入样例
6输出样例
3
7
31#include stdio.h
#include math.hint f(int x)//判断素数的函数
{for(int i2;isqrt(x);i){if(x%i0)return 0;//不是素数则返回0}return 1;
}int main()
{int n;scanf(%d,n);if(n1)//n1时一定不存在梅森数printf(None); else//n2时一定存在梅森数{for(int i2;in;i){//对每一个2^i进行素数的判断int apow(2,i)-1;if(f(a)){printf(%d\n,a);}}}
}7-4 单词长度
你的程序要读入一行文本其中以空格分隔为若干个单词以.结束。你要输出每个单词的长度。这里的单词与语言无关可以包括各种符号比如its算一个单词长度为4。注意行中可能出现连续的空格最后的.不计算在内。
输入格式
输入在一行中给出一行文本以.结束
**提示**用scanf(%c,...);来读入一个字符直到读到.为止。
输出格式
在一行中输出这行文本对应的单词的长度每个长度之间以空格隔开行末没有最后的空格。
输入样例
Its great to see you here.输出样例
4 5 2 3 3 4如果题目要求不能出现连续的空格以下代码是可行的
#include stdio.h
int main()
{char c;int a0;while((cgetchar())!.){if(c ){printf(%d ,a);a0;}elsea;}printf(%d,a);
}但行中可能出现连续的空格所以需要用一个标志变量来跟踪当前是否处于单词中的状态。
逻辑如下
设count用于统计某单词的字符个数mark用于标记是否遇到第一个空格sum用于记录已经输出的单词个数。
如果当前字符不是空格则将count加1
如果当前字符是空格并且count大于0表示遇到一个单词的结束。如果mark大于0说明不是第一个单词先输出一个空格。输出统计得到的单词字符个数count。将sum加1表示已经输出一个单词。将count重置为0开始统计下一个单词的字符个数。将mark加1表示已经遇到第一个空格。
循环结束后判断最后一个单词是否有字符如果有且sum大于0输出最后一个单词的字符个数。拿Its great to see you here.举例
初始状态
count 0sum 0mark 0
字符 ‘I’:
count 1
字符 ‘t’:
count 2
字符 ‘’:
count 3
字符 ‘s’:
count 4
字符 ’ :
输出4 sgn1 cnt 0 mark 1
字符 ‘g’:
cnt 1
字符 ‘r’:
cnt 2
字符 ‘e’:
cnt 3
字符 ‘a’:
cnt 4
字符 ‘t’:
cnt 5
字符 ’ :
输出空格再输出5 sgn2 cnt 0 mark 2
字符 ‘t’:
cnt 1
字符 ‘o’:
cnt 2
字符 ’ :
输出空格再输出2 sgn3 cnt 0 mark 3
字符 ‘s’:
cnt 1
字符 ‘e’:
cnt 2
字符 ‘e’:
cnt 3
字符 ’ :
输出空格再输出3 sgn4 cnt 0 mark 4
字符 ‘y’:
cnt 1
字符 ‘o’:
cnt 2
字符 ‘u’:
cnt 3
字符 ’ :
输出空格再输出3 sgn5 cnt 0 mark 5
字符 ‘h’:
cnt 1
字符 ‘e’:
cnt 2
字符 ‘r’:
cnt 3
字符 ‘e’:
cnt 4
字符 ‘.’:
此时cnt 0 sgn 0输出4
最终程序输出的结果是4 5 2 3 3 4
#include stdio.hint main()
{char c;int count0,mark0,sum0;while((cgetchar())!.){if(c! )count;else if(c count0){if(mark0){printf( );}printf(%d,count);sum;count0;mark;}}if(count0sum0){printf( %d,count);}else if(count0sum0){printf(%d,count);}return 0;
}7-5 21循环-求和3
sxtc爱做数学题今天他又拿到一道数学题 注意答案有可能很大请对114514取模。
他希望擅长求和的你帮他解出这个求和问题。
输入格式:
读入两个数n,k。
输出格式:
输出求和结果请对答案取模114514。
输入样例:
在这里给出一组输入。例如
11451 4输出样例:
在这里给出相应的输出。例如
113968思路
1.使用两个嵌套的for循环外层循环控制1到n的遍历内层循环控制1到k的遍历。
2.在内层循环中每次将total乘以当前外层循环的迭代变量i并取结果对114514取模%。
3.在外层循环中将计算得到的total累加到sum上并将结果对114514取模再重新将total置为1。
#include stdio.h
int main() {int n, k;scanf(%d%d, n, k);int total1;int sum0;for (int i1;in;i) {for (int j1;jk;j) {total(total*i)%114514;}sum (sumtotal)%114514;total1;}printf(%d, sum);
}7-6 21循环-金字塔
SeraphJACK正在摆积木。他想用这些积木垒成一座金字塔。同时摆好金字塔之后他为每层积木涂上不同的颜色这些颜色用从1开始的正整数表示从最底层开始涂色。现在告诉你SeraphJACK有n块积木请输出他用这些积木能摆出并涂色的最大金字塔。金字塔形状详见样例,0表示这个位置没有积木
输入格式:
一个整数n,1n1000
输出格式:
涂色后的金字塔
输入样例1:
在这里给出一组输入。例如
11输出样例1:
在这里给出相应的输出。例如
0004000
0030300
0202020
1010101输入样例2:
在这里给出一组输入。例如
1输出样例2:
在这里给出相应的输出。例如
1#includestdio.h
int main()
{int sum,n,c1,d;scanf(%d,sum);for(n1;n*(n1)/2sum;n);while(c(n-1))//外层循环控制层数{d1;while(d2*n-3)//内层循环控制涂色及编号{if(d(n-1-c)||dn-2c)printf(0);//如果位置d小于等于(n-1-c)或者大于n-2c则打印0。else if((d-n1c)%21)printf(%d,n-c);//否则如果(d-n1c)除以2的余数为1则打印n-c表示涂上对应颜色的编号。else printf(0);//否则打印0。d;}printf(\n);c;}return 0;
}7-7 循环-杨辉三角
Little VayH_E带着他的小伙伴玩起了杨辉三角的游戏… 输入格式:
输入包含两个正整数n和m(1n,m20)两个数之间用空格分开。
输出格式:
输出杨辉三角的第n行与第m行之间包含第nm行的部分输出时注意
倒数第一行的第一个数字前有0个空格…倒数第k行如果有的话的第一个数字前有k-1个空格…以此类推
每一行的每两个数字如果有的话之间有1个空格
每一行的最后一个数字后没有空格在每一行的最后一个数字后输出一个换行符
对于所求的杨辉三角每一个数字都只取最后一位例如若所求的杨辉三角上某个数字为10则应输出0
输入样例:
在这里给出一组输入。例如
1 4输出样例:
在这里给出相应的输出。例如 11 11 2 1
1 3 3 1#include stdio.h
int main()
{long int n,m,i,k,a,b,c,d,e,f,t;scanf(%ld %ld,n,m);if(nm){tn;nm;mt;}for(in;im;i)//对于每行而言{for(km-i1;k1;k--){printf( );//循环输出每行前面的空格}printf(1);for(a1;ai-2;a)//输出第i行的第二个到倒数第二个数{c1;e1;for(bi-1;bi-a;b--){cc*b;}for(da;d1;d--){ee*d;}f(c/e)%10;printf( %ld,f);}if(i1)printf(\n);//第一行输出回车elseprintf( 1\n);//输出每行的最后一个1和回车}return 0;
}