中国建筑人力资源管理信息系统网站seo运营
C/PTA——循环结构3
- 7-1 二分法求多项式单根
- 1.题目要求
- 2.代码实现
- 7-2 循环-十进制转化
- 1.题目要求
- 2.代码实现
- 7-3 梅森数
- 1.题目要求
- 2.代码实现
- 7-4 单词长度
- 1.题目要求
- 2.代码实现
- 7-5 21循环-求和3
- 1.题目要求
- 2.代码实现
- 7-6 21循环-金字塔
- 1.题目要求
- 2.代码实现
- 7-7 循环-杨辉三角
- 1.题目要求
- 2.代码实现
7-1 二分法求多项式单根
1.题目要求
2.代码实现
#include <stdio.h>
double a3, a2, a1, a0; double f(double x)
{ double result; result=a3*x*x*x+a2*x*x+a1*x+a0; 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; left=a; right=b; ///大于阈值时使用二分法求出单根,程序结束while(right-left>=0.001&&f(left)*f(right)<=0) { if(f(left)==0) { printf("%.2f",left); return 0; } if(f(right)==0) { printf("%.2f",right); return 0; } mid=(left+right)/2; if (f(mid)*f(left)>0) { left=mid; } else //由于先决条件为f(left)*f(right)<0,因此此时else语句等价于f(mid)与f(left)异号,即与f(right)同号{ right=mid; } } 不大于阈值时输出中点printf("%.2f",mid); return 0;
}
7-2 循环-十进制转化
1.题目要求
2.代码实现
#include<stdio.h>
#include<math.h>
int Coun(int n,int m)//进制转化,位数计算函数
{int count = 0;while (n)//统计进制转换后,数字位数的统计{count++;n /= m;}return count;
}
int main()
{int n, m;int sum = 0;scanf("%d %d", &n, &m);int count = Coun(n, m);int num = count;while (n){sum = sum + (int)pow(10, num - count) * (n % m);n /= m;count--;}printf("%d", sum);return 0;
}
7-3 梅森数
1.题目要求
2.代码实现
#include<stdio.h>
#include<math.h>
int main()
{int n = 0, num = 0;int count = 0;scanf("%d", &n);for(int j=2;j<=n;j++){for (int i = 2; i < ((int)pow(2,j)-1); i++){if (((int)pow(2, j) - 1) % i == 0)//素数的判断count++;}if (count == 0)//梅森数的判断{printf("%d\n", (int)pow(2, j) - 1);num++;}count = 0;//判断完一个后,计数置0}if (num == 0)//不存在梅森数的情况printf("None\n");return 0;
}
7-4 单词长度
1.题目要求
2.代码实现
#include<stdio.h>
int main() {char s[100] = { 0 };char* p = &s;int i = 0;scanf("%[^.]", s);//[^.]是输入到.前面位置,遇到.结束输入for (; *(p) != 0; p = p + 1){if (*(p) != ' ')i++;if (*(p) == ' ' && *(p + 1) == ' ')continue;//吞多余空格 if (*(p) == ' ' && *(p + 1) != 0 && i != 0){printf("%d ", i);i = 0;}//输出前面单词的数目,i!=0有效解决了开头多空格问题 if (*(p + 1) == 0)//输出最后一个单词的数目 printf("%d", i);}return 0;
}
7-5 21循环-求和3
1.题目要求
思路:
1.使用两个嵌套的for循环,外层循环控制1到n的遍历,内层循环控制1到k的遍历。
2.在内层循环中,每次将total乘以当前外层循环的迭代变量i,并取结果对114514取模(%)。
3.在外层循环中,将计算得到的total累加到sum上,并将结果对114514取模,再重新将total置为1。
2.代码实现
#include<stdio.h>
int main()
{int n, k;scanf("%d %d", &n,&k);int total = 1;int sum = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= k; j++){total = (total * i) % 114514;}sum = (sum + total) % 114514;total = 1;}printf("%d", sum);
}
7-6 21循环-金字塔
1.题目要求
2.代码实现
#include<stdio.h>
int main()
{int n, m = 0, k, i = 1, j;scanf("%d", &n);if (n == 1) {printf("1");return 0;}while (n > m) {m = (i + 1) * (i + 2) / 2;i++;k = (i + 1) * (i + 2) / 2;if (n <= k) {n = i - 1;}}for (i = 0; i <= n; i++) {for (j = 0; j < n - i; j++) {printf("0");}printf("%d", n + 1 - i);for (k = 1; k <= i; k++) { //for循环里面套了三个并列的for循环,每次重新进入内部循环时,k都会重新赋值为1;这个循环很巧妙,第一次无法进入,第二次以后就可以,并且循环次数逐一增加。printf("0%d", n + 1 - i);}for (j = 0; j < n - i; j++) {printf("0");}printf("\n");}return 0;
}
7-7 循环-杨辉三角
1.题目要求
2.代码实现
#include<stdio.h>
int main() {int n, m;int k = 0;scanf("%d %d", &n, &m);if(n>m){int tmp=n;n=m;m=tmp;
}int triangle[22][22] = { 0 }; // 初始化为0for (int i = 1; i <= 21; i++) {triangle[i][1] = 1;for (int j = 2; j <= i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}for (int i = n; i <= m; i++)//空格的输出{for (k = m - i; k >= 1; k--){printf(" ");}for (int j = 1; j <= i; j++){if(j<i)printf("%d ", triangle[i][j] % 10);if (j == i)printf("%d", triangle[i][j]);// 取最后一位}printf("\n");}return 0;
}