第一篇:C语言基础知识归纳
C语言基础知识
1.每个C程序有且只有一个主函数main(),且程序必须从main()函数开始执行,并在main()函数中结束。
2.在C语言中,用e来表示科学计数法时,规定在e的前面必须有数字,后面必须为整数。
3.用单引号括起来的一个字符常量只能存放一个字符;C语言中没有字符串变量,只能用字符数组来存储字符串。
4.外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。
5.在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内有效。
6.用sizeof(int)计算int类型数据的字节数。
7.C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。
8.预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。
9.feof函数的作用是检查文件是否结束,当结束时返回的值为非零,否则为零。
10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。
11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。
12.静态局部变量,只有当程序结束后,其值才释放。
13.当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元素的地址。
14.算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入时,其结果相同;算法正确的程序最终一定会结束。15.在C语言中,预处理命令行都以“#”开头;当需要时才用#include
17.共用体变量不能作为函数的参数,也不能使函数带回共用体变量。
18.指向函数的指针变量的定义形式为:数据类型(*指针变量)();,因此其为指向函数的指针变量。
19.用C语言编写的代码程序是源程序,只有通过编译、连接才能进行。
20.在说明为static时,其生存期得到延长,而其作用域并没有改
变,在定义后系统会自动帮它赋值为0,static为关键字不能被用作它用。
21.频繁地使用空语句会降低程序的可读性和运算速度。22.运算符%两边都应是整数,赋值语句左边应该是变量,而非表达式,强制转换语句强制类型应加括号。
23.在逻辑运算符中,其两侧的运算符对象为任意合法的表达式即可。
24.函数fread(&Iarray,2,16,fp)的功能是,从fp所指的数据文件中读取16次2字节的数据存储到数组Iarray中。25.整个流式文件也可以随机存取数据,C语言文件中有好多函数可以达到写入数据时,未经输入数据,达到不覆盖的目的,在进行写操作时,系统会自动关闭文件。
26.使用putchar、getchat、puts、gets、printf、scanf函数时,必须在程序的开头出现包含头文件#include”stdio.h”的命令行,而使用字符串处理函数时,必须在程序的开头出现包含头文件#include”string.h”命令行,而使用数学函数时,必须在程序的开头出现包含头文件#include”math.h”的命令行。
27.一个斜杠与小于等于127任意数字按一个字符计算,一个斜杠与任意一个字符按一个字符计算。
28.一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现多种算法。
29.根据C语言规定,注释语句可以换行写,并且一个“/*”和
其后紧跟的第一个“*/”中间的部分是注释内容,且注释内容不参与程序的运行。例如:b=0;/*b=20;给b赋值*/ 则b=0。30.sizeof是求字节数的运算符,包括‘ ’,而strlen是求字符串的实际长度的函数,不包括‘ ’,以‘ ’作为结束。31.在函数声明时,其中的形参变量、个数、函数的类型必须一致。
32.C语言源程序经编译后生成后缀为.obj的目标程序;C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件;用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中。并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。
33.switch括号后的表达式可以使任何表达式;case后的表达式必须是常量表达式,常量表达式中不能出现变量,且类型必须是整数、字符型或枚举型。
34.C程序必须由一个或一个以上的函数组成;函数调用可以作为一个独立的语句存在;若函数有返回值,必须通过return语句返回。
35.在C语言中,数据只能从实参单向传递给形参,称为“按值”传递。【在实参传递到形参时,是数值传递,而不是地址传递,形参中值的改变不会影响实参中的值。】
36.可以用typedef声明新的类型名来代替已有的类型名,而不能
增加新的类型。
37.在没有限制输出宽度时,一般浮点数的小数位数是6位,不管输出格式是%f或lf%均如此。
38.C语言中,函数的隐含存储类别是无存储类别。
39.当实参传递到形参时,地址传递时形参的改变影响实参。40.串的长度指的是串中的字符的个数,且其字符个数可以为零。41.C语言中数据类型有整型、实型、字符型等,实行数据分为单精度型和双精度型两种。
42.整型数组只能一个一个地输入或输出,而在字符型数组中可以对字符串整体地输入与输出。
43.C语言中,文件型指针变量的定义形式为:FILE *文件型指针名。C语言中对二进制文件的访问速度比文本文件快;C语言中,随机文件以二进制代码形式存储数据;C语言中的文本文件以ASCII码形式存储数据。
44.因为#define是宏定义的标志,而不是C语句,而printf是输出函数,因此其是C语句。
45.在实参传递给形参时,地址传递时能够改变,而数值传递时则不变。
46.在scanf函数中,必须含有输入项,并且需含有与之一一对应的转换说明符,在scanf函数的格式字符前可以加入一个正整数指定输入数据的宽度,但不可以实数指定小数位的宽度,输入项是地址表达式。
47.switch语句使用注意事项:(1)switch语句与if语句不同,仅能判断一种关系:是否恒等;(2)switch语句中case子句的常量可以使整型常量、字符型常量、枚举型数据,或是整型常量表达式,不允许变量;(3)在同一个switch中,case子句的常量不能相同,在嵌套的switch语句中,不同层次的switch之间,可有相同的常量;(4)default子句可以省略。例如:default:printf(“En”);(5)case和default子句只能在switch语句中使用,且case和default只起标号作用,可出现在switch中的任何位置;(6)case和default子句后面的语句序列允许由多个可执行语句组成,且不必用“{}”括起来,也可以为空语句;(7)switch语句中可省略break语句,但省略后会改变流程。
48.break语句是限定转向语句,它使流程跳出所在的结构,把流程转向所在结构之后。continue语句被称为继续语句。该语句的功能是使本次循环提前结束,即跳过循环体中continue语句后面尚未执行的循环体语句,继续进行下一次循环的条件判别。
49.在C语言中,一个程序必须有一个main()函数,但是其文件就不一定,因为其可以通过链接来实现多个子函数放到这个主函数中,主函数的位置是不固定的,可以根据自己的爱好和习惯来使用,在C语言中任何函数都不能调用主函数,且与函数的位置有关。在C程序的函数中不能定义另一个函
数。
50.在用fprintf输入时,要将其转换为二进制数形式放到文件中。51.由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。而目标程序为“.obj”,可执行程序为“.exe”。52.在C语言中,合法的标识符可以由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
53.C语言规定必须以main作为主函数名。程序要从main()函数开始执行,最后在main()函数中结束。54.赋值运算符左侧的操作数必须是一个变量。
55.在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。
56.在一个C语言源程序文件中所定义的全局变量,其作用域为:由具体定义位置和extern说明来决定范围。【全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序该变量是一个已在外部定义了的全局变量,这时全局变量的作用域从extern说明处起,延伸到该函数末尾。】
57.C语言中,凡是以“#”号开头的行,都成为“编译预处理”。对C原程序进行编译前,由编译预处理程序对这些变异预处理命令进行处理。
58.typedef语句的作用仅仅是用“标识符”来表示已存在的“类型名”,并未产生新的数据类型。
59.共用体变量中的所有成员共享一段公共存储区,所有成员的首地址相同。在每一个时刻所有的成员中只有一个有效,即只有最后一个被赋值的成员有效,其余的成员无效。60.C语言中注释可以出现在任意位置;C语言一行内可以写多个语句,一个语句可以写在多行上;C语言编写的程序可以放在多个程序文件中。
61.标识符只能由数字、字母和下划线组成,并且只能以字母和下划线开头。
62.在用基本输出语句printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出,如果格式说明个数多余输出项个数,则对于多余的格式项输出不定制或0。
63.二维数组定义和初始化允许省略行下标,不允许省略列下标。64.预处理命令行是在系统对原程序进行编译之前进行处理的,不是在程序执行的过程中。
65.gets和getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入。
66.动态变量和静态变量都是内存变量,而寄存器变量不保存在内存上,而是直接存储在CPU的寄存器中。变量的存储类别有自动、静态、寄存器、外部。
67.C语言的源程序是由函数构成的,其基本单位是函数,每一个函数完成相对独立的功能,其中至少包括一个主函数;C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上;C语言规定每个语句以分号结束。可随时添加注释,对程序没影响。
68.由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”。由汇编语言编写的程序称为“汇编程序”。对于计算机本身来说,它只能接收和处理由0到1的代码构成的二进制指令和数据。所以计算机能识别的程序是“目标程序”。而计算机可以直接执行的是可执行程序,即后缀为.exe的程序。
69.C语言源程序不能表示二进制,她
在C语言中,所有的数值型常量都带有符号,所以整型数量只区别整型和长整型两种形式,整型常量和长整型常量均可用十进制、八进制、十六进制3种形式表示。
70.宏名没有大小写限制。宏定义可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。宏代换可以代替任何数据类型,不受数据类型的限制。函数影响运行时间,宏调用影响编译时间。
71.字符数组可以只存放普通字符,不存放字符串。此时该字符数组没有存放结束标志‘ ’。
72.文件由数据序列组成,可以构成二进制文件或文本文件。
第二篇:语言基础知识
语言文字运用练习题
1.下面语段中加点的词语,使用恰当的一项是()
近日网上流传着香港的一份要求填上“草菅人命”形容警方才能得分的中文科测验卷。该试卷一旦流传,就引发了各方的议论,各种言论甚嚣尘上。在一般人眼中,这份试题的引导性是不言而喻的,资深中文科教师张月卿就直言,该试卷有很强的既定立场,而且立场失之偏激。但也有教师反问:“假如试卷是要求学生赞扬警方、贬低示威者,大家又会否同意呢?”“占中”引发的问题仍在持续发酵。A.一旦 B.甚嚣尘上 C.不言而喻 D.偏激 2.下列句子中,没有语病的一句是()
A.国际法庭因认定日本在南极海的“调查捕鲸”实质为“商业捕鲸”,判定其违反了国际公约,于3月31日颁布判决书,下令禁止日本船只在南极海停止以任何名义捕鲸。
B.近日,朱彦夫被中宣部评为全国首位“时代楷模”,但朱彦夫的先进事迹对于许多人了解得还远远不够。
C.湖南卫视明星亲子互动节目“爸爸去哪儿”自开播以来,众多粉丝除了关注五对父子的一举一动,也为节目组设置任务出谋划策。
D.毒品流向分散是我市毒品犯罪的一大特点。既有大量毒品从境外及外省市流入广州,又有相当数量的毒品从广州流向内地甚至境外。在市内,毒品犯罪呈现出从中心区域流向周边区域的特征。
阅读下面的文段,完成4~6题。
①,烟台大学7位保洁员吃学生剩饭的照片蹿红网络。这些老人 ② 食用学生的剩菜剩饭,只是为了向莘莘学子传递“节俭是一种习惯”的理念。
其实,我们 ③ 是一个崇俭抑奢的民族。《左传》有言:“俭,德之共也;侈,恶之大也。”李商隐《咏史》诗曰:“历览前贤国与家,成由节俭败由奢。”然而,不知从何时起,奢靡之风逐渐抬头,浪费现象悄然流行。一些人以为宁剩毋缺才够档次,以为一饭千金才算有面子,于是个人消费竞相攀比、④ 奢华。太史公高呼:“一饱之需,何必八珍九鼎?七尺之躯,安用千门万户?”司马光也谆谆告诫:“取之有度,用之有节,则常足。”
中国是一个人口大国,如果人人厉行节约,13亿人积腋成裘、聚沙成塔,那将是多么巨大的财富?相反,浪费起来,又将是多么巨大的损失? 4.文中加点字的注音和画线词语的字形全都正确的一项是 A.蹿(cuàn)红 奢靡(mí)宁(nínɡ)剩毋缺 一饱之需 B.蹿(cuàn)红 奢靡(mǐ)宁(nínɡ)剩毋缺 八珍九鼎 C.蹿(cuān)红 奢靡(mí)宁(nìnɡ)剩毋缺 厉行节约 D.蹿(cuān)红 奢靡(mǐ)宁(nìnɡ)剩毋缺 积腋成裘 5.文中①②③④处依次填入词语,恰当的一项是 A.①日前 ②自愿 ③一直 ④追逐
10.下列各句中,没有语病的一项是
A.我们是有过《诗经》的民族,我们是有过诗意表达的民族。我们需要诗歌,需要意义,我们需要生活;我们不光需要面包,还需要玫瑰。
B.南浔区从人民大会堂捧回了联合国教科文组织非物质文化遗产名录项目证书,标志着南浔古老的蚕桑习俗文化正式跻身世界级文化殿堂。
C.教育在综合国力的形成中处于基础地位,国力的强弱越来越多地取决于劳动者素质的提高,取决于各类人才培养的质量与数量。
D.为了避免广大教师在我省高中第一轮课程改革实验过程中不会无头绪、无目标,市教育局组织人员搜集、整理了大量的可供借鉴的案例。
11.下列各句中,加点的词语运用正确的一项是
A.当它们形成了向日葵群体之时,便互相手拉着手,一齐勇敢地抬起头来了。这时你会发现那偌大一片向日葵林子,竟然没有一株瘦弱或是低矮的向日葵。B.《平凡的世界》的热播,令部分观众直呼“触动泪点”,不仅是因为剧中那不可磨灭的各种美好情感和奋斗精神,更是因为剧作中有一段与自己早年经历相似的历史。
C.小说忌讳主题鲜明,作家在作品中往往用自己独特的生活经验和个性的艺术手法隐讳地表达自己的思想情感,但又不是让我们读者欣赏时雾里看花,水中望月。D.屋外的天空一扫连日的阴雨绵绵,久 违的阳光,让连日来裹在雨衣中的杭城市民蠢蠢欲动,纷纷晒出了自己心仪的赏花骑游图。
12.下列各句中,没有语病的一项是
A.被誉为工业设计界的“诺贝尔奖”的金圆规奖于2015年首次迈向国际,对于一位工业设计师而言,拿到“金圆规奖”是其设计生涯的最高奖项。
B.对那场战争、对那段历史能否始终保持正确的认识,是改善和发展中日关系的关键所在,也是中日经贸关系良好发展的重要条件。
C.法律专家认为,“海淘”虽然属于买卖双方私事,但跨境消费的特殊性决定了消费者仅凭个人之力难以有效维权,需要政府和监管部门出面予以法律支持和保护。
D.“抢红包”已成为今年春节的新现象,亲朋好友以这种最新的方式互赠红包,其真正价值在于它所承载的美好希望,年味则在这种愿景的催化下愈发浓郁。
13.下列各句中,没有语病的一句是()(3分)A.美国东部时间2015年4月12日下午近三时左右,前美国国务卿希拉里竞选总干事向支持者发布邮件,公布希拉里将角逐民主党总统候选人的消息。
B.湖南隆平种业有限公司生产销售“两优0293”水稻品种,去年在安徽致使至少万亩农田减产绝收,农民损失巨大。专家鉴定为天气原因引发的稻瘟病所致。
C.去年5月,广东省国家安全机关破获的一起境外间谍网络策反中国人的案件显示,计算机网络泄密事件已占泄密总数的70%以上,计算机网络泄密已经严重危及国家安全。
D.细数当下的热门投资移民国家,英国投资移民在美国、加拿大、德国等国家中,成为了最受中国富人家庭的中小学生欢迎的海外留学目的地。
阅读下面文字,回答:
散文是文学殿堂中一种影响广泛、()受读者()睐的文体。古今中外的文学大师们,以其洞幽入微的观察力、超脱尘世的秉性、细腻激扬的情愫,凭借生花的妙笔,写下了无数 ①、()炙人口的散文名篇。散文 ②,不仅()歌自然,更穿透人生,解剖社会。但优秀的散文如漫天繁星,总会令人 ③,又唯恐落得沧海遗珠之憾。
14.下列汉字依次填入语段中括号内,字音字形全部正确的一组是 A.倍 青qīn 脍huì 呕 B.备 亲qīng 烩huì 呕 C.备 青qīng 脍kuài 讴 D.倍 亲qīn 烩kuài 讴 15.在上面语段横线处依次填入词语,最恰当的一组是
A.①斐然成章 ②字字珠玑 ③目不暇接 B.① 文采斐然 ②包罗万象 ③应接不暇 C.①文采斐然 ②五花八门 ③应接不暇 D.① 斐然成章 ②琳琅满目 ③目不暇接 16.下列各句中,没有语病的一项是
A.今年的春运大幕已经开启,而与往年不同的是,随着全国高铁网络基本形成,“高铁春运”悄然升温,不少旅客都选择乘坐高铁出门旅游或回家过年。
B.新丝绸之路经济带和海上丝绸之路等多边和双边项目的启动显示出,中国希望利用自身的经济和金融力量,扩大政治影响力和战略挑战。
C.湖南籍夫妇周作堂、蒙桂凤遭遇车祸,近亲属将其器官捐献,使6人重获新生,4人重见光明,这一善举延续的不仅是一个个家庭的希望和未来,更是一个个鲜活的生命。D.12月12日,湖南省靖州苗族侗族自治县举办首届“省际牛王争霸赛”,来自云南、广西、湖南、贵州等四省区的84头“牛魔王”轮番登场,上演了一场精彩的斗牛民俗大餐,吸引了湘黔桂周边近万名群众前来观战。
17.下列选项中的诗句填入《野望》一诗划横线处,顺序恰当的一项是 西山白雪三城戍,南浦清江万里桥。。。。
①不堪人事日萧条 ②唯将迟暮供多病 ③天涯涕泪一身遥 ④跨马出郊时极目 ⑤海内风尘诸弟隔 ⑥未有涓埃答圣朝 A.②⑥⑤③④① B.④①⑤⑥②③ C.⑤⑥②③④① D.⑤③②⑥④①
第三篇:高考语文语言基础知识[定稿]
江海中学高二语文期末复习滚动训练
备:施凯杰 授课日期:_____年____月____日
1.下列词语中加点的字,每对的读音完全相同的一组是
()A.啜泣/辍学
落笔/落价
风雨如晦/诲人不倦 ......B.瘦削/削减
攻讦/诘问
提纲挈领/锲而不舍 ......C.果脯/胸脯
媲美/睥睨
言简意赅/垓下之围 ......D.陨落/殒命
吓唬/恐吓
姹紫嫣红/叱咤风云 ......
2.下列词语中加点的字,每对读音都不相同的一组是
()A.门槛/栏槛
衡量/车载斗量
宿敌/住了一宿 ......B.薄弱/单薄
供应/献愁供恨
新鲜/屡见不鲜 ......C.露天/露脸
中间/挑拨离间
强迫/差强人意 ......D.中流/中肯
当时/独当一面
便利/便宜行事 ......
3.下列词语中加点的字,每对的读音完全相同的一组是
()A.薄命/薄饼
为难/为虎作伥
解除/浑身解数 B.龟甲/龟裂
露宿/露出马脚
模糊/模特表演 C.创举/创痕
间架/间不容发
冠军/冠冕堂皇 D.屏除/屏气
角斗/角逐中原
乘便/乘风破浪
4.下列词语中加点的字,每对读音都不相同的一组是
()A.拗口/执拗
重复/安土重迁
省悟/反躬自省 B.露脸/雨露
塞外/茅塞顿开
咀嚼/含英咀华 C.稽首/稽查
屏障/敛声屏气
气度/审时度势 D.徘徊/低徊
纤细/纤毫毕现
和诗/和衷共济
5.下列词组中加点字的读音全不相同的一组是
()A.都市/都有
卡车/卡片
屏气凝神/屏退左右 B.颤抖/战栗
横亘/蛮横
济济一堂/同舟共济 C.论语/论辩
假托/假肢
前仆后继/风尘仆仆 D.稽查/稽首
奢靡/披靡
相机行事/相貌堂堂
6.下列各句中加点的成语使用恰当的一句是:
A.有的同志孤陋寡闻、见微知著,他们的见解往往是片面的,甚至是错误的。B.如果我们抱残守缺,在创作上不能积极创新,我担心有一天我们的孩子将把童话弃如敝屣。C.他在敌人的监狱里受尽折磨,浑身被打得遍体鳞伤。
D.七真祠里供着七尊像,有坐着的,站着的,有的仰天大笑,有的怒目而视,每一尊都惟妙惟肖。
7.下列各句中加点的成语使用恰当的一句是
A.其中所收藏的埃及、希腊、罗马古文物不可胜数,所收藏的名画只有巴黎的罗浮宫可与分庭抗礼。
B.到了我从燕京大学毕业回来,因为受着捐款繁重的影响,早已穷得不亦乐乎。
C.和人谈话未必真拘束,但如同生人,大人先生等等,正襟危坐地谈起来,却真不能说是乐事。
D.这部长篇小说确实来得不易,作者披肝沥胆,花了十几年的时间才写成。
8.下列各句中加点的成语使用恰当的一句是:
A.我没有来得及按照总理的指示加工这个戏。这件事,我一直耿耿于怀,深感有负于总理的委托。
B.这个政府(注:蒋介石国民党政府)一心一意地打了十年的内战,将刀锋向着同胞,置一切国防事业于不顾。
C.战士们正趴在堑壕沿儿上,紧握上着明晃晃的剌刀的枪支,虎视眈眈地望着北营。D.各级党组织要进一步发挥组织领导作用,发扬光大“五讲四美”活动的成果。
9.下列各句中加点的成语使用不恰当的一句是:
A.这个青年穿戴倒也朴素大方,可是脸上却架着一副没有撕掉商标的蛤蟆眼镜,给人一种不伦不类的感觉。
B.李自成不是刚愎自用的人,他对明室的待遇也宽宏大度,绝不斤斤计较。
C.鲁迅先生对于友人,尤其对于青年,爱护无所不至,不但尽心竭力,还常主动帮忙。D.它既要字斟句酌,语意明确,也要铿锵悦耳,引人入胜。这就是说,广播的话,可也是很好的散文。
10.下列各句中,加点的成语使用不正确的一句是:
A.约旦国王侯赛因生前曾多次在为化解战争危机的谈判中,晓之以理,折冲樽俎,维护了中东地区的和平。
B.侯老很动感情的说:“搞旅游,建宾馆,无可厚非;但绝不能焚琴煮鹤,任意破坏植被,水源和野外文物。”
C.刚一起跑,高三(I)班的夏曦滑倒了,他爬起来奋力追赶,离终点20米时终于成为后起之秀,夺得3000米跑的第一名。
D.评论家也必须深入生活,否则,评论中隔靴搔痒的现象就难免要出现。
11、下列有语病的一句是
A.在欢迎的人群中,既有70多岁的老人,也有在人们怀抱里的两岁的孩子。
B.经过刻苦的练习,在选拔赛上他射击的五次成绩平均都在95环以上。
C.语文是各门学科的基础,学习自然科学如果不掌握语文这一工具,就不可能正确理解概念和原理,不可能有严密思维的能力。
D.画家蔡若虹到延安附近却受阻,只好绕道香港、河内、昆明,历时七个月才到达理想之地。
12.下面句子有语病的一句是
A.他尽管前几年遇到了许多挫折,但是一点也不灰心。
B.王芳那篇作文昨天已经写好了,今天交给了老师。
C.文章对环境污染问题作了比较具体的分析,同时也概括地介绍了关于环境科学的基本知识,人们对环境科学引起了重视。
D.我有一个印象,喜欢搞理论的人多,肯在观察、实验上用功夫的人少。
13、没有语病或歧义的句子是
A.这本书记载了陈毅同志在抗日战争时期的斗争业绩,刻画了他可敬、可爱的形象,再一次激起了人们对这位革命前辈的深切怀念。
B.曹丕与曹植本是亲兄弟,然而由于争权夺势,曹丕不是竟然依仗权势,威逼曹植,要他在七步之内吟成一首诗,否则便“决不姑恕”。
C.澳大利亚人麦士几十年来在许许多多厕所的门上画了彩画,给人们增添了生活情趣。他去世后,群众虽然很怀念他,但是艺术界却不把他列为艺术家。
D.这个观点,最近报刊上提出了一些异议,我以为是正确的。
14下列各句中没有语病的一句是
A.一篇议论文观点正确、论据充分、结构完整,是衡量其好坏的重要标准。
B.由于《古文观止》具有特色,自问世以后近三百年来,广为传布,经久不衰,至今仍不失为一部有价值的选本。
C.采取各种办法培养餐饮业服务人员的水平,尤其是青年同志的水平,是当务之急。
D.市领导在检查某市属国营企业工作时,提醒他们要向竞争对手南方企业学习。
15下列各句没有语病的一句是
A.比赛采用马拉松竞赛方法,取男女各前三十名。
B.丈夫看着妻子黑发中夹藏着的白发,妻子看着丈夫脸上的皱纹,两个人都觉得又增加了几根。
C.可当他经过原来的办公室时,却闻到扑鼻的酒香,刺耳的狂笑,窗口上那前仰后合的黑影,使他头皮发炸。
D.有关专家认为,这部专著标志着我国的巴克莱研究朝世界一流水平迈进了坚实有力的一大步。
16.字形全正确的一项()A.缔结
取缔
根蒂
毫无介谛
B.谍报
间谍
通牒
图牒
C.影碟
赎罪
喋喋不休
案黩劳形
D.反馈
反刍
不同反响
反躬自问 17.字形全正确的一项()
A.荒废
枉费
废黜
废解
B.蜚声文坛
流言蜚语
妄自菲薄
缠绵悱恻 C.成绩斐然
伏首帖耳
服赝
心悦诚服 D.两幅对联
名副其实
如雷灌耳
醍醐灌顶 18.字形全正确的一项()A.哄传 轰动 合盘托出
貌合神离
B.宏扬 洪福 宏观世界
宽洪大量
C.装簧 弹簧 涣然冰释
巧舌如簧
D.惠顾 惠存 融汇贯通
心灵神会
19.下列词语中都有错别字,其中有两个错别字的一组是()
A.既往不究
出类拔萃
指手划脚
捎纵即逝
B.和衷共济
板上走丸
惊慌失措
事倍工半 C.姗姗来迟
山青水秀
融会贯通
轻歌慢舞 D.稳操胜券
瑕不掩瑜
惹是生非
原形必露
20.下列四组词语中都有错别字,其中只有一个错别字的一组是()A.苦心孤诣
宣赫一时
挺而走险
畏葸不前 B.佶屈聱牙
如法泡制
未雨绸缪
蓬壁生辉 C.戎马倥偬
明眸善睐
罄竹难书
繁文辱节 D.闲情逸志
相形见绌
顿开茅塞
运筹帷握
11.下列词语中加点的字,每对的读音完全相同的一组是
答案:B 解析:B项,xuē,jié,qiè。A项,chuò、luò/lào、huì;C项,fǔ/pú、pì、ɡāi;D项,yǔn、xià/hè、chà/zhà。
12.下列词语中加点的字,每对读音都不相同的一组是答案:C 解析:A项,kǎn/jiàn,liáng/liáng,sù/xiǔ;B项,bó/bó,gōng/gōng,xiān/xiān;C项,lù/lòu,jiān/jiàn,qiǎng/qiáng;D项,zhōng/zhòng,dāng/dāng,biàn/biàn。13.下列词语中加点的字,每对的读音完全相同的一组是
答案:D 解析:A项,薄(bó)命/薄(báo)饼,为(wéi)难/为(wèi)虎作伥,解(jiě)除/浑身解(xiè)数;B项,龟(gūi)甲/龟裂(jūn),露(lù)宿/露(lòu)出马脚,模(mó)糊/模(mó)特表演;C项,创(chuàng)举/创(chuāng)痕,间(jiān)架/间(jiān)不容发,冠(guàn)军/冠(guān)冕堂皇;D项,屏(bǐng)除/屏(bǐng)气,角(jué)斗/角(jué)逐中原,乘(chéng)便/乘(chéng)风破浪。14.下列词语中加点的字,每对读音都不相同的一组是
答案:C 解析:A项,ào/niù,chóng/zhòng,xǐng;B项,lòu/lù,sài/sè,jǔ;C项,qǐ/jī,píng/bǐng,dù/duó;D项,huái/huí,xiān,hè/hé。
15.下列词组中加点字的读音全不相同的一组是
答案:B 解析:A项,dū/dōu,kǎ/kǎ,bǐng/bǐng;B项,chàn/zhàn,héng/hèng,jǐ/jì; C项,lún/lùn,jiǎ/jiǎ,pū/pú;D项,jī/qǐ,mí/mǐ,xiàng/xiàng。
25.选B。A项“见微知著”是见到一点苗头,就能知道其发展的趋向和实质性的问题。C项“遍体鳞伤”与“浑身”重复。D项“惟妙惟肖”形容描写或模仿得非常好,非常*真。
26.选C。A项“分庭抗礼”比喻彼此以平等或对等的关系相处。B项“不亦乐乎”指心里十分高兴。D项“披肝沥胆”比喻竭尽忠诚,开诚相见。
27.选B。A项“耿耿于怀”多含贬义。C项“虎视眈眈”含贬义。D项“发扬光大”不能带宾语。28.选C。“无所不至”含贬义。29.选C。“后起之秀”是后出现或新成长起来的优秀人物。
29.B.“平均”“都”只能用其中一个。
30.C.“引起了”应置“人们”前。
31.A.B.“不是”后差“吗?”。C.“群众”“虽然”应换位。D.什么“是正确的”有起义。
32.D.A.应分别在“正确”、“充分”、“完整”后加“与否”。B.“由于”不删则此句无主语。C.“培养„„水平”似不妥,也应“尤其是培养餐饮业服务青年的水平”。
33.D.A.“取”应放在“各”后。B.起码错在“皱纹”不能“增加了几根”„„。C.“闻到„„狂笑”不配。
18B(毫无芥蒂、案牍劳形、不同凡响).19B(费解、服膺、两副对联).20B(和盘托出、装潢、融会贯通、心领神会)
21.C(A“究”为“咎”;“划”为“画”,“捎”应为“稍”;B“板”应为“坂”,“慌”应为“惶”,“工”应为“功”;“青”应为“清”“慢”应为“曼”;D中“必”应为“毕”22C(煊赫一时、铤而走险、如法炮制、繁文缛节、运筹帷幄)
第四篇:C语言基础知识总结
C语言基础知识总结
主要内容:1.C数据类型
2.简单的算术运算和表达式
3.键盘输入和屏幕输出
4.选择控制结构
总结风格:分条罗列,主要是知识点,有例题不多
5.循环控制结构
一、C数据类型
1.C语言处理两种数据:常量和变量
2.常量:整形常量、实型常量、字符常量、字符串常量、枚举常量 3.整形常量:正整数、负整数、零
eg: 10,-30,0 4.实型常量:实数、小数、浮点数
eg: 3.14,-0.56,18.0 5.字符常量:字符型常量、用单引号括起来的任意字符
eg: 'x' 'X' '?' ',' '9' 6.字符串常量:用双引号括起来的一个或多个字符
eg: “x” “Hello”
“Y78” 7.在C程序中,整型常量可以用十进制、八进制、十六进制形式表示,但编译器都会自动将其转换成二进制存储
8.整型常量的类型:长整型、短整型、有符号、无符号。9.不同进制的整型常量的表示形式:
1)十进制:0~9数字组合,可带正负号
eg: 256,-128,0,+7
2)八进制:0开头,后面跟0~7数字组合eg: 021,-017
3)十六进制:0x(0X)开头,后跟0~9,a~f(A~F)数字组合eg:0x12,-0x1F 10.不同类型的整形常量的表示形式:
1)有符号整型常量:默认int型定义为有符号整数,无需signed
eg:10,-30,0
2)无符号整形常量:常量值后跟u或U,只能表示>=0的数
eg:30u,256U
3)长整型常量:常量值后跟l或L
eg:-256l,1024L
4)无符号长整型常量:常量值后跟LU、Lu、lU、lu
eg:30lu 11.C程序中,实型常量两种表示形式:小数、指数 12.不同形式的实型常量的表示形式:
1)十进制表示形式:数字和小数点组成,必须要有小数点,整数部分可省略
eg:0.123,-12.35,.98
2)指数形式:e或E代表以10为底的指数,e左边是数值部分(有效数字,可以是整数、小数,不能省略),e右边是指数部分(必须是整数形式)
eg:3.45e-6 13.实型常量有单精度和双精度之分,无有符号和无符号之分 14.不同类型的实型常量表示形式:
1)单精度实型常量:常量值后跟F或f
eg:1.25F,1.25e-2f
2)双精度实型常量(double):实型常量默认按双精度处理
eg:0.123,-12.35,.98
3)长双精度实型常量(long double):常量值后跟L或l
eg:1.25L 15.变量:在程序执行过程中可以改变的量
16.变量在必须先定义后使用,定义时需要声明变量的类型和变量名,一般形式:类型关键字
变量名;
17.关键字是C语言预先规定具有特殊意义的单词,类型关键字用于声明变量的类型
18.标准C语言编写的程序都是以main()作为开头,指定了C程序执行的起点,在C程序中只能出现一次,称为主函数
19.C程序总是从main函数开始执行,与他在程序中的位置无关,main函数主体部分称为语句,用{}括起来,一般C语句以;结束
20.变量的类型决定了编译器为其分配内存单元的字节数、数据在内存单元中的存放形式、该类型变量合法的取值范围以及该类型变量可参与的运算种类
21.变量名是用户定义的标识符,用于标识内存中具体的存储单元,存放的数据称为变量的值
22.新数据存放于存储单元时,旧数据将会被修改,反应变量的值是可以改变的
23.变量名的命名规则:
1)标识符只能由英文字母、数字、下划线组成 2)标识符必须以字母或下划线开头
3)不允许使用C关键字为标识符命名
4)标识符可以包含任意多个字符,但一般会有最大长度限制,预编译器有关,一般不会超过,最好不超过8个字符
注意:标识符区分大小写
eg:x
y3
_imax
ELSE X A_to_B(合法)
eg:7x int #No
bad one re-input(不合法)24.标准C规定所有变量必须在第一条可执行语句之前定义
25.在同一条语句中可以同时定义多个相同类型变量,多个变量之间用逗号分隔,没有顺序要求
26.在使用标准输入/输出函数时,必须在程序开头加上编译预处理命令
27.
29.%d按十进制整数个格式输出,%f按十进制小数格式输出,一般输出6位小数,%c输出一个字符,n换行,双引号内字符原样输出
30.不同类型的数据在内存中占用不同大小的存储单元,他们所能表示的数据的取值范围各不相同,不同类型的数据表示形式及其可以参与的运算种类也不同
31.定义整型变量时,只要不指定为无符号型,其隐含类型为有符号型,signed通常省略不写
32.C程序中每个变量的值都是按字节编址,都被存储在内存中特定的存储单元中,这个存储空间实际是一个线性地址表,即每个字节的存储空间对应一个唯一的地址
33.1个字节等于8个二进制位,即8个位为一个字节,一个字节可以表示的整数最小为0,最大255,即8个位可以表示0-255之间的数,一个二进制位的值只能是0或1 34.同种类型在不同的平台所占字节数不同,要计算数据类型所占内存空间的字节数需要用sizeof()运算符
35.sizeof是C语言关键字,不是函数名,sizeof(变量名)计算一个变量所占内存的字节数 36.计算不同类型运算符的表达式时,要考虑运算符的优先级和结合性 37.正数的反码、补码与原码都相同,负数的补码等于反码加1 38.在计算机内存中负数都是用补码来表示
39.对于实数,无论小数海曙指数形式,在计算机内存中都采用浮点形式来存储
40.浮点数分为阶码、尾数两部分,实数N=S*pow(r,j),S为尾数(无论正负,规定用存小数),j为阶码(无论正负,必须是整数),r是基数
eg:10.0111=0.100111*pow(2,10)41.阶码所占位数决定实数的取值范围,尾数所占位数决定实数的精度,尾数的符号决定实数的正负,阶码和尾数的字节大小与编译器有关
42.float型变量能接收实型常量的7位有效数字,double型变量能接收16位
43.运算符的优先级:单目运算<算术运算<关系运算<逻辑运算<条件运算<赋值运算<逗号运算
44.素数:又称质数,指在大于1的自然数中,除1和本身不能被其他自然数整除的数 45.合数:指在自然数中除1和本身外还能被其他自然数整除的数 46.因子:所有能整除这个数的数,不包括自身,但包括1 47.闰年:能被4整除但不能被100整除,或能被400整除
二、简单的算术运算和表达式
1.条件运算符是C语言提供的唯一一个三元运算符,C语言中没有幂运算符 2.只有计算相反数是一元运算符,其余运算符都是二元运算符
3.一元运算符也叫单目运算符,二元运算符也叫双目运算符,三元运算符也叫三目运算符 4.整数除法的结果是整数,浮点数除法的结果是浮点数
5.求余运算限定参与运算的两个操作数必须为整型,余数的符号与被除数的符号相同,不能对两个实型数进行求余运算
6.所有的算术运算符中只有一元的去相反数运算符为右结合,其余的结合性都为左结合 7.同一优先级的运算符进行混合运算时,从左向右依次进行
8.运算符的优先级:单目运算>算术运算>关系运算>逻辑运算>条件运算>赋值运算>逗号运算
9.计算并输出一个三位整数的个位、十位、百位数字之和 #include
12.自增自减运算符作为前缀时,先执行加1或减1然后使用;自增自减运算符作为后缀时,先使用再执行加1或减1; 13.考虑优先级与结合性的实例
m=-n++《=》m=-(n++)《=》m=-n,n=n+1;//正面:-和++都是一元运算符,优先级相同,此时要考虑结合性,结合性都是右结合的,所以先算++后算-//反面:如果等价m=(-n)++就不合法了,因为表达式不能进行自增操作 14.scanf函数和printf函数都是C的标准输入/输出函数,&为取地址运算符 15.宏常量与宏替换:
1)在程序中直接使用的常数称为幻数,将幻数定义为宏常量或const常量是为了提高程序的可读性和可维护性
2)宏常量也称符号常量,没有数据类型,编译器不对其进行类型检查,只进行字符串替换
3)宏定义一般形式:#define 标识符 字符串。标识符被称为宏名,宏名与字符串之间可有多个空白符,不加等号,结尾不加分号
4)宏常量是由宏定义编译预处理命令来定义,宏名替换成字符串的过程称为宏替换,宏替换不做任何语法检查
5)当宏定义是一个表达式时,调用时,是一个数就可以直接带入,而是表达式也要看成是一个数代进宏定义表达式中,而看成一个数这就要求把调用的数加上圆括号,为了减少不必要的错误,最好都加上圆括号
6)宏替换的过程是将宏名原样替换成字符串,而不是直接计算出值,所以要用调用后的结果参与其他运算就需要把调用的结果加上圆括号
7)例题: #include
//N=2 #define M N+1
//M=2+1 #define NUM 2*M+1
//NUM=2*2+1+1=6 void main(){ int i;for(i=1;i<=NUM;i++);printf(“%dn”,i);//执行完空循环,i=7 i--;
// i=6 printf(“%dn”,i);}
8)例题: #include
//b=4+4*4+4=24,解释见5)printf(“b=%dn”,b);}
9)例题: #include
//b=4+4*4+4/(2+2)=21解释见6)printf(“b=%dn”,b);}
10)例题: #include
//b=(4+4)*(4+4)=64
printf(“b=%dn”,b);}
11)例题: #include
//b=((4+4)*(4+4))/(2+2)=16 printf(“b=%dn”,b);} 16.const常量
1)const常量只能在定义时赋初值,因为编译器将其放在只读存储区,不允许在程序中修改
2)const常量的定义一般形式:const 类型名 标识符=字符串;//将标识符声明为具有该数据类型的const常量
3)const是一种类型修饰符,const常量具有数据类型,编译器要对其进行类型检查 17.表达式中的自动类型转换:
1)表达式中,操作数类型相同,运算的结果类型与操作数类型相同
2)表达式中,操作数类型不相同,C编译器自动将所有操作数进行类型提升,转换成同一类型,所占字节最大,再计算 18.赋值中的自动类型转换:
1)赋值运算符左侧变量与右侧表达式类型不同时,发生自动类型转换:右侧表达式的值转换成左侧变量的类型 19.强制类型转换:
1)强制类型转换运算符是一元运算符
2)强制类型转换也称强转,是将表达式的值转换为任意类型,并不改变变量本身的数据类型
3)强转一般形式:(类型)表达式
4)演示强制类型转换运算符的使用 #include
1)使用C标准数学函数,要在程序开头加上编译预处理命令:#include
void main(){ float a,b,c,s,area;printf(“Input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);s=(a+b+c)/2;area=(float)sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%fn”,area);} 21.赋值运算符的左侧不能出现表达式,变量与变量之间可以赋值
例1:若有定义:int a,b,c;下列表达式中哪一个是合法的C语言赋值表达式(C、D)
A)a=7+b=c=7
B)a=b++=c=7
C)a=(b=7,c=12)
D)a=3,b=a+5,c=b+2
//A.7+b表达式不能做左值
B.b++表达式不能做左值
C.逗号表达式a=12 D.依次赋值
例2:下面不正确的赋值语句是(B)
A)a=++a
B)a=b++=10
C)a+=b
D)a=1>'a' //D.算术运算符优先级高于赋值运算符,先算1>'a'再将其结果赋给a
例3:若有下列定义:int a=3,b=2,c=1;以下选项错误的赋值表达式是(A)
A)a=(b=4)=3
B)a=b=c+1
C)a=(b=4)+c
D)a=1+(b=c=4)//A.先计算圆括号里的值等于4,然后按照赋值表达式的顺序从右向左计算,将3赋值给4这是不对的,即赋值号左侧只能是变量,不能出现表达式b=4
三、键盘输入和屏幕输出
1.字符常量:
把字符放在一对单引号内,适用于多数可打印字符 2.转义字符:
以反斜线()开头,也是放在一对单引号内,适用于控制字符(如回车符,换行符)3.常用的转义字符:
1)'n' — 换行
8)'a' — 响铃报警提示音
2)'r' — 回车(不换行)
9)'“' — 一个双引号
3)' ' — 空字符
10)''' — 一个单引号
4)'t' — 水平制表
11)'' — 一个反斜线
5)'v' — 垂直制表
12)'?' — 问号
6)'b' — 退格
13)'ddd' —1到3位八进制ASCII码值所代表的字符
7)'f' — 走纸换页
14)'xhh' —1到2位十六进制ASCII码值所代表的字符 4.n,是将光标移到下一行起始位置,r是将光标移到当前行的起始位置
5.t,是水平制表符,相当于按下Tab键,每次按下Tab键并不是从当前光标位置向后移动一个Tab宽度,而是移到下一个制表位
实际移动的宽度视当前光标位置距相邻的下一个制表位的距离而定
6.制表位,屏幕上的一行被分为若干个域,相邻域之间的交接点称为制表位,每个域的宽度就是一个Tab宽度,多数习惯上为4 7.当转义序列出现在字符串中时,是按单个字符计数的
8.一个整形数在内存中是以二进制形式存储的,而一个字符在内存中也是以其对应的ASCII码的二进制形式存储的,但char型数据在内存中只占一个字节,而int型数据在16位系统中占2个字节,32位系统占4个字节
9.在ASCII码取值范围内,char型数据可以和int型数据进行混合运算,char型数据也能以int型输出,直接输出其对应的ASCII码的十进制值 10.字符的输入/输出:
1)getchar()和putchar()是C标准函数库中专门用于字符输入/输出的函数,功能是只能输入/输出一个字符
2)例:从键盘输入一个大写英文字母,将其转换为小写字母显示在屏幕上 #include
ch=ch+32;putchar(ch);//第二次按回车,将显示转换后的结果
putchar('n');//注意:putchar()内一定要有参数,参数就是待输出的字符,可以是可打印字符,也可是转义字符 } 11.数据的格式化屏幕输出:
1)函数printf()的一般格式:printf(格式控制字符串);或者printf(格式控制字符串,输出值
参数表);
2)格式控制字符串包括:格式转换说明符,需要原样输出的普通字符
3)函数printf()的格式转换说明符:
%d — 输出带符号十进制整数,整数符号省略
%u — 输出无符号十进制整数
%o — 输出无符号八进制整数,不输出前导符0
%x — 输出无符号十六进制整数(小写),不输出前导符0x
%X — 输出无符号十六进制整数(大写),不输出前导符0x
%c — 输出一个字符
%s — 输出字符串
%f — 以十进制小数形式输出实数,包含单,双精度,隐含6位小数,但并非全是有效数字,单精度有效7位,双精度16位
%e — 以指数形式输出实数(小写e表示指数部分),小数点前有且仅有一位非0数字
%E — 以指数形式输出实数(大写E表示指数部分)
%g — 自动选取f或e格式中宽度较小的一种使用,不输出无意义的0
%% — 输出%
4)输出值参数表:需要输出的数据项的列表,可以是变量或表达式,逗号隔开,类型与格式转换说明符相匹配
5)每个格式转换说明符与输出值参数表中的输出值参数一一对应,没有输出值参数,格式控制字符串就不需要格式转换说明符
6)例:从键盘输入一个大写英文字母,将其转换为小写字母和其十进制ASCII码值显示在屏幕上
#include
7)函数printf()中的格式修饰符:在%和格式符中间插入格式修饰符,用于输出格式的微调,如:指定输出域宽、精度、左对齐等
英文字母l — 修饰格式符d,o,x,u时,用于输出long型数据
英文字母L — 修饰格式符f,e,g时,用于输出long double型数据
英文字母h — 修饰格式符d,o,x时,用于输出short型数据
输出域宽m — m为整数,输出时占m列,若m>0,当数据宽度小于m时,域内右靠齐,左补空格,当数据宽度大于m时,修饰符失效,按实际宽度输出,若m有前导符0,左边多余位补0;若m<0,输出数据在域内左靠齐
显示精度.n — n为大于等于0的整数,精度修饰符位于最小域宽修饰符之后,由圆点和整数构成,对于浮点数,用于指定输出的浮点数小数位数;对于字符串,用于指定从字符串左侧开始截取的子串字符个数
8)使用const常量定义pi,编程从键盘输入圆的周长和面积,使其输出数据保留两位小数
#include
1)函数scanf()的一般格式:scanf(格式控制字符串,参数地址表);
2)格式控制字符串:包括格式转换说明符,分隔符
3)格式转换说明符以%开始,以格式字符结束,用于指定各参数的输入格式
4)函数scanf()的格式转换说明符:
%d — 输入十进制整数
%o — 输入八进制整数
%x — 输入十六进制整数
%c — 输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入
%s — 输入字符串,遇到第一个空白字符(包括空格、回车、制表符)时结束
%f或%e — 输入实数,以小数或指数形式输入均可
%% — 输入一个%
5)参数地址表:由若干变量的地址组成的列表,用逗号分隔
6)函数scanf()中的格式修饰符:在%和格式符中间插入格式修饰符
英文字母l — 加在格式符d,o,x,u之前,用于输入long型数据;加在f,e之前,用于输入double型数据
英文字母L — 加在格式符f,e之前,用于输入long double型数据
英文字母h — 加在格式符d,o,x时,用于输入short型数据
输出域宽m — m为正整数,指定输入数据的宽度,系统自动按此宽度截取所需数据
显示精度.n — n为0或正整数,scanf()没有精度格式修饰符,输入时不能规定精度
忽略输入修饰符* — 表示对应的输入项在读入后不赋给相应的变量
7)函数scanf()输入数值型数据时,被认为输入结束的几种情况:遇空格符、回车符、制表符;达到输出域宽;遇非法字符输入
8)如果函数scanf()的格式控制字符串中存在除格式转换说明符以外的其他字符,必须将这些字符原样输入 #include
int a,b;scanf(”%d %d“,&a,&b);
//以空格作为分隔符,等价于scanf(”%d%d“,&a,&b),等价于scanf(”%d %d“,&a,&b),printf(”a=%d,b=%dn“,a,b);//实际输入时,空格、回车符、制表符都可作为分隔符,即输入:12空格34 12回车34 12制表符34均可,}
#include
#include
#include
printf(”a=%d,b=%dn“,a,b);}
#include
#include
scanf(”%d%*c%d“,&a,&b);//任意字符都可作为分隔符,即输入:12,34或12?34或12+34结果都一样
printf(”a=%d,b=%dn“,a,b);}
#include
printf(”a=%d,b=%dn“,a,b);//输出a=12,b=56 }
对于程序
#include
如果在scanf()函数中忘记在变量前加取地址运算符&,会导致非法内存访问 13.%c格式符使用几种情况:
1)用%c格式读入字符时,空格字符和转义字符(包括回车)都会被当做有效字符读入
例:键盘输入一个整数加法算式:操作数1+操作数2,输出:操作数1+操作数2=计算结果
#include
void main()
{
int data1,data2;
char op;
//输入:12空格+空格3
回车//输出:12-858993460=-858993448 printf(”Enter data1+data2n“);//输入:12空格3
回车//输出:12 3=15 scanf(”%d%c%d“,&data1,&op,&data2);//输入:12+3
回车//输出:12+3=15 printf(”%d%c%d=%dn“,data1,op,data2,data1+data2);}
2)先输入一个数据后再输入字符型变量时,输入一个数据后,输入的回车符将被当做有效字符读给字符型变量
例:编程从键盘先后输入int型、char型和float型数据,要求每输入一个数据就显示这个数据的类型和数据值
#include
printf(”Please input a character:“);scanf(”%c“,&b);printf(”chracter:%cn“,b);
printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);} 14.%c格式符存在问题的解决方法
1)用函数getchar()将数据输入时存入缓冲区中的回车符读入,以避免被后面的字符型变量作为有效字符读入 #include
//函数getchar()的返回值是一个回车符,已经避免了错误,不需要再将其赋给字符型变量使用
printf(”Please input a character:“);scanf(”%c“,&b);printf(”chracter:%cn“,b);
printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);}
2)在%c前面加一个空格,将前面数据输入时存于缓冲区的回车符读入,避免被后面的字符型变量作为有效字符读入
#include
printf(”Please input a character:“);scanf(” %c“,&b);//在%c前面加空格,将存于缓冲区中的回车符读入
printf(”chracter:%cn“,b);
printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);} //解释:在%c前加空格为什么能将存于缓冲区中的回车符读入
因为如果函数scanf()的格式控制字符串中存在除格式转换说明符以外的其他字符,必须将这些
字符原样输入,所以在%c前加空格,就必须在输入字符型数据前先原样输入空格,而空格,回车符,制表符在
函数scanf()输入数值型数据时都代表输入结束,由实践可知,空格符、回车符、制表符在输入时等效
所以,缓冲区中的回车将代替需要原样输入的空格,因此,实际上,在%c前增加空格或者Tab键都可以完成,并且与增加的数量无关,且可以混合增加
3)*经典例题:编程实现键盘任意输入字符,统计字母、数字、空格、其他字符数量 首选字符串的方法: #include
for(i=0;a[i]!=' ';i++){
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))m++;
else if(a[i]>=0&&a[i]<=9)n++;
else if(a[i]==' ')b++;
else c++;
} printf(”字母个数:%dn“,m);printf(”数字个数:%dn“,n);printf(”空格个数:%dn“,b);printf(”其他字符个数:%dn“,c);return 0;} 单个字符输入的方法,但是要解决缓冲区的问题 #include
ch=getchar();
getchar();//清除缓冲区的回车键,不然会当做第二个字符读入
if(ch!=' ')//用Tab键控制输入结束,他在程序中只会出现一次并且统计一次,{
//然后结束,所以要去掉它,可以使用if语句,也可在前面初始化为d=-1
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))a++;
else if(ch>='0'&&ch<='9')b++;
else if(ch==' ')c++;
else d++;
} }while(ch!=' ');printf(”字母个数:%dn“,a);printf(”数字个数:%dn“,b);printf(”空格个数:%dn“,c);printf(”其他字符个数:%dn“,d);return 0;} //解释:你可以把Tab控制结束改成其他任意字符,包括字母、数字、/;都可以,就是不能直接使用回车控制结束,因为你在实际键盘输入时,需要打回车才能把前面的 字符读入,当你输完回车后,就已经换行了,再回车就达不到你要的效果了,不可能把 他读入,但是他会留在缓冲区下一次使用,所以说,理论上任意字符都可以控制结束,但是不能直接使用回车再回车的方法,而getchar()函数一次只能读一个字符,当你回车 读入字符后,回车符就会留在缓冲区下一次使用,你可以试试,你把getchar()这行语句 注释,然后一次输入两个字符再回车的话,那么这时他也只能读入第一个字符,第二个 字符和回车就会计入第二次、第三次的结果。
总结:这种方式与用字符串的区别在于,字符串可以统计任何字符,但是这种方式不能统计 你用来控制结束的字符,比如说,你用/控制结束,那么就不能统计/的数量了,而且你要把 他去掉,因为在整个程序中/只会出现一次,然后就结束了
**当程序中出现两次或以上的键盘输入时,就有可能出现缓冲区的问题,只有一次输入,回车直接结束没有这种问题
15.考点题型:字符串常量的长度问题:
1)字符串常量”abctd376“的长度是(A)A)7
B)12
C)8
D)14 // a b c t d 376
2)语句printf(”%d“,strlen(”absno121“));的输出结果是(C)A)11
B)10
C)9
D)8 // a b s
n o 1 2
16.考点题型:赋值运算、关系运算的混合运算问题:
1)设m,n,a,b,c,d的值均为0,执行(m=a==b)||(n=c==d),m,n的值是(C)A)0,0
B)0,1
C)1,0
D)1,1 // ”==“是算术运算符,”=“是赋值运算符,优先级:算术运算符>赋值运算符,先判断a==b?是否正确
正确则为真,把1赋给m,”||“是或运算,前面已经为真,所以||后面的就不会再运算了,结果就为真
所以m=1,n=0不变
2)int a,b,m,n;初值依次为4,3,2,1,经计算m=(a<=b)&&(n=m B)1,0 C)0,1 D)0,0 // a<=b为假,&&是并,前面已经为假,后面就不会再运算了,结果就为假,把0赋给m,即m=0,n=1不变 四、选择控制结构 1.沃思提出“数据结构+算法=程序”只在面向过程的语言(如C语言)成立 2.算法的正确性衡量方法: 1)有穷性 2)确定性 3)有效性 4)允许没有输入或者有多个输入 5)必须有一个或者多个输出 3.算法的描述方法: 1)自然语言描述 2)流程图描述 3)NS结构化流程图描述 4)伪码描述 4.关系表达式:用作判断条件,结果只有真和假,(n%2!=0)等价于(n%2),0表示假,非0表示真 5.分支结构:当条件P成立时,执行A操作,否则执行B操作;如果B操作为空,即为单分支结构; 如果B操作不为空,即为双分支结构;如果B操作中又包含另一选择结构,则构成多分支选择结构; 6.单分支例题:计算输出两整数最大值 单分支(一般形式):if(表达式P)语句A #include //单分支:if(表达式P)语句A max=a; if(a<=b) //单分支:if(表达式P)语句A max=b;printf(”max=%dn“,max);} 7.双分支例题:计算输出两整数最大值 双分支(一般形式):if(表达式P)语句1 else 语句2 #include max=a; else max=b;printf(”max=%dn“,max);} 8.条件运算符是C语言中唯一的三元运算符,需要三个操作数 9.条件运算符例题:计算输出两整数最大值 条件运算符(一般形式):表达式1?表达式2:表达式3 含义:若表达式1为非0,则结果为表达式2的值,否则是表达式3的值 #include printf(”max=%dn“,max);} 10.多分支控制条件语句(一般形式): if(表达式1)语句1 else if(表达式2)语句2...else if(表达式m)语句m else 语句m+1 11.条件语句在语法上只允许每个条件分支中带一条语句,而要在分支里处理多条语句 就要使用花括号,构成复合语句 12.随机数的使用方法: 1)符号常量RAND_MAX在头文件#include 2)随机函数rand()产生的是一个在0~RAND_MAX之间的整数,即[0,32767]之间的整数 3)利用求余运算rand()%b可将函数rand()生成的随机数变化到[0,b-1] 4)利用rand()%b+a可将随机数的取值范围平移到[a,a+b-1] 例:产生1~100的随机数: rand()%100+1 13.例题:猜数游戏:计算机想一个数,人猜对了提示Right!,否则提示Wrong!,并告诉大小 #include //随机数 printf(”Please guess a number:“);scanf(”%d“,&guess);if(guess>magic) //多分支 { printf(”Wrong!Too big!n“);//复合语句 } else if(guess printf(”Wrong!Too small!n“);} else{ printf(”Right!n“); printf(”The number is:%dn“,magic);} } 14.switch语句:用于多路选择,一般情况大于三种,用开关语句代替条件语句 1)switch语句(一般形式): switch(表达式) { case 常量1: 可执行语句序列1 //注意:语句序列不使用花括号 case 常量2: 可执行语句序列2 ........case 常量n: 可执行语句序列n default: 可执行语句序列n+1 } 2)switch语句相当于一系列的if-else语句 3)switch后圆括号内的表达式只能是char型或int型 4)关键字case后接常量,类型与表达式类型一致,常量的值必须互不相同 5)常量与case中间至少有一个空格,常量后面是冒号 6)case本身并没有条件判断的功能,若case后面的语句省略不写,则表示它与后续case执行相同的语句 7)switch语句的执行过程: 第一步,计算switch后表达式的值 第二步,将表达式的值依次与case后的常量比较 第三步,如果相等,执行case后的代码段,执行完毕,可使用break语句跳出switch语句 如果没有break语句,不会再比较,程序将依次执行下面的case后的语句,直到遇到break或者switch的}为止 15.例题:编程实现简单计算器功能 #include printf(”%d+%d=%dn“,data1,data2,data1+data2); break;case '-': printf(”%d-%d=%dn“,data1,data2,data1-data2); break;case '*': case 'x': case 'X': printf(”%d*%d=%dn“,data1,data2,data1*data2); break;case '/': if(0==data2)//也可写成data2==0,写0==data2的好处: { //因为赋值表达式左值必须是变量,如果把==误写成=,会提示错误 printf(”Division by zero!n“); } else{ printf(”%d/%d=%dn“,data1,data2,data1/data2); } break;default: printf(”Invalid operator!n“); //break;这句一般不需要,因为没有break就会依次执行下面的步骤直到break或者switch的} } //这里已经是switch的}了 } 16.例题:编程实现简单计算器功能,能进行浮点数运算,操作数与运算符之间可加入任意多个空格 #include printf(”%f+%f=%fn“,data1,data2,data1+data2); break;case '-': printf(”%f-%f=%fn“,data1,data2,data1-data2); break;case '*': case 'x': case 'X': printf(”%f*%f=%fn“,data1,data2,data1*data2); break;case '/': if(fabs(data2)<=1e-7) { printf(”Division by zero!n“); } else{ printf(”%f/%f=%fn“,data1,data2,data1/data2); } break;default: printf(”Invalid operator!n“);} } //内存中的浮点数所表示的精度是有限的,所以比较实型变量data2与0是否相等时,不能像整型变量与0比较那样直接用相等关系运算符与0比较,而应使用如下方式判断 实型变量data2的值是否位于0附近的一个很小的区间内,即:if(fabs(data2)<=1e-7)17.逻辑运算符和逻辑表达式 逻辑非:!,单目运算符,右结合, 优先级最高 逻辑与:&&,双目运算符,左结合,优先级较高 逻辑或:||,双目运算符,左结合,优先级较低 例:判断某一年year是否是闰年的条件: 1)能被4整除,但不能被100整除; 1)能被400整除 逻辑表达式:((year%4==0)&&(year%100!=0))||(year%400==0)或:(year%4==0)&&(year%100!=0)||(year%400==0)18.特别注意:在计算含有逻辑运算符(&&和||)的表达式时,通常尽量使用最少的操作数来 确定表达式的值,这就意味着表达式中的某些操作数可能不会被计算。 例:if(a>1&&b++>2&&c--!=0)中,仅在条件表达式a>1为真时,才会计算后面的值 19.程序测试: 1)程序测试只能证明程序有错,不能证明程序无错 2)例:编程输入三角形三边长a,b,c,判断他们能否构成三角形,能构成什么三角形 #include { if(fabs(a-b)<=EPS&&fabs(b-c)<=EPS&&fabs(c-a)<=EPS) { printf(”等边“); flag=0; } else if(fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(c-a)<=EPS) { printf(”等腰“); flag=0; } if(fabs(a*a+b*b-c*c)<=EPS||fabs(b*b+c*c-a*a)<=EPS||fabs(a*a+c*c-b*b)<=EPS) { printf(”直角“); flag=0; } if(flag) { printf(”一般“); } printf(”三角形n“);} else{ printf(”不是三角形n“);} } 3)例:编程将输入的百分制成绩转换为五分制成绩输出 #include mark=-1;//这个if语句很重要,如果去掉,边界测试101~109,-1~-9会出错 } else{ mark=score/10;} switch(mark){ case 10: case 9: printf(”%d-优!n“,score); break;case 8: printf(”%d-良!n“,score); break;case 7: printf(”%d-中!n“,score); break;case 6: printf(”%d-及格!n“,score);case 5: case 4: case 3: case 2: case 1: case 0: printf(”%d-不及格!n“,score); break;default: printf(”Input error!n“);} } 20.对输入非法字符的检查与处理 1)例:输入两个整型数,计算并输出两个整数的最大值 #include printf(”Enter a,b:“); ret=scanf(”%d,%d“,&a,&b); if(ret!=2)//返回在遇到非法字符前已成功读入的数据项数 { //但是scanf()函数不做类型检查,所以输入1,3.2会输出3 printf(”Input error!n“); while(getchar()!='n'); } else{ max=a>b?a:b; printf(”max=%dn“,max); } }while(ret!=2);} 21.位运算符的使用 1)位运算是对字节或字内的二进制数位进行测试、抽取、设置或移位等操作 2)位运算的操作对象只能是char和int类型 3)C语言中共有6种位运算符,只有按位取反是单目运算符,其他都是双目运算符 4)关系运算和逻辑运算的结果要么是0,要么是1,而位运算结果可为任意值,但每一位都只能是0或1 5)6种位运算符: 按位取反 ~ 用于加密处理,一次求反加密,二次求反解密 左移位 << 右移位 >> 按位与 & 用于对字节中某位清零 按位异或 ^ 按位或 | 用于对字节中某位置1 6)按位取反 ~1=0,~0=1 例:~5=-6 ~ 00000101 ——————— 11111010 是-6的补码 7)按位与 0&0=0,0&1=0,1&1=1 例:将15的最低位不变,其余位清零 15&1=1 00001111 & 00000001 —————— 00000001 8)按位或 0|0=0,0|1=1,1|1=1 例:将15的最高位不变,其余位均置1 15|127=127 00001111 | 01111111 —————— 01111111 是127的补码 9)按位异或 0^0=0,0^1=1,1^1=0 例:3^5=6 00000011 ^ 00000101 —————— 00000110 是6的补码 10)左移位 x< 例:将15左移1、2、3位的二进制补码如下 初始字节内容 00001111 对应十进制15 左移1位字节内容 00011110 对应十进制30 左移2位字节内容 00111100 对应十进制60 左移3位字节内容 01111000 对应十进制120 11)右移位 x>>n 表示把x的每一位向右移n位,当x为有符号数时,左边空位补符号位值—算术移位 当x为无符号位时,左边空位补0—逻辑移位 例1:将15右移1、2、3位的二进制补码如下 初始字节内容 00001111 对应十进制15 右移1位字节内容 00000111 对应十进制7 右左移2位字节内容 00000011 对应十进制3 右移3位字节内容 00000001 对应十进制1 例2:将-15右移1、2、3位的二进制补码如下 初始字节内容 11110001 对应十进制-15 右移1位字节内容 11111000 对应十进制-8 右左移2位字节内容 11111100 对应十进制-4 右移3位字节内容 11111110 对应十进制-2 12)无论左移位还是右移位,从一端移走的位不移入另一端,移走的位的信息就丢失了 13)左移位和右移位可以分表代替整数的乘法和除法,左移n位相当于乘以2^n,右移n为相当于除以2^n 14)例:写出运行结果 #include x 0000 0000 0000 1100 void main() ~x 1111 1111 1111 0011 { ~x反码1000 0000 0000 1100 int x=12,y=8; ~x反码加一1000 0000 0000 1101 -13 printf(”%5d%5d%5dn“,!x,x||y,x&&y);printf(”%5u%5d%5dn“,~x,x|y,x&y);printf(”%5d%5d%5dn“,~x,x|y,x&y);} 输出: 0 4294967283 12 8 -13 12 五、循环控制结构 1.循环:包括计数控制的循环和条件控制的循环 2.结构化程序设计的三种基本结构:顺序结构、选择结构、循环结构 3.循环结构的类型: 1)当型循环结构:for语句(适合循环次数已知,计数控制的循环) 2)直到型循环结构:while语句、do-while语句(适合循环次数未知,条件控制的循环)4.while语句 1)一般形式为: while(循环控制表达式){ | 语句系列 |循环体 } | 2)循环控制表达式在执行循环体之前测试 3)执行过程: 计算循环控制表达式的值 如果循环控制表达式的值为真,那么执行循环体中的语句,并返回步骤1 如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句 5.do-while语句 1)一般形式为: do { | 语句系列 |循环体 }while(循环控制表达式); 2)循环控制表达式在执行循环体之后测试 3)执行过程: 执行循环体中的语句 计算循环控制表达式的值 如果循环控制表达式的值为真,那么返回步骤1 如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句 6.for语句 1)一般形式为: for(初始化表达式;循环控制表达式;增值表达式){ | 语句系列 |循环体 } | 2)在每次循环体被执行之前,都要对循环控制条件测试一次,每次循环体执行完以后都要执行一次增值表达式 3)初始化表达式作用:循环变量初始化,即赋初值 4)循环控制表达式:是控制继续执行的条件,当表达式的值为非0时重复执行循环 5)增值表达式作用:每执行一次循环,循环控制变量增值 6)for语句三个表达式之间用分号分隔,有且只能有两个分号 7)循环控制表达式若省略,表示循环条件为永真 8)初始化表达式和增值表达式都可省略,但是必须有其他语句反应其作用 7.例:从键盘输入n,然后计算输出1+2+3+„„n的值 1)while语句编程实现 #include printf(”Enter n:“);scanf(”%d“,&n);while(i<=n){ sum+=i; i++;} printf(”1+2+3+„„+%d=%dn“,n,sum);} 2)do-while语句编程实现 #include sum+=i; i++;}while(i<=n);printf(”1+2+3+„„+%d=%dn“,n,sum);} 3)for语句编程实现 #include sum+=i;} printf(”1+2+3+„„+%d=%dn“,n,sum);} 8.逗号运算符 1)所有运算符中优先级最低,左结合 2)作用:可实现对各个表达式的顺序求值 3)结果:将最后一个表达式的值作为整个逗号表达式的值 4)例:从键盘输入n,然后计算输出1+2+3+„„n的值 #include sum+=i+j;} printf(”1+2+3+„„+%d=%dn“,n,sum);} 9.空语句 1)仅由一个分号构成的语句 2)作用:什么也不做,只起延时作用 3)例:for(i=1;i<50000000;i++) { ; } 或for(i=1;i<50000000;i++) { } 或for(i=1;i<50000000;i++); for(i=1;i<=n;i++); { sum+=i; } 等价于 for(i=1;i<=n;i++) { ; } sum+=i; 4)例:从键盘输入n,然后计算输出1+2+3+„„n的值 #include scanf(”%d“,&n);for(i=1,j=n;i<=j;i++,j--);{ sum+=i+j;} printf(”1+2+3+„„+%d=%dn“,n,sum);}//输出结果:101 10.死循环 1)while语句行末加分号将导致死循环 2)例:i=1; while(i<=n);//行末加分号导致死循环 { sum+=i; i++; } 相当于 i=1; while(i<=n)//当输入大于1的n值,循环体中没有语句可以改变控制变量i { //使得循环条件为永真,导致死循环 ; } sum+=i; i++;11.while语句和do-while语句的区别 1)while先判断后执行,有可能一次都不执行,do-while先执行后判断,至少执行一次 2)例:n=101; n=101; while(n<100) do { { printf(”n=%dn“,n); printf(”n=%dn“,n); n++; n++; } }while(n<100); //循环一次也不执行 //结果:输出n=101,循环执行一次 3)例:分别用while和do-while语句编程,输入一组数据,然后显示每次输入数据进行累加运算的结果,输入0结束 do-while语句实现: #include printf(”Enter num:“); scanf(”%d“,&num); sum+=num; printf(”sum=%dn“,sum);}while(num!=0);} while语句实现 #include while(num!=0){ printf(”Enter num:“); scanf(”%d“,&num); sum+=num; printf(”sum=%dn“,sum);} } 12.计数控制的循环:循环次数事先已知的循环 1)例1:编写一个程序,从键盘输入n,计算输出n!#include sum*=i;} printf(”%d!=%ldn“,n,sum);} 2)例2:编写一个程序,从键盘输入n,计算输出1!,2!„„n!#include for(i=1;i<=n;i++){ sum*=i; printf(”%2d!=%ldn“,i,sum);} } 3)例:键盘输入n,编程计算1!+2!+3!+„„+n! #include term*=i; sum+=term;} printf(”1!+2!+3!+„„+%d!=%ldn“,n,sum);} 13.条件控制的循环:循环次数事先未知,由条件控制 1)例1:输入两个整型数,计算并输出两个整型数的最大值,如若输入非法字符,提示错误并重新输入 //解释:非法字符,需要输入数字时,字符相对它来说就是非法字符,而需要输入字符型,数字对它不是非法字符,所有都是合法 #include { while(getchar()!='n');//清除缓冲区中的错误数据 printf(”Enter a,b:“); ret=scanf(”%d %d“,&a,&b);} max=a>b?a:b;printf(”max=%dn“,max);} //注意:scanf()函数不做参数类型匹配检查,当输入1 3.2时,scanf返回2,不会导致重新输入 但是,此后的小数点仍留在缓冲区,如果此后还需输入内容,就要先清除缓冲区内容 2)例2:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束 游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平 #include int guess;int counter=0;magic=rand()%100+1;do{ printf(”Please guess a magic number:“); scanf(”%d“,&guess); counter++; if(guess>magic) { printf(”Wrong!Too big!n“); } else if(guess { printf(”Wrong!Too small!n“); } else{ printf(”Right!n“); } }while(guess!=magic);printf(”counter=%dn“,counter);} 14.随机数的使用 a.随机数的产生: rand() 1)符号常量RAND_MAX在头文件#include 2)随机函数rand()产生的是一个在0~RAND_MAX之间的整数,即[0,32767]之间的整数 3)利用求余运算rand()%b可将函数rand()生成的随机数变化到[0,b-1] 4)利用rand()%b+a可将随机数的取值范围平移到[a,a+b-1] b.随机数的产生: srand(time(NULL)) 1)用rand()直接产生的随机数只是一个伪随机数,反复调用产生的随机数序列是一样的,而且每次都只用第一个 2)随机化:使程序每次运行时产生不同的随机数序列的过程 3)随机化的实现:通过调用标准库函数srand()为函数rand()设置随机数种子来实现 4)随机数种子的设置: 法1:每次通过用户输入来完成随机化,srand(1),srand(2),srand(seed),输入seed 法2:的通过函数time()读取计算机的时钟值,并把该值设置为随机数种子srand(time(NULL)) 5)函数time()返回以秒计算的当前时间值,即一个代表时间的字符串,使用NULL作为time()的参数时,time(NULL)的返回值被转换成一个无符号整数,可作为随机数发生器的种子 6)使用time()函数时,必须在程序开头将头文件 15.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束 游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平 #include printf(”Please guess a magic number:“); scanf(”%d“,&guess); counter++; if(guess>magic) { printf(”Wrong!Too big!n“); } else if(guess { printf(”Wrong!Too small!n“); } else{ printf(”Right!n“); } }while(guess!=magic);printf(”counter=%dn“,counter);} 16.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就结束,要避免非法字符的输入 #include int ret;//保存scanf()函数的返回值 srand(time(NULL));magic=rand()%100+1;do{ printf(”Please guess a magic number:“); ret=scanf(”%d“,&guess); while(ret!=1)//若存在输入错误,则重新输入 { while(getchar()!='n');//清楚缓冲区中的内容 printf(”Please guess a magic number:“); ret=scanf(”%d“,&guess); } //若存在非法字符,则重新输入 counter++; if(guess>magic) { printf(”Wrong!Too big!n“); } else if(guess { printf(”Wrong!Too small!n“); } else{ printf(”Right!n“); } }while(guess!=magic&&counter<10);printf(”counter=%dn“,counter);} 延伸拓展:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就继续猜下一个数,每次运行程序,可 反复猜多个数,直到操作者想停时结束,要注意避免非法字符输入的问题 #include int ret;//保存scanf()函数的返回值 srand(time(NULL)); do{ magic=rand()%100+1; counter=0; do{ printf(”Please guess a magic number:“); ret=scanf(”%d“,&guess); while(ret!=1)//若存在输入错误,则重新输入 { while(getchar()!='n');//清楚缓冲区中的内容 printf(”Please guess a magic number:“); ret=scanf(”%d“,&guess); } //若存在非法字符,则重新输入 counter++; if(guess>magic) { printf(”Wrong!Too big!n“); } else if(guess { printf(”Wrong!Too small!n“); } else{ printf(”Right!n“); } }while(guess!=magic&&counter<10); printf(”counter=%dn“,counter); printf(”Do you want to continue(Y/N or y/n)?“); scanf(” %c“,&reply);//%c前有一个空格,读取缓冲区中的回车符 }while(reply=='Y'||reply=='y');} 17.设计一个简单计算器,允许连续做多次算术运算 #include printf(”Please enter your expression:n“); scanf(”%f %c%f“,&data1,&op,&data2);//加空格可在操作数和运算符之间加任意多个空白符 switch(op) { case '+': printf(”%f+%f=%fn“,data1,data2,data1+data2); break; case '-': printf(”%f-%f=%fn“,data1,data2,data1-data2); break; case '*': case 'X': case 'x': printf(”%f*%f=%fn“,data1,data2,data1*data2); break; case '/': if(fabs(data2)<=1e-7) { printf(”Division by zero!n“); } else{ printf(”%f/%f=%fn“,data1,data2,data1/data2); } break; default: printf(”Invalid operator!n“); } printf(”Do you want to continue(Y/y or N/n)?“); scanf(” %c“,&reply);//加空格清除缓冲区中的回车符 } while(reply=='Y'||reply=='y');} 18.嵌套循环 一个循环语句放在另一个循环语句中构成的循环称为嵌套循环 1)嵌套循环的总循环次数等于外层循环次数和内层循环次数的乘积 2)为避免造成混乱,嵌套循环的内层和外层的循环控制变量不要同名 3)例:键盘输入n,编程计算1!+2!+3!+„„+n!#include term=1; for(j=1;j<=i;j++) { term*=j; } sum+=term;} printf(”1!+2!+3!+„„+%d!=%ldn“,n,sum);} 19累加求和构成规律: 1)当累加项较为复杂或者前后项之间无关时,需要单独计算每个累加项 2)当累加项前项与后项之间有关时,根据前项计算后项 #include term=term*i; sum=sum+term;} printf(”1!+2!+3!+„„%d=%ldn“,n,sum);} 20.goto语句 1)功能:使程序无条件跳转到语句标号所标识的语句去执行,所跳过的语句不再执行 2)一般形式: ①向前跳转 ②向后跳转 goto 语句标号; 语句标号:„„(后) „„ „„ 语句标号:„„(前) goto 语句标号; 3)应用:通常情况,goto语句与if语句联合使用 if(表达式)goto语句标号; 语句标号:„„ „„ „„ 语句标号:„„ if(表达式)goto语句标号;21.break语句 1)功能:①用于退出switch结构 ②用于退出由while,do-while和for语句构成的循环体 2)原理:当执行循环体遇到break语句时,循环体将立即终止,从循环语句后的第一条语句开始继续执行 3)应用:break语句通常与if联合使用,表明在任何条件下跳转到紧接循环语句后的第一条语句 22.continue语句 1)功能:跳过continue后面尚未执行的语句,开始下一次循环,只结束本次循环,不终止整 个循环 2)例题: #include printf(”Please enter n:“); scanf(”%d“,&n); if(n<0)continue; printf(”n=%dn“,n);} printf(”Program is over!n“);} 23.函数exit() 1)标准库函数exit()用于控制程序的流程,调用时,需要加头文件 2)一般形式:exit(code); 3)功能:终止整个程序的执行,强制返回操作系统,并将int型参数code的值传给调用进程 (一般为操作系统),当code的值为0或宏常量EXIT_FAILURE,表示程序出现某种错误后退出 24.goto,break,continue,exit()的比较 1)goto,break,continue,exit()都用于控制程序的流程,前三个是流程控制语言,exit()是C标准函数 1)功能:goto语句可以向任意方向跳转,break语句只限定流程跳转到循环语句之后的第一条语句,continue语句结束本次循环,exit()直接终止所有程序 2)break,goto语句和exit()函数都可用于终止整个循环的执行,continue不能终止整个循环 3)在嵌套循环下,break语句和continue语句只对包含他们的最内层循环语句起作用,不能用break语句跳出多重循环,只能一层一层的跳出 4)使用goto语句的两种特定情形: ①快速跳出多重循环 ②跳向共同的出口位置,进行退出前的错误处理工作 25.例题:韩信点兵:x%5==1&&x%6==5&&x%7==4&&x%11==10 ①穷举法(循环条件自定义,不具实际意义)②break退出循环(循环条件省略,满足条件结束循环)③exit(0)结束程序(循环条件省略,满足条件结束整个程序)④使用标志变量(循环条件为标识变量为0,最佳方法)#include if(x%5==1&&x%6==5&&x%7==4&&x%11==10) { printf(”x=%dn",x); find=1; } } } 26.类型溢出 1)原因:当运算的结果超出了类型所能表示的数的上界,导致进位到达了最前面的符号 位或者更多进位的丢失,就会发生类型溢出 2)解决办法:采用取值范围更大的数据类型来定义变量 27.结构化程序设计的基本思想 1)采用顺序、选择和循环三种基本结构作为程序设计的基本单元,语法结构具有4个特性 ①只有一个入口 ②只有一个出口 ③无不可达语句,即不存在永远执行不到的语句 ④无死循环,即不存在永远都执行不完的循环 2)尽量避免使用goto语句,因为它破坏了结构化设计风格,并且容易带来错误的隐患 3)采用自顶向下、逐步求精的模块化程序设计方法进行结构化程序设计 实验0C语言基础知识(复习) 1实验目的(1)熟练掌握C语言的基础知识。 2实验内容及要求(二选一) (一)检验并打印魔方矩阵 在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。24 1 8 155 7 14 166 13 20 2212 19 21 318 25 2 9 (二)学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单; (3)统计各分数段的学生人数及所占的百分比。 3实验要求 按要求编写实验程序,将实验程序上机调试运行。 注意:程序调试正确后要进行演示检查并以附件形式(文件打包后压缩成文件名是“学号+实验0.rar”)提交到yuan_sjjg@126.com第五篇:实验0C语言基础知识