【文档说明】第2章C语言基础与顺序结构课件.ppt,共(64)页,495.129 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44639.html
以下为本文档部分文字说明:
2022/11/242学习目标•学会合理选用数据类型•学会使用常用的运算符•学会使用常用的标准输入/输出函数控制数据的输入/输出•学会顺序程序的设计方法2022/11/2432.1C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char
枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作2022/11/2442.1.0预备知识•计算机中数的表示及进制
转换–数码、基与权•数码:表示数的符号•基:数码的个数•权:每一位所具有的值–数制•十进制:0~9•二进制:0、1•八进制:0~7•十六进制:0~9,a~f2022/11/245各种进制之间的转换•1、二进制、八进制、十六进制转换成十进制方法:按权相加10012345259212120212121
111011)()(例10012894868381136)()(例1001231679781610162161516121)()(例AF2022/11/246•2、十进制转换成二进制、八进制、十六进制•方法:连续除以基,从低到高
记录余数,直至商为02022/11/247例把十进制数459转换成二进制数2459余12229余12114余0257余1228余0214余027余123余121余120(459)10=(111001011)22022/11/248例把十进制数459转换成八进制数4598578780(459)
10=(713)8713余3余1余72022/11/249例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余12022/11/2410•3、
二进制与八进制之间的转换•二进制转换成八进制:–从右向左,每3位一组(不足3位左补0),转换成八进制•八进制转换成二进制:–用3位二进制数代替每一位八进制数000~0001~1010~2011~3100~4101~5110~6111~7例(1101001)2=(001,101,001)2
=(151)8例(246)8=(010,100,110)2=(10100110)22022/11/2411•4、二进制与十六进制之间的转换•二进制转换成十六进制–从右向左,每4位一组(不足4位左补0),转换成十六进制•十六进制转换成二进制:–用4位二进制数代替每一位十六进制数0000~0000
1~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F例(11010101111101)2=(0011,0101,0111,1101)2=(357D)1
6例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)22022/11/2412字节和位•内存以字节为单元组成•每个字节有一个地址•一个字节一般由8个二进制位组成•每个二进位的值是0或176432512022/11/2413数值的表示方法—
—原码、反码和补码(二进制)原码反码补码正数01111001最高位为符号位0,其余各位为数值本身的绝对值与原码相同与原码相同负数11111001最高位为符号位1,其余各位为数值本身的绝对值11111001符号位为1,其余位对原码取反
10000110最高位为1,其余位为原码取反,再对整个数加1100001112022/11/24142.1.1整型数据•整型常量–十进制整数:由数字0~9和正负号表示.如123,-456,0–八进制整数:由数字0开头,后跟数字0~7表示.如0123,011–十六进制整数:由0
x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff2022/11/2415•整型变量–二进制形式表示–TC2.0中,在内存中占2个字节的存储单元符号关键字占字节数的表示范围有[signed]int2-215~215-1[signed]short2-215~2
15-1[signed]long4-231~231-1无unsignedint20~216-1unsignedshort20~216-1unsignedlong40~232-12022/11/2416•整型变量的定义和赋
值•inta,b;•a=3;•b=4;•或inta=3,b=4;•longe=123L;2022/11/2417举例2-1:从键盘输入两个整数,求它们的和•#include<stdio.h>•main()•{inta,b
,sum;•scanf(“a=%d,b=%d”,&a,&b);•sum=a+b;•printf(“a+b=%d\n”,sum);•}变量声明输入语句执行语句输出语句2022/11/2418练习1•1、求32766+1与32767+1的和•
2、从键盘上输入数据,求四则运算(a+b)*c/(d-e)的结果#include<stdio.h>main(){inta;intb;a=32767;b=a+1;printf("%d\n",b);}#include<stdio.h>main(
){inta;longb;a=32767;b=a+1L;printf("%ld\n",b);}-327682022/11/2419课后作业•P.11习题2022/11/24202.1.2浮点型数据•浮点型常量–十进制数形式:(必须有小数点
)–如0.123,.123,123.0,0.0,123.–指数形式:(e或E之前必须有数字;指数必须为整数)–如12.3e3,123E2,1.23e4–e-5,1.2E-3.5(×)2022/11/2421•浮点型变量–一般占4个字节类型字
节有效数字float46-7double815-16longdouble1618-192022/11/2422•浮点数变量定义和赋值•floata,b;•floatc=123456.789e3;2022/11/2423举例2-2:从键盘输入两个浮点
数,求它们的积•#include<stdio.h>•main()•{floata,b,c;•scanf(“a=%f,b=%f”,&a,&b);•c=a*b;•printf(“a*b=%10.2f\n”,c);•}2022/1
1/2424练习2•1、求一个较大的浮点数(上例中的c)与一个较小数(20)的和•2、求一个整数与一个浮点数的和•3、将第2题结果转换为整数类型输出2022/11/2425•float型数据提供7位有效数字•double型数据
提供16位有效数字•使用不当导致舍入误差#include<stdio.h>main(){floata;floatb;a=123456.789e3;b=a+20;printf("%f\n",a,b);}#include<stdio.h>main(){doublea;doubleb;a=123
456.789e3;b=a+20;printf("%lf\n",a,b);}12345678848.0000002022/11/24262.1.3字符型数据•字符常量•用单引号括起来的单个普通字符或转义字符
•字符串常量•用双引号括起来的字符序列如‘a‟„A‟„?‟„\n‟„\101‟如:“hello”hello\02022/11/2427•转义字符<反斜线后面跟一个字符或一个代码值表示转义字符含义\n\v\r\a\‘\ddd\
t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符2022/11/2428•符号常量(宏常量)–一般采用大写字母表示•#define标识符字符串–不是语句,而是一种编译预处理命令
•宏替换(MacroSubstitulition)#include<stdio.h>#definePI3.14159#defineR5.3main(){printf("area=%f\n",PI*R*R
);printf("circumference=%f\n",2*PI*R);}2022/11/2429•字符变量–一般占1个字节–将该字符的相应的ASCII码值放到存储单元中(参见P.251附录A)–用来表示256个ASCII字符,或者0~255
的整数2022/11/24302022/11/2431•字符变量定义和赋值•charc1,c2;•c1=„a‟;•c2=„\”‟;•c1=„a‟;与c1=97;等价•c1=c1+1;c1=?•大小写字母如何转换?•c1=c1-32;2022/11/2432举例2-3:大小写字母的转换•#inc
lude<stdio.h>•main()•{charc1,c2;•c1=„a‟;c2=„b‟;•c1=c1-32;c2=c2-32;•printf(“%c%c\n”,c1,c2);•}•运行结果:AB2022/11/2433类型转换•自动类型转换•ch/i+f*d-(f+i)•
强制类型转换•i=(int)f;•(int)9.6%4doublefloatlongunsignedintchar,short低高2022/11/2434•同种数据类型的运算结果,还是该类型•不同种数据类型的运算结果,是两种类型中取值范围更大的那种–longdouble>double>f
loat>long>int>short>char•把数据赋值给另外一种类型变量也会发生自动类型转换–从小到大,顺利转换–从大到小,可能丢失信息–强制类型转换可以消除从大到小转换时的警告2022/11/2435变量声明总结•使用变量的基本原则–变
量必须先定义,后使用–所有变量必须在第一条可执行语句前定义•声明的顺序无关紧要•一条声明语句可声明若干个同类型的变量•声明变量,是初始化变量的最好时机–不被初始化的变量,其值为危险的随机数2022/11/2436课后作业•
P.40习题2022/11/24372.2运算符与表达式C运算符算术运算符:(+-*/%)关系运算符:(<<===>>=!=)逻辑运算符:(!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算
符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:((类型))分量运算符:(.)下标运算符:([])其它:(()-)2022/11/24382.2.1算术运算符•+-*/%–四
则混合运算中,先算乘除,后算加减,按从左向右的顺序计算,左结合–数学中3ab,在C语言中应写为3*a*b–两整数相除,结果为整数–%要求两侧均为整型数据例5/2=-5/2.0=2-2.5例5%2=-5%2=1%10=5%1=5.5%21-110()2022/11/2439•自增、自减运算
符•n++,n--,++n,--n–++让参与运算的变量加1,--让参与运算的变量减1–作为后缀运算符时,先取n的值,然后加/减1–作为前缀运算符时,先加/减1,然后取n的值•m=n++;等价于–m=n;–n++;•m=++n;等价于–n++;–m=n;20
22/11/2440•例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=42022/11/24412.2.2赋值运算符•下面两个语句是等价的–i=i+2;–i+=2;•+、-、*、/、%、<<、>>、&、^、|运算符都可以按此种方式处理•这种形式看起来更直
观,而且执行效率一般也能更高一些2022/11/24422.2.3逗号运算符•表达式1,表达式2,…,表达式n•最终结果是表达式n的值例:intx,y=7;floatz=4;x=(y=y+6,y/z);例:inta=5,b;b=
(a=a+4,a*4,a+15);2022/11/24432.2.4sizeof运算符•sizeof用于获得变量或者数据类型的长度#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(shor
t));printf("longint%d\n",sizeof(long));printf("float%d\n",sizeof(float));printf("double%d\n",sizeof(double));}2022/11/24442.2.5逻辑运算
符•逻辑运算也被称为布尔(Boolean)运算•&&–与运算–(a>b&&b>c);a大于b,并且b大于c•||–或运算–(a>b||b>c);a大于b,或者b大于c•!–求反–(!a);如果a是0,结果非0
;如果a是非0,结果是0–并不改变a的值2022/11/24452.3输入/输出函数•格式输入输出函数•字符输入输出函数2022/11/2446•调用标准I/O函数时,应在程序首位设置以下的预处理命令:•#incl
ude"stdio.h"–在当前目录和TC指定的目录中找该文件•#include<stdio.h>–在由TC指定的文件目录中找该文件2022/11/2447格式输出函数•格式输出函数–printf(“格式控制”,输出项表列);–输出
若干个任意类型的数据•printf("a=%db=%f",a,b);•P.31例2-7函数名输出项表列普通字符格式控制2022/11/2448举例2-4#include<stdio.h>main(){floatf1=100.15799,f2=12.55,f3=1.7;intn1
=123,n2=45,n3=3456;printf("%5.2f\n%6.1f\n%3.0f\n",f1,f2,f3);printf("%5d\n%-6d\n%3d\n\n",n1,n2,n3);}100.16@@12.6
@@2@@12345@@@@34562022/11/2449格式输入函数•格式输入函数–scanf(“格式控制”,地址表列);•scanf("%d,%f”,&a,&b);2022/11/2450格式输入函数•常见错误–scanf("%d,%f\
n”,&a,&b);–scanf("%d,%f”,a,b);–scanf("%7.2f",&a);2022/11/2451•输入数据时,遇以下情况时该数据认为结束–遇空格、回车、TAB键–遇宽度:%3d–遇非法输入202
2/11/2452举例2-5#include<stdio.h>main(){chara,b;printf("Pleaseinputaandb:");scanf("%c%c",&a,&b);printf("a=%c,b=%c\n",a,b);}Pleaseinputaandb:a=A
,b=BAB↙2022/11/2453举例2-6#include<stdio.h>main(){inta,b;longc;printf("Pleaseinputa,b,c:");scanf("a=%d,%d,%ld",&a,&b,&c);printf("a=%d,b=%d,c=%ld\n
",a,b,c);}Pleaseinputa,b,c:a=12,b=34,c=56a=12,34,56↙2022/11/2454举例2-7#include<stdio.h>main(){floata,b;doublec;pri
ntf("Pleaseinputa,b,c:");scanf(“%f,%e,%lf",&a,&b,&c);printf("a=%f,b=%e,c=%lf\n",a,b,c);}Pleaseinputa,b,c:a=5.2,b=1.2
e3,c=7.895.2,1.2e3,7.89↙2022/11/2455举例2-8#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=56,a+b=68123456↙虚读,即跳过本输入项2022/11/2456常用格式说明类型格式说明整型int%d整型long%ld长整型实型f
loat%f小数形式%e指数形式double%lf小数形式%le指数形式字符型char%c字符型2022/11/2457字符输入输出函数•字符输出函数–putchar(ch)–输出一个字符ch•字符输入函数–getchar():无参数;函数值为从输入设备接收的字符,存放到一个字符变量
中–getch():从键盘上读取一个字符并返回一个字符,但不显示在屏幕上。2022/11/2458举例2-9#include<stdio.h>main(){charc;printf("Pleaseinputc:");c=getchar();putc
har(c);}Pleaseinputc:aa↙2022/11/2459举例2-9#include<stdio.h>main(){printf("Pleaseinputc:");putchar(getchar());}Pleasein
putc:aa↙2022/11/24602.4顺序结构•C程序的语句类型•表达式语句–i++;–i=i+1;•函数调用语句–printf(“hello\n”);putchar(getchar());•控制语句–if-else、switch、for…•复合语句–
{t=x;x=y;y=t;}•空语句–;2022/11/2461BANS图传统流程图顺序结构BA2022/11/2462顺序结构的设计步骤•依据具体题目的要求合理的选用数据类型并定义相应的变量;•提供原
始数据(固定不变的数据采用赋值语句,变化的数据可用scanf函数从键盘输入)•根据需要进行计算或数据处理;•以清新、合理的格式输出计算或处理的结果。2022/11/2463顺序结构程序的基本操作•如何在程序中给变量赋值?–赋值表达式语句–赋值表达式;–Total=m*pow(1
+r,n);•如何进行数据的输入输出?–输入:从标准输入设备上输入数据到计算机内存–输出:将计算机内存中的数据送到标准输出设备–C语言中输入输出操作通过调用标准库函数来实现–#include<stdio.h>2022/11/2464作业•阅读P.36案例1•按照顺序结构编写程序:从键
盘输入圆周半径,求圆周长度和圆周面积(提示:考虑半径可能的数据类型)