一个浪费我一天还找不出问题的程序 计算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 ); } } }