c语言顺序结构程序设计_第1页
c语言顺序结构程序设计_第2页
c语言顺序结构程序设计_第3页
c语言顺序结构程序设计_第4页
c语言顺序结构程序设计_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

1顺序结构程序设计

北京交通大学计算机学院计算机程序设计基础课程组2教学目标使用c语言编写出简单的顺序结构程序

了解结构化程序的基本结构

掌握基本的数据类型会定义变量并了解变量在内存的存放及其作用会使用算术和赋值运算符进行计算能使用输入输出函数输入输出数据3数据的存储和基本数据类型及数据类型转换常量和变量

数据的输入和输出

表达式(算术和赋值表达式)常用数学函数教学内容4复习:c程序的基本结构

程序的基本结构程序说明部分/*程序名:2_3.cpp*//*功能:计算两个整数和并输出结果*/预编译命令#include<stdio.h>主程序区voidmain(){}函数定义区intadd(intx,inty){}由一个或若干个函数组成,其中必须有且只能有一个名字为main函数程序中的每条语句以分号(;)结尾程序中可以有不执行的语句,这些语句为注释语句,用/**/注释5常见的几种main函数写法voidmain(){}intmain(){}return0;6计算机语言中数据的描述数据描述需要解决的两个问题问题之一:有哪几种数据?例:s=3.14159*r*r3.14159常量r变量在程序运行中其值不可以改变,一般用于构成表达式;在程序运行中其存储的值可以改变。一般用于描述待处理的数据,中间结果和最后结果数据类型7问题之二:如何规定数据的存储空间和操作规则?为数据指明所属数据类型常量通过书写方式来指明其数据类型变量通过关键字来指明其数据类型数据类型81.基本数据类型

int

整型float

单精度浮点型char

字符型double

双精度浮点型shortint(或short)短整型longint(或long)长整型unsignedint无符号整型unsignedshort无符号短整型unsignedlong无符号长整型数据类型9(1)整型

数据类型

数据类型最小取值范围(vc++中)数据类型所占位数最小取值范围int32(4字节)-21亿~21亿short16-32768~32767long32-21亿~21亿unsignedint320~42亿unsignedshort160~65535unsignedlong320~42亿10数据类型所占字节跟语言和编译系统有关在c语言中可以通过sizeof()函数得到该信息例:获得int类型所占字节#include<stdio.h>voidmain(){ printf("%d\n",sizeof(int));}注意:该段程序在不同的编译环境运行结果不一致,在vc++环境为411以unsignedshort类型为例unsignedShort类型为2字节(16位)最大取值的二进制表示为:1111111111111111最小取值的二进制表示为:0000000000000000655350取值范围确定(由字节数决定)12以short类型为例,占两个字节

(16位,最高位符号位)10000001100000010000000110000001符号位1:负数0:正数13数值的表示方法-原码反码补码正数的原码、反码和补码相同1

的补码0000000000000001……32767

的补码0111111111111111(215-1,2个字节的存储单元能表示的最大正数)负数的原码、反码和补码不同

-1原码1000000000000001反码1111111111111110原码取反补码1111111111111111

反码+114原码反码补码32767补码0111111111111111-32767原码1111111111111111反码1000000000000000原码取反补码1000000000000001

反码+1-32768=-32767-1(两者补码相加)补码1000000000000000(2个字节的存储单元能表示的最小负数)15-32768-10132767

32767

0111111111111111

……

1

0000000000000001

0

0000000000000000

-1

1111111111111111

-2

1111111111111110

……

-32767

1000000000000001

-32768

100000000000000032767

+1=32768?100000000000000=-32768-32768

-1=-32769?0111111111111111=3276716(2)浮点类型

float型数据在内存中占用4个字节(32位),提供7位有效数字,可能的取值范围在10-38~1038;double型数据占8个字节,提供15~16位有效数据,可能的取值约10-308~10308。数据类型17浮点型数据的存储符合IEEE浮点数格式,如float型数据,8位用于指数,24位用于基数。例:实数123.4,二进制形式1111011.0110011表示成0.11110110110011*27按float型存放:0.11110110110011用3字节7(二进制形式)用1字节考虑按double类型存放的情况?并不是所有的实数都能在计算机中精确表示18(3)字符型

字符型数据存储时占用8位,它实际存储的是字符对应的ASCII码(AmericalStandardCodeforInformationInterchange美国标准信息交换码)。如一个char型数据’A’,其ASCII码为65,故实际存储的内容是65,二进制形式为01000001。字符型数据与整型数据可以通用,字符型数据所有的性质与一字节整型量相同。数据类型19例一intmy;my=‘a’解释:my中的值是97例二charch;ch=66解释:ch中的值是‘B’字符型数据与整型数据通用示例主要应用是char型数据做加减运算,作用是由当前字母获得其他字母例如:charch=‘a’;ch=ch-32;

解释:经过上面两步操作,ch中得到的是‘A’202.变量变量是指程序运行过程中可以发生变化的量C中的变量必须先定义后使用定义语法:数据类型

变量名例:inta;定义时注意两点用关键字指明数据类型为变量起名起名规则为:由字母数字下划线组成,以字母或下划线开头,不能使用c中的关键字,比如int等。变量应该先赋值,后引用数据类型21(1)变量定义变量定义语法inta,b,c;/*指定a,b,c为整型变量*/floatwidth;/*指定width为单精度实型量*/doublez;/*指定z为双精度实型变量*/charc1,c2;/*指定c1,c2为字符型变量*/数据类型22变量的定义与使用变量必须先定义,后使用。#include<stdio.h>intmain(void){

int

celsius,fahr;fahr=100;celsius=5*(fahr-32)/9;printf("fahr=%d,celsius=%d\n",fahr,celsius);

return0;}一个变量名只能定义一次变量一般都定义在程序的头上不能定义在程序的中间或后面应该先赋值,后引用23(2)变量定义的含义

定义变量,编译系统会在编译时按照数据类型为其分配相应的内存空间,并将该内存空间命名为变量名在程序中操作变量名即为操作该存储空间比如:inti1,i2;i1=4;

i2=5;2.2数据类型i2i14524(3)变量的赋值方法变量赋初值:在定义变量时对它赋值inta=5,b=3;赋值表达式inta,b;a=5;b=3;输入inta,b;scanf("%d%d",&a,&b);25(4)变量的作用存放数据待处理的中间数据最后结果263.常量通过书写方式表示数据的类型27(1)整型常量

整型常量即整数。基本整型常量可以使用三种形式表示:十进制数、八进制数、十六进制数。每种进制形式的数据都有特殊标记。十进制数。如128、-60、0。八进制数。以0开始的数据是八进制数。如0123代表八进制数123,即十进制数83。十六进制数。以0x开始的数是十六进制数。如-0x128代表十六进制数-128,即十进制数-296。数据类型28整型常量的写法举例123=01111011(B)二进制

=173(O)八进制

=7B(X)十六进制12301730x7b160200x10100120XA100100x10不能超出整型数据的取值范围比长整型数还要大的数只能用实数来表示29整数的类型其他整型数的表示加字母后缀123L(0173L)

long123U

unsigned123LU

unsigned

long30(2)实型常量

实型常量又称实数或浮点数。实数有两种表示形式:十进制形式。包括整数部分、小数点、小数部分,当整数或小数部分为0时可以省略,但小数点不能省略。如128.0、.128、128.5、128.、0.0等都是十进制数形式。指数形式。包括尾数、字符e(或E)、指数。它适用于表示较大或较小的数。e之前必须有数字,且e后面的指数必须为整数。如128e2或128E2都代表128×102。31默认情况下所有实型常量编译器都会处理为double型,如果实型常量后缀加上“f”或“F”,才会被当成float型。

例:floata;a=3.5;编译时会出现warning,原因是3.5系统解释为double,而a是float,所以警告你将double赋给float会丢失数据消除warning方式:(1)floata;a=3.5f;(2)doublea;a=3.5;32(3)字符常量

字符常量是用单引号括起来的一个字符,如‘A’、‘a’、‘?’、‘0’等。字符常量的值的是机器字符集中字符的数字值,如字符常量'0',其ASCII为48,所以存储的实际内容为48。

33转义字符反斜杠后跟一个字符或数字字符常量,代表一个字符

'\n''\101''\x41'

'A'所有字符都可以用转义字符表示‘\101’或’\x41’都表示字母A34例:转义字符‘’输出#include<stdio.h>voidmain(){ printf("\’hello\’");}运行结果:’hello’35/*功能:使用转义字符控制数据的输出*/#include<stdio.h>voidmain(){charc1='A',c2='N';printf("a\tbc\tABC\n");printf("xyz\t%c%c",c1,c2);}运行结果:

abcABCxyzAN36(4)字符串常量

一对双引号括起来的字符序列。如:

"Howdoyoudo."例:

voidmain(){printf("Thisismyfirstprogram");printf("inC/C++.\n");}输出结果为

ThisismyfirstprograminC/C++.C中无字符串变量37(5)符号常量用一个标识符代表一个常量,称符号常量。定义语法:

#define标识符

常量例:#definePI

3.14159

注意事项:该语句无分号“;”一般符号常量用大写,以跟普通变量区分符号常量是常量不能对其赋值38/*程序名:2_5.cpp*//*功能:符号常量的使用,计算圆的周长和面积*/#include<stdio.h>#definePI

3.14159/*定义PI代表串3.14159*/voidmain(){floatr,s,area;scanf("%f",&r);s=2*PI*r;area=PI*r*r;printf("s=%7.2f,area=%7.2f",s,area);}使用符号常量的益处:(1)程序书写简便(2)程序修改简便39符号常量的优点#include<stdio.h>intmain(void){doubler,

s,v;

scanf("%lf",

&r);

s=4.0*r*r*3.14

;

v=4.0/3.0*r*r*r*3.14

;......return0;}#include<stdio.h>#definePI

3.14intmain(void){doubler,

s,v;

scanf("%lf",

&r);

s=4.0*PI*r*r;

v=4.0/3.0*PI*r*r*r;......return0;}3.141593.141593.1415940符号常量的使用场合常量非常复杂,而且在程序中多次使用;常量在程序中多次使用,而且后续程序维护有可能需要改变该常量的值;41数据类型\常量\变量小节程序中的数据按照运行中可变不可变分为常量和变量两类数据通过数据类型来确定存储空间大小和对其的操作规则变量通过关键字定义数据类型常量通过书写格式指名数据类型424.格式输出函数printf

printf函数一般格式:

printf(格式控制,输出表列);43格式控制是由双引号括起来的字符串,它包含三种信息:·格式说明:由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据按照指定的格式输出。·普通字符:需要原样输出的字符。·转义字符:反斜杠后跟一个字符或数字,用于控制输出。

普通字符转义字符

printf("sum=%d\n",sum);

格式说明44输出表列是一些要输出的数据,多个输出数据用逗号隔开输出数据可以是常量、变量或表达式。输出数据的个数应该跟格式控制中的格式说明符个数保持一致

输出数据

printf("sum=%d\n",sum);

45整型数据的输出整型格式控制符十进制八进制十六进制int%d%o%xlong%ld%lo%lxunsigned%u%o%xunsignedlong%lu%lo%lx%nd:表示数据输出的最小宽度为n。46例输出整型数据#include<stdio.h>intmain(void){printf("%d,%o,%x\n",10,10,10);printf("%d,%d,%d\n",10,010,0x10);printf("%d,%x\n",012,012);

return0;}

0……0101010,12,a10,8,1610,a47例如:inta=-1,b=25,c=125;longx=356142;printf("%d,%5d\n",a,b);printf("%5d,%2d\n",c,c);printf("%ld",x);

输出结果为:-1,25125,125356142关于%nd(1)如果输出的数位数比n小,则左侧加空格;(2)如果输出的数位数比n大或相等,则原样输出;(3)负号占一位48实型数据的输出float和double使用相同的格式控制说明%f以小数形式输出浮点数,保留6位小数%e以指数形式输出,形式为:尾数e指数其中指数为带符号的3位整数,尾数整数部分1位,小数位数6位49%n.mf例:floatx=3.5;printf(“%3.1f”,x);输出结果:3.5说明:(1)如果输出的数保证了小数位数后,总位数比n小,则左侧加空格;

例如:

%4.1f(2)如果输出的数保证了小数位数后位数比n大或相等,则整数部分

原样输出;例如:12.56(3)小数部分保证m位,不够右补0,多的四舍五入;

例如:12.56(4)小数点占一位(5)n可省略,表示只限制小数位。例如;%.1f50实型数据输出示例#include<stdio.h>intmain(void) {doubled=3.1415926;printf("%f,%e\n",d,d);printf("%5.3f,%5.2f,%.2f\n",d,d,d);return0;}

3.141593,3.141593e+0003.142,3.14,3.14一共5位,小数3位,小数点一位51字符型数据输出printf()格式控制符%ccharch=‘A’;printf("%c",ch);putchar()charch=‘B’;putchar(ch);输出一个字符例:回头读控制格式符的选择52(1)根据数据的数据类型选择相应的控制格式,否则不能正确显示数据;(2)有一特例:整型和字符类型的数,输出时可以选用对方的控制格式,即%d和%c可以同时使用于这两种类型。53例输出数据'b'的ASCII码98#include<stdio.h>intmain(void){charch='b';printf("%c,%d\n",'b','b');printf("%c,%d\n",98,98);printf("%c,%d\n",97,'b'-1);printf("%c,%d\n",ch-'a'+'A',ch-'a'+'A');return0;}01100010'b'98'b'98b,98b,98a,97B,66545.格式输入函数scanf

scanf函数一般格式:

scanf(格式控制,地址表列);scanf函数的功能是按照指定的格式输入数据,可以输入任意类型的多个数据。55格式控制与printf函数含义相同,它由若干个格式说明构成,其作用是控制转换输入数据的类型。地址表列由若干个地址构成,它们可以是变量的地址,也可以是字符串的首地址。(由三部分构成,请回顾)56变量取地址符号为“&”例:scanf(“%d,%d”,&i1,&i2);比如要输入23和45分别赋值给i1,i2,输入格式如下:23,45scanf(“i1=%d,i2=%d”,&i1,&i2);考虑:1、写法正确吗?2、如果正确,输入时应该如何输入?57格式控制字符串中的普通字符:原样输入例如:scanf("%lf",&x);输入:9.5scanf("x=%lf",&x);输入:x=9.5除了%格式符和必要的分隔符(如逗号)外,尽量不要出现普通字符

printf(”enterx:”);scanf("%lf",&x);58scanf可以同时输入若干个数据,输入数据的类型、个数和位置要与格式控制说明一一对应scanf("%d%d%d",&a,&b,&c);用隐含的分隔符(空格或换行符)来输入数据。例如:输入数据

345

或输入

345

则a=3,b=4,c=559整型数据的输入整型格式控制符十进制八进制十六进制int%d%o%xlong%ld%lo%lxunsigned%u%o%xunsignedlong%lu%lo%lx60例整型数据的输入#include<stdio.h>intmain(void){

inta,b;

printf("inputa,b:");scanf("%o%d",&a,&b);printf("%d%5d\n",a,b);printf("%x,%d\n",a,b);return0;}

inputa,b:17171517f,17%x%d61实型数据的输入float:%f或%e以小数或指数形式输入一个单精度浮点数double:%lf或%le以小数或指数形式输入一个双精度浮点数62实型数据输入输出示例假定float的精度为7位,double的精度为16位

#include<stdio.h>intmain(void)

{

floatf;

doubled;printf("inputf,d:");scanf("%f%lf",&f,&d);printf("f=%f\nd=%f\n",f,d);d=1234567890123.12;printf("d=%f\n",d);return0;}inputf,d:1234567890123.1234561234567890123.123456f=1234567954432.000000d=1234567890123.123540d=1234567890123.12012063字符型数据输入scanf()%ccharch;scanf("%c",&ch);getchar()charch;ch=getchar();输入一个字符注意:输入字符时,只能用%c,不能与%d互换64例1输入输出字符示例(使用函数)#include<stdio.h>intmain(void){charch1,ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar('#');putchar(ch2);return0;}AbA#b65例2输入输出字符示例#include<stdio.h>intmain(void){charch1,ch2,ch3;scanf("%c%c%c",&ch1,&ch2,&ch3);printf("%c%c%c%c%c",ch1,'#',ch2,'#',ch3);return0;}AbCA#b#CAbCA##b注意空格也为字符输入字符如果无显式的分隔符,必须连着输入字符,不能用空格或回车分开输入66#include<stdio.h>intmain(){charch;ch='b';printf("%c,%d\n",ch,ch);return0;}01100010'b'9814262'b'9801420x62printf'b'%cputchar98%d142%o62%xscanf'b'%cgetchar98%d142%o62%xscanf("%c",&ch);例3:字符和整型的通用例67数据输入输出小节printf函数一般格式:

printf(格式控制,输出表列);scanf函数一般格式:

scanf(格式控制,地址表列);格式控制是由双引号括起来的字符串,它包含三种信息:·格式说明:由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据按照指定的格式输出。·普通字符:需要原样输出的字符。·转义字符:用于控制输出。输出表列是一些要输出的数据,多个输出数据用逗号隔开地址表列由若干个地址构成,它们可以是变量的地址,也可以是字符串的首地址。68表达式:由运算符和运算对象(操作数)组成的有意义的运算式子,它的值和类型由参加运算的运算符和运算对象决定。运算符:具有运算功能的符号运算对象:常量、变量和函数等表达式6算术表达式和赋值表达式696.1算术运算符和算术表达式C/C++语言提供了如下算术运算符:单目+-++--双目+-*/%/(除法运算符):两个整数相除结果还是整数

%(求余运算符):求余运算符要求%两侧都是整型数据70自增和自减运算符++运算符的作用是使变量的值增1。--运算符的作用是使变量的值减1。常见的用法有:++i,--i在使用i前,先使i的值加(减)1i++,i--在使用i后,先使i的值加(减)171例如:已知i=5j=i++;j=?i=?j=++i;j=?i=?566672读程序#include<stdio.h>voidmain(){inti=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);printf("%d",i);}明确一点:执行结果跟编译环境有关,原因是printf语句的执行过程因环境而异Vc中运行结果73回头读程序Vc环境中printf语句的执行原则:在printf里的运算顺序是从右向左。然后等运算完了再从左向右输出

74算术运算符的优先级和结合性单目+-++--双目*/%双目+-高低从右向左-5+3%2=(-5)+(3%2)=-43*5%3=(3*5)%3=0-i++-(i++)75(1)求三个数的算术平均值代数表达式:ave=(2)根据三角形三边计算三角形面积代数表达式:(3)根据半径计算圆的周长代数表达式:s=2πr算术表达式算术表达式:ave=(a+b+c)/3算术表达式:sqrt(s*(s-a)*(s-b)*(s-c))算术表达式:s=2*3.14159*r766.2赋值运算符和赋值表达式简单的赋值运算符:把一个表达式的值赋给一个变量,格式为:变量名=表达式如:

i=1/*将数值1赋给变量i*/count=count+1/*计算count+1的值并赋给变量count*/sum=i1+i2/*计算i1+i2的值并赋给变量sum左边必须是变量77复合的赋值运算符:算术运算符与“=”结合在一起,形成复合的赋值运算符。复合算术赋值运算符+=-=*=/=%=例如:

i+=2等价于i=i+2a%=3等价于a=a%3a*=b+5等价于a=a*(b+5)左边必须是变量78赋值表达式赋值表达式的计算对赋值表达式求解的过程是:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值表达式的值就是被赋值的变量的值。例如”x=3”这个赋值表达式的值为3,而变量x的值也是3。赋值运算符按照“自右向左”的结合顺序

791、运算符两侧的数据类型不同时,它们会按照提升规则自动进行类型转换7数据类型不同的数据混合运算规则------类型转换80转换规则如下:水平方向:自动垂直方向:低高

高double

float

unsignedlonglong

unsignedunsignedshort

低intchar,short81自动类型转换例'A'+12–10.05657766.95高double

float

unsignedlonglong

unsignedunsignedshort

低intchar,short82数据类型不同的数据混合运算规则------类型转换2、进行赋值运算时也发生类型转换,右侧的类型自动转换为左侧的类型。例:intx;

floaty=5.4;

x=y;结果:x的值为583赋值运算中的自动类型转换例doublex;x=1;x=1.0shorta=1000;charb='A';longc;c=a+b;c=1065intai;ai=2.56;ai=2shortbi;bi=0x12345678Lbi=ox5678不做四舍五入843、任何表达式中都可以强制类型进行转换。其形式为:

(类型名)表达式例:intx;

floaty=5.4;

x=(int)y;结果:x的值为5数据类型不同的数据混合运算规则------类型转换3.032.02.5(double)3(int)3.8(double)(5/2)(double)5/285强制类型转换示例#include<stdio.h>intmain(void){

inti;doublex;

x=3.8;i=(int)x;printf("x=%f,i=%d\n",x,i);printf("(double)(int)x=%f\n",(double)(int)x);printf("xmod3=%d\n",(int)x%3);return0;}x=3.800000,i=3(double)(int)x=3.000000xmod3=0868程序举例

8.1求华氏温度100°F对应的摄氏温度

转换公式如下:摄氏温度C=(5/9)(F-32)87程序解析例求华氏温度100°F对应的摄氏温度。摄氏温度C=(5/9)(F-32)#include<stdio.h>intmain(void){intcelsius,fahr;变量定义

fahr=100;变量使用

celsius=5*(fahr-32)/9;printf("fahr=%d,celsius=%d\n",fahr,celsius);输出结果

return0;}输出:fahr=100,celsius=37修改程序完成求任意华氏温度对应的摄氏温度改为celsius=5/9*(fahr-32)正确吗;88分析:程序需要三个整型变量分别存放三个整数,考虑到三个整数的平均数不一定为整数,所以存放平均值的变量定义为实型。/*程序名:2_6.cpp*//*功能:求三个整数的平均数*/#include<stdio.h>voidmain(){inta,b,c;/*定义三个整型变量分别存放三个整数*/floatave;/*定义一个实型变量分别平均值*/scanf("%d,%d,%d",&a,&b,&c);/*任意输入三个整数*/ave=(a+b+c)/3.0;/*计算平均值*/printf("ave=%7.2f\n",ave);/*输出计算结果*/}8.2求三个整数的平均数。899常用数学库函数库函数C语言处理系统提供事先编好的函数,供用户在编程时调用。scanf(),printf(),sqrt()用户调用库函数时,用#include命令将相应的头文件包含到源程序中。例如调用scanf,printf,需要#include<stdio.h>调用数学函数,需要#include<math.h>90常用数学函数函数名功能举例fabs(x)计算x的绝对值fabs(-3.5)等于3.5sqrt(x)计算x的非负平方根sqrt(16.0)等于4.0exp(x)计算指数函数exexp(1.0)等于2.71828log(x)计算x的自然对数lnxlog(2.718282)等于1.0log10(x)计算以10为底的对数函数log10xLog10(10.0)等于1.0pow(x,y)计算xypow(2.0,3.0)等于8.0sin(x)正弦函数sin(0.0)等于0.0cos(x)余弦函数cos(0.0)等于1.091调用数学函数格式函数名(参数)参数可以是常量、变量

温馨提示

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

评论

0/150

提交评论