计算机二级C语言经典公式
1、 累加: int i, sum=0;for(i=1; i<=100; i++)?? sum+=i;printf("sum=%d\n", sum);
2、 累乘(阶乘):int i, s=1, n;scanf("%d", &n);for(i=1; i<=n; i++)?? s*=i;printf("s=%d\n", s);
3、整型常量的个位、十位、百位上数字的表示方法:现定义一个整形常量x,则个位:x%10; 十位:(x/10)%10; 百位:(x/10^2)%10;
4、 四舍五入(对一个输入的双精度数保留3位小数): double x;scanf("%lf", &x);x*=1000;x+=0.5;x=(int)x;x/=1000;printf("x=%lf", x);
5、 变量值交换: (1)输入三个整数a、b、c, 然后把a的值给b, 把b的值给c, 把c的值给aint a, b, c, t;scanf("%d%d%d", &a, &b, &c);printf("a=%d,b=%d,c=%d", a, b, c);t=a; a=c; c=b; b=t;printf("a=%d,b=%d,c=%d", a ,b, c);(2)地址值传递注意:下面两种情况均不能将主函数中的变量值对调?????? 1) void fun(int *a, int *b)????????????? {int *k;?????????????? k=a; a=b; b=k;?????????????? }?????? 理由简述:指针变量作为函数参数也要遵循单向的值传递方式,所以交换指针形参中的地址值不能改变对应的实参。???????? 2) void fun(int *a, int *b)?????????????? {int *k;?????????????? *p=*a; *a=*b; *b=*p;??????????????? }?????? 理由简述:指针k是无向指针,“*p=*a”等等语句会出现错误。正确的算法如下:void fun(int *a, int *b){int k;k=*a; *a=*b; *b=k;}
6、 输入三个数a、b、c,选出最大者和最小者:double a, b, c, max, min;scanf(“%lf%lf%lf”, &a, &b, &c);max=a, min=b;if( amax) max=c;if(c
7、 图形
????????????? *?????????????? *** ????????? *****???????? *******????????? *****??????????? *** ????????????? *??int i, j;for(i=1; i<=4; i++)??? {for(j=1; j<=4-i; j++) putchar(' ');????? for(j=1; j<=2*i-1; j++) putchar('*');?????? putchar('\n');??? }for(i=1; i<=3; i++)??? {for(j=1; j<=i; j++)?? putchar(' ');????? for(j=1;?? j<=7-2*i; j++)?? putchar('*');???? putchar('\n');??? }putchar('\n');
8、 斐波那契数列:(1)给定项数n的算法int a=1, b=1, c, i;printf("%3d%3d", a, b);for(i=3; i<=n; i++) ???? {c=a+b;????? printf("%3d", c);?????? a=b;?????? b=c;????? }(2)给定上界数m的算法int a=1, b=1, c;printf("%3d", a);do??? {c=a+b;????? a=b;???? printf("%3d", a);/*打印新的a,实际上就是打印新的c的前一项*/ ???? b=c;??? } while(c
9、 素数(将0~m之间为素数的元素依次存放在数组a[ ]中):int i, j, t, a[100], n=0;for(i=2; i