【文档说明】第2章C语言基础与顺序结构课件.ppt,共(64)页,495.129 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44639.html
以下为本文档部分文字说明:
2022/11/242学习目标•学会合理选用数据类型•学会使用常用的运算符•学会使用常用的标准输入/输出函数控制数据的输入/输出•学会顺序程序的设计方法2022/11/2432.1C数据类型基本类型构造类型指针类型空类型void定义类型typed
ef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作2022/11/24
42.1.0预备知识•计算机中数的表示及进制转换–数码、基与权•数码:表示数的符号•基:数码的个数•权:每一位所具有的值–数制•十进制:0~9•二进制:0、1•八进制:0~7•十六进制:0~9,a~f2022/11/245各种进制之间的转换•1、二
进制、八进制、十六进制转换成十进制方法:按权相加10012345259212120212121111011)()(例10012894868381136)()(例100123167978161016216151
6121)()(例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(4
59)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位二进制数代替每一位十六进制数000
0~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F例(1101010
1111101)2=(0011,0101,0111,1101)2=(357D)16例(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–十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff2022/11/2415•整型变量–二
进制形式表示–TC2.0中,在内存中占2个字节的存储单元符号关键字占字节数的表示范围有[signed]int2-215~215-1[signed]short2-215~215-1[signed]long4-231~231-1无unsignedint20~216-1unsig
nedshort20~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/11/2424练习
2•1、求一个较大的浮点数(上例中的c)与一个较小数(20)的和•2、求一个整数与一个浮点数的和•3、将第2题结果转换为整数类型输出2022/11/2425•float型数据提供7位有效数字•double型数据提供16位有效数字•使用不当导致舍入误差#include<stdio.h>mai
n(){floata;floatb;a=123456.789e3;b=a+20;printf("%f\n",a,b);}#include<stdio.h>main(){doublea;doubleb;a=123456.789e3;b=a+20;printf("%lf\n",a,b);}123
45678848.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#defineR
5.3main(){printf("area=%f\n",PI*R*R);printf("circumference=%f\n",2*PI*R);}2022/11/2429•字符变量–一般占1个字节–将该字符的相应的ASC
II码值放到存储单元中(参见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:大小写字母的转换•#include<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>float>long>int>short>char•把数据赋值给另外一种类型变量也会发生自动类型转换–从小到大,顺利转换–从大到小,可能丢失信息–强制类型转换可以消除从大到小转换时的警告2022/
11/2435变量声明总结•使用变量的基本原则–变量必须先定义,后使用–所有变量必须在第一条可执行语句前定义•声明的顺序无关紧要•一条声明语句可声明若干个同类型的变量•声明变量,是初始化变量的最好时机–不被初始化的变量,其值为危险的随机数2022/11/243
6课后作业•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;2022/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(sh
ort));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函数时,应在程序首位设置以下的预处理命令:•#include"stdio.h"–在当前目录和TC指定的目录中找该文件•#i
nclude<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–遇非法输入2022/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;printf("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.2e3,c=7.895.2,1.2e3,7.89↙2022/11/2455举例2-8#include<stdio.h>main(){inta,b;pr
intf("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长整型实型float%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();putchar(c)
;}Pleaseinputc:aa↙2022/11/2459举例2-9#include<stdio.h>main(){printf("Pleaseinputc:");putchar(getchar());}Pleaseinputc:aa↙2022/11/24
602.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•按照顺序结构编写程序:从键盘输入圆周半径,求圆周长度和圆周
面积(提示:考虑半径可能的数据类型)