1、级电信C语言期末考前例题*P112 4.6*根据函数写一程序,输入x值,输出y值。解: #include main( )int x, y;printf(输入x:);scanf(%d, &x );if( x 1 ) y = x;printf(x=%3d, y=x=%dn, x, y );else if ( x 10 ) y = 2 * x - 1;printf(x=%3d, y=2*x-1=%dn, x, y );else y = 3 * x - 11;printf(x=%3d, y=3*x-11=%dn, x, y ); *P113 4.8 *给一个百分制成绩,要求输出等级A、B、C、D、E。
2、90分以上为A,8090分为B,7079分为C,60分以下为D。#include main( ) float score; / 记录百分制成绩 char grade; / 记录等级 printf(请输入学生成绩:); scanf(%f, &score); while( score 100 | score = 90 ) grade = A; else if( score = 80 ) grade = B; else if( score = 70 ) grade = C; else if( score = 60 ) grade = D; else grade = E; printf(成绩是%5.1
3、f, 相应的等级是%cn, score, grade );*P140 5.3 *输入两个正整数m和n,求其最大公约数和最小公倍数。#include main( ) int m, n, max, min; scanf(%d%d, &m, &n ); / 最大公约数从两个数中较小的一个开始寻找 if( m n ) min = m; else min = n; while( min % m != 0 | min % n != 0) min+; printf(max=%d, min=%dn, max, min );*P140 5.8*打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于
4、该本身。例如:153是一个水仙花数,因为153 = 13 + 53 + 33。#include main( )int x = 100, a, b, c;while( x = 100 & x 1000 ) / 100999a = x % 10; / 个位b=x / 10 % 10; / 十位c= x / 100; / 百位if( x = a*a*a + b*b*b + c*c*c ) printf(%5d, x );x+;*P141 5.9*一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式
5、输出其因子:6 its factors are 1、2、3main( )int m, i, j, s;for( m = 6; m 1000; m+ ) / 考虑1000以内的自然数s = 1; / s表示因子的和,1是所有自然数的因子for( i = 2; i m; i+ ) /寻找m的所有因子if( m % i = 0 ) s = s + i; /如果i是因子if( m = s ) / m的因子和与m相等printf(%5d its fastors are 1 , m );for( j = 2; j m; j+ ) / 再次寻找m的所有因子并输出if( m % j = 0 )printf(%
6、d , j );printf(n);或main( )int m, i, j, s;for( m = 6; m 1000; m+ )s = m - 1;for( i = 2; i m; i+ )if( m % i = 0 ) / 如果i是m的因子s = s - i;/ 从s 中减去该因子if( s = 0 ) / 说明m与其因子和相等printf(%5d its fastors are 1 , m );for( j = 2; j m; j+ ) if( m % j = 0 )printf(%d , j ) ;printf(n);*P141 5-13*用迭代法求平方根迭代公式为:xn = xn-1
7、 - f(xn-1) / f (xn-1)#include #include main( ) float x0, x1, a; scanf(%f, &a ); / 求a的平方根 x1 = a / 2; / 迭代的初始值,可以给任意值 do x0 = x1; / 记录前一个近似值 x1 = ( x0 + a / x0 ) / 2; / 根据迭代公式计算新的近似值 while( fabs( x0 - x1 ) = 1e-5 ); / 比较前后两个近拟值 printf(%.3fn, x1 );*P141 5-14*用迭代法求方程的根迭代公式为:xn = xn-1 - f(xn-1) / f (xn-
8、1)#include #include main( ) double x0, x1, y; x1 = 1.5; / 给定一个初始近似值 do x0 = x1; / 记录前一个近似值 y = 2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6; / f(x0) x1 = x0 - y / ( 6 * x0 * x0 - 8 * x0 + 3 ); / 计算新的近似值 while( fabs(x1-x0) 1e-6 ); / 比较前后两个值 printf(x=%.3fn, x1 );*P141 5-15*用二分法求方程的根。#include #include m
9、ain( ) double m, a, b, fm, fa, fb ; a = -10; b = 10; /* -10, 10 之间有一个根 */while( fabs( b - a ) 1e-3 ) m = ( a + b ) / 2; /* 中点 */ fa = 2 * a * a * a - 4 * a * a + 3 * a - 6; fb = 2 * b * b * b - 4 * b * b + 3 * b - 6; fm = 2 * m * m * m - 4 * m * m + 3 * m - 6; if( fm * fa 0 ) /* f(m) 与 f(a) 同号 */ a
10、= m; else b = m; printf( x = %.3fn, (a+b) / 2 );*例题*编程计算级数的近似值#include #include main( ) int n; float ex, x, item; x = 1; / 近似计算e1 ex = 1; item = 1; n = 1; while( 1 ) item *= x / n+; / 计算一项 ex += item; / 累加 if( fabs(item) 1e-6 ) break; printf(%fn, ex);*例题*编程近似计算定积分#include #include main( ) float a, b
11、; / 定积分的上下限 float x, dx, sfx; a = 0; b = 3.14; dx = 1e-3; / 区间长度 for(x = a, sfx = 0;x = b;x += dx) sfx += dx * sin(x); printf(%fn, sfx);*P168 6-2*选择排序#include #define N 10main( ) int aN, t, i, j, min; printf(Input: ); for(i = 0;i N;i+) scanf(%d, &ai); / 输入数据 for(i = 0; i N-1; i+) min = i; / 记录下标 for
12、(j = i + 1; j N;j+) if( aj amin ) min = j; t = amin; / 交换 amin = ai; ai = t; for(i = 0;i N;i+) / 输出数据 printf(%d , ai);*蒙特卡洛近似计算*/近似计算定积分#include #include #include #include #define N 50000#define PI 3.1415926main( ) double x, y; unsigned num, j; srand(unsigned)time(NULL); num=0; for( j = 0;j N;j+) x
13、= (double)rand()/RAND_MAX*PI; y = (double)rand()/RAND_MAX; if( y sin(x) ) num+; printf(%lfn, (double)num/N*PI );/近似计算球体体积#include #include #include #define N 50000main( ) double x, y, z; unsigned num, j; srand(unsigned)time(NULL); num=0; for( j = 0;j N;j+) x = (double)rand()/RAND_MAX; y = (double)ra
14、nd()/RAND_MAX; z = (double)rand()/RAND_MAX; if(x*x+y*y+z*z n ) j = m; else j = n; while( j%m != 0 | j%n != 0 ) j+; return j;int maxdivisor( int m, int n ) int j; if( m n ) j = m; else j = n; while( m%j != 0 | n%j != 0) j-; return j;main( ) int a, b; printf(Input a&b:); scanf(%d%d, &a, &b ); printf(%
15、d %dn, minmult(a, b), maxdivisor(a, b);*P218 7-2*一元二次方程求根方法一:#include #include void getroot( float a, float b, float c ); / 函数声明void main( ) float a, b, c; printf(Inut a, b, c:); scanf(%f%f%f, &a, &b, &c ); / 输入系数 getroot(a,b,c); / 调用函数计算方程根void getroot( float a, float b, float c ) float d, x1, x2;
16、d = b*b - 4*a*c; x1 = ( -b + sqrt(d) ) / 2/ a; x2 = ( -b + sqrt(d) ) / 2/ a; printf(x1=%.1f x2=%.1fn, x1, x2 );方法二:#include #include void getroot( float a, float b, float c, float x3 ); / 函数声明void main() float a, b, c, x3; printf(Inut a, b, c:); scanf(%f%f%f, &a, &b, &c ); / 输入系数 getroot(a, b, c, x
17、); / 调用函数计算方程根 printf(x1=%.1f x2=%.1fn, x1, x2 );void getroot( float a, float b, float c , float x3) float d; d = b*b - 4*a*c; x1 = ( -b + sqrt(d) ) / 2/ a; x2 = ( -b + sqrt(d) ) / 2/ a;方法三:#include #include void getroot( float a, float b, float c , float *px1, float *px2 ) float d; d = b*b - 4*a*c;
18、 *px1 = ( -b + sqrt(d) ) / 2/ a; *px2 = ( -b + sqrt(d) ) / 2/ a;void main() float a, b, c, x1, x2; printf(Inut a, b, c:); scanf(%f%f%f, &a, &b, &c ); / 输入系数 getroot( a, b, c, &x1, &x2 ); / 调用函数计算方程根 printf(x1=%.1f x2=%.1fn, x1, x2 );*P218 7-3*质数int prime(int); / 函数声明void main( )int x; printf(输入一个正整数
19、nn); scanf(%d,&x); if( prime(x) ) printf(nn此数为素数nn); else printf(nn此数不是素数nn);int prime( int n)int k;for(k=2;kn;k+)if(n%k=0) /余数为0return 0;return 1; /* 是质数,返回1 */*排序,用函数实现*#include #define N 10/ 选择排序void selectsort( int a, int n ) int i, j, k, t; for(i = 0;i n - 1;i+) k = i; / 假设 for(j = i + 1;j n;j+
20、) if(aj ak) / 有更小的 k = j; / 用k记录其下标 t = ak; ak = ai; ai = t; / 起泡排序void bubblesort( int a, int n ) int j, i, t; for( j = 0; j n - 1; j+ ) for( i = 0; i ai+1 ) t = ai; ai = ai+1; ai+1 = t; main() int aN, i ; printf(Input :); for(i = 0;i N; i+) scanf(%d, &ai); bubblesort(a, N); / 函数调用 for(i = 0;i N;i+) / 输出结果 printf(%d , ai );*P219 7-13*勒德让多项式void main()float p(int,float);int n;float x;printf(输入n和xnn);scanf(%d%f,&n,&x);printf(nn%d阶勒德让多项式的值为:%fnn,n,p(n,x);float p(int n,float x)if(n=0) return 1;else if(n=1) return x;else return (2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x)/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1