一个浪费我一天还找不出问题的程序

计算e≈1 + 1 / 1!+ 1 / 2!+ … + 1 / n!(只能用while循环)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
int main()
{
int a;
double k = 0;
double b = 0;
int n;
double sum = 1;
scanf_s("%d", &n);
while (n > 1)
{
a = n;
while (a >= 1) {
sum *= a;
a--;
}
b = 1.0 / sum;

k = k + b;
n--;
}

printf("%lf",1+ k);
return 0;
}

收获总结:

不是每个程序都值得抢救,一些乱七八糟的程序真的没有再修改的必要了,删库重做才是最好的方法。

值得注意的是,在嵌套循环中,一些变量的值会保留上一次循环的最终值,不会之间进行初始化。下次不能再犯这种错误了

解决方案1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//计算e≈1 + 1 / 1!+ 1 / 2!+ ... + 1 / n!

#include <stdio.h>
int main()
{
int a=1,n;
double sum=1, b = 1;
scanf_s("%d", &n);
while (a<=n)
{
sum *= a;
b+= 1.0 / sum;
a++;
}

printf("%lf",b);
return 0;
}

输出1000以内完数的和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
int pangDuan(int h);
int main()
{
int i,a,sum=0,n=0,j=0;
for (i = 1;i <= 1000;i++)
{
/*for (a = 1;a < i;a++)
{
if (i % a == 0)
{
sum += a;
}
}
if (sum - 1 == i)
{
printf("%d是完数 ", i);
n += i;
}*/
j+=pangDuan(i);
}
printf("\n");
printf("1000以内所有的完数之和为%d", j);
return 0;
}

//主函数不知道错在哪里了,我在外面写一个新的调用函数先用着。
//功能:判断一个数是否是完数
int pangDuan(int h)
{
int a, sum = 0, i = 0,g;
for (a = 1;a < h;a++) {
if (h % a == 0)
{
sum += a;//1,3,6
}
}
if (sum == h)
{
printf("%d是完数 ", h);
g = h;
}
else g = 0;
return g;

}

错误心得:在写代码的时候没有认真投入,导致逻辑没有理清楚就开始写了,下次写之前要写想代码框架,而且我也学了函数模块,可以将任务进行拆分,以此来锻炼自己分析问题的能力。

例题:用函数来用循环给数组a[5]赋初值,接着用循环输出a[5]的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
void input(int b[]);
void output(int c[]);
#define SIZE 5
int main()
{
int a[SIZE] = { 12,12,3,4,3 };
int i = 0;
input(a);//这里直接写数组名就好
output(a);
return 0;
}

/**
*_______________#########_______________________
*______________############_____________________
*______________#############____________________
*_____________##__###########___________________
*____________###__######_#####__________________
*____________###_#######___####_________________
*___________###__##########_####________________
*__________####__###########_####_______________
*________#####___###########__#####_____________
*_______######___###_########___#####___________
*_______#####___###___########___######_________
*______######___###__###########___######_______
*_____######___####_##############__######______
*____#######__#####################_#######_____
*____#######__##############################____
*___#######__######_#################_#######___
*___#######__######_######_#########___######___
*___#######____##__######___######_____######___
*___#######________######____#####_____#####____
*____######________#####_____#####_____####_____
*_____#####________####______#####_____###______
*______#####______;###________###______#________
*________##_______####________####______________
*/
//函数功能:对数组进行赋值
void input(int b[])
{
int i;
for (i = 0;i < SIZE;i++)
{
printf("请输入第%d个数据:", i + 1);
scanf_s("%d", &b[i]);
}
}
//函数功能:对数组进行输出
void output(int c[])
{
int i;
for (i = 0;i < SIZE;i++)
printf("第%d个数据为:%d \n", i + 1, c[i]);
}

错误心得:对数组和函数的混合运用不太熟悉,缺少时间练习,代码除了多练我找不到第二种提高自己的方法,可以多点看看大佬们写的一些有趣的代码,这样子乐在其中,也学到了东西。

定义一个这样的数列:0,1,1,2,3,5,···(斐波那契数列)。要求如下:

使用递归方法获取第n个数的数值。

这个我写完后发现出了一点小瑕疵,我看了好久不知道要怎么改,留着以后弄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Scanner;

public class demol1 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.print("请输入要求值的序列:");
int n=s.nextInt();
if (n==1){
System.out.println(0);
}else if (n==2){
System.out.println(1);
}else if(n<1){
System.out.println("输入出错");
}else Addition(0,1,n,0);
}
//定义递归函数
public static int Addition(int a,int b,int n,int count){
if(n>=3){
count=a;
a=b;
b=b+count;

n--;
Addition(a,b,n,count);
}
System.out.println(b);
return b ;
}
}

怪事,不能用类定义数组赋值?显示空指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.Scanner;

public class Student {
//学号 姓名 年龄
private int num;
private String name;
private int age;

public Student(int num, String name, int age) {
this.num = num;
this.name = name;
this.age = age;
}

public Student() {
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Student []stu=new Student[3];
Scanner sc=new Scanner(System.in);
for (int i = 0; i < stu.length; i++) {
System.out.println("录入第"+(i+1)+"个同学的信息");
System.out.print("输入学号:");
stu[i].setNum(123);
System.out.print("输入姓名:");
stu[i].setName("12321123");
System.out.print("输入年龄:");
stu[i].setAge(12);
}
}
}