目录
//用二分法求一元三次方程3x^3- 2x^2+5x- 16=0在(-2,4)之间的根
接上次 C语言小练习(1)http://t.csdn.cn/esgeo
关于上次几题没有使用函数递归这次来补一下
//编写一个函数实现n的k次方(递归)
分类讨论:k<0;k=0;k>0
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
double Pow(int n, int k)
{
if (k == 0)
return 1.0;
else if (k > 0)
{
return n * Pow(n, k - 1);
}
else
{
return 1.0 / Pow(n, -k);
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
double ret = Pow(a, b);
printf("%lf\n", ret);
return 0;
}
//计算一个数的每位之和(递归)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int DigitSum(int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
int a = 0;
scanf("%d", &a);
int b = DigitSum(a);
printf("%d\n", b);
return 0;
}
//数组的输入与输出 !!!
若没有输足十组数据,编译器不停止。
//输入10科成绩,换行显示输入的10科成绩。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int score[10] = { 0 };//初始化
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &score[i]);//这里是具体某一个元素,不是数组,要加&
printf("%d ", score[i]);
}
return 0;
}
//利用格里高利公式编程求π的值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main(void)
{
double pi = 0, t = 1;
int i = 1, flag = 1;
while (t > 1e-6)
{
pi += flag * t;
flag = -flag;
i += 2;
t = 1.0 / i;//注意这里不能写 1 / i ,否则结果为4而不是3.14……
}
// pi += flag * t;
printf(" pi = %lf\n", pi * 4);
}
//利用迭代法求a的平方根x
do-while 循环语句的使用
这个公式不要问我为什么,我也不知道,想深究可问数学老师~~
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
double a, x0, x1;
printf("请输入一个数:");
scanf("%lf", &a);
x1 = a / 2;
do
{
x0 = x1;
x1 = (x0 + a / x0) / 2;
} while (fabs(x0 - x1) >= 1e-6);
printf("The square root of %5.2f is %5.2\n", a, x1);
return 0;
}
咋觉得这题本质上是一道数学题,里面好多公式我都看不懂呜呜呜,先搁这放着吧……
//用二分法求一元三次方程3x^3- 2x^2+5x- 16=0在(-2,4)之间的根
do-while 循环语句的使用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
double x0, x1, x2, y0, y1, y2;
do
{
scanf("%lf %lf", &x1, &x2);//注意使用%lf而不是%d
y1 = 3 * x1 * x1 * x1 - 2 * x1 * x1 + 5 * x1 - 16;
y2 = 3 * x2 * x2 * x2 - 2 * x2 * x2 + 5 * x2 - 16;
} while (y1 * y2 > 0);
do
{
x0 = (x1 + x2) / 2;
y0 = 3 * x0 * x0 * x0 - 2 * x0 * x0 + 5 * x0 - 16;
if (y0 * y1 < 0)
{
x2 = x0;
}
else
{
x1 = x0;
}
} while (fabs(y0)>=10e-6);//绝对值
printf("The root is %lf", x0);
return 0;
}
//打印出0~999内所有水仙花数
"水仙花数"是指一个3位数,其各位数字的立方和等于该数本身,如153是一个"水仙花数",因为153=1*1*1+5*5*5+3*3*3 。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 0;
for (n = 100; n <= 999; n++)
{
int h = n / 100;
int s = (n - 100 * h) / 10;
int t = n - h * 100 - s * 10;
if (h * h * h + s * s * s + t * t * t == n)
{
printf("%d ", n);
}
}
return 0;
}
//水仙花进阶:求0~100000中的水仙花数
难难难,比上面那个难多了。。。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<math.h>
int main()
{
int n = 0;//0~100000的数
int count = 0;//求n有几位数
int m = 0;//为了n不改变,作为n的暂存地
int sum = 0;//存放相加结果
for (n = 0; n <= 100000; n++)
{
sum = 0;//每用完一次sum要重置为0
count = 1;//至少有一位数
m = n;
while (m/=10)
{
count++;//求n有几位数
}
m = n;
while (m)
{
sum = sum + pow(m % 10, count);
m = m / 10;
}
if (sum == n)
{
printf("%d ", n);
}
}
return 0;
}
与其说这是小练习,倒不如说是我的错题本,课上课下不太会的都会收录进来,然后自己再敲一遍加深下印象,争取下次会写。
又是努力成为大牛的几天呢~~