C语言自学网板书_第1页
C语言自学网板书_第2页
C语言自学网板书_第3页
C语言自学网板书_第4页
已阅读5页,还剩91页未读, 继续免费阅读

下载本文档

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

文档简介

:设计语言的讲解:程序的算法与结构设计。:C程序的设计初步了解。:C程序的格式的讲解。:C程序格式的几个考点讲解。标识符、常量、变量ー标识符、常量、变量二标识符、常量、变量三标识符、常量、变量考点讲解整型常量1123整型变量整型数据的分类实型常量实型变量15.2.5算术表达式、运算符优先级及强制类型转换16.2.6赋值表达式17.2.7复合表达式与赋值中的强制类型转换18.2.7++和——的讲解19.2.7逗号表达式与实例讲解20.课后习题的讲解21.课后习题的讲解22.课后习题的讲解23.第二章的总体回顾24.3.2输出语句的讲解ー25.3.2输出语句的讲解二26.3.2输出语句的讲解三27.3.2输出语句考点例题讲解。28.3.3输入语句的讲解ー29.3.3输入语句的讲解二30.3.3输入语句考点例题讲解。31.3.4复合语句与空语句32.3.5程序设计.课后习题讲解.课后习题讲解.课后习题讲解.第三章总体回顾37.4.1关系运算38.4.1逻辑运算39.4.2IF语句40.4.2IF语句41.4.2IF语句的嵌套42.4.2IF语句的嵌套43.4.2IF语句的几个考试例题44.4.3条件表达式45.4.4switch语句46.4.4switch语句与BREAK47.4.4switch语句的几个考试例题.课后习题.课后习题.课后习题.第四章的总体冋顾52.5.1while语句53.5.1while的几个习题54.5.2dowhile55.5.3FOR语句56.5.3FOR语句57.5.4for的嵌套58.5.4FOR的嵌套59.5.4素数的判定.FOR语句的实例.FOR语句的实例.FOR语句的实例.5.5break与continue.5.5break与continue.5.6程序的举例.例年考题讲解.例年考题讲解(上机题).例年考题讲解(上机题).课后习题.课后习题.课后习题72.6.1字符常量73.6.I字符串常量与字符变量74.6.3字符的输入与输出75.6.3字符与其它数据类型混合的输入与输出76.6.4程序举例.课后习题讲解.课后习题讲解.课后习题讲解.课后习题讲解.第六章的总体回顾82.7.1库函数83.7.2函数的应用与说明84.7.2函数的定义与使用85.7.2return的应用86.7.3函数的调用87.7.3函数的调用88.7.4函数的说明与调用函数的数据传递89.7.6程序举例90.7.6程序举例.例年考题讲解.例年考题讲解(上机).例年考题讲解(上机).课后习题.课后习题.课后习题.第七章总体回顾98.8.I变量的地址与指针99.8.2指针变量的定义100.8.2指针变量的定义101.8.3给指针变量赋值102.8.3给指针变量赋值103.8.4指针变量的操作104.8.4指针变量的操作105.8.4指针变量的表示106.8.4指针变量所指向的数据的增减107.8.4指针的移动108.8.4指针的移动109.8.5指针在函数调用中的应用110.8.5指针在函数调用中的应用.例年考题讲解.例年考题讲解.例年考题讲解(上机).例年考题讲解(上机).课后习题分析.课后习题分析.课后习题分析.第八章总体回顾.第八章总体回顾120.9.1数组的初步了解121.9.1ー维数组的定义122.9.1ー维数组的引用与始化123.9.1ー维数组的使用124.ー维数组的实例125.9.2ー维数组和指针126.9.2ー维数组和指针127.9.2通过指针引用ー维数组、128.9.3ー维数组在函数调用中的应用129.9.3ー维数组在函数调用中的应用130.9.3ー维数组在函数调用中的应用131.9.4应用举例132.9.4应用举例133.9.4应用举例134.9.5二维数组的定义135.9.5ニ维数组的引用136.9.5二维数组的初始化137.9.5二维数组通过FOR语句初始化138.9.6二维数组元素的地址表示139.9.6二维数组元素的地址表示140.9.6通过指针来引用数组元素141.9.6指针数组与数组指针142.9.7ニ维数组在函数调用中的应用143.9.7ニ维数组在函数调用中的应用144.9.7ニ维数组在函数调用中的应用145.9.8应用举例146.9.8应用举例147.9.8应用举例.例年考题讲解.例年考题讲解.例年考题讲解(上机).例年考题讲解(上机).例年考题讲解(上机).例年考题讲解(上机).课后习题.课后习题.课后习题.第九章总体回顾.第九章总体回顾159.10.1字符与一维数组160.10.1字符串与一维数组161.10.2指针指向一个字符串162.10.3字符串的输入和输出163.10.4字符串数组164.10.5几个用于字符处理的函数与程序举例.例年考题讲解.例年考题讲解(上机).课后习题.课后习题.课后习题.第十章总体回顾171.11.1对函数的进ー步讨论.课后习题的讲解.课后习题的讲解174.12.1局部变量与全局变量175.12.2静态变量.课后习题.课后习题178.13.1宏179.例年考题180.14.1.结构的初步认识181.14.2结构体的定义182.14.2结构体的初始183.14.2结构体成员的引用184.14.3共用体与结构体的区分.例年考题讲解15章位运算16章文章.上机题思路分析.上机题思路分析.上机题思路分析:设计语言的讲解:程序的算法与结构设计。:C程序的设计初步了解。:C程序的格式的讲解。:C程序格式的几个考点讲解。标识符、常量、变量ー标识符、常量、变量二标识符、常量、变量三标识符、常量、变量考点讲解整型常量整型变量整型数据的分类实型常量实型变量15.2.5算术表达式、运算符优先级及强制类型转换16.2.6赋值表达式17.2.7复合表达式与赋值中的强制类型转换1827++和 的讲解19.2.7逗号表达式与实例讲解20.课后习题的讲解21.课后习题的讲解22.课后习题的讲解23.第二章的总体回顾24.3.2输出语句的讲解ー25.3.2输出语句的讲解二26.3.2输出语句的讲解三27.3.2输出语句考点例题讲解。28.3.3输入语句的讲解ー29.3.3输入语句的讲解二30.3.3输入语句考点例题讲解。3134复合语句与空语句32.3.5程序设计.课后习题讲解.课后习题讲解.课后习题讲解.第三章总体回顾37.4.1关系运算38.4.1逻辑运算39.4.2IF语句40.4.2IF语句41.4.21F语句的嵌套42.4.2IF语句的嵌套43.4.2IF语句的几个考试例题44.4.3条件表达式45.4.4switch语句46.4.4switch语句与BREAK47.4.4switch语句的几个考试例题.课后习题.课后习题.课后习题.第四章的总体回顾52.5.1while语句53.5.1while的几个习题54.5.2dowhile55.5.3FOR语句56.5.3FOR语句57.5.4for的嵌套58.5.4FOR的嵌套59.5.4素数的判定.FOR语句的实例.FOR语句的实例.FOR语句的实例.5.5break与continue.5.5break与continue.5.6程序的举例.例年考题讲解.例年考题讲解(上机题).例年考题讲解(上机题).课后习题.课后习题.课后习题72.6.1字符常量73.6.1字符串常量与字符变量74.6.3字符的输入与输出75.6.3字符与其它数据类型混合的输入与输出76.6.4程序举例.课后习题讲解.课后习题讲解.课后习题讲解.课后习题讲解.第六章的总体冋顾82.7.1库函数83.7.2函数的应用与说明84.7.2函数的定义与使用85.7.2retum的应用86.7.3函数的调用87.7.3函数的调用88.7.4函数的说明与调用函数的数据传递89.7.6程序举例90.7.6程序举例.例年考题讲解.例年考题讲解(上机).例年考题讲解(上机).课后习题.课后习题.课后习题.第七章总体回顾98.8.I变量的地址与指针99.8.2指针变量的定义100.8.2指针变量的定义101.8.3给指针变量赋值102.8.3给指针变量赋值103.8.4指针变量的操作104.8.4指针变量的操作105.8.4指针变量的表示106.8.4指针变量所指向的数据的增减107.8.4指针的移动108.8.4指针的移动109.8.5指针在函数调用中的应用110.8.5指针在函数调用中的应用.例年考题讲解.例年考题讲解.例年考题讲解(上机).例年考题讲解(上机).课后习题分析.课后习题分析.课后习题分析.第八章总体回顾.第八章总体回顾120.9.1数组的初步了解121.9.1ー维数组的定义122.9」一维数组的引用与始化123.9.1ー维数组的使用124.ー维数组的实例ー维数组和指针ー维数组和指针通过指针引用ー维数组、ー维数组在函数调用中的应用ー维数组在函数调用中的应用一维数组在函数调用中的应用应用举例应用举例应用举例二维数组的定义ニ维数组的引用二维数组的初始化二维数组通过FOR语句初始化二维数组元素的地址表示二维数组元素的地址表示通过指针来引用数组元素指针数组与数组指针ニ维数组在函数调用中的应用ニ维数组在函数调用中的应用ニ维数组在函数调用中的应用应用举例应用举例应用举例题讲解讲解讲解(上机)讲解(上机)讲解(上机)讲解(上机)体回顾体回顾159.10.1字符与一维数组160.10.1字符串与一维数组161.10.2指针指向一个字符串162.10.3字符串的输入和输出163.10.4字符串数组164.10.5几个用于字符处理的函数与程序举例.例年考题讲解.例年考题讲解(ヒ机).课后习题.课后习题.课后习题.第十章总体回顾171.11.1对函数的进ー步讨论.课后习题的讲解.课后习题的讲解174.12.1局部变量与全局变量175.12.2静态变量.课后习题.课后习题178.13.1宏179.例年考题180.14.1.结构的初步认识181.14.2结构体的定义182.14.2结构体的初始183.14.2结构体成员的引用184.14.3共用体与结构体的区分.例年考题讲解15章位运算16章文章.上机题思路分析.上机题思路分析.上机题思路分析第一章程序设计基本概念程序和程序设计程序:连续执行的一条条指令的集合称为“程序”。对于计算机来说,它不能识别由高级语言编写的程序,它只能接受和处理由〇和1的代码构成的二进制指令或数据。由于这种形式的指令是面向机器的,因此也被称为“机器语言”。所以所有由高级语言编写的程序都要经过编译,编译成二进制代码。这种具有翻译功能的软件称为编译程序。语言有很多种,我们现在要谈论的就是C语言。为什么计算机会能进行各种各样的操作,就是由不同的指令来实现的。而不是只有C语言オ可以实现这样的功能。还有其它很多语言。但是我们一般说C语言是其它语言的母语。会了C语言其它的语言在学习的过程就会感到轻松一些。1.1.2程序设计.确定数据结构.确定算法.编码.在计算机上调试程序.整理并写出文档资料.2算法定义:是指为了解决某个特定的问题而采取的确定且有限的步骤。.有穷性.确定性.可行性.有零个或多个输入.有一个或多个输出1.3结构化程序设计和模块化结构结构化程序由三种基本结构组成不满足语句1.顺序结构不满足语句1语句1语句2.选择结构.循环结构12)计算机能直接执行的程序是(B)。A)源程序B)冃标程序C)汇编程序D)可执行程序13)以下叙述中正确的是(D)A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构〇程序设计的任务就是确定所用算法D)以上三种说法都不完整第二章:C程序设计的初步知识1C语言程序的构成和格式#include<stdio.h>main()(doublea,b,area;a=1.2,b=3.6;/・将矩形的两条边长分别赋给a和b变量・/area=a*b;printf("a=%f,b=%f,area=%f\n”,a,b,area);/・输出矩形的两条边长和面积・/)#include<stdio.h>:每当写ー个程序时,第一条语句永远是这个语句,因为ー个程序可以没有输入但必须要有输出,而这个语句就是控制输入输出的。所以任何ー个程序都必须由这个语句开始。main():是ー个程序的主函数。ー个程序是由多个函数组成的,而任何ー个程序都要有一个主函数,有且只有一个。任何程序都是由主函数开始执行的。{):它们两个必须要成对出现,它们中的语句是主函数体。包括定义部分和执行部分。它们中的语句,每一条必须由;结束。:是C语句的ー个组成部分而不是ー个结束标识。/**/:注释符一定要成对出现,不允许嵌套。两个符号间的语句不被执行。例年真题:#include<stdio.h>main()(inta;A=5;/・给A变量赋值5A+=3;再赋值后再加3*/printf("%d”,a);)(11)以下叙述中正确的是(C)。C程序的基本组成单位是语句C程序中的每一行只能写一条语句(二级C语言程序设计试卷)〇简单C语句必须以分号结束D)C语句必须在一行内写完(11)以下叙述中正确的是(C)A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写ー个语句C)C程序书写格式自由,ー个语句可以写在多行上D)用C语言编写的程序只能放在ー个程序文件中第二课:C语言的基础知识2.2标识符,常量和变量标识符:定义:由字母,数字和下划线组成,并且第一个字符必须为字母或下划线的。这样的组成就是标识符。下列合法的是:elsewhat#$12334aa34a_ba-blfa=3A=4注意:在C中大写字母与小字字母被认为是两个不同的字符。分类:关键字:在C中已经定义好了的,不能用作它用的。如ifdoubleint等等。预定义标识符:如printfscanf用户标识符:用户根据自己的需求来定义的。(12)以下选项中,能用作用户标识符的是(C)void8_8_0_unsigned(11)以下选项中合法的标识符是(C)A)1-1B)1—1C)-11D)1—(12)以下选项中不合法的标识符是(C)A)printB)F0RC)&aD)_00常量:定义:是指在程序的执行的过程中,其值不会被改变的量。分类:整型常量:没有小数的常量如:391234等等都是。实型常量:有小数点的常量如:3.93.03.字符常量:由单个字符组成的量如:如’b''3'字符串常量:至少由一个字符组成的量如:"a""abc”"beijing”符号常量:符号常量的值到底是多少,这是由在来定义符号常量时来决定的?2*pi(13)以下选项中,能用作数据常量的是(D)A)0115B)0118C)1.5el.5D)115L(13)以下选项中不能作为C语言合法常量的是(A)。A)'cd'B)0.le+6C)"\a"D)'\011'(13)以下选项中不属于字符常量的是(B)A)'C' B)"C"C)'\xCCO'D)'\072'3整型常量与实型常量整型常量的几个表示方法十进制数:ハ进制数:以〇开头的数字,由0-7组成。下列合法的ハ进制数是A,OB,028C,-0770,01.0十六进制数:以0X开头,由0-9和A-F组成。A,oxffB,OxabcC,OxllD,0x19实型常量123.4小数形式:123.4指数形式:1.234e2.字母e和E之前必须要有数字.字母e和E之后的数字必须是整数.字母び和数字之间不能有空格。A,2.607E-10.8103E2-77.77456E-20.1e+61.23E1.22.2.4变量:.定义:在程序的运行过程中其值可以被改变的量,就叫变量。.原则:变量必须先定义后使用。变量定义的过程就是给变量开辟存储单元的过程。.分类:整型变量:用关键字int来表示.shortint短整型longint长整型在内存中占4个字节如!23Lunsigned无符号如有一200U这就是错的。变量的定义:inta这是定义了一个整型变量a.实型变量:用关键字double或float来表示。float单精度在内存中占4个字节double双精度在内存中占8个字节。.2.5算术表达式一、基本的算术运算符+-*/%(取余)这些是双目运算符(就是指操作对象有两个)注意:除%外,其它的运算符的运算对象可以是整型也可以是实型。%的操作对象只能是整型。如!0%3=1 10.7%310%4.5x%3=0+ー也可以做为单目运算。ー5.4+4.9说明:.如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。如1.0/2.0=0.51/2=0.如果双目运算符两边运算数的类型不一致,则系统会自动进行类型转换,使两边的类型ー致后,再进行运算。1.072=0.5.所有的单精度数据,在运算过程中都以双精度进行运算。二、优先级〇+-*/%+-由高 低如(5+1)/2=???2.5.3强制类型转换表达式格式:(类型名)(表达式)例:(int)3.234=3(double)10%3=?(14)表达式:4-(9)%2的值是(B)A)0B)3C)4D)5(14)设变量已正确定义并赋值,以ド正确的表达式是(C)A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.02.6赋值表达式格式:变量名=表达式注:1.不可以颠倒(左边必须是变量名,右边必须是C语言中合法的表达式).功能就是先求出右边表达式的值,然后把此值赋值给赋值号左边的变量。确切的说是把数据存入以该变量为标识的存储单元中去。a=4,a=7.结合性的优先级仅髙于逗号表达式。顺序是自右向左的。如a=2+7/3."ビ是ー个赋值号,不是一个等号。.x=y。变量的值也是可以传递和赋值的。它的意思就是将变量丫中的值赋值到X中去。同样N=N+1也成立.赋值运算符的左侧只能是变量,不能是常量或表达式a+b=c这就是违法的.赋值号的右边也可以是一个赋值表达式。如a=b=7+l:补充;表达式与语句的区别,表达式后面加一个分号就是语句。2.6.2复合赋值表达式例:a+=3 a=a+3同理可得a*=3/=-=a+=a-=a+a a的初值是9a+=a-=18a+=(a=a-18)a+=(a=-9)a+=a-18(15)若有定义语句:intx=10;,则表达式x・=x+x的值为(B)A)-20B)-10C)0D)10(14)设有定义:intx=2;,以下表达式中,值不为6的是(D)A)x*=x+lx=x*(x+l)x++,2*xx*=(1+x)2*x,x+=2(17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是(A)A)x=y==5;B)x=n%2.5;C)x+n=ID)x=5=4+1;++和——的讲解++:自身加1自身减1如i=3 “i++”相当于"i=i+li=4”。单目3++++i i++当++在前,先自身加1,然后再干别人让干的事情。当++在后,先别人让干的事情然后再干自身加1。inti=3;inta;a=i++;a=3a=++i ;a=4逗号表达式.定义:用逗号将表达式连接起来的式子成为逗号表达式.格式:表达式1,表达式2, I表达式N.说明a)逗号运算符的结合性为从左到右进行运算,逗号表达式的值是最后ー个表达式的值。b)在所有运算符中,逗号运算度的优先级最低。例题:inti=5;inta,b,c;a=(i+8,7,i+7);a=12,i=5b=(i++,++i);b=7,i=7c=(i+7,i++);c=5,i=6第三课:输入和输出语句.2输出语句的讲解ー、printf函数的一般调用形式格式:printf(格式控制,输出项1,输出项2 );在printf函数的最后面写上;号就是输出语句。1,给输出项白提供输出格式说明格式说明符:作用:就是使数据按格式说明符的要求进行输出。组成:由%号和紧跟在其后的格式描述符组成。int %dfloat或double―%f或e%char %c.提供原样输出的文字或字符在メ’中除了格式说明符之外和转义字符(\n\r\t\a)外的内容要全部原样输出。各个输出项之间要用逗号隔开。输出项可以是任意合法的常量,变量或表达式。printf中常用的格式说明在格式说明符中,每ー个格式说明符都必须以%号开头由相应的类型标识字母结束。但在他们之间可以有其它的ー个内容:%c:输出ー个字符%d:以带符号的十进制形式输出整型数(正数不输出符号)%〇:以8进制无符号形式输出整型数(不输出前导符。)%x:以16进制无符号形式输出整型数(不输出前导符Ox)%u:以无符号十进制形式输出整型数%f:以小数形式输出单、双精度数,隐含输出6位小数%e:以标准指数形式输出单、双精度数,数字部分小数位数为6位%s:输出一个字符串。%%:输出ー个%号%4d:输出的数据长度是4个长度,当原来的长度大于4个时会自动突破。小于4个时会填充空格。%x.yf:x代表数制的宽度(包括小数点),y代表小数点后面的小数位数.当x比所给数字长度少时,会自动突破x的值:当y比所给数字长度少时。会进行四舍五入。例:主程序doublea=123.456;printf(*%x.yf”,a):中输\Xホ0123456780123123123123-123-123—123—123——1231123.5123.5123.5123.5123.5123.5-123.5-123.5—123.52123.46123.46123.46123.46123.46123.46123.46-123.46-123.463123.456123.456123.456123.456123.456123.456123.456123.456-123.4564123.4560123.4560123.4560123.4560123.4560123.4560123.4560123.4560123.4560注:“「表示空格注意事项:.输出比较自由ー些,输出有的各个数之到底是什么,取决于格式说明符之间的内容。.格式说明符要与输出项 对应。.输出语句中还可以有\n、\r、\t、'a。.尽量不要在输出语句中改变输出变量的值。.输出的数据中如果存在变量,一定要定义过的。习题讲解(13)阅读以下程序#includemain()(intcase;floatprintF;printf(“请输入2个数:“);scanf("%d%「,&case,&printF);printf("%d%f\n”,case,printF);)该程序编译时产生错误,其出错原因是(A)A)定义语句出错,case是关键字,不能用作用户自定义标识符B)定义语句出错,printF不能用作用户自定义标识符C)定义语句无错,scanf不能作为输入函数使用D)定义语句无错,printf不能输出case的值(16)有以下程序#includemain(){inta=l,b=O;printf(44%d;\b=a+b);printf(t<%d\n,\a=2*b);)程序运行后的输出结果是(D)0,01,03,21,2

(15)程序段:intx=12;doubley=3.141593;printf("%d%8.6f”,x,y):的输出结果是(A)123.141593123.141593C)12,3.141593D)123.141593#include<stdio.h>main()(doublea=123.456;printf(M%6.2r,a);输入语句格式:scanf(格式控制,输入项1,输入项2,...);(注:格式控制与输入项数相同)例如:想通过键盘输入3个数分别给变量a,b,c。并且他们分别为整型,浮点型,双精度型。输入语句为scanf("%d%f%lf",&k,&a,&y);(&:取址符,且不可少)说明:.格式说明符与输岀语句一样。2,在格式串中,必须含有与输入项ーー对应的格式转换说明符。.在VC6.0的环境下,要输入的DOUBLE型数据的格式说明符一定要用%If,否则数据不能正确的输入.由于输入是ー个字符流,所以当输入的数据少于输入项时,程序会等待用户输入,直到满足要求。当输入的数据多于输入项时,多余的数据会自动作废。.除了中文用中文输入法输入,其他的一概用英文输入法输入例:ttinclude<stdio.h>main(){inta;doubleb;floatc;printf(*\n请输入三个数字:、n");scanf("%d%lf%f”,&a,&b,&c);printf("你刚オ输入的数字是、n%d,\n%lf,\n%f,\n*,a,b,c);}请输入三个数字:3请输入三个数字:33.345667889124.112345679807567056886你刚オ输入的数字是3,3.345668,4.112346,请输入三个数字:你刚オ输入的数字是2,0.200000,0.200000,.附M、二ぎ■・请输ん三,请输入三个数字:你刚オ输入的数字是2,0.200000,0.200000,2.3■H3.234

尸,,—日0.300000.:<1I.234turn.例题:intx;x=ll/3;inty=5;printf("%%d,%%%d\n”,x,y);结果是:%d,%3量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是(D)A)read(a,b,c);B)scanfC%d%d%d,\a,b,c);C)scanf("%D%D%D”,&a,%b,%c);D)scanf("%d%d%d”,&a,&b,&c);量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是(A)A)10 B)10.0,22.0,33.0 C)10.0 D)10222222.033.03333scanf(t4%f%f%f\&a,&b,&c);复合语句:多个语句被{}括起来,当成一条语句来执行。空语句:最后的表示只有一个;程序举例:lo编写ー个程序,从键盘上输入两个数字,让后让他们互换ー下。#include<stdio.h>main(){inta,b;printf("请输入两个数字:M);scanf(H%2d%3dH,&a,&b);printf("前:%d%du,a,b);intc;c=a,a=b,b=c;printf("后:%d%d”,a,b);}2〇编写程序,对ー个double型数据进行四舍五入运算。要求保留两位有效小树。123.45671234567*100=12345.6712345.67+0.5=12346.17(int)(12346.17)=1234612346/100=123.463。编写程序,使从键盘中输入的三位数倒着输出。选择题、b、c、d、都是int类型变量且初值为0,以下选项中不正确的赋值语句是(C)A)a=b=c=d=100:B)d++;C)c+b:D)d=(c=22)-(b++);选项中不是C语句的是(C)A){inti;i++;printf("%d\n",i);}B);C)a=5,c=10D){;}合法的C语言赋值语句是(D)A)a=b=58B)k=int(a+b)C)a=58,b=58 D)-i;程序的输出结果是(C)A)0 B)1 C)3 D)不确定的值main(){intx=10,y=3;printf("%d\n",y=x/y);}量已正确说明为im类型,要给a、b、c输入数据,以下正确的输入语句是(D)A)read(a,b,c);B)scanf(tt%d%d%d,,,a,b,c);C)scanfCt%D%D%D,\&a,%b,%c);D)scanf(4t%d%d%d,\&a,&b,&c);量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是(B)A)10B)10.0,22.0,33.0 C)10.0D)IO222222.033.03333scanfC4%f%f%f;&a,&b,&c);量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是(C)A)a=a+b,b=a-b,a=a-b;B)t=a,a=b,b=t;C)a=t;t=b;b=a;D)t=b;b=a;a=t;量已正确定义,以下程序段的输出结果是(D)A)输出格式说明与输出项不区配,输出无定值B)5.17C)5.168D)5.169X=5.16894;Printf("%f\n”,(int)(x*1000+0.5)/(float)1000);以下程序段,c3中的值是(A)A)0 B)l/2 C)0.5 D)1intcl=l,c2=2,c3;c3=cl/c2;以下程序段,其输出结果是(B)A)3,0,-10B)0,0,5Q-10,3,-10D)3,0,3inta=O,b=O,c=O;c=(a-=a-5),(a=b,b+3);printf(t4%d,%d,%d\nM,a,b,c);填空题以ド定义,请写出以下程序段中输出语句执行后的输出结果。-200,2500(2)i=-2OO.i=5OO(3)i=-2OO冋车i=2500inti=-200,j=2500;printf("(l)%d%d”,i,j);printf("(2)i=%d,j=%d\n”,i,j);printf("(3)i=%d\nj=%d\n”,i,j);i、j、k已定义为int类型并有初值〇,用以下语句进行输入时scanf("%d",&l);scanf("%d",&j);scanf("%d",&k);当执行第一个输入语句,从键盘输入:12.3<CRxCR>表示Enter键则变量i、j、k的值分别是 12 、〇、0 「语句在语法上被认为是一条语名。空语句的形式是二句的最后用二结束。程序段,要求通过scanf语句给变量赋值,然后输出变量的值。写出运行时给k输入100,给a输入25.81,给x输入1.89234时的三种可能的输入形式 ヽヽ〇intk;floata;doublex;scanf("%d%f%lド,&k,&a,&x);printf(4tk=%d,a=%f,x=%f\n,,,k,a,x);编程题和改错题程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。main{doublea,b,c,s,v;printf(inputa,b,c:\n);scanf(tt%d%d%d,,,a,b,c);s=a*b;/*计算长方形面积・/v=a*b*c;/*计算长方体体积ッprintf(44%d%d%d,\a,b,c);printfC4s=%f\n,\s;,v=%d\n,,,v);)当程序执行时,屏幕的显示和要求输入形式如ド:inputa,b,c:2.02.03.0此处的2.02.03.0是用户输入的数据a=2.OOOOOO,b=2.OOOOOO,c=3.OOOOOO此处是要求的输出形式s=4.000000,v=l2.000000程序,把560分钟换算成用小时和分钟表示,然后进行输出。程序,输入两个整数:1500和350,求出它们的商数和余数并进行输出。程序,读入三个双精度数,求它们的平均值并保留此平均值小数后一位数,对小数点后第二位数进行四舍五入,最后输出结果。程序,读入三个整数给a、b、c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中原来的值给a。第四课:C语言的程序结构4-1节、关系运算与逻辑运算ー、简介关系表达式与逻辑表达式的运算结果都会得到ー个逻辑值。就是“真”、"假”在C语言中。表示“假”,非。(无论是负数还是正数都是真,更多时候用1来代替)表示“真”〇二、几个简单的关系运算符<<=>>===|=小于小于等于大于大于等于等于不等于由两个字符组成的运算符,中间不能有空格注意:1,由两个字符组成的运算符,中间不能有空格2,它们都是双目运算符,具有自左至右的结合性。3,上面的6个运算符中,前4个的优先级要比后2个的优先级要高。先计算,后判断,最后进行赋值运算。三、几个简单的逻辑运算符&&与ー假则假II或ー真则真!非非假则真,非真则假1&&2=1。&&6=。inta=4,b=7;a&&7=l注意看y执行了多少次,注意看y执行了多少次,而不是看公式!x++&&y++? x=ly=7++x&&y++? x=ly=8同样放在II中也是ー样的。4-2、4-3节、if语句ー、定义:只有两种结果。耍么执行这条语句,要么执行那条语句。if(条件表达式)上述条件成立执行的句子else上述条件不成立执行的句子如:if(成绩>6。)显示及格else显示不及格

二、分类.不含有else的语句if(表达式)语句if语句后接复合语句时需加上大括号。if控制的只有其后面的一条语句,也可以是空语句、或复合语句。if(条件)语句1;语句2; /语句3;注:.没有分号.控制的是与if或者else紧临的“一条”语句。if(a<b)printf("%d",b);elseprintf("%d",a);if(a%3==0)yeselseno4-4节、结合一个例题来给大家分析if的嵌套输入ー个学生的成绩,评定他的等级。每十分ー个等级if()elseif()elseif()elseif(a>=90)printf(Ma");elseif(a>=8O)printf(MbM);elseif(a>=7O)printf("c");elseif(a>=60)printf("dH);

elseprintf(uen);4-5、节(17)设有定义:inta=l,b=2,c=3;,以下语句中执行效果与其它三个不同的是(C)A)if(a>b)c=a,a=b,b=c;if(a>b){c=a,a=b,b=c;}if(a>b)c=a;a=b;b=c;if(a>b){c=a;a=b;b=c;}(18)有以下程序应该选(B)#include<stdio.h>main(){intx;scanf("%d”,&x);if(x<=3;elseif(x!=10)printf("%d\n”,x);}程序运行时,输入的值在哪个范围才会有输出结果A)不等于10的整数B)大于3且不等于10的整数C)大于3或等于10的整数D)小于3的整数(19)有以下程序(C)#include<stdio.h>Main()(inta=l,b=2,c=3,d=0;if(a==1&&b++==2)if(b!=2llc-!=3)printf("%d,%d,%d\n”,a,b,c);elseprintf("%d,%d,%d\n”,a,b,c);elseprintf("%d,%d,%d\n”,a,b,c);}程序运行后的输出结果是A)1,2,3B)1,3,2C)1,3,3D)3,2,14-6节、条件表达式是C语言中唯一的ー个三目运算。

格式:表达式1?表达式2:表达式3当1成立(非零时)时,表达式的值就是2的值,否则就是3的值。如:1.1<2?4:5.prindT%d”,xvO?(・l)*++x:x++);(假定X的值为-3).++X>3?(x<3?a:b):b4・7节、switch语句(一)switch(表达式)(case与常量表达式之间一定要有空格case常量表达式case与常量表达式之间一定要有空格case常量表达式2:语句2case常量表达式3:语句3case常量表达式4:语句4case常量表达式5:语句5case常量表达式N:语句N4・8节、switch语句(二)switch(A/10)^include<stdio.h>nain()intA;printf(“请输入您的成绩:つ;scanF(aa%daaf&A);switch(A/1O)caselO:printf("A,');case9:printf(MAM);case8;printf("b,');case7;printf(McH);case6;printf(MdM);defaulCprintfC^*');caselOzprintFC'AXn");break;|ca&9:printF("A\n");break;case8:printFCiB\n");break;case7:printF("C\n");break;case6:printF(aaD\naa);break;deFault:printF("E\n");4・9节——4・15节、选择题运算符中优先级最高的运算符是(A)A)!B)%C)-=D)&&运算符中优先级最低的运算符是(A)A)IIB)!=C)<=D)+示关系x>=y>=z,应使用的C语言表达式是(A)A)(x>=y)&&(y>=z)B)(x>=y)AND(y>=z)C)(x>=y>=z)D)(x>=y)&(y>=z)、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为〇的表达式是(D)A)a&&bB)a<=bC)allb+c&&b-cD)!((a<b)&&!cll1)程序的输出结果是:(C)A)OB)1C)2D)3main(){inta=2,b=-1,c=2;if(a<b)if(b<0)c=0;elsec+=l;printfft%d\n,\c);)程序的输出结果是:(A)A)1B)2C)3D)4main(){intw=4,x=3,y=2,z=1;printff4%d\n,,,(w<x?w:z<y?z:x));)行以下程序时从键盘上输入3和4,则输出结果是(B)A)14B)16C)18D)20main(){inta,b,s;scanf("%d%d”,&a,&b);s=a;if(a<b)s=b;s*=s;printf(44%d\n,,,s);以下程序后,输出(D)A)####B)&&&&C)####&&&&D)有语法错误不能通过编译main(){intk=-3;if(k<=0)printf(44****\nM);elseprintf("&&&&\n*);和b均是正整数型变量,以下正确的switch语句是(A)A)switch(pow(a,2)+pow(b,2))(i±:调用求轟的数学函数){easel:case3:y=a+b;break;case0:case5:y=a-b;)B)switch(a*a+b*b);{case3::y=a+b;break;caseO:y=b-a;break;)C)switch()a{default:x=a+b;case10:y=a-b;break;:y=a*d;break;)D)switch(a+b){case10:x=a+b;break;easel1:y=a-b;break;)二、填空题[4.111C语言中用非〇表示逻辑值“真”,用セ表示逻辑值“假”。言中的关系运算符按优先级别是(!=<=)_!=><=言中的逻辑运算符按优先级别是(II&&!)言中的关系运算符和逻辑运算符的优先级别是(==&&)言中逻辑运算符!的优先级高于算术运算符。列数学式改写成C语言的关系表达式或逻辑表达式A)a=bllavc和B)x>4llx<-4A)a=b或a<cB)lxl>4出以下程序的输出结果丄。main(){inta=100;if(a>1OO)printfC*%d\n,,,a>100);elseprintf(4t%d\n,\a<=100);)出与以下表达式等价的表达式A)X<=0B)lA)!(x>0)B)!0=l,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为3、2、2if(a>c)b=a;a=c;c=b;量巳正确定义,以下语句段的输出结果是望x=0,y=2,z=3;switch(x){case0:switch(y==2){case1:printfC**M);break;case2:printf(4i%,,);break;}case1:switch(z){easel:printf("$");case2:printf(t4*,,);break;default:printf("#’');三、编程题以下语句改写成switch语句。if(a<30)m=l;elseif(a<40)m=2;elseif(a<50)m=3;elseif(a<60)m=4;elsem=5;程序,输入一位学生的生日(年:yO、月:mO、B:dO);并输入当前的日期(年:yl>月:ml、S:dl);输出该生的实足年龄。程序,输入ー个整数,打印出它是奇数还是偶数。程序,输入a、b、c三个数,打印出最大者。函数:x(-5<x<0)y=x-l(x=O)x+l(0<x<10)编写ー程序,要求输入X的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句第五课:循环结构5-1、5-2节、while语句ー、格式:while(表达式)循环体注:while是关键字小括号与小括号里面的内容都不能少while循环控制的是紧邻着while的“一条”语句(可以是复合语句)while后没有‘while(a<3)l{a+=s;2s=a;3}1…….100inti=l,sum=0;while(i<101)sum=sum+i++;printf(H%dM,sum);丛!开始加到哪个数时他们的和将超过100〇?inti=l,sum=O;while(sum<1000){sum+=i;999+42=1041i++;}4243printf(H%du,-i);do-while相当于直到型循环:while相当于当型循环。5・3节、dodo-while相当于直到型循环:while相当于当型循环。dowhile()格式:do循环体while(表达式)1235813doa3=al+a2;al=a2;

a2=a3;}while(a3<=1000);1:12:;5・4节、for语句(1)for语句和for语句构成的循环结构ー、格式:for(表达式1;表达式2;表达式3)循环体相当于while语句的表达式1;while(表达式2){ 进行判断的逻辑表达式循环体;表达式3;1 变量的自变例:欲输出10个“*”号:for(k=0;k<=10;k++)["明确循环几次{printf("*"); _ }相当于:intk=0;while(k<10){primf("种);k++;)注:1:表达式可以省略,但分号不可以。2:表达式可以是任意有效的C语言表达式k=0for(;k<=10;){printf(^^*^,);k=0for(;k<=10;){printf(^^*^,);k++;)for(k=0;k<=l〇;1++,k++I)

{printf(,,*u);5-4节break与continue语句break:终止了break所在的当层循环体的执行。continue:跳过循环体continue下面的语句返回到循环体开始的地方进行下次循环。例:求s=l+2+…+i,求s第一次大于5000时的值及此时的i值。main()(inti=l,s=0;for(;;i++){s+=i;if(s>5000)break;}printf(<<s=%d,i=%d,,,s,i);第六课、字符型数据6-1节、字符型常量格式:匕”要求:1,单引号中的大写字母和小写字母代表不同的字符常量。.单引号中的空格也是一个字符常量,但不能是两个连续的单引号.字符常量只能用单引号括起来,不能用双引号。转义字符\n代表回车'’代表ー个单引号’\\代表•个、'”代表一个双引号注意:.转义字符常量,如‘'14ド只代表一个字符.反斜线后的8进制数可以不用。开头。如1中所讲的141就是ー个8进制数。0141.反斜线后的16进制数只可以用x开头,不可以用X开头。字符串常量格式:由双引号括起来的一串字符。同时也要知道“A”和,A,是不ー样的。liA"*A"ACSI!码A65a97la'-'A'=32大小写字母在阿斯克依码中相差32..2节、字符变量格式:chara='s'.3字符的输入和输出printf和scanf函数输出和输入字符对于字符型数据的格式说明符是%ccharc='a';printf("%c”,c);chara,b,c,d;scanf("%c%c%c",&a,&b,&c);6-3节、程序举例写出26个大写字母和他们的ASCII代码要求每行输出两组数据。#include<stdio.h>main()(charch;intl;for(i=0;i<26:i++)ch=i+65;if(i%2==0)printf("\n”);printf(4tc=%c,ASCn=%d,\ch,ch);在上面的程序中有对于字符的输入与输出,在C语言中也有另外的输入输出字符的语句。输入:变量名=getchar()输出:pulchar(变量名)第七章函数分类:库函数自定义函数作用:为了解决固定问题而编写的程序。当他在其他程序中也要解决相应的问题时,就不用再重新编写了。提髙了程序效率。7-1节、库函数.调用C语言标准库函数时要求的include命令行include命令行必须以#开头,系统提供的头文件以.h作为文件的后缀,文件名用ー对双引号或ー对尖括号(需要注意include命令行不是C语句,因此不能在最后加分号).标准库函数的调用:函数名(参数表)如:putchar(ch)(1)出现在表达式中的:ch=getchar()(2)做为单独的语句完成某种操作。-:printf(“********”);函数的定义和返回值由于C语言中的定义的函数不能完成用户所有的要求,所以用户可以为自己定义函数实现相应的功能。 函数定义的语法 一只能是用户自定义标识符,不1:格式: 能用关键字,库函数名函数返回值的类型名|函数名(类型名形式参数1,类型名形式参数2……)说明部分语句部分)2;函数名和形式参数都是用户命名的标识符。在同一个程序中,函数名必须唯一(包括大小写),形式参数名只要在同一函数中唯一即可,可以与其他函数中的变量同名。3:C语言规定,不能在函数的内部定义函数。4:若在函数的首部省略了函数返回值的类型名,则说明该函数的返回值是int类型5;除了返回值类型为int类型的函数外,函数必须先定义后调用。6:当没有函数返回值,则必须把函数定义成void类型。例:编写求两个双精度数之和的函数。doubleadd(doublea,doubleb)(doubles;s=a+b;returns;}7・2节、函数的返回值函数的值通过return语句返回,return表达式;

此表达式的值必须与函数首部所说明的类型一致,若类型不一致,则以函数值的类型为准。需要注意的是,无论函数体中有多少个return语句,只能执行ー次。函数体内可以没有return语句,这时也必须定义函数为viod类型。节、函数的调用函数的两种调用方式格式为:函数名(实在参数表)当实参的个数多于ー个时,各实参用逗号隔开。实参的个数必须与调用函数中形参的个数相周,类型ーー対应匹配。如没有形参,则形式为函数名〇注意后面的小括号不能丢。如c=getchar()如题: 函数的说明部分,此处需要有分号#include<stdio.h>1#include<stdio.h>1doubleadd(double,double);main()(doublem,n,z;scanf(44%lf%lf\m,n);z=add(m,n);printf(44%lf;z);\)doubleadd(doublea,doubleb)(doubles;s=a+b;returns;}doubleadd(doublea,doubleb){doubles;s=a+b;returns;)main()(doublem,n,z;scanf(t4%lf%lf\m,n);z=add(m,n);printf(M%lf\z);\3.2函数调用时的语法要求.调用函数时,函数名必须与所调用的函数名字完全一致。.实参的个数必须与形参的个数一致。.C语言中规定,函数必须先定义后使用。.C语言中,函数可以直接或间接的自己调用自己。称为递归调用如:阶乘:fac(n)=fac(n-l)*n7-4节、函数的说明在C语言中凡是未在调用前定义的函数,C编译程序都默认函数的返回值为int型。对于返回值是其它类型的,若把函数的定义放在调用之后,应该在调用之前对函数进行说明。说明的格式:类型名函数名(参数类型1,参数类型2.。。。。)也可以用以下格式类型名函数名(参数类型1参数名1,参数类型2参数名2,……)函数说明的位置:一般为了让程序早点识别出程序中的定义好了的函数,一般将其放在程序的开始部分7-5节、调用函数和被调用函数之间的数据传递一:三种格式进行传递.实在参数和形式参数之间进行数据传递.通过return语句把函数值返回调用函数.能过全局变量,但这不是一种好的方式,通常不提倡使用。通过一个程序来看一下数据到底是怎样传递的。#include<stdio.h>viodtry(int,int,int);main()(int=2,=3,/=0;printf(M(l)=%d=%d=%d\n”,\,,「);try(printf("(4)\=%d\=%d/=%d\n",ヽ,>,/);注意:与形参的区分)voidtry(intx,inty,intz)[printf("(2)x=%dy=%dz=%d\n”,x,y,z);z=x+y;x=x*x;y=y*y;printf("(3)x=%dy=%dz=%d\n”,x,y,z");)屏幕上的结果是:(1)x=2y=3z=0(2)x=2y=3z=0(3)x=4y=9z=5(4)x=2y=3z=0再来ー个程序#include<stdio.h>viodswap(intjnt);main()(intx=10,y=20;printf("(l)x=%dy=%d\n”,x,y);swap(x,y);printf(tt(4)x=%dy=%d\n,,,x,y);voidswap(inta,intb){intt;printf(tt(2)a=%db=%d\n,,,a,b);t=a;a=b;b=t;printf(tt(3)a=%db=%d\n,,,a,b);)程序运行结果(l)x=10y=20(2)a=10b=20⑶a=20b=10(4)x=10y=207.6程序应用举例编写ー个函数isprime(inta),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0.#include<stdio.h>indsprime(int);main()(intx;printfC'enteraintegernumber:^^);scanf("%d”,&x);if(isprime(x))printf(**%disprime\n",x);elseprintf("%disnotprime\n",x);}intisprime(inta){inti;for(i=2;i<=a/2;i++)if(a%i==0)retumO;return1;}编写函数myupper(ch),把ch中的小写字母转换成大写字母作为函数值返回,其他字符不变。主函数中不断输入字符,用字符@结束输入,同时不断输出结果。#include<stdio.h>#include<ctype.h>charmyupper(charch)if(ch>=,a,&&ch<=,z,)ch=ch-32;returnch;}main()(chare;while((c=getchar())!=,@,)(c=myupper(c);putchar(c);))编写函数统计输入字符的个数,用@字符结束输入,在主函数中调用此函数,输出统计结果。#include<stdio.h>longcountch();main(){longn;n=countch();printf("n二%ld\n”,n);}longcountch(){longcn;for(cn=0;getchar()!=*@*;cn++)»returncn;)7,10…,7-13节、课后习题说法中正确的是CA)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,要调用的函数必须在main函数中定义C)C语言程序总是从main函数开始执行D)C语言程序中的main函数必须放在程序的开始部分函数的类型是CA)与参数x的类型相同B)void类型C)int类型D)无法确定fff(floatx){printf("%d\n",x*x);}函数调用语句中,含有的实参个数是BA)1B)2C)4D)5func((exp1,exp2),(exp3,exp4,exp5));程序的输出结果是CA)11B)2OC)21D)31func(inta,intb){intcc=a+b;returnc;)main(){intx=6,y=7,z=8,r;r=func((x-,y++,x+y),z-);printf(M%d\nH,r);程序的输出结果是AA)-1B)OC)1D)2main(){inti=2,p;p=f(i,i+l);printf("%d”,p);intf(inta,intb){intc;c=a;if(a>b)c=l;elseif(a==b)c=O;elsec=-l;retum(c);)程序的输出结果是DA)OB)1C)6D)无定值fun(inta,intb,intc){c=a*b;}main(){intc;fun(2,3,c);primf("%d\n”,c);)程序的输出结果是AA)5.5OOOOOB)3.OOOOOOC)4.OOOOOOD)8.25doublef(intn){inti;doubles;s=1.0;for(i=1;i<=n;i++)s+=1.0/i;returns;main(){inti,m=3;floata=O.O;for(i=0;i<m;i++)a+=f(i);printf(H%f\nM,a)L;)二、填空题程序的输出结果是12.unsignedfun6(unsignednum){unsignedk=l;do{k*=num%10;num/=10;|while(num);returnk;)main(){unsignedn=26;printf(0%d\n,\fun6(n);)程序的输出结果是ー9.0.doub1esub(doublex,doubley,doublez){y-=1.0;z=z+x;returnz;}main(){doublea=2.5,b=9.0;printf("%f\nM,sub(b-a,a,a));}程序的输出结果是ー4.funl(inta,intb)(intc;a+=a;b+=b;c=fun2(a,b);returnc*c;)fun2(inta,intb){intc;c=(a*b)%3;returnc;}main(){intx=ll,y=19;

printf(H%d\nH,funl(x,y));pi函数的功能是,根据以下公式返回满足精度要求的的值.请填空.pi/2=l+l/3+l/3*2/5+l/3*2/5*3/7+l/3*2/5*3/7*4/9+...doublepi(doubleeps){doubles=0.0,t=1.0;intn;for(—n=1—;t>eps;n++){s+=t;t=n*t/(2*n+l);)retum(2.0*—S );)函数用以求x的y次方.请填空.doublefun(doublex,inty){inti;doublez=l;for(i=l;i <=y—;i++)z= z*x—;retumz;}n.程序的功能是计算S=SK!.请填空.longf(intn)K=1longf(intn)K=1(intiJongs;s=_1 ;for(i=1;i<=n;i++)s=_s*i ;returns;)main()(longs;intk,n;scanf(r,%dr;&n);s=0 :for(k=0;k<=n;k++)s=s+ f(k)一;printf(n%ld\n",s);)三、程序调试和编程题fun函数用以判断n是否是素数,fun函数中有逻辑错,请调试改正.fun(intn){intk,yes;for(k=2;k<=n/2;k++)if(n%k==O)returnyes=O;yes=l;returnyes;第八章:指针变量变量的地址和指针:在最开始的时候,一直给大家强调变量要先定义,后使用。为什么会这个样子?这是因为,每当我们使用ー个变量系统就必须要给他开辟ー个存储单元。系统要对它的值进行记录。每时每刻的记录。怎样进行记录呢?系统会自动的开辟ー个地方将该变量监督起来,观察和记录它的变化。这个地方多大放什么东西?这都要求我们提前和系统说好。所以就有了变量要先定义在使用说法。其实变量定义的过程就是给他开辟存储空间的过程。那么存储空间又是什么东西呢??计算机种有一个硬件叫内存条,当我们提起这个硬件的时候往往都会说多大的。1G,2G,4G……这都是在说他的空间大小。计算机中的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存地址。如同旅馆的房间ー样,单人间,双大间等等,每个房间都有自己的编号。内存中的空间是连续的,地址号也是连续的,并且都是用二进制数来表示的。变量在定义的时候先要说明定义的类型。如:intk;doubleb;charch;等等如此的定义。这样是在和电脑系统打招呼,我们是2大要一个两人间。目的就是告诉老板你的房间要是两个人的空间。不能定的是2大间,结果来了3个大住;同时也不能定的2人间,结果就你自己来了(对自己来说多花钱了)。综上所述:变量的定义就是给变量开辟存储空间的过程。inta floatbaabbbb1012 101310141015 10161017这就是变量定义的时候系统给随即开辟的地址空间、再结合我们在一开始降的不同类型的变量的大小,其实就是在说变量所占的内存单元的多少。1012就是整形变量a的首地址,1014就是浮点型变量b的首地址。当要用到ー个变量时,系统就会迅速的找到这个变量。所以在C程序中还有这样的ー个变量的存在,就是指针。指针就是用来存放ー个变量在内存中的地址,当要调用这个变量的时候能迅速的找到。用来存放ー个变量地址的变量就叫指针变量。同时大家也要走出一个误区就是:指针变量之所以叫变量,就是因为它里面所存放的变量的地址也不断的变化的。指针是可以移到的。指针变量的定义和指针变量的基类型一:格式:类型名・指针变量名1,・指针变量名2….如int*pi,*pj;与之前不一样的地方就是在变量的前面加了一个・。・是ー个说明符,用来说明该变量是指针变量。・号省略的话就和普通的变量一样了。又如:int*pi;char*ch;inta;charc;指针的作用都是ー样的,都是用来存放地址的,为什么还要分类型的。原因就是指针变量pi只能存放整型变量的地址,指针变量Ch只能存放字符变量的地址。如何让一个指针存放ー个变量的地址呢?

pi=&a;ch=&c;&叫取址符。・叫指针运算符。能过以上的讲解在家一定对指针有了更进ー步和了解。我们共同的回顾一下;变量的定义就是给其开辟存储单元的过程。任何ー个变量都有自己的存储地址。指针就是用来存放变量地址的。指针也是ー个变量。指针也要一个地址。那,有没有能存放指针变量地址的ー个对象呢?用该怎么称呼?有它是专门用来存放指针的地址的。它就是指向指针的指针。int**p,*s;p=&s;**p就是ー个指向指针的指针。它里面只能存放同种数据类型的指针的地址。给指针变量赋地址值一个指针变量可以通过不同的方式获得一个确定的地址值,从而指向ー个具体的对象。(在以后的课程中,每当一个指针中存放了一个变量的地址的时候,我们就说这个指针指向了这个变量)。intk=l,*q,*p;q=&k;这时可以说:q指向了变量k;q=&k+lq=&(k+l)这都是错误的,指针q就是用来存放地址的,前两个例子不是。同时:&必须放在运算对象的左边,而且运算对象的类型必须与指针变量的基类型相同。2,通过指针变量获得地址值可以通过赋值运算,把ー个指针变量中的地址值赋给另ー个指针变量,从而使这两个指针指向同一地址。intk,*p,*q;q=&k;p=q;也就是说指针变量p和q都指向了变量k.注:当进行赋值运算时,赋值号两边指针变量的基类型必须相同。3.给指针变量赋“空”值:“空'':null的代码值为0,当执行了以上和赋值语句后,称P为空指针。null的代码值为0.也可表示为:p='、〇'p=O;注意:P并不是指向地址为〇的存储单元,而是一个有确定的值‘‘空"。8.4对指针变量的操作C语言提供了一个称作“间接访问运算符”的单目运算符:当指针变量中存放了ー个确切的地址值是,就可以用“间接运算预算符”通过指针来引用该地址的存储单元。int*p,i=10,j;P=&>;则这样的赋值语句j=*P;上面的这个赋值语句我们可以这样理解:j变量的值是由指针指向的空间中的值赋予的。这里的・p代表指针p中存放的变量i的地址中的值。・不是乘而是用来说明指针的说明符。j=i j=*(&i)如果有这样的表达式代表:j=*p+l代表指针P指向的空间中中的值加1后的值给了变量j;再如int*p,k=O;p=&k;*p=100;*p+=l;注意:当・p出现在赋值号左边时,代表的是指针所指的存储单元,当出・p出现在赋值号右边时,代表的是指针所指的存储单元的内容。如果有:*p+=l++*p(*p)++这三个表达式有什么不一样吗?++和・两个运算符的优先级相同。但按自右至左的方向结合。因此++*p相当于++(*p)。而在(*p)++中,ー对括号不可以少,(*p)++代表先取里面的值然后再加1。而如果去掉怎成了・p++,根据顺序,先++然后再取值。这样就成了先p++再取值。而P++就是指针先向后移动。例8,1用指针指向两个变量,通过指针运算选出值小的那个数。#include<stdio.h>main()(inta,b,min,*pa,*pb,*pmin;pa=&a;pb=&b;pmin=&min;scanf(u%d%d,\pa,pb);printf(4ta=%d,b=%d\n*\a,b);*pmin=*pa;if(*pa>*pb)*pmin=*pb;printf(umin=%d\n,,,min);8.4移动指针所谓移动指针就是对指针变量加上减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。(因此只有当指针指向ー串连续的存储单元时,指针的移动オ有意义)1122334455a[0]a[l]a[2]a[3]a[4]qtp=&a[O]q=p+2q++q++qーーp++对指针进行加减运算时,数字“1”不再代表十进制数1,而是指一个単位存储単元长度。这个单元到底多长,要看存储数据的类型了。如果是int则代表1个存储単元长度就是位移4个字节。如果是char类型则代表1个存储单元长度就是位移1个字节.如果变量的类型是double,8个字节为ー个单位,而指向它的指针是int,4个字节为ー个单位。那么这个时候指针每移动ー个単位就代表移动4个字节的长度,这个时候读取数据的时候就会岀错。8.5函数之间地址值的传递▲形参为指针变量时参数和形参之间的数据传递若函数的形参为指针类型,调用该函数时,对应的实参必须是基类型相同的地址值或者是已指向某个存储单元的指针变量。例题:编写函数myadd(int*a,int*b),函数中把指针a和b所指的存储单元中的两个值相加,然后将和值作为函数值返回。在主函数中输入两个数给变量,把变量地址做为实参,传给对应的形参。#include<stdio.h>intmyadd(int*a,int*b){intsum;sum=*a+*b

温馨提示

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

评论

0/150

提交评论