北京交通大学C语言上半部分复习题_第1页
北京交通大学C语言上半部分复习题_第2页
北京交通大学C语言上半部分复习题_第3页
北京交通大学C语言上半部分复习题_第4页
北京交通大学C语言上半部分复习题_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、“编程能力”不是听会的、也不是看会的、而是动手动脑练会的!9/14/20221高级语言程序设计上半部分复习课主讲教师:丁丁计算机与信息技术学院9/14/20222课程内容第一章 程序设计和C语言第二章 数据对象与计算第三章 变量、函数和控制结构第四章 基本程序设计技术第五章 C程序结构(函数)第六章 数组第七章 指针第八章 文件和输入输出第九章 结构和其它数据机制第十章 程序开发技术第十一章 标准库程序设计语言和程序设计的基本概念C语言的语法规则及程序设计方法程序设计的扩展与提高2022/9/143主要内容:程序设计和C语言1.1 程序和程序语言程序和程序语言算法及其描述工具1.2 程序设计方

2、法1.3 问题与程序设计2022/9/1442022/9/145主要内容:数据对象与计算2.1 程序的基本结构 2.2 基本概念2.3 数据与类型 2.4 基本类型与数据表示2.5 数据的输入与输出2.6 运算符、表达式与计算 2.7 数学函数库及其使用2022/9/146主要内容:程序设计的基本知识3.1 语句、复合语句 3.2 变量概念、定义和使用3.3 定义函数(初步,第五章深入) 3.4 关系表达式、逻辑表达式、条件表达式3.5 语句和控制结构3.6 常见结构和问题2022/9/147主要内容:基本程序设计技术4.1 循环程序设计 4.2 循环中的问题4.3 循环与递归 4.4 基本输

3、入输出4.5 程序设计实例4.6 程序测试和排错重点控制结构顺序、选择、循环结构函数定义、声明及调用从问题到程序的编程思想程序的函数分解模块化程序设计基本的程序调试技能静态调试、动态调试黑箱测试、白箱测试2022/9/148难点循环递归基本输入、输出语句2022/9/149程序数据结构算法程序程序规定了计算机执行的动作和动作的顺序。算法:解决问题的方法和步骤算法的几个特性有穷性确定性无二义可执行性有0个或多个输入有0个或多个输出从问题到程序的程序设计思想也体现了算法的重要性2022/9/1410要点1:运算符及表达式?已经学习哪几种运算符及表达式?优先级关系?自增、自减运算符算术运算符关系运算

4、符逻辑运算符条件运算符赋值运算符逗号运算符2022/9/1411运算符解释同级结合方式算术运算()括号由左向右逻辑运算算术运算! + - -+ - (类型) sizeof逻辑非,增减量一元正负强制类型转换由右向左* / %乘,除,取模由左向右+ -二元加减由左向右关系运算 = 逻辑与由左向右= !=逻辑或由左向右逻辑运算&由左向右|由左向右条件运算?:由左向右赋值运算= += -+*= /= %=各种赋值由右向左逗号运算,逗号(顺序)由左向右2022/9/141212要点2:C语言的基本数据类型C语言的基本数据类型有哪些?什么是常量?如何定义?什么是变量?如何定义?变量的存贮类型有哪几种?au

5、to, register, static, extern变量从作用域的角度分哪几种?全局变量、局部变量2022/9/14132022/9/1414类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32- 21474836482147483647(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned short0655353204294967295unsigned longunsigned int3204294967295有float3.4e-383.4e38有double1.7e-3

6、081.7e308有char8-128127无unsigned char80255基本数据类型3264说明:数据类型所占字节数编译器不同而不同2022/9/1415 整型int整型short int短整型long int长整型 实型(浮点型)float 单精度浮点型double双精度浮点型 字符型char字符型常用数据类型要点3:条件if语句条件if语句有几种形式?if语句if-else语句if-else if语句if else的配对原则是什么?If else和switch开关语句的差别?2022/9/1416要点4:循环语句循环语句有几种形式?while语句do-while语句for语句循环

7、结构的三要素是什么?如何从循环中跳出?2022/9/1417要点5:函数如何定义函数?函数声明的意义及原则?如何调用函数?参数传递和函数返回值过程中类型不匹配时的转换原则?如何理解值参数?2022/9/14182022/9/1419特点:“单向”传递void swap(int a, int b) int temp; temp = a; a = b; b = temp;int main() int x,y; scanf(%d,%d, &x, &y); swap(x, y); printf(n%d,%dn, x, y); return 0;例 两数交换.20002008200A2002200420

8、065变量x 变量y(main)9 变量temp 变量b 变量a(swap)55959COPY难点:函数的参数传递方式之值传递运行结果:5, 9值传递要点6:基本输入输出语句getchar()putchar()scanf()printf()数的批量输入输出:基本输入输出循环结构2022/9/1420第一章习题讲解9/14/2022211.用N-S结构图描述从十个数中选择最大数的算法。输入第一个数a1,i=1;MAX=a1 ; iai9/14/2022222. 给出求从1-100之间能被6整除的所有整数的和的算法。 i=1;sum=0; i=100 i%6=0sum=sum+i i=i+1 输出

9、sum9/14/202223第二章习题讲解9/14/2022241. (课后第1题)指出下面的哪些字符序列不是合法的标识符:_abc x+- 3x1 Xf_1_4 Eoof_a$#24 x_x_2 bg-1_I am2022/9/14252022/9/1426标识符程序中的名字(描述对象)称为标识符如变量名(s,a,b,c)、 函数名(add, main)等; 标识符分用户定义的标识符和系统预定义的标识符用户定义的如s,a,b,c;系统定义的如标准函数名printf,用户不得使用; 标识符对字母大小写敏感:a和A是不同字母;ABC、Abc、AbC和abc是4个不同标识符形式:字母或数字组成的连

10、续序列,字母(下划线“_”看作字母)开头(即以字母开头,后跟字母或数字)。标识符命名基本原则2022/9/14271)标识符一般需要反映其用途,如:int sum;2)如果标识符名由多个单词构成,通常采用“大小写”混排的方式(Windows应用程序),每个单词的首字符可大写; 如: TotalFiles,AddChild。3)变量名通常使用“名词”或者“形容词名词” 函数名通常使用“动词”或者“动词名词” 4)标识符的长度应当适当。ANSI C规定名字不准超过6个字符,C+/C不再有此限制,但不宜过长。 5)通常将以下划线开始的标识符保留给系统用, 用户不使用。6)Unix(Linux)应用程

11、序的标识符通常采用“小写加下划线”的方式,如add_child。2. (课后第2题)手工计算下列表达式的值。1) 125 + 01252)0XAF 0XFA3)24 * 3 / 5 + 64)36 + -(5 23) / 45)35 * 012 + 27 / 4 / 7 * (12 - 4)210-7520403502022/9/1428八进制十六进制八进制十六进制3.(课后第3题)在下列表达式的计算过程中,在哪些地方将发生类型转换,各是从什么类型转换到什么类型,表达式计算的结果是什么?1) 3 * (2L + 4.5f) 012 + 442) 3* (int)sqrt(34) sin(6)

12、* 5 + 0 x2AF3) cos(2.5f + 4) 6 * 27L + 1526 2.4L2022/9/1429long to floatint to floatint to floatint to float53.500000703.3970771362.5765882022/9/1430自动类型转换的原则int char, short 高低longunsigneddouble float转换由编译系统自动完成。转换按数据长度增加的方向进行,即按“向高看齐”的原则提升“较低”类型,以保证不降低精度。把表示范围小的类型的值转换为表示范围大的类型的值,从低到高转4. 输入并调试程序,观察运

13、行结果.#include int main() double f1=1.0e+10; double f2=3.14; printf(%f:%fn,f1); printf(%e:%en,f1); printf(%g:%gn,f1); printf(%f:%fn,f2); printf(%e:%en,f2); printf(%g:%gn,f2); return 0;%f:10000000000.000000%e:1.000000e+10%g:1e+10%f:3.140000%e:3.140000e+00%g:3.142022/9/1431按带小数点形式转换输出按科学表示形式转换输出按带小数点形式或

14、者科学表示形式转换输出d,ix,Xoucse,Efg%十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身int a=567;printf ( “%d”,a);int a=255;printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a)

15、;float a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.677890e+02567.789000567.789%说明:格式字符一般用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出格式字符表格9/14/202232.n对实数,指定小数点后位数(四舍五入)修饰符功 能m输出数据域宽,长度0)printf(“x1=%f,x2=%fn”,0.5*(sqrt(delta)-b)/a, 0.5*(-sqrt(delta)-b)/a); else if (delta=0)printf

16、(“x1=x2=%fn”,-0.5*b/a); elseprintf(“x1=%f+%fi,x2=%f-%fin”,-0.5*b/a,0.5*sqrt(-delta)/a,-0.5*b/a,0.5*sqrt(-delta)/a); return 0;6. 输入三角形的三边,用下述公式计算三角形的面积: ,其中 s=(a+b+c)/22022/9/1435#include #include int main( ) double a, b, c, s, area; printf(Please input a,b and c: n); scanf(%lf,%lf,%lf,&a,&b,&c); s =

17、 (a + b + c) / 2.0; area = sqrt(s * (s - a) * (s - b) * (s - c); printf(a=%7.2f, b=%7.2f, c=%7.2f , s=%7.2f n, a, b, c, s); printf(area=%7.2fn, area); return 0;if (a + b c & b + ca & a + c b) s = (a + b + c) / 2.0; area = sqrt(s * (s - a) * (s - b) * (s - c); printf(a=%7.2f, b=%7.2f, c=%7.2f , s=%7.

18、2f n, a, b, c, s); printf(area=%7.2fn, area);else printf(“input data errorn”);选做题:计算银行存款的本息。输入存款金额money、存期year和年利率rate,根据公式计算存款到期时的本息合计sum(税前),输出时保留小数点后两位。2022/9/1436#include #include int main() int year; double money,rate,sum; printf(“please input the money:n”); scanf(“%lf”,&money); printf(“please

19、input the year:n”); scanf(“%d”,&year); printf(“please input the rate:n”); scanf(“%lf”,&rate); sum=money*pow(1+rate),year); printf(“sum=%.2fn”,sum); return 0;37上机问题汇总printf(“%f”,1065/(24*13);C语言不做类型检查格式字符与输出项类型不一致,自动按指定格式输出第7题:计算5x2+2x+6的两个根。输出它的两个虚根注意C语言中确实会发生自动类型转换,但在写程序时,尽量使得一个表达式中的数据的类型保持一致。节省不必要

20、的空间损失。防止不同类型转换时的信息丢失。9/14/2022第三章习题讲解9/14/2022382.设a=1,b=2,c=3,则u的值为:u=a?b:c; u=(a=2)?b+a:c+a;3.设a=1,b=2,c=0,则下列表达式的值为:a & ! (b | c) & !a)! (a & b) | c? a | b : a & b & c! (a+bc) & b max) max = y;if (z max) max = z;return max;2022/9/144110.四边形的边长为a,b,c,d及一对对角之和angel,求四边形的面积。double QuaArea(double a,

21、double b, double c, double d, double e)double s = (a+b+c+d)/2.;double area;area = sqrt(s-a)*(s-b)*(s-c)*(s-d)- a*b*c*d*cos(e)*cos(e);return area;有问题吗?2022/9/144212.写程序求任意二次方程的根。void root(double a, double b, double c) double d = b*b - 4*a*c; if (a=0) if ( b!=0 ) printf(Only one root:x=%fn,-c/b); else

22、 if (c=0) printf( Any roots! ); else printf(No root !); else if (d 0.) printf(“Two different real roots:);else if (d = 0.)printf(Two same real roots: x1=x2=%fn, -b/2./a);elseprintf(Two different complex roots:); 2022/9/144322.写一个程序打印1至100之间的被6或7整除的数;修改这个程序使得它只打出被6或7之一整除的数(不包括同时被两者整除的数)。int main ()in

23、t i = 0;while (i = 100)if (i % 6 = 0 & i % 7 != 0) | (i % 6 != 0 & i % 7 = 0)printf(%dn, i);return 0;2022/9/1444补充题1. 求分段函数#include #include #define a 10double func(double );int main()double x;printf(Please input a number:n);scanf(%lf,&x);printf(y=%fn,func(x);return 0;double func(double x)double y;i

24、f (x=a)|(x=-a) y=0.0;else if (fabs(x)a) y=sqrt(a*a-x*x); else y=x;return y;2022/9/14452022/9/1446#includeint GradeIf(int);int GradeSwitch(int);int main()int n; printf(Input the mark from 0 to 99 n);while (scanf(%d, &n)=1)/ GradeIf(n); GradeSwitch(n);return 0;补充题2. 从键盘输入学生的考试成绩,利用计算机将学生的成绩划分等级并输。9099

25、为A级,8089为B级,7079为C级,6069为D级,059为E级。2022/9/1447int GradeIf(int n)if(n99 | n=90)printf(The grade is A!n);else if(n=80)printf(The grade is B!n);else if(n=70)printf(The grade is C!n);else if(n=60)printf(The grade is D!n);elseprintf(The grade is E!n);return 0;2022/9/1448int GradeSwitch(int n)if(n99 | n0)

26、n=-1;elsen=n/10;switch (n)case -1: printf(Input error!n);break; case 9:printf(The grade is A!n);break;case 8:printf(The grade is B!n);break;case 7:printf(The grade is C!n);break;case 6:printf(The grade is D!n);break;default:printf(The grade is E!n);return 0;2022/9/1449补充题3. 求水仙花数void method1(void)in

27、t i,j,k;for (i=1;i=9;i+)for (j=0;j=10;j+)for(k=0;k=10;k+)if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%d是水仙花数n,i*100+j*10+k);void method2(void)int i,m,n,l;for (i=100;i=999;i+)m = i/100;n = i/10%10;l = i%10;if(i=m*m*m+n*n*n+l*l*l)printf(%d是水仙花数n,i);补充题4. 完数游戏。如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。算法思想:su

28、m=0, m=2当m=1000时,反复执行(2.1), (2.2), (2.3), (2.4), 否则转(3) (2.1) k=m/2, n=0, j=1 (2.2) 当j=k时,反复执行(2.2.1), (2.2.2), 否则转(2.3) (2.2.1) if(j是m的因子) 执行n=n+j (2.2.2) j+ (2.3) if (m等于n) 则输出 完数 m ,计算sum=sum+m (2.4) m+输出sum值2022/9/1450int main()int i,j,sum,n; sum=0; for(i=2;i=1000;i+) n=0; for(j=1;j=i/2;j+) if(i

29、%j=0) n=n+j; if(n=i) sum+=i; printf(完数%dn,i); printf(1000之内完数和值=%dn,sum); return 0;2022/9/14512022/9/1452补充题5. 打印如下图案#define n 4int main() int i,j,k; for(i=0;i=n;i+) for(j=0;jn-i;j+)printf( );for(k=0;k=0;i-) for(j=0;j=n-i;j+)printf( );for(k=0;k=6) t=(a/2+1);for(n=2;nt;n+) if(prime(n)=1&prime(a-n)=1)

30、 printf(%ld=%ld+%ldn,a,n,a-n);break; return 0;long prime(long m) long i; if(i=1) return 0; for(i=2;i*i=m;i+)if(m%i=0) return 0; return 1;2022/9/14532022/9/1454给一个不多于3位的正整数,要求出它是几位数;分别输出每一位数字按新逆序输出各位数字,例如原数为321,应输出123算法思想:设a是整数变量;如果a999则输入错误如果a=0并且a=10并且a=100并且a1000则输出a是百位数个位数是a%10十位数是a/10%10百位数是a/10

31、0#include /程序分析int main () int x, a, b, c, d; scanf(%d, &x);if (x/100 = 10 | x 0) a = x / 100; b = x / 10 % 10; c = x - a * 100 - b * 10; d = c * 100 + b * 10 + a; printf(three,%d,%d,%d,%dn, a, b, c, d);/*百位数,十位数,个位数,逆序*/ else if (x/10 0) a = x / 10; b = x % 10; d = b * 10 + a; printf(two,%d,%d,%dn,

32、 a, b, d); /*十位数,个位数,逆序*/ else a = x; printf(one,%d,%dn, a, a); /*个位数,逆序*/return 0;9/14/202255第四章习题讲解9/14/2022564.写函数计算1!+2!+k!long SumFactor(int n)int i = 1;long f = 1, sum = 0;while (i = n)f = f * i;sum = sum + f;i+;return sum;2022/9/14572022/9/14589.用公式编程求圆周率的近似值#include #define PI 3.14159165int

33、main()int fi=1;double sum=0.0;double pi,term=1.0;double n;printf(please input the difference:n);scanf(%lf,&n);dosum=sum+term;pi=sqrt(6*sum);fi=fi+1;term=1.0/fi/fi; while(fabs(pi-PI)=n);printf(sum=%f,pi=%f,term=%dn,sum,pi,fi); return 0;12.求利用公式反正弦函数的近似值double asinh (double x) int i, n=10, sign=-1;dou

34、ble term, sum;term=x;sum=x;for(i=1;i=n;i+) term=term*x*x*(2*i-1)/(2*i); sum+=sign*term/(2*i+1)*(2*i-1); sign=-sign;return sum;2022/9/14592022/9/146014.辗转相减求最大公约数int gcd(int m,int n)if (mn)return gcd(n,m);else if (m=n)return m;else return gcd(m-n,n);int gcd1(int m, int n) int r,t; if (m n) t=m;m=n;n=

35、t; if (n = 0) return m; for (r = m-n; r != 0; r = m-n) m = n; n = r; if (m n) max1 = m;max2 = n;else max1 = n;max2 = m;while (scanf(%d, &n) = 1)if (max1 n) max2 = max1; max1 = n;else if (max2 n) max2 = n;printf(nmax1=%d,max2=%dn, max1, max2);return 0;21.求折线段的面积double FigureArea(void)double y1, y2, a

36、rea = 0.0;printf(Please input a series positive float number.n);if (scanf(%lf, &y2) != 1) return 0;while (scanf(%lf, &y1) = 1) area += (y1+y2)/2.0;y2 = y1; return area;2022/9/1462补充题1. 有一分数序列 2/1,3/2,5/3,8/5,13/8, 21/13求这个数列前20项之和。(32.660261) 第一项的分子为2,分母为1其它项分子分母之间的关系:下一项的分母是前一项的分子;下一项的分子是前一项的分子+分母;

37、2022/9/1463#include int main() double sum=0.0;int i; int a1=2,a2=1,tmp; for(i=1;i=20;i+) sum=sum+a1/(double)a2; tmp=a1; a1=a1+a2; a2=tmp; printf(sum=%lfn,sum); return 0;2022/9/1464补充题2. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第十天早上想再吃时,只剩一个桃子了。求第一天共摘多少桃子。(1534)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论