




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语言 1 1 C 语言程序结构和语法规则 一 C 语言程序的基本结构 下面通过几个简单的示例 介绍 C 语言程序的基本构成和书写格式 使读者对 C 语言 程序有一个基本的了解 在此基础上 再进一步了解 C 语言程序的语法和书写规则 例1 1 求三个数的平均值的 C 语言程序 功能 求三个数的平均值 main main 称为主函数 float a b c ave 定义 a b c ave 为实型数据 a 7 b 9 c 12 ave a b c 3 计算平均值 printf ave f n ave 在屏幕上输出 ave 的值 程序运行结果 ave 9 333333 例1 2 输出两个数中的较大值的 C 语言程序 功能 输出两个数中的较大值 main 主函数 int num1 num2 max 定义 num1 num2 max 为整型变量 scanf d d 由键盘输入 num1 num2的值 printf max d n max num1 num2 在屏幕上输出调用 max 的函数值 用户设计的函数 max int max int x int y x 和 y 分别取 num1和 num2传递的值 if x y return x 如果 x y 将 x 的值返回给 max else return y 如果 x y 不成立 将 y 的值返回给 max 程序运行情况 5 8 表示按回车键 以下相同 max 8 在以上两个示例中 例1 1 所示的 C 语言程序仅由一个 main 函数构成 它相当于 其他高级语言中的主程序 例1 2 所示的 C 语言程序由一个 main 和一个其他函数 max 用户自己设计的函数 构成 函数 max 相当于其他高级语言中的子程序 由此可见 一个完整的 C 语言程序结构有以下两种表现形式 1 仅由一个 main 函数 又称主函数 构成 如图1 1 a 所示 2 由一个且只能有一个 main 函数和若干个其他函数结合而成 如图1 1 b 所示 其中 自定义函数由用户自己设计 C 语言 2 2 图1 1 C 语言程序结构示意图 结合以上示例 可以看出 C 语言程序结构有以下基本特点 1 C 语言程序是由函数 如 main 函数和 max 函数 组成的 每一个函数完成相对 独立的功能 函数是 C 语言程序的基本模块单元 main 是函数名 函数名后面的一对圆括 号 是用来写函数的参数的 参数可以有 也可以没有 本程序没有参数 但圆括号 不能省略 2 一个 C 语言程序总是从 main 函数开始执行 主函数执行完毕 程序执行结束 3 C 语言编译系统区分字母大小写 C 语言把大小写字母视为两个不同的字符 并 规定每条语句或数据说明均以分号 结束 分号是语句不可缺少的组成部分 4 主函数 main 既可以放在 max 函数之前 也可以放在 max 函数之后 习惯上 将主函数 main 放在最前面 5 C 语言程序中所调用的函数 既可以是由系统提供的库函数 也可以是由设计人 员自己根据需要而设计的函数 例如 在 例1 2 中 printf 函数是 C 语言编译系统库函 数中的一个函数 它的作用是在屏幕上按指定格式输出指定的内容 max 函数是由用户自 己设计的函数 它的作用是计算两个数中的较大值 二 C 语言程序的书写规则 1 C 源程序是由一个主函数和若干个其它函数组成的 2 函数名后必须有小括号 函数体放在大括号内 3 C 程序必须用小写字母书写 4 每句的末尾加分号 5 可以一行多句 6 可以一句多行 7 可以在程序的任何位置加注释 一个完整的 语言程序 是由一个 main 函数 又称主函数 和若干个其它函数结合 而成的 或仅由一个 main 函数构成 例1 3 仅由 main 函数构成的 语言程序 main printf This is a C program n 程序运行结果 This is a C program 例1 4 由 main 函数和1个其它函数 max 构成的 语言程序 int max int x int y return x y x y main int num1 num2 C 语言 3 3 printf Input the first integer number scanf d printf Input the second integer number scanf d printf max d n max num1 num2 程序运行情况 Input the first integer number 6 Input the second integer number 9 max 9 运算符与优先级 表达式 一 运算符 运算符包括下面这些类型 1 算术运算符 依次为加 减 乘 除 求余数 除 最后两种是单目运算符外 其它几种都是双目运算符 前四种运算较简单 不再展开叙述 最后三种运算的定义如下 Op1 op2 表示 oPl int oP1 op2 op2 其中 ina a 表示取 a 的整数部分 a 的小数 部分总非负 Op 表示 op op 1 Op 表示 op op 1 2 关系运算符 依次为取反 按位与 按位或 按位异 或 右移位 左移位 无符号右移位 5 赋值运算符 赋值操作符 它将等号右边数据的值赋值给左边的变量 6 条件运算柠 条件运算符为三目运算符 其 般格式为 a b a b 7 扩展运算符 十 扩展运算符都是由一个双目运算符和一个等号连在一起组成 注意它们之间不能用空格隔开 以 为例说明这类扩展运算符的用法 A B 表示 A A B 其它类似 8 其他运算符 如豆号运算符 分量运算符 再如实例运算符 instanceof 内存分配运算符 new 强制类型转换运算符 类型 方法调用运算符 取数组元素运算符 比如 设 t 是类 Thread 的一个实例 分量运算符 t name 表示类的实例的调用 又叫点问 意指通过点的操作符访问类的实 例对象 C 语言 4 4 二 运算符的优先级 优先顺序依次为 1级最优先 余下类推 第1级 纪2级 instanceof 第3级 new 第4级 第5级 第6级 第8级 第9级 第10级 第11级 第12级 纪14级 第13级 第15级 第16级 记住这些优先次序是困难的 个较好的方法是使用括号 比如 a b scanf m dn dp d printf d d d n m n p 若想从键盘上输入数据 使变量 m 中的值为123 n 中的值为456 p 中的值为789 则正确的输 入是 A m 123n 456p 789 B m 123 n 456 p 789 C 语言 5 5 C m 123 n 456 p 789 D 123 456 789 2 有以下程序 main int m 0256 n 256 printf o o n mn n 程序运行后的输出结果是 A 0256 0400 B 0256 256 C 256 400 D 400 400 3 有以下程序 main int a 666 b 888 printf d n a b 程序运行后的输出结果是 A 错误信息 B 666 C 888 D 666 888 4 有以下程序 main int x 102 y 012 printf 2d 2d n x y 执行后输出结果是 A 10 01 B 02 12 C 102 10 D 02 10 5 有以下程序 main int a char c 10 float f 100 0 double x a f c x 6 5 printf d d 3 1f 3 1f n a c f x 程序运行后的输出结果是 A 1 65 1 6 5 B 1 65 1 5 6 5 C 1 65 1 0 6 5 C 语言 6 6 D 2 65 1 5 6 5 6 有定义语句 int x y 若要通过 scanf d d 语句使变量 x 得到数值11 变量 y 得到数值12 下面四 组输入形式中 错误的是 A 11 12 回车 B 11 12 回车 C 11 12 回车 D 11 回车 12 回车 7 设有如下程序段 int x 2002 y 2003 printf d n x y 则以下叙述中正确的是 A 输出语句中格式说明符的个数少于输出项的个数 不能正确输出 B 运行时产生出错信息 C 输出值为2002 D 输出值为2003 8 若有以下程序段 n 所赋的是八进制数 int m 32767 n 032767 printf d o n m n 执行后输出结果是 A 32767 32767 B 32767 032767 C 32767 77777 D 32767 077777 9 若有以下程序段 int m 0 xabc n 0 xabc m n printf X n m 执行后输出结果是 A 0X0 B 0 x0 C 0 D 0XABC 10 已知 i j k 为 int 型变量 若从键盘输入 1 2 3 使 i 的值为1 j 的值为 2 k 的值为3 以下选项中正确的输入语句是 A scanf 2d 2d 2d B scanf d d d C scanf d d d D scanf i d j d k d 11 设有定义 long x 123456L 则以下能够正确输出变量 x 值的语句是 A printf x d n x B printf x 1d n x C printf x 8dL n x D printf x LD n x C 语言 7 7 12 以下程序段的输出结果是 int a 1234 printf 2d n a A 12 B 34 C 1234 D 提示出错 无结果 13 x y z 被定义为 int 型变量 若从键盘给 x y z 输入数据 正确的输入语句是 A INPUT x y z B scanf d d d C scanf d d d x y z D read d d d 14 若变量已正确说明为 float 类型 要通过语句 scanf f f f 给 a 赋于10 0 b 赋予22 0 c 赋予33 0 不正确的输入形式是 A 10 B 10 0 22 0 33 0 22 33 C 10 0 D 10 22 22 0 33 0 33 15 有如下程序 main0 int y 3 x 3 z 1 printf d d n x y z 2 运行该程序的输出结果是 A 3 4 B 4 2 C 4 3 D 3 3 16 下列程序执行后的输出结果是 小数点后只写一位 A 6 6 6 0 6 0 B 6 6 6 7 6 7 C 6 6 6 0 6 7 D 6 6 6 7 6 0 main double d float f ling l int i i f 1 d 20 3 printf d ld f f n i l f d 17 以下说法中正确的是 A define 和 printf 都是 C 语句 B define 是 C 语句 而 printf 不是 C printf 是 C 语句 但 define 不是 D define 和 printf 都不是 C 语句 18 以下程序的输出结果是 A 17 021 0 x11 B 17 17 17 C 语言 8 8 B 17 0 x11 021 D 17 21 11 main int k 17 printf d o x n k k k 19 以下叙述中正确的是 A 输入项可以是一个实型常量 如 scakf f 3 5 B 只有格式控制 没有输入项 也能正确输入数据到内存 例如 scakf a d b d C 当输入一个实型数据时 格式控制部分可以规定小数点后的位数 例如 scakf 4 2f D 当输入数据时 必须指明变量地址 例如 scakf f 20 若有以下定义和语句 int u 010 v 0 x10 w 10 printf d d d n u v w 则输出结果是 A 8 16 10 B 10 10 10 C 8 8 10 D 8 10 10 21 请读程序片段 int i 65536 printf d n i 上面程序片段的输出结果是 A 65536 B 0 C 有语法错误 无输出结果 D 1 22 若 x 和 y 都是 int 型变量 x 100 y 200 且有下面的程序片段 printf d x y 上面程序片段的输出结果是 A 200 B 100 C 100 200 D 输出格式符不够 输出不确定的值 23 请读程序 include main int a float b c scanf 2d 3f 4f printf na d b f c f n a b c 若运行时从键盘上输入9876543210 表示回车 则上面程序的输出结果是 A a 98 b 765 c 4321 B a 10 b 432 c 8765 C a 98 b 765 000000 c 4321 000000 C 语言 9 9 D a 98 b 765 0 c 4321 0 24 以下程序的输出结果是 24 include include main int a 1 b 4 c 2 float x 10 5 y 4 0 z z a b c sqrt double y 1 2 c x pritnf f n z A 14 000000 B 015 400000 C 13 700000 D 14 900000 25 以下程序的输出结果是 25 include main int a 2 c 5 printf a d b d n a c A a 2 b 5 B a 2 b 5 C a d b d D a d b d 26 执行下面程序中的输出语句 a 的值是 A 65 B 20 C 15 D 10 main int a printf d n a 3 5 a 4 a 5 二 填空题 1 以下程序运行后的输出结果是 1 main int x 0210 printf X n x 2 以下程序运行后的输出结果是 2 main char c int n 100 float f 10 double x x f n c 50 printf d f n n x 3 以下程序运行时若从键盘输入 10 20 30 输出结果是 include C 语言 10 10 main int i 0 j 0 k 0 scanf d d d printf d d d n i j k 4 以下程序段的输出结果是 4 int i 9 printf o n i 5 以下程序运行后的输出结果是 5 main int a b c a 25 b 025 c 0 x25 printf d d d n a b c 6 有以下语句段 int n1 10 n2 20 printf 6 n1 n2 要求按以下格式输出 n1和 n2的值 每个输出行从第一列开始 请填空 n1 10 n2 20 7 若有语句 int i 19 j i 4 printf d n j 则输出结果是 7 8 若有程序 main int i j scanf i d j d printf i d j d n i j 要求给 i 赋10 给 j 赋20 则应该从键盘输入 8 9 以下程序的输出结果是 9 main int a 177 printf o n a 10 以下程序的输出结果是 10 main int a 0 a a 8 printf d n a C 语言 11 11 11 以下程序的输出结果是 11 main int a 1 b 2 a a b b a b a a b printf d d n a b 12 下列程序的输出结果是16 00 请填空 main int a 9 b 2 float x 12 y 1 1 z z a 2 b x y 1 2 printf 5 2f n z 13 以下程序的输出结果是 13 main unsigned short a 65536 int b printf d n b a 14 若想通过以下输入语句使 a 5 0 b 4 c 3 则输入数据的形式应该是 14 int b c float a scanf f d c d scanf a b b d 答案 一 选择题 01 A 02 C 03 B 04 C 05 B 06 A 07 D 08 A 09 C 10 C 11 B 12 C 13 B 14 B 15 D 16 A 17 D 18 D 19 D 20 A 21 B 22 A 23 C 24 C 25 D 26 C 二 填空题 1 88 2 2 20 000000 3 10 30 0 4 11 5 25 21 37 6 n1 d nn2 d 7 3 8 i 10 j 20 9 261 10 16 11 2 1 C 语言 12 12 12 6 6 13 0 14 5 0 4 c 3 15 a 1 b 2 水滴石穿水滴石穿 C 语言之指针 数组和函数语言之指针 数组和函数 基本解释基本解释 1 指针的本质是一个与地址相关的复合类型 它的值是数据存放的位置 地址 数组的本质则是一 系列的变量 2 数组名对应着 而不是指向 一块内存 其地址与容量在生命期内保持不变 只有数组的内容可 以改变 指针可以随时指向任意类型的内存块 它的特征是 可变 所以我们常用指针来操作动态内存 3 当数组作为函数的参数进行传递时 该数组自动退化为同类型的指针 问题 指针与数组问题 指针与数组 听说 char a 与 char a 是一致的 是不是这样呢 答案与分析 指针和数组存在着一些本质的区别 当然 在某种情况下 比如数组作为函数的参数进行传递时 由 于该数组自动退化为同类型的指针 所以在函数内部 作为函数参数传递进来的指针与数组确实具有一定 的一致性 但这只是一种比较特殊的情况而已 在本质上 两者是有区别的 请看以下的例子 char a Hi pig char p Hi pig 上述两个变量的内存布局分别如下 数组 a 需要在内存中占用8个字节的空间 这段内存区通过名字 a 来标志 指针 p 则需要4个字节的 空间来存放地址 这4个字节用名字 p 来标志 其中存放的地址几乎可以指向任何地方 也可以哪里都不 指 即空指针 目前这个 p 指向某地连续的8个字节 即字符串 Hi pig 另外 例如 对于 a 2 和 p 2 二者都返回字符 i 但是编译器产生的执行代码却不一样 对于 a 2 执行代码是从 a 的位置开始 向后移 动2两个字节 然后取出其中的字符 对于 p 2 执行代 码是从 p 的位置取出一个地址 在其上加2 然后取出对应内存中的字符 问题 数组指针问题 数组指针 C 语言 13 13 为什么在有些时候我们需要定义指向数组而不是指向数组元素的指针 如何定义 答案与分析 使用指针 目的是用来保存某个元素的地址 从而来利用指针独有的优点 那么在元素需要是数组的 情况下 就理所当然要用到指向数组的指针 比如在高维需要动态生成情况下的多维数组 定义例子如下 int pElement 2 下面是一个例子 int array 2 3 1 2 3 4 5 6 int pa 3 定义一个指向数组的指针 pa 将打印 array 0 0 即1 pa 猜一猜 它指向谁 array 1 对了 printf d pa 0 将打印 array 1 0 即4 上述这个例子充分说明了数组指针 一种指向整个数组的指针的定义和使用 需要说明的是 按照我们在第四篇讨论过的 指针的步进是参照其所指对象的大小的 因此 pa 将整个向后移 动一个数组的尺寸 而不是仅仅向后移 动一个数组元素的尺寸 问题 指针数组问题 指针数组 有如下定义 struct UT TEST STRUCT pTo 2 MAX NUM 请分析这个定义的意义 并尝试说明这样的定义可能有哪些好处 答案与分析 前面我们谈了数组指针 现在又提到了指针数组 两者形式很相似 那么 如何区分两者的定义呢 分析如下 数组指针是 指向数组的指针 比如 int pA 5 指针数组是 指针构成的数组 比如 int pA 5 至于上述指针数组的好处 大致有如下两个很普遍的原因 a 各个指针内容可以按需要动态生成 避免了空间浪费 C 语言 14 14 b 各个指针呈数组形式排列 索引起来非常方便 在实际编程中 选择使用指针数组大多都是想要获得如上两个好处 问题 指向指针的指针问题 指向指针的指针 在做一个文本处理程序的时候 有这样一个问题 什么样的数据结构适合于按行存储文本 答案与分析 首先 我们来分析文本的特点 文本的主要特征是具有很强的动态性 一行文本的字符个数或多或少 不确定 整个文本所拥有的文本行数也是不确定的 这样的特征决定了用固定的二维数组存放文本行必然 限制多多 缺乏灵活性 这种场合 使用指向指针的指针有很大的优越性 现实中我们尝试用动态二维数组 本质就是指向指针的指针 来解决此问题 图示是一个指针数组 所谓动态性指横向 对应每行文本的字符个数 和纵向 对应整个文本的行数 两个方向都可以变化 就横向而言 因为指针的灵活性 它可以指向随意大小的字符数组 实现了横向动态性 就竖向而言 可以动态生成及扩展需要的指针数组的大小 下面的代码演示了这种动态数组的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 镁合金凝固控制工艺考核试卷及答案
- 毛发护理专业知识培训课件
- 电子设备可靠性测试工艺考核试卷及答案
- 麻织工艺设备防护层维护工艺考核试卷及答案
- 金属拉丝工艺优化措施流程考核试卷及答案
- 用课件教学的坏处和好处
- 特种玻璃抛光清洗工艺考核试卷及答案
- 2025年焊工高级职业资格证考试题库及答案
- 2025年海南省书记员招聘笔试真题及答案
- 2025年海工模块焊工现场考试题及答案
- 中医治疗泌尿系结石课件
- 屠宰场入股合同协议书
- 台球合同保密协议书
- 社区考试法律试题及答案
- 2025年岩沥青市场规模分析
- 《大闹天宫》课件
- 专项 记叙文阅读(附答案)八年级语文下册期中测试专项训练(全国版)
- 酒吧入股合同协议
- 公司合同协议变更
- 儿科护理不良事件警示案例
- 2025届吉林市高三第三次模拟考试生物试卷(原卷版+解析版)
评论
0/150
提交评论