搜索
您的当前位置:首页正文

西南石油大学C语言选修课复习资料

来源:六九路网
西南石油大学C语言选修课复习资料

一、考试安排

考试时间:4月25日第十周星期三19:50—21:30 考试地点:明理楼A102、A103、A106

试题题型:

1、选择题,10*2 = 20分 2、填空题,10*2 = 20分 3、编程题,10*6 = 60分

二、参考资料:

1、选择题、填空题可参考苏小红等老师编写的《C语言大学实用教程(第2版)》(电子工业出版社出版),该书为电信院、资环院2011级同学C语言课教材。该教材P46-47的习题很重要,建议没有该书同学复印下来复习。

2、程序设计题复习资料为课堂讲授的编程题。

三、课堂主要讲授的编程题

1. 输入成绩分数,输出成绩等级。

等级:90—100 A

80—89 B 70—79 C 60—69 D 0—59 E 其它值 错误

#include int main() { int score; printf(\"Please input a score:\"); scanf(\"%d\ if (score > 100 || score < 0) printf(\"Input error!\\n\"); else if(score >= 90 && score <= 100) printf(\"%d--A\\n\ else if(score >= 80) printf(\"%d--B\\n\

}

else if(score >= 70) printf(\"%d--C\\n\else if(score >= 60) printf(\"%d--D\\n\ else if (score >= 0) printf(\"%d--E\\n\return 0;

2.求一元二次方程ax2+bx+c=0的根。 #include #include int main() { float a, b, c; float x1, x2, delta; float real, image;

printf(\"请输入一元二次方程的三个系数:\"); scanf(\"%f %f %f\ if(a == 0){ if(b == 0){ printf(\"不合法的一元二次方程\\n\"); } else{ x1 = x2 = - c / b;

printf(\"方程是一次方程,有两个相同实根x1=x2=%f\\n\ } }else{ delta = b * b - 4 * a * c; if(delta > 0){ x1 = (-b + sqrt(delta)) / (2 * a); x2 = (-b - sqrt(delta)) / (2 * a); }

printf(\"方程是一元二次方程,有两个不相同实根x1=%f x2=%f\\n\}else if(delta == 0){ x1 = x2 = -b / (2 * a); printf(\"方程是一元二次方程,有两个相同实根x1=x2=%f\\n\}else{ real = -b / (2 * a); image = sqrt(-delta)/ (2 * a); printf(\"方程是一元二次方程,有两个虚根:\\n\"); printf(\"x1=%f+%fi\\n\ printf(\"x2=%f-%fi\\n\}

return 0; }

3.求水仙花数,水仙花数是一个三位数,且该数的每一位数的3次方的和等于该数本身,例如153=13+53+33,153就是一个水仙花数。 #include int main() { int x, bw, sw, gw; for(x = 100; x <= 999; x++){ bw = x / 100; sw = x % 100 / 10; gw = x % 10; if(bw * bw * bw + sw * sw * sw + gw * gw * gw == x) printf(\"x=%d\\n\ } return 0; }

4.百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?其义为:公鸡5元一只,母鸡3元一只,小鸡1元3只。用100元钱买100只鸡,公鸡、母鸡和小鸡各买多少只? #include int main() { int x, y, z; for(x = 1; x < 20; x++) for(y = 1; y < 33; y++) { z = 100 - x - y; if(15 * x + 9 * y + z == 300) printf(\"x=%d y=%d z=%d\\n\ } return 0; }

5.选择排序。 #include int main() { int a[10] = {45, 36, 89, 91, 27, 13, 71, 52, 62, 18}, i; int d, t, j; for(i = 0; i < 10; i++) printf(\"%d \

printf(\"\\n\"); for( j = 0; j < 9; j++){ d = j; for(i = j + 1; i < 10; i++) if(a[d] > a[i]) d = i; if(j != d){ t = a[d]; a[d] = a[j]; a[j] = t; } }

for(i = 0; i < 10; i++) printf(\"%d \ printf(\"\\n\"); return 0; }

6.斐波那契数列,f1=1, f2=1, fn=fn-1 + fn-2 #include int main() { int fib[40] = {1, 1}; int i; for(i = 2; i < 40; i++) fib[i] = fib[i - 1] + fib[i - 2]; for(i = 0; i < 40; i++){ printf(\"%10d\ if((i + 1) % 6 == 0) printf(\"\\n\"); } return 0; }

7.迭代法求xa,迭代公式如下:

xn11a(xn) 2xn 要求输入a的值,求出x,要求精度达到0.000001为止。

#include #include int main() { float a, x0, x1 = 1; printf(\"Please input x:\"); scanf(\"%f\

do{ x0 = x1; x1 = (x0 + a / x0) / 2; }while(fabs(x1-x0) >= 0.000001); printf(\"sqrt(%2.1f)=%f\\n\ return 0; }

8.求数组中最大值 #include int main() { int a[10], I, max; for(i = 0; i < 10; i++) scanf(\"%d \ max = a[0];

for(i = 1; i < 10; i++) if(a[i] > max) max = a[i]; } printf(\"max=%d\\n\ return 0; }

9. 用二分法求方程2x34x23x60在(–5, 5)之间的根。(该方法具体可参考《高等数学》第六版上册P178) #include #include int main() { float x1, x2, xm, f1, f2, fm; x1 = -5; x2 = 5; do{ xm = (x1 + x2) / 2; f1 = 2 * x1 * x1 * x1 - 4 * x1 * x1 + 3 * x1 - 6; f2 = 2 * x2 * x2 * x2 - 4 * x2 * x2 + 3 * x2 - 6; fm = 2 * xm * xm * xm - 4 * xm * xm + 3 * xm - 6; if( f1 * fm < 0) x2 = xm; else x1 = xm; }while(fabs(fm) > 0.000001); printf(\"x=%f\\n\ return 0; }

10.用辗转相除法求最大公约数。辗转相除法:设两整数为a和b (1) a除以b得余数c,若c=0,则b为两数的gcd,并退出循环;(2)若c≠0,则a=b,b=c,转(1)继续。 #include int main() { int a, b, r; printf(\"Please input two number:\"); scanf(\"%d%d\ r = a % b; while(r != 0){ a = b; b = r; r = a % b; } printf(\"gcd=%d\\n\ return 0; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top