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

Posted 松坂制糖厂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程打卡:C语言趣味编程习题做相关的知识,希望对你有一定的参考价值。

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

牛顿迭代法求解方程根

问题描述

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

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

设计思路

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

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

流程图

开始
开始
x=x_0-fracf(x_0)f^\'(x_0)
x=x_0-fracf(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

c语言编程练习题

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

#include<stdio.h>
 
int main()
{
    int i,j,k;
    printf("\\n");
    for(i=1;i<5;i++) { // 以下为三重循环
        for(j=1;j<5;j++) {
            for (k=1;k<5;k++) { // 确保i、j、k三位互不相同
                if (i!=k&&i!=j&&j!=k) { 
                    printf("%d,%d,%d\\n",i,j,k);
                }
            }
        }
    }
}

题目2:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发放奖金总数?

以上是关于编程打卡:C语言趣味编程习题做的主要内容,如果未能解决你的问题,请参考以下文章

编程打卡: C++ 语言程序设计: 继承与派生: 习题

一道Shell编程趣味练习题,看你会不会?

C语言编程:十例夺命题,为啥C语言的总是这么恶趣味?

c语言趣味编程

万人千题结对编程排位赛 (第一期) 火爆开启

万人千题结对编程排位赛(第一期) 第二周 排名公布,冠军成功卫冕,啊这……