第二章语言程序基础_第1页
第二章语言程序基础_第2页
第二章语言程序基础_第3页
第二章语言程序基础_第4页
第二章语言程序基础_第5页
已阅读5页,还剩70页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1C语言程序设计第二章C语言程序基础控制与计算机工程学院2第二章C语言程序基础

(由例1-2提出问题引入本章要学习的内容)2.1C程序的基本结构2.2C语言基本语法成分2.3C语言数据类型2.4C语句2.5C语言的格式输出函数printf2.6C语言的格式输入函数scanf3学习目标掌握C程序的基本结构及C语言基本语法成分理解C语言数据类型的概念,掌握整形、浮点型、字符型数据的存储形式、取值范围、表示形式及基本运算掌握格式输入输出函数的使用,理解输入输出格式字符串与输入输出数据间的匹配关系通过模仿和改写例题,学习简单的程序设计方法42.1C程序的基本结构C语言程序的基本结构如下:编译预处理命令voidmain(void){

声明部分执行部分}类型子函数名(形参表){

声明部分执行部分}执行部分一般形式如下:

数据输入数据处理数据输出52.1C程序的基本结构C语言程序的基本结构如下(分析例1-2):编译预处理命令voidmain(void){

声明部分执行部分}类型子函数名(形参表){

声明部分执行部分}执行部分一般形式如下:

数据输入数据处理数据输出声明部分对执行部分中引用的变量和函数进行定义

6

标识符

标识符用来标识变量名、符号常量名、函数名、数组名、类型名等。标识符命名规则:只能是字母(A~Z,a~z)、数字(0~9)、下划线组成

第一个字符必须是字母或下划线。例如,a,i,sum,average,al,c_2,DAY,student,p26,_no是合法的标识符5a,M.for,$123,3D64,a-b是不合法的标识符。7标识符在使用标识符时必须注意以下几点:大小写敏感标识符不能与“关键字”同名,也不能与系统预先定义的“标准标识符”同名,如main、printf等。取名原则:“简洁明了”,“见名知义”。如sum、avg、area、score、name等ANSIC没有限制标识符长度,但各个编译系统都有自己的规定和限制。8关键字

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。C语言包括32个个关键字:autobreakcasecharconstcontinuedefaultdodoubleelseenumextemfloatforgotoif

intlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile注意:C语言的关键字都是小写。2.2.4运算符

运算符表示各种运算功能。运算符由一个或多个字符组成

如:+、-、*、/等。可以组成以下表达式式: a+b; 2*2.1415926*r;

9问题:下面选项中,均是合法的标识符的选项是(A)a1b!12_e (B)minf121x (C)aifPI(D)x2m_nsummin

10分隔符

C语言中,分隔符有逗号、空格、Tab和回车等。

逗号:主要用于在类型说明和函数参数表中分隔各个变量;空格、Tab和和回车多用于语句和各单词之间的间隔符。注意:在关键字或标识符之间必须要有一个以上的例如把inta,b;写成inta,b;C编译器会把inta当成一个标识符处理,其结果必然出错。

11【库函数】库函数不是C语言本身的组成成分,它是由C编译系统提供的可以直接使用的函数库函数放在库文件中,同时这些函数的声明和宏定义等信息存放在相应的头文件中使用方法#include<头文件名>或#include“头文件名”例如:绝对值、三角函数等数学类的函数需将头文件math.h包含进来122.3C语言数据类型C数据类型指针类型空类型void定义类型typedef基本类型字符类型char数值类型整型短整型short长整型long整型int浮点型单精度型float双精度型double构造类型枚举类型enum数组结构体struct共用体union13常量和变量常量在程序执行过程中,常量的值不能由程序改变变量在程序执行过程中,变量的值可以由程序改变

常量与变量常量定义:

在程序运行过程中,其值不能改变的量><一、常量变量符号常量:用标识符代表一个常量#define

PI

3.14main(){floatr1,r2,len1,len2,s1,s2;r1=10;r2=20;len1=2*PI*r1;s1=PI*r1*r1;printf(“len1=%f

s1=%f\n",len1,s1);len2=2*PI*r2;s2=PI*r2*r2;printf("len2=%f□s2=%f\n",len2,s2);}

符号常量定义符号常量使用注意:符号常量名用大写,变量名用小写><使用符号常量的优点含义清楚一改全改350><#define

PI

3.14main(){floatr1,r2,len1,len2,s1,s2;r1=10;r2=20;len1=2*PI*r1;s1=PI*r1*r1;printf("len1=%f□s1=%f\n",len1,s1);len2=2*PI*r2;s2=PI*r2*r2;printf("len2=%f□s2=%f\n",len2,s2);}

3.1415926定义:在程序运行过程中,其值可以改变的量。变量使用规则:先定义,后使用变量的定义:intsum;

sum=0;sum0

sum=1;1><内存单元变量名变量值类型说明符变量列表;intsum;floatx,y,z;二、变量变量对应着内存中一个存储单元,在存储单元中存放着该变量的值,每个变量都有一个名字。不同类型数据所占存储单元的大小也不同整型数据整型变量整型变量在内存中的存放形式——以补码

形式存放shortinti=10;shortintj=-10;10ij-1000000000000010101111111111110110><19原码、补码及反码原码:将真值x的正、负号分别换成0、1,即得到x的原码[x]原。例如:x=,[x]原=01001011x=-1100111,[x]原=11100111

><20正数的反码等于原码负数的反码等于其原码除符号位外,其余各位按位求反

[X1]原=01001001,[X2]原=11001001

[X1]反=01001001,[X2]反=10110110反码21补码的作用:能够将减法运算转换成加法运算补码的计算方法:正数的补码等于原码

负数的补码=反码+1><补码22[X1]原=01001011[X1]补=[X1]原=01001011[X2]原

=11100111[X2]补

=10011000+1=10011001整型变量分类

基本类型:int

根据数值的范围分为:int,short,long

根据有无符号(singed/unsigned)及范围可分为:类型简写比特数取值范围[signed]

intint32-231~(231-1)unsigned

[int]unsigned320

~(232-1)[signed]

short

[int]short16-215~(215-1)unsignedshort

[int]unsignedshort160

~(216-1)[signed]

long

[int]long32-231~(231-1)unsingedlong

[int]unsingedlong320

~(232-1)><整型变量分类

基本类型:int

根据数值的范围分为:int,short,long

根据有无符号(singed/unsigned)及范围可分为:类型简写比特数取值范围[signed]

intint32-2147483648~2147483647unsigned

[int]unsigned320~[signed]

short

[int]short16-32768~32767unsignedshort

[int]unsignedshort160

~65535[signed]

long

[int]long32-231~(231-1)unsingedlong

[int]unsingedlong320

~(232-1)><整型变量定义类型说明符变量列表;例如:inti,j;longk,m;

shorts1,s2;

unsignedshortage;Compilingc:\ex3-2.cError..5:Expressionsyntaxinfunc…Error..6:Undefinedsymbolcinfunc…Error..7:Undefinedsymboldinfunc……><main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“c=%d,d=%d”,c,d);}main(){inta,b;unsignedu;a=12;b=-24;u=10;

intc,d;c=a+u;d=b+u;printf(“c=%d,d=%d,c,d);}c=22,d=-14

整型变量定义

注意:变量定义放在函数开头部分的声明部分或者函数中某一分程序开头的声明部分。

【例2-1】整型数据溢出一个int型变量最大允许值为32767,如果再加3会怎样【例2-2】voidmain(){shortinta,b,c;a=32767;b=3;c=a+b;printf(“%d,%d,%d”,a,b,c);}0111111111111111a0000000000000011b32767,3,-327661000000000000010c><【例2-2】修改

28#include<stdio.h>voidmain(){shortinta,b,c;/*inta,b,c;*//*longa,b,c;*//*a=2147483647;*/a=32767;b=3;c=a+b;printf("%d,%d,%d\n",a,b,c);}常数后加u或U表示unsignedint型如:56u,345U

常数后加字母l或L,表示longint型如:123L,0L,432l

。><整型常量的表示方式和类型整型常量表示方式十进制如:123,-123,0八进制(以0开头)如:-0123表示十进制数-83十六进制(以0x开头)如:0x123表示十进制数291实型常量表示方式十进制小数形式:

整数部分.小数部分

1.01.+12.0-12.0.789指数形式:

尾数部分e/E

指数部分指数部分必须为整数。

用来表示数值特别大或数值特别小的数。

1e31.8e-3-123e-6-.1e-3><实型数据实型数据占有4个字节的存储空间取值范围为±(2.4×10-38~2.4×1038)1、实型变量的分类类型字节数有效数字最小取值范围float46~7-2.4*10-38~2.4*1038double815~16-1.7*10-308~1.7*103082、实型数据的舍入误差实型数据的有效数据是有限的,有效数据以外的数字将被舍去。因此会产生误差。【例2-3】12345678848.000000,12345678848.000000main(){floata,b;a=123456.789e5;b=a+20;printf(“%f,%f“,a,b);}><12345678900.012345678920.0实型变量字符型常量表示方式以单撇号括起来的一个字符。如’a’,’

’,’!’,’7’,’+’><字符型数据

字符数据的存储方式

一个字节存储一个字符数据字节中存储的是字符的ASCII码01100001‘a’9700100000‘’32字符变量用来存放字符常量,即一个单个字符。字符变量的定义形式:charc1,c2;字符变量的赋值:

字符常量整型常量如:c1=‘a’;c2=97;c2=c1; ><字符变量数据类型变量名=变量初值;

变量赋初值

变量定义的同时使变量初始化,完成赋初值.变量赋初值基本格式inta=3,b,l;floatf=3.14;charc=‘a’;><C语句的分类函数调用语句

由一次函数调用加一个分号构成一个语句。

printf(“%d%d%d”,i,j,k);控制语句:9种表达式语句:表达式加分号构成。p=n*n+n+41;2+3;C语句最简单的C语句:

;/*空语句*/复合语句

用{}括起来的若干语句,叫做复合语句。main(){…

{b=2*a;printf(“%d,%d”,a,b);}

…}格式字符确定了输出形式:d

十进制整数x

十六进制整数o

八进制整数u

不带符号的十进制整数c

单个字符s

字符串f

小数形式的浮点小数e

指数形式的浮点小数gf和e格式中较短的一种

printf(“格式字符串”,输出列表);输出格式说明:

%±0m.nl格式字符(d,f)标记符号指定输出位置空位是否填零输出宽度指定输出精度输出形式+:指定在有符号数的正数前显示正号。+23,23-:输出左对齐。125__省略,输出右对齐。__125输出数值时,不使用的位置自动填零。(仅限于左侧)00123

在格式字符d、x、o、u前面加l时,输出为32bit

(long型)。在

f前加

l时,输出为64位(double型)。

指定输出宽度:(最小宽度)整数:%md,m指定占用字符位置个数。输出实数:%m.nf%6.2f

m指定输出数的总长度,

n指定小数部分的长度。输出字符串:%m.ns%8.4s

m指定占用的位数,

n指定实际输出位数。____abcd

c语言的格式输出printf函数38

c语言的格式输出printf函数形式:

printf("格式控制字符串",输出表列)格式字符串为:

%[标志]

[输出最小宽度]

[.精度]

[长度]类型1.类型:

格式字符

意义d以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x,X以十六进制形式输出无符号整数(不输出前缀Ox)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以%f或%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出字符串39C语言的格式输出printf函数2.标志:标志字符为-.+.#.空格四种标志意义-结果左对齐,右边填空格+输出符号(正号或负号)空格负时输出,正号不输出#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点40C语言的格式输出printf函数2.标志:标志字符为-.+.#.空格四种标志意义-结果左对齐,右边填空格+输出符号(正号或负号)空格负时输出,正号不输出#对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点41C语言的格式输出printf函数3.输出最小宽度:若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。4.精度:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则四舍五入截去超过的部分。5.长度:长度格式符为h和l两种,h表示按短整型量输出,l表示按长整型量输出。

42C语言的格式输出printf函数格式符与输出项匹配实例。【例2-4】#include<stdio.h>voidmain(){

inta=97;

floatb=56.748; printf("a=%d,b=%f\n

",a,b); printf("%c,%d,%o,%x,%f\n",a,a,a,a,a); printf("%f,%e,%d,%o,%x\n",b,b,b,b);}a=97,

b=56.748001a,

97,

141,

61,

0.00000056.748001,

5.674800e+001,

-2147483648,

10023057676,

8000000043C语言的格式输出printf函数输出宽度与精度实例。【例2-5】#include<stdio.h>voidmain(){inta=66;floatb=122.1234567;

doublec=1234567890.1234567;

printf("a=%d,%-5d,%5d,%5c\n",a,a,a,a);printf("b=%f,%lf,%5.4f,%.4e,%10.2f\n",b,b,b,b,b);printf("c=%lf,%f,%8.4lf\n",c,c,c);}a=66,66

,

66,Bb=122.123459,122.123459,122.1235,1.2312e+002,

122.12c=1234567890.123457,1234567890.123457,1234567890.123544字符型(char)数据字符变量赋值与输出。【例2-6】#include<stdio.h>voidmain(){

charc;

intx;

c=97;

x='b';

printf("%c,%d\n",c,c);

printf("%d,%c\n",x,x);}a,

9798,

b声明字符变量字符变量赋值输出字符变量的值【例2-6】修改#include<stdio.h>voidmain(){charc;intx;c=97;x='b';

/*x=‘2';*/printf("%c,%d\n",c,c);printf("%d,%c\n",x,x);}4546C语言的格式输出printf函数注意:1、C语言编译器不会检测格式符与输出项的数量是否相匹配,若输出项多余格式符,printf函数则正确的显示前面匹配的输出项,后面多余的不输出。例如printf("%d",i,j);2、若输出项少于格式符,printf函数则正确的显示匹配的输出项,后面多余的格式符因为没有匹配的输出项,将输出没有任何意义的随机数。例如printf("%d,%d",i);

3、C语言编译器也不会检测格式符与输出项的数据类型是否匹配,若不匹配则输出无意义的数值。4、小数部分,精度按四舍五入截取。5、输出数值位数小于输出最小宽度,用空格补齐,“-”指定左对齐,默认为右对齐。6、输出数值位数大于输出最小宽度,按实际位数输出。7、flaot类型和double类型的输出项“%f”和“%lf”格式的输出相同。47C语言的格式输入scanf函数scanf函数形式:

scanf("格式控制字符串",地址表列);

输入时缺省的分隔符

空格

回车Tab格式符与输入变量匹配实例【例2-7】#include<stdio.h>voidmain(){inta,b,c;printf("inputa,b,c\n");scanf("%d%d%d",&a,&b,&c);

printf("a=%d,b=%d,c=%d\n",a,b,c);}

inputa,b,c258a=2,b=5,c=8Pressanykeytocontinueinputa,b,c258a=2,b=5,c=8Pressanykeytocontinueinputa,b,c258a=2,b=5,c=8Pressanykeytocontinueinputa,b,c2,5,8a=2,b=-858993460,c=-858993460地址是由地址运算符“&”后跟变量名组成【例2-7】修改#include<stdio.h>voidmain(){inta,b,c;printf("inputa,b,c\n");/*scanf("%d%d%d",&a,&b,&c);*/scanf("%d,%d,%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}4849C语言的格式输入scanf函数3.格式字符串

形式为:

%

[*]

[输入数据宽度]类型(1)类型格式字符意义d输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数f或e输入实型数(用小数形式或指数形式)c输入单个字符s输入字符串50C语言的格式输入scanf函数(2)*“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。 例如:scanf("%d%*d%d",&a,&b); 当输入为:123时,把1赋予a,2被跳过,3赋予b。(3)宽度例如:scanf("%2d%3d",&a,&b);输入:12345678将把12赋予a,而把345赋予b,其余的字符无效,所以输入后a=12,b=345。51C语言的格式输入scanf函数2.格式字符串中的普通字符空格:当在格式控制字符串遇到一个或多个空格时,scanf函数从输入数据中重复读空白字符直到遇到一个非空字符为止。其它字符:当在格式控制字符串中遇到一个非空字符时,scanf函数将它与输入字符进行比较,若两个字符相等,继续下一个输入,否则终止scanf函数的执行。【例2-8】输入时指定的分隔符【例2-15】格式字符串中具有普通字符和指定的分隔符#include<stdio.h>voidmain(){

inta,b,c;

printf("inputa,b,c\n");

scanf(“%d,%d,%d”,&a,&b,&c);

printf("a=%d,b=%d,c=%d\n",a,b,c);}inputa,b,c2,6,4a=2,b=6,c=4Pressanykeytocontinueinputa,b,c264a=2,b=-858993460,c=-85899346052C语言的格式输入scanf函数4.字符变量的输入在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:scanf("%c%c%c",&a,&b,&c);输入:def则把'd'赋予a,''赋予b,'e'赋予c。输入为:def则把'd'赋于a,'e'赋予b,'f'赋予c。【例2-9】#include<stdio.h>voidmain(){/*inta,b,c;*/

chara,b,c;printf("inputa,b,c\n");/*scanf("%d%d%d",&a,&b,&c);*/

scanf("%c%c%c",&a,&b,&c); /*printf("a=%d,b=%d,c=%d\n",a,b,c);*/ printf("a=%c,b=%c,c=%c\n",a,b,c);}53542.6C语言的格式输入scanf函数注意:1、scanf函数中没有精度控制。例如:scanf(“%5.2f”,&a);是非法的。2、scanf中要求给出变量地址,如给出变量名则会出错。例如:scanf(“%d”,a);是错误的,应改为scnaf("%d",&a);。3、在输入多个数值数据时,若格式控制串中没有非格式字符作为输入数据之间的间隔,则可用空格、TAB或回车作为间隔。4、在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。5、在使用double型数据输入时,一定要注意格式控制说明是%lf,如果写成%f,那么将导致输入错误。字符输出函数一、putchar函数(字符输出函数)

1.形式:putchar(c);2.功能:向终端输出一个字符。

3.说明

1)c可以是字符变量或整型变量。

2)c可以是转义字符。

3)#include"stdio.h“

#include<stdio.h>

【例2-10】#include"stdio.h"main(){inti=65;charch=‘B’;putchar(i);putchar(ch);putchar('\n');} ABCD二、getchar函数(字符输入函数)1.形式:getchar()/*无参数*/2.作用:从终端输入一个字符。3.说明:

1)函数只能接收一个字符。

2)其函数值可以赋给一个

字符变量或整型变量。

3)可作为表达式的一部分。字符输入函数【例2-11】#include“stdio.h”main(){charc;c=getchar();putchar(c+3);}a

d算术运算符和算术表达式基本的算术运算符+-*/%结合方向:从左向右优先级:-

*/%

+-

(2)

(3)

(4)说明:“-”为单目运算符(负号运算符)时,右结合性-a除法运算“/”结果为商,运算“%”结果为余数><

算术运算符和算术表达式基本的算术运算符+-*/%说明:整数的算术运算结果仍为整数。算术运算中有一个数是实数,则结果为实数。“%”只能进行整数的取模运算,且余数与被除数的符号

相同。例例5/2=2-5/2.0=-

2.5-5%2=-1

5%-2=11%10=15%1=05.5%2=()赋值运算符和赋值表达式简单赋值运算符符号:=赋值表达式:变量=表达式作用:将一个数据(常量或表达式)赋给一个变量说明:优先级:14(优先级很低)结合方向:自右向左左侧必须是变量,不能是常量或表达式赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型3=x-2*y;

a+b=3;

例a=(b=5) a=5+(c=6) a=b=5→

a=(b=5)

赋值表达式可以嵌套变量=表达式

inta,b;a=3;

b=a+12;赋值运算符和赋值表达式复合赋值运算符种类:+=-=*=/=%=含义:

var1op=exp1var1=var1op(exp1)a+=3a=a+(3)x*=y+8

x=x*(y+8)x%=3

x=x%(3)><说明:赋值表达式可以嵌套

a=(b=5)a=b=5><例

a=12;a+=a-=a*a

a+=(a-=a*a)

a+=(a=a-a*a)

a+=(a=12-144)

a+=(a=-132)(a=-132)

a+=(-132)

a=a+(-132)

结果a=-264例

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;作用:使变量值加1减1种类:前置++i,--i(先执行i+1或i-1,再使用i值)

后置i++,i--(先使用i值,再执行i+1或i-1)自增、自减运算符++--

j=j+1;k=j;结果:k=4,j=4k=j;j=j+1;结果:k=3,j=4

j=j+1;printf(“%d”,j)结果:4

printf(“%d”,j);j=j+1;

结果:3a=a+1;c=a*b结果:c=20,a=4

c=a*b;a=a+1;结果c=15,a=4><

说明:++--只能用于变量,不能用于常量和表达式,如--5,

(a+b)++优先级:-++--

*/%

+-

(2)

(3)(4)数值型数据混合运算

混合运算的规则

2.5+10不同类型数据混合运算,先转化为同一类型。转化规则><floatchar,shortdoublelongunsignedint

float型一律转化为double型

char,short型转化为int型精度低类型转化为精度高类型例:

3.0+4/2

表达式的值?5.0

例:

int

i=3

;

long

e=4;

float

f=1.5;

doubled=1.0;

10+‘a’+i*f-d/e

107+i*f-d/e

107+3.0*1.5-d/e

107.0+4.5-d/e

111.5-d/e

111.5-0.25

111.253.0+23.0+2.0><强制类型转换运算符作用:将一个表达式的值转换成所需类型。形式:(类型名)(表达式)在进行强制转换时,得到一个所需类型的中间变量,原来变量的类型并没有发生变化

说明:

表达式应用括号括起来(double)a(int)(x+y)(float)(5%3)(int)x+y(int)(x+y)66

1966年,Bohra和Jacopini提出了程序中需要的三

温馨提示

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

评论

0/150

提交评论