C语言程序设计教程(第三版)(微课版)课件全套 王娟勤 第1-10章 简单的C程序设计- 编译预处理_第1页
C语言程序设计教程(第三版)(微课版)课件全套 王娟勤 第1-10章 简单的C程序设计- 编译预处理_第2页
C语言程序设计教程(第三版)(微课版)课件全套 王娟勤 第1-10章 简单的C程序设计- 编译预处理_第3页
C语言程序设计教程(第三版)(微课版)课件全套 王娟勤 第1-10章 简单的C程序设计- 编译预处理_第4页
C语言程序设计教程(第三版)(微课版)课件全套 王娟勤 第1-10章 简单的C程序设计- 编译预处理_第5页
已阅读5页,还剩622页未读 继续免费阅读

下载本文档

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

文档简介

大学程序设计(C)主讲:

程序和程序设计的概念1.1

C语言程序基本组成1.2

运行C程序的步骤与方法1.3第1章C语言程序设计概述1.1程序和程序设计的概念

计算机是如何解决问题的?请给我去取一下顺风的快递1.拿上取件凭证,走到北校快递服务中心2.找到顺风的摊点3.给快递员取件凭证,拿上快递,核对4.回到…5.将快递交到一个叫王小明的人手里。人:whattodo计算机:Howtodo你会怎样做?计算机会怎样做?1.1程序和程序设计的概念

程序设计是把要求解的任务或设计好的算法转换为计算机程序的全过程。

计算机是可以按照人们事先编写的程序高速、精确地进行数据加工、处理的电子装置。

计算机是如何解决问题的?

程序是用计算机语言描述的、为解决某一问题、满足一定语法规则的语句序列。

5/126程序设计:程序数据模型基本思路数据表示数据处理程序语言编程环境设计方法问题想法算法人(设计方案)计算机(执行方案)1.1程序和程序设计的概念

计算机的语言在发展的过程中经历了三个阶段:如:表示2+301110000110101000010MOV

AC

,3ADD

AC

,2A=2+3面向机器的二进制语言、CPU直接运行。面向机器符号化语言,翻译后运行。面向问题的类自然语言,翻译后运行。编译或解释系统SourceObject机器语言汇编语言高级语言计算机的语言编译方式优点:编译链接后,可产生可执行文件,可以脱离编译环境独立运行。发布编译后的程序,有助于保护软件版权。相对于解释方式,程序执行效率更高。源程序目标程序可执行程序计算结果编译程序连接程序数据解释方式解释程序对源程序进行逐句分析,若没有错误,则将该语句翻译一个或多个机器语言指令,并立即执行;若有错误,则立即停止,报错并提醒用户更正。源程序计算结果数据解释程序1.2C语言程序基本组成#include<stdio.h>intmain(void){printf("Hello,World!\n");

return0;}>注释编译预处理主函数语句输出:Hello,World!语句结束符例1.1第一个程序

Hello,World!/*example1.1ThefirstCProgram*/

[案例1.2]

#include<stdio.h>

intmain(void)

{return0;}

输出:Hello,World!Iamastudent,mynameisxxx1.2C语言程序基本组成printf("Hello,World!\n");

printf("Iamastudent,mynameisxxx\n");#include<stdio.h>

intmain(void)

{return0;}

[案例1.3]:计算并显示两个数字的和变量定义变量使用变量输出inta,b,sum;

a=123;b=456;sum=a+b;

printf("sumis%d\n",sum);1.2C语言程序基本组成#include<stdio.h>

intmain(void)

{inta,b,sum;

a=123;b=456;sum=a+b;printf("%d+%d=%d\n",a,b,sum);

return0;}

[案例1.4]:计算并显示两个数字的和1.2C语言程序基本组成#include<stdio.h>intmain(void){inta,b,sum;printf("Pleaseinputtwonumbers:\n");scanf("%d%d",&a,&b);sum=a+b;printf("%d+%d=%d\n",a,b,sum);

return0;}[案例1.5]:计算并显示两个数字的和输入提示读入两个数1.2C语言程序基本组成#include<stdio.h>intmain(void){intadd(intx,inty);inta,b,sum;a=10;b=24;sum=add(a,b);printf("sum=%d\n",sum);return0;}intadd(intx,inty){intz;z=x+y;return(z);}例1.6计算两个数之和运行结果:sum=341.2C语言程序基本组成/*example1.2calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/intmain(void){intadd(intx,inty);inta,b,sum;a=10;b=24;sum=add(a,b);printf("sum=%d\n",sum);return0;}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}例1.6计算两个数之和。运行结果:sum=34函数语句预处理命令注释

主函数

被调用函数结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其他函数通过嵌套调用得以执行。每一个函数由函数首部和函数体组成。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法编译预处理命令1.2C语言程序基本组成函数1(参数){语句;…}intmain(void){语句;…}函数2(参数1,参数2){语句;…}ex1-1.c开始结束/*example1.2calculatethesumofaandb*/#include<stdio.h>/*Thisisthemainprogram*/intmain(void)函数首部{inta,b,sum;a=10;b=24;函数体

sum=add(a,b);printf(”sum=%d\n",sum);return0;}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty)函数首部{intz;z=x+y;函数体

return(z);}格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}intmain(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);return0;}优秀程序员的素质之一:使用TAB缩进{}对齐有足够的注释有合适的空行1.2C语言程序基本组成编辑链接编译执行1.3运行C程序的步骤与方法C程序开发步骤<>file.exe程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe1.3运行C程序的步骤与方法上机运行C程序的方法

CodeBlocks环境介绍

<>

CodeBlocks是一个免费、开源、跨平台的C/C++IDE(集编辑、编译、连接及运行功能于一身)软件。ABCA.文件列表窗口,可以列出指定外存上的所有文件夹及文件。B.源程序编辑窗口,可以对源程序文件进行编辑。C.调试信息输出窗口,用于输出程序编译、链接过程的各种提示信息。1.3运行C程序的步骤与方法

构建(编译连接生成EXE文件)运行构建并运行1.3运行C程序的步骤与方法

练习1.设计并在屏幕上打印自己程序设计的logo。例如:*******************************************************NWSUAF**2301班*******程序******BYJUANQINWANG**2024.2.13*****************************************************2.已知三角形的3条边长,利用海伦公式计算三角形的面积。

Question?请在课程群或在讨论中提问吧!大学程序设计(C)主讲:王娟勤西北农林科技大学信息工程学院

数据与数据类型2.1

常量及其类型2.2

变量定义及初始化2.3第2章

运算符2.4

数据的输入与输出2.5C语言基础2.0预备知识计算机中数的表示及进制转换数码、基与权数码:表示数的符号基:数码的个数权:每一位所具有的值数制<>数制基权表示数码特点10º,10¹,10²,…十进制数0~910逢十进一二进制数0~122º,2¹,2²,…逢二进一八进制数0~788º,8¹,8²,…逢八进一十六进制数0~9,A~F,a~f1616º,16¹,16²,…逢十六进一十进制:4956=410³+910²+510¹+610º二进制:1011=12³+02²+12¹+12º十六进制:81AE=816³+116²+1016¹+1416º八进制:4275=48³+28²+78¹+58º2.0预备知识各种进制之间的转换二进制、八进制、十六进制转换成十进制方法:按权相加<>2.0预备知识各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为0例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余12.0预备知识二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制八进制转换成二进制:用3位二进制数代替每一位八进制数例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>2.0预备知识二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>2.0预备知识字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1012345678910……...01234567013452…2.0预备知识整数值的编码——原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值用一个字节表示的9的原码为00001001用一个字节表示的-9的原码为10001001反码:正数:反码与原码相同用一个字节表示的9的反码为00001001负数:符号位为1,其余位对原码取反用一个字节表示的-9的反码为11110110补码:正数:原码、反码、补码相同用一个字节表示的9的补码为00001001负数:最高位为1,其余位为原码取反,再对整个数加1用一个字节表示的-9的补码为111101112.0预备知识补码整数在计算机中存储时,存储的是哪个编码?2.0预备知识原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000(用一字节表示数)<>补码运算举例:18-13=500010010+1111001110000010125-36=-1100011001+11011100111101012.0预备知识2.0预备知识实数在计算机中存储时,怎样存储?小数:定点数:小数点位置固定的数,如:110.011B为定点数。

浮点数:对应于科学(指数)计数法,如:1.10011×210=11001.1×2-10=0.110011×2+11

小数点可随着指数移动一般把小数转换成浮点数进行存储。例如110.011转换成0.110011×2+11再进行存储。注:尾数的位数决定数的精度,阶码的位数决定数的范围阶符阶码数符尾数0110110011浮点数的表示方法在计算机中一个浮点数由两部分构成:阶码和尾数。阶码是指数,尾数是纯小数。浮点数存储格式存储在计算机中的浮点数2.0预备知识例如110.011转换成0.110011×2+11的存储形式

2.1数据与C语言的数据类型数据是对客观事物的符号表示。

是所有能被输入到计算机中,且能被计算机处理的符号(数字、字符等)的集合,它是计算机操作对象的总称。

张三男175CM符号化

2.1数据与C语言的数据类型数据是对客观事物的符号表示。

是所有能被输入到计算机中,且能被计算机处理的符号(数字、字符等)的集合,它是计算机操作对象的总称。

程序数据的存储数据的操作数据的输出

2.1数据与C语言的数据类型数据是对客观事物的符号表示。

是所有能被输入到计算机中,且能被计算机处理的符号(数字、字符等)的集合,它是计算机操作对象的总称。在程序中对各种数据进行处理之前都要对其类型预先进行说明。

一是便于为数据分配相应的存储空间;

二是说明了程序处理数据时应采用何种运算方法(操作)。

数组类型([])结构体类型(struct)共用体类型(union)实型单精度型(float)双精度型(double)2.1数据与C语言的数据类型数据类型总表字符型(char)整型(short,int,long,unsigned)<>数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作基本类型数据类型构造类型指针类型(*)空类型(void)枚举类型(enum)基本数据类型类型符号关键字数的表示范围所占字节整型字符型实型有无[signed]short[int]2-32768~32767[signed]int4-2147483648~2147483647[signed]long[int]4-2147483648~21474836474unsigned

int0~429496729540~4294967295unsignedlongunsignedshort20~65535有float4-3.4e38~3.4e38有double8-1.798e308~1.798e308有char1-128~127无unsignedchar10~255说明:数据类型所占字节数随编译系统不同而不完全相同。如:TurboC中int占2字节,CodeBlocks和VC中int占4字节。0111111111111111short:最大:327671000000000000000最小:-327681111111111111111unsignedshort:最大:655350000000000000000最小:0intmain(void){intnum,total;num=15;total=num*8;printf("%d",total);return0;}#definePRICE8intmain(void){intnum,total;num=15;total=num*PRICE;printf("%d",total);return0;}用一个c程序:说明:一般用大写字母是宏定义预处理命令,不是C语句如#definePRICE30常量定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define

符号常量常量<>#definePRICE30#include<stdio.h>intmain(void){intnum,total;num=10;total=num*PRICE;printf("total=%d\n",total);return0;}运行结果:total=3002.2常量及其类型常量定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define

符号常量常量定义格式:const

类型符号常量=常量<>例如:constfloatPI=3.1425926;2.2常量及其类型定义格式:const

类型符号常量=常量直接常量:整型常量实型常量字符常量字符串常量常量定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define

符号常量常量>>>><>2.2常量及其类型整型常量(整常数)三种形式:十进制整数:由数字0~9和正负号表示。如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示。如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示。

如0x123,0Xff<例12与12L例30000为int型65536为int型整型常量的类型默认为int类型在整常量后加字母l或L,认为它是longint

型常量问题:0123=()100x123=()100Xff=()1083291255问题:0123=()100x123=()100Xff=()102.2常量及其类型实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5

<实型常量的类型默认double型在实型常量后加字母f或F,认为它是float型2.2常量及其类型字符常量定义:用单引号括起来的单个普通字符或转义字符.

字符常量的值:该字符的ASCII码值如'\101'-----------'A''\012'-----------'\n''\376'-----------'''\x61'-----------'a''\60'-----------'0''\483'----------(

)例:'A'-------'\101'-------'\x41'--------65<如'A'——65,'a'——97,

'0'——48,

'\n'——10如'a'

'A'

'?'

'\n'

'\101'转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例intmain(void){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");return0;}运行结果:(屏幕显示)ABCIsay:"Howareyou?"\CProgram\Turbo'C'例intmain(void){printf("Y\b=\n");return0;}运行结果:屏幕显示:=打印机输出:¥转义字符含义转义字符含义\n换行\t水平制表\r回车\b退格\a响铃\\反斜线\'单引号\"双引号\ddd1-3位8进制数代表的字符\xhh1-2位16进制数代表的字符转义字符及其含义:2.2常量及其类型<字符常量与字符串常量不同字符串常量定义:用双引号(")括起来的字符序列存储:每个字符串尾自动加一个'\0'作为字符串结束标志hello\0例字符串"hello"在内存中a

a\0例

'a'"a"例空串""\0例:charch;ch="A";例:charch;ch='A';2.2常量及其类型2.3变量定义及初始化标识符定义:用来标识变量、常量、数组、函数等的字符序列组成:1)标识符只能由字母、数字和下划线组成,且第一个字符必需为字母或下划线。2)C语言中大小写字母是两个不同的字符。3)关键字,特殊字不能做变量名及一些函数,数组名。长度:最长32个字符命名原则:见名知意不宜混淆如l与I,o与0例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above<>M.D.John3days#33chara>b变量概念:其值可以改变的量变量名与变量值变量定义的一般格式:

数据类型变量1[,变量2,…,变量n];<>变量初始化:定义时赋初值例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch='A';intx=1,y=1,z=1;

intx=y=z=1;变量的使用:先定义,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent'infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc4字节4字节4字节地址地址…...内存1-3

随机数整型变量占字节数随系统不同而不同short≤int≤long可用sizeof(类型标识符)测量实型变量float:占4字节,可存储7位有效数字double:占8字节,可存储16位有效数字字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/例a='D';/*a=68;*/x='A'+5;/*x=65+5;*/s='!'+'G'/*s=33+71;*/<>没有字符串变量,用字符数组存放2.3变量定义及初始化例#definePRICE12.5intmain(void){intnum=3;floattotal;charch1,ch2='D';total=num*PRICE;ch1=ch2-'A'+'a';printf("total=%f,ch1=%c\n",total,ch1);return0;}宏定义变量定义输出结果运行结果:total=37.500000,ch1=d2.3变量定义及初始化2.4运算符C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:(!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:((类型))分量运算符:(.->)下标运算符:([])其它:(如函数调用运算符())<>学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型<>2.4运算符2.4.1算术运算符和表达式基本算术运算符:

+-*/%结合方向:从左向右优先级:----->*/%----->+-

(2)(3)(4)

说明:“-”为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2<>例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-1(取被除数符号)

1%10=

1

5%1=

05.5%2()

将数学表达式转换为C语言表达式:已知a,b,c的值,求x1和x2的值的式子是?从键盘输入一个四位数,逆置该四位数后输出,例如,输入1234,输出4321.从键盘输入一个小写字母和密钥,输出加密后的密文,例如,输入x5,输出c.自增、自减运算符

++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf("%d",++j);j=3;printf("%d",j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=42.4.1算术运算符和表达式自增、自减运算符

++--作用:使变量值加1或减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:-++-------->*/%----->+-

(2)(3)(4)例-i++-(i++)i=3;printf("%d",-i++);//-3

例-i++i=3;printf("%d",-i++);2.4.1算术运算符和表达式【例】

算术表达式计算优先级和结合性规则。#include<stdio.h>intmain(void)

{inta=3,b=5,c=15,d=2;printf("%d\n",6-a*b/c%d);printf("%d\n",++a-a++);printf("%d\n",a);return0;}2.4.1算术运算符和表达式不同类型数据间的转换隐式转换(自动类型转换)什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型<>2.4.1算术运算符和表达式说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)floatfloatintintdoubledoubledoubledouble<>doublefloatlongunsignedintchar,short低高【例】

算术表达式计算自动类型转换规则#include<stdio.h>intmain(void){charch='a';inti=5;unsignedintj=6;longk=12;floatf=3.0;doubled=6.0;printf("%lf\n",ch/i+i*k-(j+k)*(f*d)/(f+i));return0;}38.5000002.4.1算术运算符和表达式显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例int

main(void){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d",x,i);return0;}结果:x=3.600000,i=3<>2.4.1算术运算符和表达式练习:求下面表达式的值后编程验证:

(1)x+a%3*(int)(x+y)%2/4

设x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.52.4.2赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;则

f=10.0例inti;i=2.56;//结果i=2;<>2.4.2赋值运算符和表达式例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表达式值为5,a,b,c值为5//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2赋值表达式的值与变量值相等,且可嵌套说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式2.4.2赋值运算符和表达式说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=-264等价于a=a+(a=a-(a*a))//a=0等价于a=a+(a=a*(a=a-(a=a*3)))2.4.2赋值运算符和表达式2.4.3逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf("%d,%d,%d",a,b,c);printf("%d,%d,%d",(a,b,c),b,c);<>//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,32.4.3逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例:/*ch2_6.c*/#include<stdio.h>intmain(void){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);return0;}运行结果:x=3<>2.4.4关系运算符和表达式关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:<<=>>===!=优先级6(高)优先级7(低)例

c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c

//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c<>//表达式值1//表达式值1//表达式值0//d=1//f=0关系运算注意:<>例若a=0;b=0.5;x=0.3;

则a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);

则a=2例'a'>0结果为

'A'>100结果为102.4.4关系运算符和表达式关系运算注意:例注意区分“=”与“==”inta=0,b=1;if(a=b)printf("aequaltob");elseprintf("anotequaltob");例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0可改写为:fabs(1.0/3.0*3.0-1.0)<1e-62.4.4关系运算符和表达式要判断x是否属于区间[1,10]该怎样表示呢?ab!a!ba&&ba||b真假真假假假真真2.4.5逻辑运算符和表达式逻辑运算符种类:!&&||逻辑运算真值表C语言中,

运算量:

0表示“假”非0表示“真”

运算结果:

0表示“假”

1表示“真”<>真假假假假假真真假假真真真假真真!(2)&&(11)||(12)高低例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b优先级:结合方向:!:从右向左&&:从左向右||:从左向右<>//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)2.4.5逻辑运算符和表达式!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0

'c'&&'d'<>值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为12.4.5逻辑运算符和表达式!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符<>例a&&b&&c//只在a为真时,才判别b的值;

只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;

只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=12.4.5逻辑运算符和表达式1【例】逻辑表达式的计算和逻辑表达式的值。

#include<stdio.h>#defineEOF1intmain(void){inta=3,b=4,c=5;printf("%d\n",3*(a+b)>c&&a++||c!=0&&!EOF);return0;}?2.4.5逻辑运算符和表达式会写逻辑式1.判断两个变量能不能整除,能不能被2整除等。2.判断输入的三条边能不能构成三角形。3.判断一个数x是否属于某区间[a,b]。4.闰年的判断方法:能被4整除但不能被100整除,或者能被100整除也能被400整除。2.4.5逻辑运算符和表达式一般形式:表达式1?

表达式2:

表达式3执行过程求两个数据的最大值?表达式1取表达式2值取表达式3值非0=0<>例(a==b)?'Y':'N'(x%2==1)?1:0(x>=0)?x:-x(c>='a'&&c<='z')?c-'a'+'A':cMax=a>b?a:b;2.4.6条件运算符与表达式2.4.6条件运算符与表达式条件运算符可嵌套

如x>0?1:(x<0?-1:0)

优先级:13结合方向:自右向左

如a>b?a:c>d?c:da>b?a:(c>d?c:d)表达式1、表达式2、表达式3类型可不同,表达式值取较高的类型<>例x>y?1:1.5//x>y,值为1.0;x<=y,值为1.5条件表达式的使用条件表达式常用在赋值语句中代替if-else语句。【例】从键盘接收一个字符存放在变量c中。要求只把输入的小写字母转换成大写字母,其他字符不变,并显示是输入了小写字母还是其他字符。

#include<stdio.h>intmain(void){charch,c;scanf("%c",&ch);c=ch>='a'&&ch<='z'?ch-32:ch;printf("%c\n",c);printf(ch>='a'&&ch<='z'?"Lowercasecharacter":"Othercharacter");return0;}2.4.6条件运算符与表达式2.4.7测试数据长度运算符

为了能够确定某一种类型数据的长度,C语言提供了测试数据长度运算符sizeof,它的一般格式为:

sizeof(exp)其中,exp可以是类型关键字、变量或表达式。其功能是给出exp所代表的数据类型、变量或表达式占用的内存字节数。

sizeof(double),sizeof(x),

sizeof(a+b),sizeof(3*1.46/7.28)

sizeof是一元运算符,它的优先级与++、--、&、~等相同,结合性为从右至左。【例】用sizeof测试CodeBlocks中各种数据类型的长度。

#include<stdio.h>intmain(void){charch='a';intx=5,y=6;floata=1.28f,b=3000.0f;printf("char:%d\n",sizeof(ch));printf("shortint:%dint:%dlongint:%d\n",sizeof(shortint),sizeof(int),sizeof(longint));printf("float:%d\n",sizeof(a));printf("double:%dlongdouble:%d\n",sizeof(double),sizeof(longdouble));printf("intexpress:%d\n",sizeof(x+y));printf("floatexpress:%d\n",sizeof(a+b));printf("characterexpress:%d\n",sizeof('a'-'0'));return0;}2.4.7测试数据长度运算符2.4.8常用数学函数

C编译系统在标题文件math.h中定义了众多的数学函数。当需要调用这些数学函数时,要用"#include<math.h>"命令行包含该标题文件。下面列出的函数中,自变量x和y为double型,n为int型,所有的函数值均为double型,三角函数的自变量以弧度为单位,反三角函数的函数值以弧度为单位。sin(x)x的正弦,值域为[-1,1]cos(x)x的余弦,值域为[-1,1]tan(x)x的正切asin(x)x的反正弦,定义域为[-1,1],值域为[-π/2,π/2]acos(x)x的反余弦,定义域为[-1,1],值域为[0,π]atan(x)x的反正切,定义域为[-1,1]atan2(y,x)y/x的反正切,y/x的取值范围为[-1,1]sinh(x)x的双曲正弦,即(ex-e-x)/2cosh(x)x的双曲余弦,即(ex+e-x)/2tanh(x)x的双曲正切,即(ex-e-x)/(ex+e-x)exp(x)指数函数,exlog(x)自然对数,即lnx,x>0pow(x,y)xy,若x=0且y≤0,或x<0但y不是整数时出错sqrt(x)x的平方根,x≥0ceil(x)不小于x的最小整数,double型函数,如:ceil(1.02)=2.0,ceil(-1.02)=-1.0floor(x)不大于x的最大整数,double型函数,如:floor(1.02)=1.0,floor(-1.02)=-2.0fabs(x)x的绝对值fmod(x,y)x/y的浮点余数,其符号与x相同。例如:fmod(10.0,3.0)=1.02.5不同类型数据的输入与输出C语言无I/O语句,I/O操作由函数实现scanf()和printf()函数#include<stdio.h>格式:printf("格式控制串",输出表)功能:按指定格式向显示器输出数据返回值:返回输出数据字节数格式输出函数printf()输出表:要输出的数据

(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:

%[修饰符]格式字符,用于指定输出格式普通字符或转义序列:原样输出格式字符2.5不同类型数据的输入与输出d,ix,Xoucse,Efg,G%%格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567;printf("%d",a);inta=255;printf("%x",a);inta=65;printf("%o",a);inta=567;printf("%u",a);chara=65;printf("%c",a);printf("%s","ABC");floata=567.789;printf("%e",a);floata=567.789;printf("%f",a);floata=567.789;printf("%g",a);printf("%%");567ff101567AABC5.677890e+002567.789001567.789%说明

格式字符除X、E、G外要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出例inta=3,b=4;printf("%d%d\n",a,b);printf("a=%d,b=%d\n",a,b);输出结果:34a=3,b=4例

int

main(void){unsignedintu=4294967295;printf("u=%d\n",u);return0;

}

输出结果:u=-11111111111111111429496729511111111111111112.5不同类型数据的输入与输出附加格式说明符(修饰符).n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能m输出数据域宽,数据长度<m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l%[修饰符]格式字符例inta=1234;floatf=123.456;charch='a';printf("123456789012345678901234567890\n");printf("%8d,%2d\n",a,a);printf("%f,%8f,%8.1f,%.2f,%.2e,%g\n",f,f,f,f,f,f);printf("%3c\n",ch);例(ch3-2.c)m.n2.5不同类型数据的输入与输出例ch3-3.cchara[]="Hello,world!";printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a);运行结果:2.5不同类型数据的输入与输出例inta=1234;floatf=123.456;charc[]="Hello,world!";printf("%8d,%-8d#\n",a,a);printf("%10.2f,%-10.1f#\n",f,f);printf("%10.5s,%-10.3s#\n",c,c);运行结果例ch3-4.c-2.5不同类型数据的输入与输出例inta=1234;floatf=123.456;printf("%08d\n",a);printf("%010.2f\n",f);printf("%0+8d\n",a);printf("%0+10.2f\n",f);例ch3-5.c0、+例inta=123;printf("%o,%#o,%X,%#X\n",a,a,a,a);

例ch3-6.c#例l00001234

0000123.46

+0001234

+000123.46173,0173,7B,0X7B例longa=655366789;printf("%d,%8ld\n",a,a);

655366789,655366789格式说明类型表(总结)格式说明符说明量的类型d、i、o、x、u整型c字符型s字符串f、e、g浮点型

格式说明符应和输出的列表项对应,产生相应的输出。其中输出的表项应与格式说明符类型一致。printf("a=%5d\nb=%f",2+3,5.34);2.5不同类型数据的输入与输出格式说明串的一般形式和意义%

-

m.n

l

格式类型字符(一个字母)格式说明标志对齐方式:缺省为右对齐,-为左对齐。

宽度.精度(位数),宽度:输出总列数,精度:小数位数(或字符个数)。类型长度,缺省整型,l表示long或double。2.5不同类型数据的输入与输出

温馨提示

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

评论

0/150

提交评论