编程打卡: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\\) 。
流程图
#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个数即可。
流程图
代码实现
#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
折半查找
问题描述
二分
设计思路
二分查找
流程图
代码实现
#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语言趣味编程习题做的主要内容,如果未能解决你的问题,请参考以下文章