编程打卡:C语言趣味编程习题做

4.15 编程打卡 C 语言趣味编程

牛顿迭代法求解方程根

问题描述

用牛顿迭代法求解方程根的函数,方程为:\(ax^3+bx^2+cx+d=0\),系数 a,b,c,d 由主函数输入,求x在1附近的一个实根。求出根后输出。

牛顿迭代法的公式是:\(x=x_0-\frac{f(x_0)}{f^{'}(x_0)}\),设迭代倒\(|x-x_0|\leq10^-5\)时结束。

设计思路

循环运算,直至 \(|x-x_0|\leq10^-5\) 退出循环,输出结果。

对函数求导 \(f^{'}(x)=3ax^2+2bx+c\)

流程图

开始
开始
x=x_0-frac{f(x_0)}{f^{'}(x_0)}
x=x_0-frac{f(x_0)}{f^{'}(x_0)}
|x-x_0|leq10^-5
|x-x_0|leq10^-5
输出x
输出x
No
No
Yes
Yes
Text is not SVG - cannot display
### 代码实现
#include <iostream>
#include <cmath>
using namespace std;
double solve (double a,double b,double c,double d)
{
    double x = 1.5,x0,minn = 10000;
    do {
        x0 = x;
        x = x0 - (a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d)/(3 * a * x0 * x0 + 2 * b * x0 + c);
    }   while (fabs(x - x0) >= 1e-5);
    return x;
}
int main () {
    double a,b,c,d;
    cin >> a >> b >> c >> d;
    cout << solve(a,b,c,d);
}

运行结果

输入

2 -4 3 -6

输出

2

冒泡排序

问题描述

对N个数进行升序排列

设计思路

遍历数组,若相邻两个数组前大于后,就将它们交换,因为每次都把大的数字移动到相对后面,可以发现,最后一个数的位置已经确定,然后只需要遍历前面的N-1个数即可。

流程图

开始
开始
const int N
a[N]
为a[N] 赋值
const int N...
i = 0
i = 0
i < N - 1
i < N - 1
j = 0
j = 0
j < N - i - 1
j < N - i - 1
a[i] < a[i+1]
a[i] < a[i+1]
j++
j++
swap(a[i],a[i+1])
swap(a[i],a[i+1])
i++
i++
No
No
Yes
Yes
No
No
Yes
Yes
输出a[i]
结束
输出a[i]...
No
No
Text is not SVG - cannot display

代码实现

#include <iostream>
using namespace std;
const int N = 10;
int a[N] = {5,4,8,7,2,9,1,3,6,0};
int main ()
{
    for (int i = 0; i < N - 1; i ++)    {
        for (int j = 0; j < N - i - 1; j ++)    {
            if (a[j] > a[j + 1])
                swap(a[j],a[j+1]);
        }
    }
    for (int i : a)
        cout << i << " ";
}

运行结果

0 1 2 3 4 5 6 7 8 9

折半查找

问题描述

二分

设计思路

二分查找

流程图

开始
开始
const int N
int a[N]
int l = 0, r = N - 1
int n
const int N...
l < r
l < r
a[l] == n
a[l] == n
int mid = (l + r)/2
int mid = (l + r)/2
a[mid] >= n
a[mid] >= n
r = mid
r = mid
l = mid + 1
l = mid + 1
Yes
Yes
No
No
Yes
Yes
No
No
输出 l
输出 l
Yes
Yes
输出Not Found
输出Not Found
Text is not SVG - cannot display

代码实现

#include <iostream>
using namespace std;
const int N = 15;
int a[N] = {1,2,3,8,8,8,8,8,8,10,11,12,13,16,19};
int main () {
    int l,r,n;
    n = 10;
    l = 0,r = 14;
    while (l < r)
    {
        int mid = l + r >> 1;
        if (a[mid]>=n) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    if (a[l] == n)  cout << n << endl;
    else cout << "not found";
    n = 15;
    l = 0,r = 14;
    while (l < r)
    {
        int mid = l + r >> 1;
        if (a[mid]>=n) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    if (a[l] == n)  cout << n << endl;
    else cout << "not found";
}

运行结果

10
not found

posted @ 2023-04-16 03:55  satou_matsuzaka  阅读(42)  评论(1编辑  收藏  举报

This is a Test

メイドノココロハ アヤツリドール