版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章程序设计ABCC语言大学实用教程C语言大学实用教程HIT-CProgramming
本章学习内容C语言的特点C程序的基本结构编辑、编译、链接、运行C语言程序的环境、方法和步骤HIT-CProgramming
很像厨师的菜谱,定义了执行某个任务所需的步骤但不幸和不同的是,你不能使用你自己的母语来写程序何谓程序?HIT-CProgramming
计算机能读懂的语言?机器语言(MachineLanguage)由一系列二进制0和1组成机器语言编写的1+1程序低级语言101110000000000100000000000001010000000100000000像不像天书?HIT-CProgramming
PRINT1+1结果显示在屏幕上#include<stdio.h>main(){ printf("%d\n",1+1);}人与计算机进行交流的语言BASIC语言编写的1+1程序C语言编写的1+1程序既不是英语,也非机器语言但更像英语高级语言比写机器语言程序容易,但比使用英语难何谓程序设计语言
(programminglanguage)?
HIT-CProgramming
何谓程序员
(Programmer)?编写程序源代码(SourceCode)的人计算机、程序员、程序之间的关系如果计算机是乐队,那么程序员就是指挥家,程序就是乐谱。如果计算机是军队,那么程序员就是总司令,程序就是作战计划。HIT-CProgramming
程序开发步骤Whatistobedone?可执行文件扩展名为.exe的文件
分析(Analysis)设计(Design)编码(Write)编辑(Edit)编译(Compile)链接(Link)运行(Run)调试(Debug)Howisittobedone?扩展名为.c的文件(对C而言)扩展名为.obj的文件HIT-CProgramming
开发C程序的步骤1.设计算法2.根据算法思路或数学模型,按照该语言的语法编写程序源代码把自己的意图写入源代码中3.编辑源程序4.编译和连接5.反复上机调试程序,直到改正了所有的编译错误和运行错误6.运行HIT-CProgramming
如何让计算机读懂
程序设计语言?编译程序(编译器,Compiler)的功能读入高级语言编写的程序源代码,将其翻译成在逻辑上与之等价的目标程序,即转换成机器代码(可执行程序)一种程序设计语言对应一种编译器C语言可执行程序编译器HIT-CProgramming
编译程序的执行过程?编译过程一般分成5个阶段HIT-CProgramming
程序在计算机内部是如何运行的?计算机把机器代码读入到内存由CPU运行这些代码读取输入(Input)产生输出(Output)完成程序预定的功能输入/输出设备存储器运算器控制器程序和输入数据输出结果取出数据存入数据操作命令存取命令取出程序指令输入输出命令计算结果CPU大脑记忆装置(Memory)眼睛和耳朵HIT-CProgramming
高级语言的魅力易学、易用、易读、易懂、强大、可移植百家争鸣,据不完全统计2500种,绝大多数是高级语言/~nkinners/LangList/Extras/langlist.htm可看到其列表和简介影响最大、寿命最长的是C语言HIT-CProgramming
C语言的产生背景和历程20世纪60年代,贝尔实验室,KenThompson开始开发一个叫做UNIX的操作系统最初的操作系统等系统软件都是用汇编语言编写的,便于直接对硬件及接口进行操作,但依赖于硬件,可读性和可移植性比较差→高级语言?→集高级语言和低级语言优点于一身?70年,将BCPL语言改造成更适合开发UNIX的B语言73年,DennisM.Ritchie将B语言改造成C语言,把UNIX操作系统的90%以上源代码用C语言改写HIT-CProgramming
C语言的设计者Ritchie漫画像1978年,BrianW.Kernighan和DennisM.Richie合著影响深远的名著《TheCProgrammingLanguage》称为标准的C语言版本1983年,美国国家标准化协会对C发展和扩充,制定了新的标准称为ANSICANSIC标准的发布是C语言成熟的标志教科书就是以ANSIC为依据编写的接受美国国家技术勋章HIT-CProgramming
C程序设计语言是一种高级语言并不“高级”,只是相对低级语言,在一个高的级别上进行编程但实际上是一种介于高级语言和低级语言之间的语言历史悠久,战勋卓著诞生于上世纪70年代初,成熟于80年代很多重量级软件都是用C写的上天入地,无所不能几乎没有不能用C写出来的软件,没有不支持C的系统很多流行语言、新生语言都借鉴了它的思想、语法从C++,到Java,再到C#正确地学好C语言,是学习这些流行语言的基础HIT-CProgramming
C程序设计语言以往的擅长:与操作系统和基础工具有关的编程任务操作系统核心,设备驱动程序,系统工具,网络应用,编辑器,字处理工具,编译器,某些图形和GUI应用,以及数据库应用未来的发展:高性能、实时中间件,嵌入式领域,并发程序设计等HIT-CProgramming
认识C语言从这里开始第一个程序范例打印单词“Hello,World”#include<stdio.h>main(){ printf("Helloworld\n");}考考你:如何把“hello”和“world”分别打印在两行?PreprocessorinstructionChassmallinstructionset,thoughtheactualimplementationsincludeextensivelibraryfunctions“myfunction.h”CencouragesuserstowriteadditionallibraryfunctionsoftheirownEveryCprogrammusthaveamainfunctionTheexecutionofCprogramstartsfrommain()
functionHIT-CProgramming
PreprocessInstruction2typesofpreprocessinstructionthatarenormallyused:#include#define#includeisusedtoincludecertainfilesintotheprogram.Thosefilesneedtobeincludedbecausetheycontainthenecessaryinformationforcompilation(e.g.stdio.hfilecontainsinformationaboutprintf
function)HIT-CProgramming
PreprocessInstruction#defineisusedtodeclaremacroconstants
Example:#include<stdio.h>#definePI3.141593main(){ floatluas; luas=PI*7*7; printf(“Luas%.2f:”,luas);}MacroconstantBeforepreprocessExample:#include<stdio.h>#definePI3.141593main(){ floatluas; luas=3.141593*7*7; printf(“Luas%.2f:”,luas);}AfterpreprocessHIT-CProgramming
打印华氏温度与摄氏温度对照表计算公式:
C=(5/9)(F-32)HIT-CProgramming
打印华氏温度与摄氏温度对照表#include<stdio.h>/*对fahr=0,20,...,300
打印华氏温度与摄氏温度对照表*/main(){
int
fahr,celsius;
int
lower,upper,step;
lower=0;/*温度表的下限*/
upper=300;
/*温度表的上限*/
step=20;/*步长*/
fahr
=lower;
while(fahr<=upper)
{
celsius=5*(fahr-32)/9;
printf("%d\t%d\n",fahr,celsius);
fahr=fahr+step;
}}计算公式:
C=(5/9)(F-32)HIT-CProgramming
代码风格(CodingStytle)#include<stdio.h>/*对fahr=0,20,...,300
打印华氏温度与摄氏温度对照表*/main(){
int
fahr,celsius;
int
lower,upper,step;
lower=0;/*温度表的下限*/
upper=300;
/*温度表的上限*/
step=20;/*步长*/
fahr
=lower;
while(fahr<=upper){
celsius=5*(fahr-32)/9;
printf("%d\t%d\n",fahr,celsius);
fahr=fahr+step;
}}“代码风格”的目标是让代码清晰,增强可读性,使代码更容易被他人维护1良好的注释;2整齐的缩进;3适当的空行;4见名知义的变量命名5恰当位置的空格6每行最多只有一条语句HIT-CProgramming
如果没有代码风格,…#include<stdio.h>main(){int
fahr,celsius;int
lower,upper,step;lower=0;upper=300;step=20;fahr=lower;while(fahr<=upper){celsius=5*(fahr-32)/9;printf("%d\t%d\n",fahr,celsius);fahr=fahr+step;}}C程序的开发工具VisualC++Windows平台上最流行的C/C++集成开发环境之一Code::Blocks(简称CB,)是近年出现并获得关注的C/C++开发环境免费,开放源码,跨平台CB只是一个IDE(IntegratedDevelopmentEnvironment,集成开发环境),没有内置的编译器和调试器但可支持多种编译器,例如GCC编译器和GDB调试器
Code::Blocks+GCC(Compiler)+GDB(Debuger)VC++6.0的初始界面代码编辑窗口建立新文件保存文件编译运行在编译之前,VC先弹出对话框,询问是否建立一个默认的项目工作区。VC必须有项目才能编译,所以这里必须选择“Yes”。系统在保存.c文件的目录里自动生成与C源文件同名的.dsw和.dsp等文件。以后可直接打开这些文件来修改程序,不必再重复上面的过程信息输出窗口CB的初始界面
创建一个新的项目文件控制台应用程序输入项目文件名选择路径代码编辑窗口信息输出窗口文件及函数浏览窗口HIT-CProgramming
怎样学好编程?多读多写擅于利用身边的工具与环境Knowlegde,Practice,SkillsHIT-CProgramming
这一章我们学习了CProgramStructure由函数组成,至少有一个主函数main()
一对花括号“{}”是主函数的定界符语句用分号结束;字母区分大小写注释行多行注释:/**/单行注释://代码风格C语言的编译环境TCVCCBPreprocessorInstructionmain(){}StatementGlobalDeclarationLocalDeclaration第2章数据类型、运算符与表达式哈尔滨工业大学计算机科学与技术学院苏小红
sxh@
C语言大学实用教程C语言大学实用教程本章学习内容标识符命名;变量和常量;数据类型;常用运算符和表达式;运算符的优先级与结合性CProgramStructurePreprocessorInstructionPengisytiharangloblmain(){}PengisytiharansetempatStatementGlobalDeclarationLocalDeclarationStillrememberthisdiagram?例2.1:一个简单的C程序例子#include<stdio.h>/*函数功能:计算两个整数相加之和
入口参数:整型数据a和b
返回值:整型数a和b之和*/int
Add(inta,intb){
return(a+b);}/*主函数*/main(){
intx,y,sum=0;
printf("Inputtwointegers:");
scanf("%d%d",&x,&y);/*输入两个整型数x和y*/ sum=Add(x,y);/*调用函数Add计算x和y相加之和*/
printf("sum=%d\n",sum);/*输出x和y相加之和*/}并列的两个函数其中一个是程序的入口程序注释编译预处理命令C程序常见符号分类关键字(Keyword)又称保留字(CReservedWord)AwordthathasspecialmeaninginC标识符(Identifier)CStandardIdentifier(系统预定义标识符)Awordhavingspecialmeaningbutmayberedefined(butisnotrecommended!!)用户自定义标识符变量,函数名,…C程序常见符号分类运算符(Operator)34种,详见附录2
分隔符(Separator)空格、回车/换行、逗号等其它符号“{”和“}”标识函数体或语句块“/*”和“*/”程序注释的定界符常量(Constant)标识符命名变量名,函数名由英文字母、数字和下划线组成,大小写敏感不可以是数字开头直观,见名知意,便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性variablenamevariable_namevariableName不允许使用关键字作为标识符的名字
int,float,for,while,if等某些功能的变量采用习惯命名如:for语句所采用的循环变量习惯用i,j,kWindows风格UNIX风格P45,2.1何谓变量(Variable)?Anameassociatedwithamemorycellwhosevaluecanchange如何衡量变量所占空间大小?bit,中文叫法:位Byte,中文叫法:字节Kilobyte(KB),中文叫法:
KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1TB==
1,024GB1GB
==
1,024MB1MB
==
1,024KB1KB
==
1,024B1B==
8b一个位有多大?只能是“0”或者“1”,二进制一个字节有多大?可以表示数字0~255之间的整数保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码如何衡量变量所占空间大小?Needstobedeclared:
变量类型变量名;Example: intsum;intx,y,sum=0;变量声明(VariableDeclaration)变量声明(VariableDeclaration)使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量是初始化变量的最好时机不被初始化的变量,其值为随机数
结果会是什么?Example:intnumber1,number2;number1=25;number2=23;number1=number2;…… number1?number2?252323变量赋值(VariableAssignment)Algorithm
变量
表达式
Syntax
变量=表达式
;Rules:类型一致Expression’stypemustbethesameasvariable’stypeValidExample:
InvalidExample:
intx; inty; x=12; y=5.75;变量赋值(VariableAssignment)Example:Calculateanddisplaythepriceofanumberofapplesifthequantityinkgandpriceperkgaregiven.Input:
quantityandpricePerkgOutput:
priceProcess:
price=quantity*pricePerkg变量赋值(VariableAssignment)Example:intquantity;floatpricePerkg,price;quantity=5;pricePerkg=4.50;price=quantity*pricePerkg;…Howdoesthisprogramwork?变量赋值(VariableAssignment)Example:intquantity;floatpricePerkg,price;quantity=2;pricePerkg=4.50;price=quantity*pricePerkg;…quantity?pricePerkg?price?4.509.002变量赋值(VariableAssignment)Example:intquantity;floatpricePerkg;floatprice;Whydidwedeclareitasint?Whydidwedeclarethemasfloat?变量类型(VariableType)数据类型(DataType)为什么要区分类型?不同类型有什么不同?数据表示形式合法的取值范围占用内存空间大小可参与的运算种类数据类型(DataType)数据类型基本类型构造类型指针类型空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型基本数据类型int整数,在目前绝大多数机器上占4个字节TC2.0,2个字节float单精度浮点数,4个字节double双精度浮点数,8个字节char字符,1个字节表示256个ASCII字符,或0~255的整数数据类型修饰符shortshort
int,简写为short,短整数,2个字节longlong
int,简写为long,长整数,4个字节long
double,长双精度(高精度)浮点数,12个字节unsigned用来修饰char、int、short和long无符号整数(正整数和0)不同类型取值范围不同C语言直接提供的任何类型都有取值范围。整型类型的取值范围浮点类型的取值范围不同类型取值范围不同C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值时,结果会怎样呢?产生数值类型溢出,得到一个不正确的结果。小蛇能吞下大象吗?typeoverflow.c何谓类型溢出(Overflow)?生活中的例子:身份证号码中的出生年阿利亚娜号火箭发射失败现象与危害:溢出后的数值是可预料的,但不同平台会有所不同当程序从高位计算机向低位计算机移植(比如从64位系统移植到32位系统)时,以前从不出现的溢出问题可能出现解决方案?预先估算运算结果的可能范围,采用取值范围更大的类型。1+2+3+…1!+2!+3!+…13+23+33+…在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。不同类型占用的内存字节数不同因为同种类型在不同的平台其占字节数不尽相同。如int在16位、32位和64位系统分别占2、4和8个字节。不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现象与危害:在平台间移植时会出现问题,导致数据丢失或者溢出注意!sizeof到底是什么?C语言的关键字,并非函数计算类型占用的字节数两种语法形式sizeof(类型)结果为类型占用的字节数sizeof(表达式)结果为表达式值所属类型占用的字节数一般都使用sizeof(变量名)
现场演示例2.3
在TC和VC、CB下的运行结果#include<stdio.h>main(){
printf("DatatypeNumberofbytes\n");
printf("---------------------------------\n");
printf("char%d\n",sizeof(char));
printf("int%d\n",sizeof(int));
printf("shortint%d\n",sizeof(short));
printf("longint%d\n",sizeof(long));
printf("float%d\n",sizeof(float));
printf("double%d\n",sizeof(double));}P27,例2.3不同类型数据
在内存中的存储形式不同字符型整型实型N=S×2j阶码符号阶码的数值尾数符号尾数的数值阶码j尾数S所占位数决定实数的取值范围所占位数决定实数的精度常量(Constant)AvaluethatwillnotchangeConsistsof:整型(e.g.067-2
123L123u
0220x12)缺省为int实型(e.g.2.31.2e-52.73F2.73L)缺省为double字符型(e.g.'z''3''$''\n')用\开头的字符为转义字符,代表1个字符字符串(e.g."UKM""1""5a")字符常量转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示字符常量字符常数就是一个普通整数,也可参与各种数学运算每个字符具有一个0~255之间的数值,可从ASCII表查出注意:’5’和整数5的区别’5’的ASCII码值是53字符的数学运算在密码学内用得比较多例2.5:小写字母转换为大写字母#include<stdio.h>main(){
charch='b';printf("%c,%d\n",ch,ch);
ch='b'-32;
printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){
charch='b';printf("%c,%d\n",ch,ch);
ch='b'-('a'-'A')
;
printf("%c,%d\n",ch,ch);}b,98B,66
b,98B,66
相当于97-65字符串常量用双引号括住的由0个或多个字符组成的字符序列"Iamastring"""表示空字符串除注释外,是唯一可以出现中文的地方C语言内部用’\0’表示字符串的结束"x"和’x’是不同的<string.h>里定义了一系列专门的字符串处理函数转义字符也可在字符串中使用习题2.2(4)字符串"\t\"Name\\Address\n"的长度?15宏常量
#define
标识符字符串宏常量也称符号常量一般采用全大写字母表示宏定义不是语句,而是一种编译预处理命令例2.2:计算圆的周长和面积#include<stdio.h>#definePI3.14159#defineR5.3main(){
printf("area=%f\n",PI*R*R);
printf("circumference=%f\n",2*PI*R);}area=88.247263circumference=33.300854相当于执行#include<stdio.h>main(){
printf("area=%f\n",3.14159*5.3*5.3);
printf("circumference=%f\n",2*3.14159
*5.3);}宏替换例2.2:计算圆的周长和面积#include<stdio.h>#definePI3.14159;#defineR5.3;main(){
printf("area=%f\n",PI*R*R);
printf("circumference=%f\n",2*PI*R);}相当于执行#include<stdio.h>main(){
printf("area=%f\n",3.14159;*5.3;*5.3;);
printf("circumference=%f\n",2*3.14159;*5.3;);}语法错误例2.2:计算圆的周长和面积#include<stdio.h>main(){
constfloat
pi=3.14259;
constfloatr=5.3;
printf("area=%f\n",pi*r*r);
printf("circumference=%f\n",2*pi*r);}用const修饰定义的const常量const常量与宏常量相比的优点是什么?const常量有数据类型某些集成化调试工具可以对const常量进行调试枚举(Enumeration)常量一个被遗忘的角色,从程序来窥其一斑
enumweeks{SUN,MON,TUE,WED,THU,FRI,SAT};
enumweekstoday;enumresponse{no,yes,none};enumresponseanswer;
today=TUE;
answer=yes;
enumresponse{no=-1,yes=1,none=0};
其值为2其值为1为什么需要常量?假如不使用常量,直接使用常数,会有什么影响?程序的可读性变差容易发生书写错误当常数需要改变时,要修改所有使用它的代码,工作量大,还可能有遗漏解决方案:避免使用幻数(直接使用的常数)把幻数定义为宏常量、const常量,或枚举常量建议使用后两者运算符(Operator)34种,详见附录2常见的运算符算术运算符赋值运算符类型强转关系运算符逻辑运算符增1和减1位运算符运算符和操作数
(OperatorandOperand)Example:W+ZOperandOperatorOperandWhatareoperatorandoperand?算术运算符(ArithmeticOperators)Addition(+)Subtraction(-)Multiplication(*)Division(/)Modulus(%)Multiplication(*),addition(+)
and
subtraction(-)arethesimplesttouseDivision(/)
iseasy,butsomeprecautionsneedtobetakenModulus(%)
istheonethatnormallyconfusesnovicesSo,let’sstudyindetailthe
Division
and
Modulus算术运算符(ArithmeticOperators)除法(Division)Example:W/Z浮点数除法FloatingDivisionWorZorbotharefloats整数除法IntegerDivisionWandZareintegers自动类型转换相同类型数据的运算结果,还是该类型不同类型数据的运算结果,是两种类型中取值范围大的那种long
double>double>float>long>int>short>chardoublefloatlongunsignedintchar,short低高Example:整数除法(IntegerDivision)8/2=4anintegeraninteger
theresultisalsoanintegerExample:12/5=2anintegeraninteger
theresultisalsoaninteger整数除法(IntegerDivision)Example:实数除法(FloatingDivision)12.0/5=2.4afloatanintegertheresultisafloatWhatwillbetheanswerifanintegerisdividedby0?Somethingtoponder…求余(Modulus)Itreturnsthe
remainder
thatoccursafterperformingthedivisionof2operandsRule:
操作数必须是整数Operandsmustbe
integersExample:12%5=2anintegeranintegertheresultistheremainderof12/51252102remainderresult求余(Modulus)Howaboutifoneoftheoperandsisanegativeinteger?Somethingtoponder…Example:-7%3=-1anintegeraninteger-73-2-6-1remainderresulttheresultistheremainderof-7/3求余(Modulus)Example:7%-3=1anintegeraninteger7-3-261remainderresulttheresultistheremainderof7/-3求余(Modulus)Example:12.0%3=??afloatanintegerINVALID!
求余(Modulus)Anexpressionmaycontain2ormorearithmeticoperatorsMainissue:运算顺序
ORDEROFPRECEDENCE
优先级算术表达式
(ArithmeticExpression)Examples:5+65+6*22.5+6–2*212/6.0–2*2=11=22or17?=??=??=17算术表达式
(ArithmeticExpression)Waitaminute
优先级(OrderofPrecedence)
High: */%
Low: +-Alloperatorshaveaprecedencelevel.不同优先级时的运算顺序:Highprecedenceleveloperatorsareevaluatedbeforelowerones.相同优先级时的运算顺序:Operatorsofthesameprecedencelevelareevaluatedfromlefttoright(左结合)算术表达式
(ArithmeticExpression)Example:??48.52.5+6–
–44.52.5+6–2*2=算术表达式
(ArithmeticExpression)4.5巧妙使用圆括号改变运算顺序AllexpressionsinparenthesesmustbeevaluatedpriortovaluesoutsidebracketsNestedparenthesizedexpressionsmustbeevaluatedfromtheinsideout,withtheinnermostexpressionevaluatedfirstExample:(9–(3+2))*3=??算术表达式
(ArithmeticExpression)Example:
(9–(3+2))*3=??
–5412
(9–(3+2))*3=12算术表达式
(ArithmeticExpression)赋值语句
(AssignmentStatement)Thereare3typesofassignment:Simple——简单赋值Multiple——多重赋值Shorthand——简写的复合赋值简单赋值
SimpleAssignmentSyntax:
变量=
表达式;Don’tforgetthesemicolon!!Everyassignmentexpressionhasavalue#include<stdio.h>main(){floatprice,discount,total;printf(“Buyingprice:“);scanf(“%f”,&price);printf(“\nDiscountrate:“);scanf(“%f”,&discount);total=price*discount;printf(“Thetotalpriceis%.2f\n”,total);}Buyingprice:_discount??price??
total??Buyingprice:10.00_10.00Buyingprice:10.00Discountrate:_Buyingprice:10.00Discountrate:0.25_0.252.50Buyingprice:10.00Discountrate:0.25_Buyingprice:10.00Discountrate:0.25Thetotalpriceis2.50_Example:简单赋值
SimpleAssignmentSyntax:变量1=
变量2=
表达式;多重赋值
MultipleAssignmentDon’tforgetthesemicolon!!Example:intnumber,total;floatstart_x,start_y;...number=total=0;start_x=start_y=100.0;total??number??start_x??start_y??00100.0100.0多重赋值
MultipleAssignment从右向左赋值Syntax:
变量x=变量x
运算符op
表达式;
变量x
运算符op=表达式;
简写的复合赋值
ShorthandAssignment这种形式看起来更直观,且执行效率一般也更高一些Whenevertheexpressionontherightcontainsthevariableontheleft(towhichthevalueisassigned)Example:num=num+5;num15
15+5
2020简写的复合赋值
ShorthandAssignmentExpressionscanalsobestatedusingshorthandassignmentoperatorsExample:num+=5;similarto
num=num+5shorthandassignmentoperator简写的复合赋值
ShorthandAssignment习题2.2(7)已知inta=3;执行a+=a-=a*a后,变量a的值?a+=a-=a*aa+=a-=9a+=-6
a=-12简写的复合赋值
ShorthandAssignment3-6-12习题2.2(7)已知inta=3;执行a+=a-=a*=a后,变量a的值?a+=a-=a*=aa+=a-=9a+=0
a=0简写的复合赋值
ShorthandAssignment3900OperationExamplesofexpressionDescription+=num+=5;num=num+5;-=num-=5;num=num–5;*=num*=5;num=num*5;/=num/=5;num=num/5;%=num%=5;num=num%5;简写的复合赋值
ShorthandAssignment自动类型转换取值范围小的类型赋值给取值范围大的类型是安全的反之是不安全的若大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分,非四舍五入反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关避免如此使用,好的编译器会发出警告Example:
intx=10; floaty; y=(float)x;
(float)10
10.000000x10y??10.000000类型强转(Casting)消除从大到小的警告
x=(int)y;通过下面方式把表达式的值转为任意类型
(类型)表达式不改变xExample:
inttotal,number; floataverage; … average=total/number;
15/2
7total15number2average??7.000000类型强转(Casting)两个整数运算的结果还是整数,不是浮点数Example:
inttotal,number; floataverage; … average=(float)total/number;
15.000000/2
7.500000total15number2average??7.500000类型强转(Casting)关系运算符
(RelationalOperators)OperationDescriptionExamplesofExpressionValue<Lessthan6<91(true)<=Lessthanorequalto5<=51(true)>Greaterthan2>60(false)>=Greaterthanorequalto9>=51(true)==Equalto7==50(false)!=Notequalto6!=51(true)Symbol
Description
&& 与(AND)当且仅当两者都为真,则结果为真|| 或(OR)只要两者中有一个为真,结果就为真! 非(NOT)aba&&ba||b!a!b000011010110100101111100逻辑运算符
(LogicalOperators)!&&||高低复合表达式
(CompoundExpression)Arithmetic,relationalandmanticoperatorscanbeintegrated/combinedinoneexpressionExample:!(c>a)a2b5c15d17
!(1)
!(15>2)
0Example:(a>=1)&&(b==5)
(2>=1)&&(b==5)
1&&(b==5)
1&&(5==5)
1&&1
1a2b5c15d17复合表达式
(CompoundExpression)Example:(c>=(b*3))||(a==3)
(c>=(5*3))||(a==3)
1||(a==3)
1||(2==3)
1||0
(15>=15)||(a==3)
1a2b5c15d17复合表达式
(CompoundExpression)Example:!((a<b)||(c>d))
!((2<5)||(c>d))
!(1||(15>17))
!(1||0)
!1
!(1||(c>d))
0a2b5c15d17复合表达式
(CompoundExpression)实例ch是英文大写字母(ch>='A')&&(ch<='Z')判断某一年year是否是闰年的条件是满足下列二者之一能被4整除,但不能被100整除;能被400整除;
year%4==0&&year%100!=0||year%400==0优先级:%
==(!=)
&&
||((year%4==0)&&(year%100!=0))||(year%400==0)复合表达式
(CompoundExpression)增一和减一运算符
(IncrementandDecrement)
n++,n--,++n,--n++让参与运算的变量加1,--让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1m=n++;m=n;n++;增一和减一运算符
(IncrementandDecrement)
n++,n--,++n,--n++让参与运算的变量加1,--让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值,然后加/减1作为前缀(prefix)运算符时,先加/减1,然后取n的值m=++n;n++;
m=n;Example:j=++i-2i5similartoi=i+1;j=i–2;j??46前缀(Prefix
)增一和减一运算符Example:j=i++-2i5similartoj=i–2;i=i+1;后缀(Postfix)增一和减一运算符j??36习题2.4(8):输出结果和变量a的值?inta=3;printf("%d",-a++);a3similartoprintf("%d",-a);a=a+1;后缀(Postfix)增一和减一运算符4增一和减一运算符良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次增1或者减1运算过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果位操作运算符&按位与运算|按位或运算^按位异或运算<<按位左移运算>>按位右移运算~按位求反位操作运算符逻辑运算与位运算的不同main(){
intx=12,y=8; printf("\n%5d%5d%5d",!x,x||y,x&&y); printf("\n%5u%5d%5d",~x,x|y,x&y); printf("\n%5d%5d%5d\n",~x,x|y,x&y);}01165523128-13128逻辑非的结果不是按位取反0000000000001100x1111111111110011~x1000000000001100~x的反码~x的反码加110000000000011010000000000001100x0000000000001000y0000000000001100x|y0000000000001000x&y正数的补码与其原码相同,负数的补码为其反码加1优先级与结合性()[]->.!~++--+-*&(类型)sizeof*/%+-<<>><<=>>===!=&^|&&||?:=+=-=*=/=%=&=^=|=<<=>>=,能背下优先级表的人凤毛麟角用括号来控制运算顺序,更直观、方便,并减少出错的概率多数为左结合,少数为右结合:一元运算符赋值运算符条件运算符这一章我们学习了标识符的命名规则数据类型变量(声明、赋值、初始化)常量运算符及其优先级和结合性算术赋值类型强转关系逻辑增一/减一位运算
sizeof第3章简单的C程序设计C语言大学实用教程C语言大学实用教程哈尔滨工业大学计算机科学与技术学院苏小红
sxh@
本章学习内容字符输入函数getchar()字符输出函数putchar()格式输出函数printf()格式输入函数scanf()Skill:Developaprogramtoread/captureinputanddisplayoutput顺序结构程序的基本操作输入数据从标准输入设备上输入数据到计算机内存输出数据将计算机内存中的数据送到标准输出设备通过调用标准库函数来实现
#include<stdio.h>
在由TC指定的文件目录中找该文件字符输入输出函数字符输出函数putchar(ch)输出一个字符ch字符输入函数getchar()无参数函数值为从输入设备接收的字符#include<stdio.h>main(){
charch;
printf("PressakeyandthenpressEnter:"); ch=getchar();
printf("Youpressed");
putchar(ch);
putchar('\n');}运行程序PressakeyandthenpressEnter:A↙YoupressedA例3.2Whatdoesthisstatmentmean?格式输出函数格式printf(格式控制字符串,输出项表列);printf("a=%db=%f",a,b);可以输出若干任意类型的数据
函数名可选输出表列普通字符格式说明%ccharacter以字符形式输出单个字符%sstring输出一个字符串%ddecimal以带符号十进制整数输出%ffloat以小数形式输出浮点数(6位小数)%eexponent以标准指数形式输出(6位小数)%g选用%f,%e中输出宽度较小的一种格式%ooctal以八进制无符号整数输出(无前导0)%xhex以十六进制无符号整数输出(无前导0x)%uunsigned以十进制无符号整数输出printf格式字符printfFunction-CharacterFormatforcharacter:%c
Example:printf(“%c%c%c”,‘U’,‘K’,‘M’);UKM_printfFunction-CharacterExample:printf(“%c%c%c”,‘U’,‘K’,‘M’);UKM_printfFunction-CharacterExample:char1=‘U’;char2=‘K’;char3=‘M’;printf(“%c%c%c”,char1,char2,char3);UKM_char1Uchar2?char3?char1Uchar2Kchar3?char1Uchar2Kchar3MExample:
printf(“Name:%s\nStudentNo:%s”,“AliBakar”,“A92333”);Name:AliBakarStudentNo:A92333_OutputformatprintfFunction-StringprintfFunction-StringExample:
printf(“Name:%s\nStudentNo:%s”,“AliBakar”,“A92333”);Name:AliBakarStudentNo:A92333_printfFunction-FloatFormatforfloat:%f
Generalformat:
%[<最小域宽>.<小数位数>]fExample:printf(“Valueis:%10.4f”,32.6784728);Valueis:32.6785
10characters4digitsprintfFunction-FloatExample:printf(“Valueis:%10f”,32.6784728);Valueis:32.678473
10characters6digits(default)printfFunction-FloatExample:printf(“Valueis:%10.5f”,32.6784);Valueis:32.6784010characters5digitsExample:printf(“Valueis:%5f”,32.6784728);
Valueis:32.678473
6digits(default)printfFunction-Float9charactersMin5charactersExample:printf(“Valueis:%.3f”,32.6784728);
Valueis:32.6783digitsprintfFunction-FloatprintfFunction-Float#include<stdio.h>main(){intage;floatheight;age=21;height=1.73;printf(“Aliis%dyearsoldandhisheightis%.5fmeters\n”,age,height);}Aliis21yearsoldandhisheightis1.73000meters_age?height?211.73Example:m表示数据占用的最小宽度数据宽度大于m,按实际宽度输出数据宽度小于m时,补空格n对实数表示输出n位小数对字符串表示最多输出的字符个数l
长整型整数,加在d、o、x、u前Llongdouble型数,加在f、e、g前-改变输出内容的对齐方式缺省为右对齐printf附加格式说明符格式输入函数格式scanf(格式控制字符串,地址表列);
scanf("%d,%f”,&a,&b);非格式字符输入数据以,分隔没有时可以空格、Tab或回车分隔格式字符指定输入数据格式输入数据地址表列c以字符形式输入单个字符s输入字符串,以非空字符开始,遇第一个空白字符结束d以带符号十进制形式输入整型数据f以小数形式输入浮点数e以标准指数形式输入o以八进制无符号形式输入(无前导0)x以十六进制无符号形式输入(无前导0x)scanf格式字符scanfFunctionExample:printf(“Key-inacharacterandanumber:“);scanf(“%c%d”,&char,&num);printf(“Character:%c\n”,char);printf(“Number:%d\n”,num);Key-inacharacterandanumber:char?num?mKey-inacharacterandanumber:m103103Key-inacharacterandanumber:m103Character:m_Key-inacharacterandanumber:m103Character:mNumber:103_#include<stdio.h>main(){intday,month,year;scanf(“%d%d%d”,&day,&month,&year);printf(“Day:%d,Month:%d,Year:%d”,day,month,year);}16122005month?year?day?1612200516122005Day:16,Month:12,Year:2005_scanfFunctionm表示数据占用的宽度l
加在d、o、x、u前:输入长整型
加在f、e前:输入双精度型L加在f、e前:输入longdouble型h加在d、o、x前:输入短整型*本输入项在读入后不赋给相应的变量scanf附加格式说明符#include<stdio.h>main(){
inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广西城市职业大学单招职业适应性测试题库附参考答案详解(能力提升)
- 2026年广东茂名农林科技职业学院单招职业倾向性测试题库附答案详解(考试直接用)
- 2026年广西交通职业技术学院单招职业技能考试题库及答案详解(名师系列)
- 2026年巴中职业技术学院单招综合素质考试题库含答案详解(突破训练)
- 2026年平凉职业技术学院单招职业技能考试题库及一套答案详解
- 2026年广东南华工商职业学院单招职业技能测试题库含答案详解(满分必刷)
- 2026年山西艺术职业学院单招职业技能测试题库及1套完整答案详解
- 2025年智能眼镜光学系统故障诊断技术
- 急诊新技术新项目推广
- 2025-2030中国碧根果行业市场分析及竞争形势与发展前景预测研究报告
- 小班数学认识数字1-5
- LY/T 1705-2007管氏肿腿蜂人工繁育及应用技术规程
- GB/T 5154-2022镁及镁合金板、带材
- 马工程《刑法学(下册)》教学课件 第17章 危害国家安全罪
- GB 30509-2014车辆及部件识别标记
- 09S304 卫生设备安装图集
- 医学导论-课件
- 细胞生物学CRISPR-CAS9-课件
- 建筑工程项目管理综合练习及答案
- 楼地面装饰工程计量与计价
- 学生预登信息采集表
评论
0/150
提交评论