




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言概述
全套可编辑PPT课件计算机中的信息表示二进制及其他进制任何信息在计算机内部均采用二进制表示以0、1两个数字表示但计算机与外部交流仍采用人们熟悉和便于阅读的形式二者经计算机互相转换为方便使用,引入其他进制八进制:以0~7八个数字表示十六进制:以0~9十个数字与a~f六个字母(不区分大小写)表示信息存储单位
进制转换十进制到其他进制的转换转为二进制:将十进制数除以2,记录得到的余数判断得到的商:若非零,则将其作为新的十进制数再次执行1否则继续将得到的余数序列逆序排列即为所求转为八、十六进制:将上述除以2分别改为除以8与16即可十六进制的余数10~15应分别对应a~f其他进制到十进制的转换
二、八、十六进制间的转换
整数的二进制表示
程序设计基本概念程序广义程序指为进行某项活动所规定的途径如:学校要召开运动会,需事先编排好程序,从开幕式到闭幕式,每一项活动的时间、地点、人物、设施、规则、管理、协调等都必须有详细周密的安排执行方式:顺序:在正常情况下,运动会按照程序所设定的顺序进行选择:如果遇到意外,如下雨,运动员受伤等,须要准备应急程序,即两套或多套方案供选择执行循环:当一项比赛有多组多人反复进行时,只需一套程序反复执行即可算法:解决某个问题所需要的方法和步骤程序:为解决某个问题用计算机可识别的指令合理编排的一系列操作步骤程序设计语言又称编程语言,是编写计算机程序所使用的语言人与计算机交互的工具,让计算机执行所需任务程序设计语言的数量在不断增加,各种新的程序设计语言不断问世程序设计又称编程,指编写计算机程序解决某个问题的过程程序员进行程序设计要具备解决某个问题算法的知识基础必须掌握某种程序设计方法会运用适当的思维方式会构造出解决某个问题的算法必须掌握某种程序设计语言会运用程序设计语言将算法转换为计算机程序为了提高程序设计效率和质量,还要学会使用某种程序设计工具程序设计语言的发展概况低级语言
高级语言面向过程:分析出解决问题所需要的步骤用函数把这些步骤一一实现使用时依次调用之例:Fortran、C面向对象:把构成问题事务分解成各个对象为描述某个事物中整个解决问题的步骤中的行为例:Simula、Algo60C语言的发展历史与特点发展历史1963年—CPL(CombinedProgrammingLanguage)语言1967年—BCPL(BaseCombinedProgrammingLanguage)语言1970年—B语言(取BCPL首字母)1973年—C语言(取BCPL次字母)主要特点简洁紧凑,使用方便运算符丰富数据类型丰富表达方式灵活实用允许直接访问物理地址,对硬件进行操作生成目标代码质量高,程序执行效率高可移植性好简单的C语言程序例:在屏幕上输出“HelloWorld!”源码#include<stdio.h>
/*编译预处理命令*/
intmain()
/*定义主函数main,int表示函数返回值类型*/
{
printf("Helloworld!\n");
/*在屏幕上输出"HelloWorld!"*/
return
0;
/*函数返回值0,表示程序正常结束*/
}运行结果Helloworld!Processreturned0(0x0)executiontime:0.007sPressanykeytocontinue.例:输入一个整数,在屏幕上输出该整数的立方源码#include<stdio.h>
intmain()
{
inta,b;
/*定义两个整型变量a和b*/
scanf("%d",
&a);
/*从键盘读入一个整数值赋给a*/
b=a*a*a;
/*计算a的立方并赋给b*/
printf("%d的立方为%d\n",a,b);
/*打印出a的立方*/
return
0;
}运行结果55的立方为125例:已知圆柱体的半径和高,求圆柱体积源码#include<stdio.h>
#definePI3.14
intmain()
{
floatr,h,v;
/*定义三个单精度浮点数a,b和v*/
printf("请输入圆柱体的半径和高:\n");/*提示用户输入数据*/
scanf("%f%f",
&r,
&h);
/*输入两个浮点数r和h*/
v=PI*r*r*h;
/*计算圆柱体体积,赋给变量v*/
printf("v=%f\n",v);
/*打印输出v的值*/
return
0;
}运行结果58v=628.000000运行C语言程序主要步骤主要步骤编辑:创建或修改源文件,以文本形式保存在存储介质上,扩展名为一般为.c编译:对源程序解析语法与语义等信息,生成目标文件,扩展名为一般为.o或.obj链接:将多个源文件与可选的库文件打包成可执行文件,扩展名为一般为.exe运行:由操作系统解析可执行文件并执行,得到最终结果小结待定感谢C语言基础
标识符与关键字标识符(identifier)用于起名字如变量名、符号常量名、数组名、函数名、结构类型名等命名规则由英文字母、阿拉伯数字、下划线中的一种或几种组成禁止以阿拉伯数字开头区分大小写英文字母实例正确:times10、get_next_char、_don错误:10times、get-next-char关键字(keyword)C语言规定的、赋予特殊含义且有专门用途的标识符只留给系统使用,程序员在需要自定义标识符时不能使用关键字建议C89标准指出,以下划线后跟一个大写字母开头的标识符是保留字,程序员不能使用标识符最好也不要取C语言标准库函数已经使用的名字,如printf,否则会改变原有的含义基本数据类型数据类型数据在计算机内部的表示方式数据的取值范围在该数据上可进行的操作分类基本数据类型:整型、字符型、浮点型构造数据类型:数组、结构、枚举、联合整型有符号无符号短整型shortintunsignedshortint整型intunsignedint长整型longintunsignedlongint长长整型longlongintunsignedlonglongint整型
浮点型
浮点型字符型
常量常量在程序运行中值不改变的量分类符号常量:用标识符命名的常量,方便理解、维护,提高可读性直接常量:在程序中直接写出来的量符号常量const常变量:以const修饰普通变量定义如:constintBAUD=9600;宏定义常量:以预处理命令#define声明如:#defineBAUD9600直接常量
转义字符一些无法直接表示的特殊字符常量以反斜杠开头的多个字符组成,但算作单个字符,如:\n:换行\t:横向制表符\\:反斜杠\":双引号\':单引号变量变量在程序运行过程中值可以改变的量需在声明与定义时指定变量类型类型名变量名表;变量名表可包含若干变量名,中间由逗号隔开,如intn;
intcelsius,fahr;变量名需做到见名知义为保存数据需占用一定的内存空间运算符与表达式基本概念运算对象:常量、变量或表达式运算符:具有运算功能的符号按运算对象个数分为:单目、双目、三目表达式:由运算符与运算对象组成的有意义的算式优先级:消除可能出现的运算次序歧义,编译器按优先级为表达式加圆括号结合性:优先级相同时看结合性,分为左结合与右结合算术运算符与算数表达式表示加、减、乘、除、取余等算术运算其中,加、减亦可作为单目运算符分别表示正、负优先级与结合性见右侧表格,例如:5+7*3等价于5+(7*3)5+7-3等价于(5+7)-3优先级与结合性不表示运算顺序,如:在8+7+6*5中,8+7先于6*5运算符类型优先级结合性+、-单目2右结合*、/、%双目3左结合+、-双目4左结合一些说明两整数相除结果必为整数,如:1/2结果为0取余运算只作用于整数,如:1%2.f非法加减乘除两操作数类型需一致,否则发生自动类型转换,如:1/2.f转化为1.f/2.f,进而结果为0.5f赋值运算符与赋值表达式形式为:左值表达式=表达式为左值表达式赋予等号右侧表达式的值赋值表达式结果为修改后的左值表达式结果左值表示存储在内存单元中的对象,而非常量计算结果如:变量、数组元素、指针指向内容等复合赋值:将算数等运算符与赋值结合如:a+=e相当于将a+e的结果存入a中运算符类型优先级结合性=双目14右结合综合实例编写程序,从键盘输入一个3位正整数,计算并输出该整数中各位数字的和。例如,整数932中各位数字的和为9+3+2=14。分析在计算数的各位数时,需要反复运用%和/运算符n%10表示正整数n的个位数n/10相当于把n的最后一位数去掉对它进行%运算就可以得到n的十位数如此反复运算即可得到整数n的每一位数#include<stdio.h>
intmain()
{
inta,b,c,n;
printf("输入一个三位正整数:");
scanf("%d",
&n);
a=n%
10;
/*个位数*/
b=n/
10
%
10;
/*十位数*/
c=n/
100;
/*百位数*/
printf("%d的各位数字的和:%d\n",n,a+b+c);
return
0;
}长度运算符用于查看表达式或数据类型所占字节长度一般形式:sizeof(表达式或类型)sizeof(88)与sizeof(int)结果均为4sizeof(void*)可查看编译器的位数运算符类型优先级结合性sizeof单目2右结合#include<stdio.h>
intmain()
{
charch=
'4';
printf("%d,%d,%d",
sizeof('4'),
sizeof(ch),
sizeof("4"));
return
0;
}输出结果:4,1,2类型转换运算符不同类型数据参与运算时需转换为同一类型数据类型转换包括自动与强制自动转换由编译器自动完成强制转换通过类型转换运算符完成自动类型转换基本规则:由低向高转换,不损失精度整型提升:整型算数运算总是至少以缺省int类型的精度来进行#include<stdio.h>
intmain()
{
chara=
5,b=
126;
//5:00000000000000000000000000000101
//a:00000101(截断操作)
//126:00000000000000000000000001111110
//b:01111110
//当a和b相加时,都是char类型,就会发生整型提升
//intc=00000000000000000000000000000101+00000000000000000000000001111110
//charc=10000011(整型截断)
//以%d打印,再次在内存中整型提升,再打印原码
//intc=11111111111111111111111110000011(补码)
//打印原码:10000000000000000000000011111101
charc=a+b;
printf("%d\n",c);
//运行结果:-125
return
0;
}强制类型转换将表达式转换为给定类型一般形式:(类型名)表达式如:(int)3.14结果为3强制类型转换运算符并非函数不存在int(3.14)无论强制与否,类型转换不改变原数据定义运算符类型优先级结合性()单目2右结合小结待定感谢顺序结构
程序控制结构基本概念解决复杂问题往往需要多条语句按某种顺序形成一个执行流程控制结构:描述与控制多条语句执行流程的机制三种基本控制结构:顺序(默认)、选择、循环流程图一种程序算法的描述方法,由带箭头的线条将有限个几何图形框连接而成框用来表示指令动作或条件判断箭头说明程序算法的走向使程序设计可以更方便和严谨顺序结构流程图按语句出现的顺序先后执行选择结构流程图根据给定条件,二者择其一执行若条件为真,则执行A否则执行B当型循环结构流程图当条件为真时,重复执行A否则,结束循环直到型循环结构流程图重复执行语句A直到给定条件为假时结束循环语句基本概念程序最基本的执行单位,必须符合语法要求任何C程序均由:简单语句、控制语句、复合语句三类语句组成简单语句结构简单的语句,包括:表达式语句、函数调用语句、空语句表达式语句:表达式后加分号的语句如赋值语句:a=3;函数调用语句:对函数进行调用的语句如:printf("WelcometoC\n");空语句:不做任何事情的语句即:;控制语句用于控制程序执行流程的语句,包括:选择语句、循环语句、跳转语句选择语句:if语句、switch语句循环语句:for语句、while语句、do语句跳转语句:return语句、continue语句、break语句、goto语句复合语句用花括号括起来的若干语句在语法意义上等价于一条语句本身不以分号结尾花括号形成一个局部环境例{
sum=sum+i;
i++;
}标准输入输出函数基本概念输入/输出为最基本的语句,可通过调用系统函数来实现常用的标准输入/输出函数包括:格式化输入输出函数字符输入输出函数格式化输出函数printf(格式控制字符串,输出项1,...,输出项n)返回输出的字符个数如果输出过程发生错误,则返回一个负值格式控制字符串包含普通字符和格式转换说明符普通字符原样打印输出格式转换说明符以%开头以及跟随其后的最多5个不同选项(标志、最小字段宽度、精度、修饰符和格式符)组成,其中格式符不能省略输出参数由若干个用逗号分隔的输出项组成输出项可以是常量、变量和表达式输出项和格式转换说明符一一对应输出格式转换说明符一般形式为(中间无空格):%标志最小字段宽度精度修饰符格式符标志选项含义-输出左对齐(默认右对齐)+正数输出带“+”号#输出八进制数以0开头,输出十六进制数以0x或0X开头,保留以格式g或G输出的数的尾数0最小字段宽度与精度选项含义m%md,以宽度m输出整型数,数据宽度不足m时,左补空格;%ms,以宽度m输出字符串,字符串宽度不足m时,左补空格0m%0md,以宽度m输出整型数,数据宽度不足m时,左补0;%0ms,以宽度m输出字符串,字符串宽度不足m时,左补0m.n%m.nd,以宽度m输出整型数,数据宽度不足m时,左补空格,数据一定要有n列,不足时前面补0,超过时不做处理;%m.nf,以宽度m输出浮点型小数,保留n位小数。如果只有小数点%m.f,那么精度为0;%m.ns,以宽度m输出字符串,n表示取字符串前n个字符输出到m列的右侧,n<m时,左补空格,n>=m时,不做处理*如果宽度或精度为*,表示宽度或精度由输出项指明修饰符选项含义h修饰的格式符为d、o、x、X、u,表示短整型l修饰的格式符为d、o、x、X、u,表示长整型ll修饰的格式符为d、o、x、X、u,表示长长整型L修饰的格式符为f、e、E、g、G,表示长双精度格式符选项含义d以十进制形式输出整数o以八进制形式输出无符号整数x或X以十六进制形式输出无符号整数u以十进制形式输出无符号整数f以小数形式输出浮点数e或E以指数形式输出浮点数g或G以指数或小数形式输出浮点数c输出字符s输出字符串举例1printf("%8d%8d",
123,
-123);
printf("%-8d%-8d",
123,
-123);
printf("%+8d%+8d",
123,
-123);
printf("%-+8d%-+8d",
123,
-123);输出结果123-123123-123+123-123+123-123举例2printf("%8o%#8o",
123,
123);
printf("%8x%#8x",
123,
123);
printf("%8X%#8X",
123,
123);
printf("%8g%#8g",
123.0,
123.0);
printf("%8G%#8G",
123.0,
123.0);输出结果17301737b0x7b7B0X7B123123.000123123.000举例3printf("%10f",
1.234);
printf("%-10f",
1.234);
printf("%10.f",
1.234);
printf("%.2f",
1.234);
printf("%10.2f",
1.234);
printf("%-10.2f",
1.234);
printf("%10.4d",
123);
printf("%10.4s",
"abcdef");输出结果1.2340001.23400011.231.231.230123abcd%g的作用%f与%e(或%E)保留小数点后六位精度输出%g默认6位有效数字,也可以指定精度%m.ng表示输出宽度为m,有效数字为n%g的输出遵循以下规则:把输出的数值按%e或%f类型中输出长度较小的方式输出,仅当数值的指数小于-4或大于等于指定精度(默认值为6)时按%e输出,否则按%f输出;选择好输出格式后,尾部的0会被缩减;尾部0被缩减后,小数点后面有一个或多个数字时才显示小数点;对于使用%g格式符的数值,不管最后是用%e还是%f,都会先根据2、3进行简化,简化后根据精度和参数截取至最大有效数字位数。如果精度过大则不会补0%g因为能够自动简化输出中多余的0与小数点,常用于不指定输出格式的输出中。举例4printf("%g,%10.3g",
123456.,
123456.);
printf("%g,%10.3g",
12345.6,
12345.6);
printf("%g,%10.3g",
1234.56,
1234.56);
printf("%g,%10.3g",
0.000123456,
0.000123456);
printf("%g,%10.3g",
0.0000123456,
0.0000123456);
printf("%g,%10.3g",
0.00000123456,
0.00000123456);输出结果123456,1.23e+00512345.6,1.23e+0041234.56,1.23e+003/*指数大于等于指定的3,按%e输出*/0.000123456,0.0001231.23456e-005,1.23e-005/*指数小于-4,按%e输出*/1.23456e-006,1.23e-006举例5:*的作用printf("%5.2d",
345);
/*表示*由输出项中的5指明*/
printf("%*.2d",
5,
345);
/*表示*由输出项中的2指明*/
printf("%5.*d",
2,
345);
/*表示*分别由输出项中的5和2指明*/
printf("%*.*d",
5,
2,
345);
输出结果345345345345函数printf()的使用输出数据固定只需把输出数据放在双引号内当作字符串传入函数输出即可printf("Iam23yearsold");函数调用的结果是原原本本打印出双引号之间的内容输出数据不固定只要在输出字符串中变量数值出现的地方先用相应类型的格式转换说明符占位,然后在字符串后按顺序列出变量即可,打印时将用这些变量值替换相应位置的占位格式转换说明符printf("celsius=%d,fahr=%d\n",celsius,fahr);打印数据类型应与格式转换说明符一致格式化输入函数scanf(格式控制字符串,输入项1,...,输入项n)返回按照给定格式串正确读入数据的个数如果读入过程发生错误,则返回EOF格式控制字符串和printf()类似,也是由普通字符和格式转换说明符组成如出现普通字符,在输入时也需要原样输入,所以如无必要一般不大出现普通字符格式转换说明符由%和跟随其后的最多4个不同选项(赋值抑制符*、最大字段宽度、修饰符和格式符)组成,其中格式符不能省略与printf()不同,输入项不是变量,而是变量的地址在变量名前面需加取地址运算符&输入项和格式转换说明符一一对应输入格式转换说明符一般形式为(中间无空格):%赋值抑制符最大字段宽度修饰符格式符赋值抑制符*表示不会把输入数据赋值给输入项字段宽度选项含义m%md,表示最多输入m位整数(包括负号在内);%ms,表示最多输入长度为m的字符串修饰符选项含义h修饰的格式符为d、o、x、X、u,表示短整型l修饰的格式符为d、o、x、X、u,表示长整型ll修饰的格式符为d、o、x、X、u,表示长长整型l修饰的格式符为f、e、E、g、G,表示双精度浮点型L修饰的格式符为f、e、E、g、G,表示长双精度浮点型格式符选项含义d以十进制形式输入整数o以八进制形式输入无符号整数x或X以十六进制形式输入无符号整数u以十进制形式输入无符号整数f以小数形式输入浮点数e或E以指数形式输入浮点数g或G以指数或小数形式输入浮点数c输入字符s输入字符串,遇到空白类字符结束输入举例6:赋值抑制符与字段宽度inta,b;
scanf("%3d%*d%d",&a,
&b);
printf("%d,%d",a,b);输入12345678910输出123,9格式化输入中的空白字符包含空格、水平制表符'\t'、垂直制表符'\v'、换页符'\f'和'\n'等不可见字符scanf()默认会跳过数值数据前的空白字符,遇到的第一个非空白字符是数字字符才开始读取数据,否则一直等待在读取数值数据过程中,遇到非数值字符时读取结束举例7inta,b;
scanf("%3d%*d%d",&a,
&b);
printf("%d,%d",a,b);输入234ljkjklj输出a=234特别注意空白符不要出现在格式串的最后,否则输入时将无法用换行结束输入因为此时输入的换行符都被这个空白符忽略了综合实例输入一个五位整数,输出其各位数字之和分析可以声明五个整型变量保存该五位整数各位数字用scanf()函数读入每位数字,再输出这五个整型变量的和#include<stdio.h>
intmain()
{
inta,b,c,d,e;
scanf("%1d%1d%1d%1d%1d",
&a,
&b,
&c,
&d,
&e);
printf("%d\n",a+b+c+d+e);
return
0;
}小结待定感谢选择结构
关系运算符及其表达式关系运算符关系运算即对两个操作数进行比较运算的结果是真或假用关系运算符把两个表达式连接起来的式子为关系表达式关系运算结果为真则关系表达式的值为1,否则为0运算符类型优先级结合性<、<=、>=、>双目6左结合==、!=双目7左结合示例1inta=
1,b=
2,c=
3,d;
a>b/*结果为0,表示"假"*/
a+b==c/*结果为1,表示"真"*/
intx;
1
<x<
5
/*相当于(1<x)<5,结果为1*/逻辑运算符及其表达式逻辑运算符三种:逻辑与&&、逻辑或||、逻辑非!用逻辑运算符把两个操作数连接起来的式子称为逻辑表达式当逻辑表达式成立时其值为1,否则为0将任何非0值的操作数当作真值来处理将任何0值操作数当作假值来处理设a和b为逻辑运算对象,逻辑运算符的功能描述如下:!a:若a为1,则!a为0;若a为0,则!a为1a&&b:当a和b都为1时,结果为1,否则为0a||b:当a和b都是0时,结果为0,否则为1运算符类型优先级结合性!单目2左结合&&双目11左结合||双目12左结合示例2inta=
4,b=
5,c;
c=b>
3
&&
2
||
8
<b-
!a;
/*结果为1*/
/*上式相当于c=(((b>3)&&2)||(8<(b-(!a))))*/短路求值多个逻辑表达式复合时,若前面的子表达式可确定最终结果,则不计算剩余子表达式多个逻辑与表达式连接时,若中间有一个子表达式为假,则最终结果必为假,无需计算剩余子表达式多个逻辑或表达式连接时,若中间有一个子表达式为真,则最终结果必为真,无需计算剩余子表达式被短路的表达式虽然不会进行运算,但编译器会检查其语法错误例inta=
4,b=
5,c;
c=b>
3
&&
2
||
8
<b-
!a;
/*结果为1*/
/*上式相当于c=(((b>3)&&2)||(8<(b-(!a))))*/
/*((b>3)&&2)结果为1,则无需计算(8<(b-(!a))))*/综合示例运行下列代码,并判断其输出结果:inta=
0,b=
1,c;
c=a!=
0
&&b/a>
2;
printf("%d\n",c);A.0B.1C.2D.出现除0错误,无法运行if语句简单if语句基本形式:if
(表达式)
复合语句执行流程:计算表达式的值若非0,则执行复合语句否则,结束该if语句简单if语句流程图综合实例1输入两个整数a和b,要求按从大到小的顺序打印输出a、b的值分析先判断a是否小于b,如果a小于b,则交换a、b的值再打印#include<stdio.h>
intmain()
{
inta,b,t;
scanf("%d%d",
&a,
&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
printf("%d%d",a,b);
return
0;
}if-else语句基本形式:if
(表达式)
复合语句1
else
复合语句2执行流程:计算表达式的值若非0,则执行复合语句1否则,执行复合语句2if-else语句流程图综合实例2判断一学生成绩是否及格,如果及格则打印及格信息,否则打印不及格信息分析可使用典型的第二种if分支语句求解#include<stdio.h>
intmain()
{
intscore;
printf("请输入学生成绩:");
scanf("%d",
&score);
if(score>=
60)
{
printf("该学生成绩及格!\n");
}
else
{
printf("该学生成绩不及格!\n");
}
return
0;
}if-else-if语句基本形式:if
(表达式1)
复合语句1
else
if
(表达式2)
复合语句2
...
else
if
(表达式n)
复合语句n
else
复合语句n+1if-else-if语句流程图if-else-if语句(续)执行流程:计算表达式1的值若非0,则执行复合语句1否则,计算表达式2,并据此判断是否执行复合语句2以此类推,直至某个表达式i为真,则执行复合语句i否则,执行复合语句n+1if-else-if语句流程图综合实例3
#include<stdio.h>
intmain()
{
doublex,y;
scanf("%lf",
&x);
if(x<
0.5
||x>=
7.5)
{
printf("x值超出范围!\n");
}
else
if(x<
1.5)
{
y=sin(x);
printf("sin(%lf)=%lf\n",x,y);
}
else
if(x<
4.5)
{
y=log(x);
printf("log(%lf)=%lf\n",x,y);
}
else
{
y=exp(x);
printf("exp(%lf)=%lf\n",x,y);
}
return
0;
}条件运算符及其表达式条件运算符与表达式唯一的三目运算符一般形式:表达式1?表达式2:表达式3运算过程计算表达式1的值若为真,则以表达式2的结果为最终结果否则以表达式3的结果为最终结果运算符类型优先级结合性?:三目13右结合综合实例4输入两个正整数,输出这两个数的较大者分析这道题当然可以用if语句求解,也可以用条件运算符求解#include<stdio.h>
intmain()
{
inta,b,maxnum;
scanf("%d%d",
&a,
&b);
maxnum=a>b?a:b;
/*因条件运算符优先级比赋值运算符高,故可不加括号*/
printf("%d\n",maxnum);
return
0;
}switch语句switch语句可处理多分支语句基本形式:switch
(表达式)
{
case常量表达式1:语句序列1;
case常量表达式2:语句序列2;
...
case常量表达式n:语句序列n;
default:语句序列n+1;
}执行流程:计算表达式的值与各case的常量表达式比较若匹配则执行对应语句序列否则若有default分支则执行其语句序列switch语句流程图注意事项switch后的表达式和case后的常量表达式的值必须是整型、字符型或枚举类型各case后的常量表达式的值不能重复case后的语句段可以是一条语句,也可以是多条语句,不需要将它们用大括号括起来,甚至可以是空语句习惯上把default子句写在最后面,它也可以省略综合实例5
#include<stdio.h>
intmain()
{
intn;
scanf("%d",
&n);
switch
(n)
{
case
7:printf("*******\n");
case
6:printf("******\n");
case
5:printf("*****\n");
case
4:printf("****\n");
case
3:printf("***\n");
case
2:printf("**\n");
case
1:printf("*\n");
}
return
0;
}break语句
综合实例6已知成绩等级和分数的关系如右表所示请输入考试成绩等级,并打印出相应的百分制分数段。分析本例根据四种不同等级来处理等级分数A85~100B70~84C60~69D<60#include<stdio.h>
intmain()
{
chargrade;
scanf("%c",
&grade);
switch
(grade)
{
case
'A':printf("85~100\n");
break;
case
'B':printf("70~84\n");
break;
case
'C':printf("60~69\n");
break;
case
'D':printf("<60\n");
break;
default:printf("error\n");
}
return
0;
}说明当问题需要根据有限个整数值来区分不同情况分别加以处理时,适合用switch语句如果问题需要根据不同条件分别加以处理时,则适合用if语句一般情况下,switch语句可以转换成if语句来实现有些情况下,适合用if语句的问题也可以用switch语句求解在这种情况下,关键是要想办法把if的区间判断转化为几种整数值的判断综合实例7输入一个学生成绩,统计并打印出五分制成绩。百分制成绩到五分制成绩的转换规则:大于或等于90分为A小于90分且大于等于80分的为B小于80分且大于等于70分的为C小于70分且大于等于60分的为D小于60分的为E分析关键在于如何把区间映射为有限的几个整数值设计一个映射函数(int)(score/10),通过这个映射函数,把0~100这个区间的分数值映射为0-10十一个正整数#include<stdio.h>
intmain()
{
floatscore;
scanf("%f",
&score);
switch
((int)(score/
10))
{
case
10:
case
9:printf("A\n");
break;
case
8:printf("B\n");
break;
case
7:printf("C\n");
break;
case
6:printf("D\n");
break;
default:printf("E\n");
}
return
0;
}选择的嵌套嵌套选择当if语句中的if或else子句中又包含if语句时,形成了if语句的嵌套此时if的个数总是不少于else的个数匹配规则else总是与在它之前的、离它最近的、尚未匹配过的、同一语句块的if匹配比较if
(x<
0)
if
(y>
1)
z=
1;
else
z=
2;if
(x<
0)
{
if
(y>
1)
z=
1;
}
else
z=
2;测试执行下列语句后,整型变量x的值为:switch
(x=
1)
{
case
0:x=
10;
break;
case
1:
switch
(x=
1)
{
case
1:x=
20;
case
2:x=
30;
break;
default:x=
0;
}
x=
1;
break;
}A.30B.20C.10D.1综合实例8求出三个数中的最大者并打印输出分析在求一组数据的最大值时,可以使用擂台法先假设这组数据中的某个数据最大,可以形象地想象称该数据站在擂台上,其余数据依次和擂台上的数据比较如果有数据比擂台上的数据大,则用它替换掉擂台上的数据。如此往复,最后站在擂台上的数据一定是最大值#include<stdio.h>
intmain()
{
inta,b,c,maximum;
scanf("%d%d%d",
&a,
&b,
&c);
maximum=a;
/*假定a最大*/
if
(maximum<b)
/*如果b更大,则用b替换maximum*/
{
maximum=b;
}
if
(maximum<c)
/*如果c更大,则用c替换maximum*/
{
maximum=c;
}
printf("最大值为%d\n",maximum);
return
0;
}小结待定感谢循环结构
自增自减运算符及其表达式自增自减运算符根据在变量的前后位置分成两类i++:先用后加,++在变量i后面(后加),表示先使用变量i的值,也即先让变量i参与运算,之后再把i的值加1++i:先加后用,++在变量i前面(先加),表示先把变量i的值加1,再让变量i参与运算例intj,k;
i=
3;k=
++i;
/*k为4,i为4*/
i=
3;k=i++;
/*k为3,i为4*/运算符类型优先级结合性++、--单目2右结合一些说明++i的性能要比i++好,因后者需临时变量转存编译器在理解表达式时会尽量取最长的组合如:j+++k被理解为(j++)+k自增自减运算符的运算对象只能是变量,不能是常量或表达式如:3++或++(a+b)都是非法表达式自增自减运算符具有副作用,有时会导致结果不确定在inti=3,t=8+i+6*(++i);中,t可能为35或36自增自减运算符也可以作用于浮点数变量逗号运算符及其表达式逗号运算符一般形式:表达式1,表达式2运算过程:计算表达式1的值并将该值丢弃计算表达式2的值并将该值作为逗号表达式的值表达式1的值需有副作用,否则无意义可嵌套使用:表达式1,表达式2,...,表达式n如a=3*5,a*4,a+5相当于(((a=3*5),a*4),a+5)运算符类型优先级结合性,双目15左结合三种循环语句while语句:最简单、最基本,“当”型循环for语句:多用于指定次数的循环dowhile语句:多用于条件判断的循环,“直到”型循环上述三种两两等价while语句while语句一般形式:while
(表达式)
复合语句计算表达式值若为0,则结束否则执行复合语句,并再次判断表达式值,以此类推while语句流程图注意事项while语句中的表达式一般为关系表达式,实际上也可以是任意表达式。只要表达式的值非0,就认为它是成立的while语句表达式所在行末一般不加分号,如果加了分号,则循环体为空语句,须注意此时是否出现死循环循环体可以是一条语句,也可以是多条语句,如果是多条语句,需要加一对大括号形成复合语句。建议都加一对大括号综合实例1
#include<stdio.h>
intmain()
{
inti=
1,s=
0;
while
(i<=
100)
{
s=s+i;
/*累加器*/
i++;
}
printf("%d\n",s);
return
0;
}dowhile语句dowhile语句一般形式:do
复合语句
while
(表达式);执行复合语句计算表达式值若为0,则结束否则重复执行复合语句,并再次计算并判断表达式值,以此类推dowhile语句流程图注意事项dowhile语句的循环可以是一条语句,也可以是多条语句,如果是多条语句,需要加一对大括号形成复合语句while后面的表达式可以是任意表达式,只要其值非0就认为是成立的dowhile语句中的while行末一定要加分号测试分析以下代码段是否死循环shortk=
0;
do
{
++k;
}
while
(k>=
0);for语句for语句一般形式:for
(表达式1;表达式2;表达式3)
复合语句初始化:计算表达式1计算表达式2,并判断是否为真若为真,则执行复合语句、计算表达式3,并再次计算表达式2,以此类推否则结束循环语句for语句流程图注意事项for语句的小括号内一般有3个表达式,中间用分号隔开表达式1一般是初值表达式,用来给循环变量赋初始值,当需要给多个变量赋初值时可以用逗号表达式表达式2一般是判断表达式,多用关系表达式判断是否满足循环条件表达式3一般是循环步长表达式实际上这三个表达式都可以是任意表达式,也都可以省略,但分号不能省特别的,for(;;)相当于for(;1;),表示循环条件永远成立在C99中表达式1可以是一个变量声明,在此处声明的变量只能在循环内使用注意表达式3是在执行完循环体语句后执行的循环体语句如果有多条语句,则需要用大括号把这些语句括起来形成复合语句。为安全起见,建议都加大括号for语句小括号后一般不直接加分号,否则会使循环体变成空语句,引起语义错误一般用for循环执行指定次数的循环综合实例2求100以内的奇数和及偶数和,要求分别使用while语句、dowhile语句和for语句分析可以在循环体内使用if语句进行判断可以考虑到不论是奇数和还是偶数和,它们每次累加的步长都是2while版本#include<stdio.h>
intmain()
{
inti=
1,s1=
0,s2=
0;
while(i<=
100)
{
s1+=i;
s2+=i+
1;
i+=
2;
}
printf("奇数和为%d,偶数和为%d\n",s1,s2);
return
0;
}dowhile版本#include<stdio.h>
intmain()
{
inti=
1,s1=
0,s2=
0;
do
{
s1+=i;
s2+=i+
1;
i+=
2;
}
while(i<=
100);
printf("奇数和为%d,偶数和为%d\n",s1,s2);
return
0;
}for版本#include<stdio.h>
intmain()
{
inti,s1,s2;
for
(i=
1,s1=s2=
0;i<=
100;i+=
2)
{
s1+=i;
s2+=i+
1;
}
printf("奇数和为%d,偶数和为%d\n",s1,s2);
return
0;
}综合实例3从键盘输入一个正整数,在屏幕上将其逆序输出。比如输入573,输出375,注意每个数字后面有一个空格分析先输出573的个位数3,再把573的个位数抹掉得到新数57输出57的个位数7,再把57的个位数抹掉得到新数5输出5的个位数5,把5的个位数抹掉得到新数0,操作结束这个操作过程就是一个循环过程#include<stdio.h>
intmain()
{
intn;
scanf("%d",
&n);
while
(n!=
0)
{
printf("%d",n%
10);
n=n/
10;
}
return
0;
}continue、break和goto语句break语句与continue语句break语句用于强制结束循环,转而执行循环体外的第一条语句continue语句则是跳过循环体中的剩下的语句,继续下一次循环二者一般均需配合if语句使用break亦可用于switch语句,但continue不可while中的break语句与continue语句while语句break流程图while语句continue流程图dowhile中的break语句与continue语句dowhile语句break流程图dowhile语句continue流程图for中的break语句与continue语句for语句break流程图for语句continue流程图综合实例4
#include<stdio.h>
intmain()
{
inti,m,n;
scanf("%d%d",
&m,
&n);
for
(i=m;i>=
1;i--)
{
if
(m%i==
0
&&n%i==
0)
{
break;
}
}
printf("最大公约数为%d,",i);
for
(i=m;
;i+=m)
{
if
(i%n==
0)
/*i一定是m的倍数,只需判断是否n的倍数*/
{
break;
}
}
printf("最小公倍数为%d\n",i);
return
0;
}#include<stdio.h>
intmain()
{
inti,m,n;
scanf("%d%d",
&m,
&n);
for
(i=m;i>=
1;i--)
{
if
(m%i==
0
&&n%i==
0)
{
break;
}
}
printf("最大公约数为%d,最小公倍数为%d\n",i,m*n/i);
return
0;
}goto语句goto语句可以跳到函数中任何有标号的语句处在C99中goto语句不可以用于绕过变长数组的声明标号就是放在语句开始处的标识符,其格式如下标号标识符:语句一条语句可以有多个标号goto语句的格式:goto标号标识符;goto语句这种无条件跳转语句用得太多会破坏程序的结构化,影响程序的可读性循环的嵌套嵌套循环(多重循环)当循环的循环体里又出现了另一个循环,这种形式的循环称为嵌套循环或多重循环注意使用时务必分析清楚每层循环的循环体语句,而每一层循环都是按照其既定的运行流程在运行外层做一次循环体,内层就要整个循环从头到尾走一遍每层循环的循环变量不能相同,否则互相影响,程序无法得到正确结果每一层循环都可以是for、while或者dowhile务必注意每层循环的初始化语句的位置。一般都放在紧挨着这个循环的前面的语句里综合实例5打印九九乘法表分析九九乘法表共有9行,可以用一个循环执行9次,每次打印一行容易观察到,第i行打印i项可使用两重循环#include<stdio.h>
intmain()
{
inti,j;
for
(i=
1;i<=
9;i++)
{
for
(j=
1;j<=i;j++)
{
printf("%dx%d=%d",i,j,i*j);
}
printf("\n");
}
return
0;
}循环例题解析数列求和:例1
#include<stdio.h>
intmain()
{
inti,flag;
doubles;
for
(i=flag=
1,s=
0;i<=
1000000;i++)
{
s+=flag*
1.0
/i;
flag=
-flag;
}
printf("%lf\n",s);
return
0;
}数列求和:例2
#include<stdio.h>
intmain()
{
inti,n,a,s,item;
scanf("%d%d",
&n,
&a);
for
(i=
1,s=item=
0;I<=n;i++)
{
item=item*
10
+a;
s+=item;
}
printf("%d\n",s);
return
0;
}数列求和:例3
#include<stdio.h>
#include<math.h>
intmain()
{
doubles,t,x;
intn=
1;
scanf("%lf",
&x);
s=
0,t=x;
do
{
s+=t;
n+=
2;
t*=
-x*x/
(n*
(n-
1));
}
while
(fabs(t)
>=
1e-7);
printf("sin(%.2lf)=%12.10lf\n",x,s);
return
0;
}找数:例1
#include<stdio.h>
intmain()
{
inti,n;
scanf("%d",
&n);
for
(i=
2;i<n;i++)
{
if
(n%i==
0)
{
break;
}
}
if
(i==n)
/*若在[2,n-1]内无n的因子,n为素数,for循环正常结束且i==n*/
{
printf("%d是素数\n",n);
}
else
{
printf("%d不是素数\n",n);
}
return
0;
}#include<stdio.h>
intmain()
{
inti,n;
scanf("%d",
&n);
for
(i=
2;i*i<=n;i++)
{
if
(n%i==
0)
{
break;
}
}
if
(i*i>n&&n!=
1)
{
printf("%d是素数\n",n);
}
else
{
printf("%d不是素数\n",n);
}
return
0;
}找数:例2
#include<stdio.h>
intmain()
{
inti,a,b,c;
for
(i=
100;i<
1000;i++)
{
a=i%
10;
/*i的个位数*/
b=i/
10
%
10;
/*i的十位数*/
c=i/
100;
/*i的百位数*/
if
(a*a*a+b*b*b+c*c*c==i)
{
printf("%d\n",i);
}
}
return
0;
}#include<stdio.h>
intmain()
{
inta,b,c;
for
(a=
1;a<
10;a++)
/*百位数*/
{
for
(b=
0;b<
10;b++)
/*十位数*/
{
for
(c=
0;c<
10;c++)
/*个位数*/
{
if
(100
*a+
10
*b+c==a*a*a+b*b*b+c*c*c)
{
printf("%d\n",
100
*a+
10
*b+c);
}
}
}
}
return
0;
}找数:例3
#include<stdio.h>
intmain()
{
inti,j,s;
for
(i=
1;i<
1000;i++)
{
for
(s=
0,j=
1;j<i;j++)
{
if
(i%j==
0)
{
s+=j;
}
}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黄金销售管理办法
- 煤矿职业病防治法课件教学
- 省工伤康复管理办法
- 电能量采集管理办法
- 班班通使用管理办法
- 乘车生安全管理办法
- 油田基层队管理办法
- 电大资源与管理办法
- 石子厂生活管理办法
- 上虞区代建管理办法
- 印章交接表(可编辑)
- 全屋智能合同范例
- 光伏发电+储能项目三期项目建筑安装工程投标方案(技术方案)
- 安全生产管理体系建设(共27张课件)
- GB/T 44457-2024加氢站用储氢压力容器
- 留置胃管课件
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- 大学英语1(工科版)智慧树知到期末考试答案章节答案2024年湖南工学院
- 《智能网联汽车技术概论》课件
- 2024年湖北省黄冈市黄梅县黄梅镇招聘社区工作人员12人历年高频难、易点(公共基础测验共200题含答案解析)模拟试卷附答案
- 旅店会客登记制度
评论
0/150
提交评论