C语言程序设计·
2021-12-28 08:19:01 0 举报
AI智能生成
C语言一到五章总结
作者其他创作
大纲/内容
程序设计与C语言
程序与程序设计语言
程序语言的发展
机器语言
优点:运行效率高
缺点:难学,难记,难修改
汇编语言
优点:容易理解,运行效率仅次于机器语言
缺点:分依赖于机器硬件可移植性不好,称为“低级语言”
高级语言
非结构化的语言
缺点:编程风格比较随意,没有编程规范可以遵循,程序中的流程可以随意跳转,变得难以阅读和维护。
结构化语言
所编制的程序结构清晰,易于阅读和维护。
面向对象的语言
开发应用程序变得更容易,耗时更少,效率更高
程序设计语言的功能
定义:程序设计语言必须具有数据表达(即变量定义)与数据处理的能力(即流程控制)
数据表达:通常每种程序设计语言中都是先定义了几种基本的数据类型,用来定义程序中所用到的数据
流程控制
顺序控制结构
分支控制结构
共同特点
只有单一的入口和单一的出口
结构中的每个部分都有被执行的可能
结构内不应出现永不终止的死循环
循环控制结构
程序的算法表示
软件的主体是程序,程序的核心是算法。
算法的特征
确定性:算法的每条指令必须有明确的含义,不能有二义性,对于相同的输入必须得出相同的执行结果
有穷性:一个算法应包含有限个操作步骤
可行性:算法中指定的操作都可以通过已经实现的基本运算执行有限次后实现
有零个或多个输出:算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入来得到。
有一个或多个输出:算法的目的是为了求解,解只有输出才能得到。
算法的描述
文字描述
流程图
伪代码
程序设计语言表示
C语言·程序·设计·的特点
C语言语句简洁紧凑,使用方便灵活
运算符丰富,表达能力强
C语言程序可移植性好
生成的目标代码质量高,运行效率高
语言处理能力强
C语言是一种结构化语言
C语言的编辑,编译,链接和运行
程序设计的任务
分析问题
设计算法
程序设计
运行并调试程序
分析程序运行结果
编写程序文档
顺序结构程序设计
引例
C语言的语句
说明语句
int a,b;
char ch;
表达式语句
c=a+b是赋值语句
c=a+b;则是一个表达式语句
表达式语句是由表达式加上分号组成:表达式1;
分支语句
分支语句实现分支控制过程,根据条件成立与否执行不同的语句
if 表达式1;
else 表达式2;
循环语句
for语句
while语句
do—while语句
转向语句
break语句:结束整个循环体
goto语句
continue语句:结束当前循环,进行下一次循环
return语句:结束
复合语句
用一对大括号{}将若干语句顺序组合在一起所形成的语句称为复合语句
{sum=sum+i;i=i+2}
空语句
只有一个分号组成: ;
函数的定义与调用
函数是完成特定功能的小模块,常常再C程序中包含若干个函数,复杂的任务通过调用这些函数来完成
函数定义后,可以再别的函数中调用该函数
输入与输出
输入:scanf() 如果是2019年的版本请用scanf_s()输入语句
输出:printf()
数据的输入和输出
输出函数和输入函数
printf()函数
格式控制说明
普通字符:在输出数据时,需要原样输入的字符
注意事项
格式字符与输出项的类型要一一对应,不同类型的数据所使用的格式字符不同
一般情况下格式字符与输出项的个数应相同
printf()函数中可以没有输出项,此时printf()函数只用来输出一个字符串;也可以有多个输出项,多个输出项之间使用逗号进行分隔。
若要在printf()函数中输出字符“%”,则应在格式控制字符串中连续两个“%”
scanf()或者scanf_s()函数
格式控制说明
普通字符:在输出数据时,需要原样输入的字符
注意事项
格式字符与输入项的类型个数要一一对应,输入项必须是地址,不能是变量名。
格式字符可以指定输入数据所占的列数,系统会截取相应列数的数据。
在输入数据时遇到以下情况则认为数据输入结束:空格,Tab建,回车键,非法输入,指定宽度。
整型数据的输入和输出
子主题
子主题
实型数据的输入和输出
格式字符含义
printf()
f 以小数形式输出单精度或双精度数
E,e 以指数形式输出单精度或双精度数。
g 以%f,%e中较短的宽度输出,输出单精度或双精度数
scanf()或者scanf_s()
E,e 以指数形式输入单精度数。
if 以小数形式输入双精度数。
le 以指数形式输入双精度数。
f 以小数形式输出单精度
说明
使用scanf()函数输入实型数据时不能指明精度
在输出实型数据时,还可以指定输出的精度
字符型数据的输入和输出
使用scanf()函数和printf()函数对字符型数据进行输入输出
使用getchar()函数和putchar()函数对字符型数据进行输入输出
getchar()
putchar()函数
说明
用getchar()函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,而直接采用作为putchar()函数的参数
可以在Printf函数中输出刚接收的字符
数学库函数
常用
指数函数exp(x):计算e^x。如exp(2.3)的值为9.974182
指数函数exp(x):计算e^x。如exp(2.3)的值为9.974182
以e为底的对数函数log(x):计算Inx。如log(123.45)的值为4.815836
幂函数pow(x,y):计算x^y。如pow(1,3,2)的值为1.69
平方根函数sqrt(x):计算√x。如sqrt(4.0)的值为2.0
循环结构程序设计
引例:人口
#include<stdio.h>
#include<math.h>
int main()
{
int n = 13, year;
double number, rate = 0.02;
for(year=1;year<=10;year++)
{
number = n * pow((1 + rate), year);
printf("%2d年后,人数为%.2f亿\n", year, number);
}
}
#include<math.h>
int main()
{
int n = 13, year;
double number, rate = 0.02;
for(year=1;year<=10;year++)
{
number = n * pow((1 + rate), year);
printf("%2d年后,人数为%.2f亿\n", year, number);
}
}
使用for语句实现循环结构
可以应用于计算型的循环
for(循环变量赋初值;循环条件;循环变量增量)
循环体语句;
循环体语句;
示例:#include<stdio.h>
int main()
{
int i, n, sum;
scanf_s("%d", &n);
sum = 0;
for (i = 1; i <= n; i++)
sum = sum + i;
printf("由1到%d的和是:%d\n", n, sum);
}
int main()
{
int i, n, sum;
scanf_s("%d", &n);
sum = 0;
for (i = 1; i <= n; i++)
sum = sum + i;
printf("由1到%d的和是:%d\n", n, sum);
}
示例结构:1:循环变量赋初值i=1
2:循环条件为i<=n
3:循环变量增量i++
4:循环体语句sum=sum+i
2:循环条件为i<=n
3:循环变量增量i++
4:循环体语句sum=sum+i
for语句的一般形式中省略表达式1
格式:for(;表达式2;表达式3)
循环体语句
循环体语句
for(i=1;i<=n;i++)
sum=sum+i;=1
等价于
i=1;
for(;i<=n;i++)
sum=sum+i;
sum=sum+i;=1
等价于
i=1;
for(;i<=n;i++)
sum=sum+i;
for语句的一般形式中省略表达式2
格式:for(表达式1;;表达式3)
循环体语句;
循环体语句;
说明:省略表达式2时,表示不对循环进行控制,这时没有其他处理的话,会形成死循环。应避免这样使用for结构
for语句的一般形式中省略表达式3
for(表达式1;表达式2;)
循环体语句
循环体语句
说明:省略表达式3时,可以在循环体语句加入修改循环变量的值和语句
for(i=1;i<=n;i++)
factorial=fatorial*i;
等价于
for(i=1;i<=n)
{factorial=factorial*i;
i++;}
factorial=fatorial*i;
等价于
for(i=1;i<=n)
{factorial=factorial*i;
i++;}
for语句的一般形式中表达式1和表达式3也可以是逗号表达式
sum=0
for(i=1;i<=n;i++)
sum=sum+i;
等价于
for(sum=0,i=1;i<=n;i++)
sum=sum+i;
表达式sum=0,i=1为逗号表达式
for(i=1;i<=n;i++)
sum=sum+i;
等价于
for(sum=0,i=1;i<=n;i++)
sum=sum+i;
表达式sum=0,i=1为逗号表达式
for语句的一般形式中表达式2的只要非0,就执行循环体
for(;ch=getchar()!='\n';)
printf("%c",ch)
printf("%c",ch)
for语句的一般形式中循环体语句可以省略
for(i=1;i<=n;i++)
sum=sum+i;
等价于
for(i=1;i<=n; sum=sum+i;i++)
循环体语句sum+sum;放入表达式3中,与i++构成一个逗号表达式,此时循环体语句实际为一个空语句“;”
sum=sum+i;
等价于
for(i=1;i<=n; sum=sum+i;i++)
循环体语句sum+sum;放入表达式3中,与i++构成一个逗号表达式,此时循环体语句实际为一个空语句“;”
使用示例:#include<stdio.h>
int main()
{
int i;
float x, max;
for(i=1;i<=9;i++)
{
printf("请输入第%d个数:", i );
scanf_s("%f", &x);
if (i == 1)
max = x;
else
if (x > max)
max = x;
}
printf("10个数的最大值:%.0f", max);
}
int main()
{
int i;
float x, max;
for(i=1;i<=9;i++)
{
printf("请输入第%d个数:", i );
scanf_s("%f", &x);
if (i == 1)
max = x;
else
if (x > max)
max = x;
}
printf("10个数的最大值:%.0f", max);
}
字符
在for循环中,每次读入一个字符,根据字符的种类,选择不同的分支执行相应相应的运算。循环共执行10次,读入10个字符,相应的计数变量进行了计数
程序中使用字符输入函数getchar()读入字符,使用多分支if结构实现分支,用逻辑表达式判断字符的种类
使用while语句实现循环结构
while语句的基本语法
形式:while(表达式)
循环体
循环体
子主题
while循环使用示例
#include<stdio.h>
int main()
{
int i, sum;
i = 1, sum = 0;
while (i < 100)
{
sum = sum + i;
i = i + 1;
}
printf("sum=%d\n", sum);
}
int main()
{
int i, sum;
i = 1, sum = 0;
while (i < 100)
{
sum = sum + i;
i = i + 1;
}
printf("sum=%d\n", sum);
}
使用do-while语句实现循环结构
do-while语句的基本语法
形式:do
循环体
while(表达式)
循环体
while(表达式)
子主题
do-while循环使用示例
#include<stdio.h>
int main()
{
int i, sum;
i = 1; sum = 0;
do
{
sum = sum + i;
i = i +1;
} while (i <= 100);
printf("sum=%d\n", sum);
return 0;
}
int main()
{
int i, sum;
i = 1; sum = 0;
do
{
sum = sum + i;
i = i +1;
} while (i <= 100);
printf("sum=%d\n", sum);
return 0;
}
改变循环语句的跳转语句
break语句
当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句的后继语句。通常break语句总是于if语句一起配合使用,即满足条件时跳出循环。
示例:#include<stdio.h>
#include<math.h>
int main()
{
int n, m, i;
printf("请输入一个正整数:");
scanf_s("%d", &n);
m = sqrt(n);
for (i = 2; i <= m; i++)
if (n % i == 0)
break;
if (i > m)
printf("%d是素数!\n", n);
else
printf("%d不是素数!\n", n);
}
#include<math.h>
int main()
{
int n, m, i;
printf("请输入一个正整数:");
scanf_s("%d", &n);
m = sqrt(n);
for (i = 2; i <= m; i++)
if (n % i == 0)
break;
if (i > m)
printf("%d是素数!\n", n);
else
printf("%d不是素数!\n", n);
}
程序中结束for循环的条件有两个:一是i>m;二是break语句
若i>m,说明for循环正常结束,则n一定是素数
若遇到break语句,说明循环中条件n%i==0成立,n能被某个i整除,执行break语句推出循环,此时i<=m,n一定不是素数
continue语句
continue语句的作用是跳过循环体continue后面的语句,继续下一个循环。continue语句只能用在循环语句中,常与if语句一起使用
示例:#include<stdio.h>
int main()
{
int n, s = 0;
n = 1;
while(n<10)
{
s = s + n;
if (s > 5)
break;
if (n % 2 == 1)
continue;
n++;
}
printf("s=%d,n=%d\n", s, n);
}
int main()
{
int n, s = 0;
n = 1;
while(n<10)
{
s = s + n;
if (s > 5)
break;
if (n % 2 == 1)
continue;
n++;
}
printf("s=%d,n=%d\n", s, n);
}
区别:continue语句只是结束本次循环,并不终止整个循环的执行;而break语句的作用是强制终止整个循环程序
goto语句
语句标号是一个有效的标识符,使用时在语句标号的后面跟一个“:”出现在函数中某语句的前面。程序执行到goto语句时,会控制跳转到该语句标号处,达到控制循环的目的。
示例:#include<stdio.h>
int main()
{
int i, sum;
i = 1;
sum = 0;
loop:if(i<=100)
{
sum = sum + i;
i = i + 1;
goto loop;
}printf("sum=%d\n", sum);
}
int main()
{
int i, sum;
i = 1;
sum = 0;
loop:if(i<=100)
{
sum = sum + i;
i = i + 1;
goto loop;
}printf("sum=%d\n", sum);
}
注意:语句标号必须与goto语句处于同一个函数中,通常goto语句与if语句连用实现循环控制。在大型程序中由于goto语句存在不合理的使用,会使程序结构变坏,所以在结构化程序设计中,不建议使用goto语句
循环嵌套
使用for语句,while语句及do-while语句相互嵌套,构成的嵌套结构有以下几种
for语句中嵌套for语句:for()
{...
for()
{...}
}
{...
for()
{...}
}
for语句中嵌套while语句
for()
{...
while()
{...}
}
for()
{...
while()
{...}
}
while语句嵌套while语句
while()
{...
while()
{...}
...
}
while()
{...
while()
{...}
...
}
do-while语句中嵌套for语句
do
{...
for()
{...}
...
}while();
do
{...
for()
{...}
...
}while();
(5)do-while语句嵌套do-while语句 (6)while语句嵌套do-while语句
do while()
{... {...
do do
{... {...
}while(); }while();
... ...
}while(); }
do while()
{... {...
do do
{... {...
}while(); }while();
... ...
}while(); }
注意事项
外循环执行一次时,内循环要执行一轮。即外循环执行一次,内循环一直执行到条件不满足时为一轮;在执行外循环一次,内循环有一直执行到不满足时为第2轮;如此重复执行,直到外循环条件不满足时,整个循环嵌套结束
循环嵌套格式中的内外循环体不允许出现交叉,即外循环要完全包容内循环
循环嵌套时,内循环体中break语句和continue语句时,只影响包含他们的内循环,与外循环无关
示例
九九乘法表:#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for (j = 1; j <= i; j++)
printf("%d*%d=%d\t", j, i, j * i);
printf("\n");
}
}
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for (j = 1; j <= i; j++)
printf("%d*%d=%d\t", j, i, j * i);
printf("\n");
}
}
100以内的素数:#include<stdio.h>
#include<math.h>
int main()
{
int i, n, k, count = 0;
n = 2;
while (n < 100)
{
k = sqrt(n);
for (i = 2; i <= k; i++)
{
if (n % i == 0)
{
break;
}
}
if (i > k)
{
printf("%4d", n);
if (++count % 10 == 0)
{
printf("\n");
}
}
n++;
}
return 0;
}
#include<math.h>
int main()
{
int i, n, k, count = 0;
n = 2;
while (n < 100)
{
k = sqrt(n);
for (i = 2; i <= k; i++)
{
if (n % i == 0)
{
break;
}
}
if (i > k)
{
printf("%4d", n);
if (++count % 10 == 0)
{
printf("\n");
}
}
n++;
}
return 0;
}
典型的算法举例
递推法
迭代法
穷举法
循环程序设计示例
- 在所有三位整数中找出平方数中有连续的三位数是该数的本身的数。如250的平方是62500,250便是所要找的一个满足条件的三位整数:#include<stdio.h>
int main()
{
int x, t;
printf("i\tpower\n");
for(x=100;x<1000;x++)
{
t = x * x;
while (t != 0)
{
if (x == t % 1000)
{
printf("%d\t%d\n", x, x * x);
break;
}
else
t = t / 10;
}
}
}
数据类型运算符和表达式
引例
C语言的数据类型
基本类型
整型
字符·型
实型(浮点型)
构造类型
数组类型
结构体类型
共用体
枚举类型
指针类型
空类型
C语言的常量
直接常量
整型常量
实型常量
浮点数
小数形式
指数形式
字符型常量
常量
字符常量只能用单引号括起来,不能用双引号或其他括号
字符常量只能是单个字符,不能是字符串
字符可以是ASCII字符集中的任意字符
字符串常量
字符串常量是由一对双引号“”括起来的零个或多个字符序列
字符串常量可以使用空格字符,转义字符和其他字符,也可以使用汉字和文字字符
注意:字符常量和字符串常量在内存中的储存情况是不同的
符号常量
好处
增加程序的可读性:通过标识符就知道该常量的意思
提高程序的可维护性:通过符号常量使用修改常量很方便,只需在常量的定义修改即可
简化程序代码:通过符号常量可以简化复杂表达式的重复输入
方便数组的定义:可以将整型符号常量作为数组的长度
C语言的变量
变量的定义的定义和使用
变量的定义:在C语言中,所有的常量必须先定义后使用
变量的初始化:C语言允许在定义变量的同时对变量赋值,这个过程称为变量的初始化
变量的使用:使用变量时,应该先赋值后引用
整型变量
short int:短整型,2字节
int:整型,4字节
long int:长整型,4字节
unsigned short:无符号短整型,4字节
unsigned int:无符号整型,4字节
unsigned long:无符号长整型,4字节
实型变量
float:单精度型,4字节
bouble:双精度型,8字节
字符型变量
字符型变量的值是字符常量,即用单引号引起来的单个字符
字符常量在内存中只占用一个字节
C语言在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出
运算符和表达式
赋值运算符和赋值表达式
简单赋值运算符:最简单的赋值运算符就是‘=’,它的作用是将一个数值赋给一个变量
复合赋值运算符:在简单运算符前面加上算术运算符就构成复合赋值运算符:a+=x——a=a+(x)
赋值表达式
在C语言中,赋值语句属于表达式语句
注意:赋值运算符的左侧必须是一个变量
算数运算符和算数表达式
基本算数运算符
%是求余运算符
也包含加,减,乘,除等运算
自增,自减运算符
特殊运算符
++
++x,是先计算,后使用,即先将x的值自加1,然后将x的值赋给变量a
x++,是先使用,后计算,即先将x的值赋给变量a,然后再将x的值自加1
--:如上
注意:自减和自增运算符的操作对象只能是一个简单变量,不能是常量或表达式,如6--和(a+b)++都是错误的
算数运算符的优先级和结合性
单目运算符的优先级高于双目运算符
算术表达式:算数运算符,运算对象和括号连接起来的式子,运算对象可以是常量,变量和函数等
逗号运算符和逗号表达式
形式:表达式1,表达式2,表达式3...
逗号表达式的执行顺序是从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值
还有逗号运算符是双目运算符,其优先级最低是左结合的
并不是所有出现逗号的地方都是逗号表达式。如在变量说明语句中,以及函数参数表中逗号只是用于各变量之间的分隔符
求字节数运算符
sizeof(表达式)
运算符sizeof用于计算数据类型所占的字节数, 是一个单目运算符优先级高于双目运算符
数据类型转换
自动类型转换:不同类型的数据在一起运算时,编译系统会自动进行类型转换
强制类型转换:强制类型转换是采用强制类型转换运算符将某种数据数据类型强制转换成指定的数据类型
强制类型转换的注意事项
需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
强制类型转换是一种不安全的转换,如果是从高级类型转化为低级类型,则会损失数据的精度。
强制类型转换并不改变表达式中变量的类型和值
分支结构程序设计
引例
#include<stdio.h>
#include<math.h>
int main()
{
int a, b, c;
float area;
double s;
printf("请输入三角形的三条边长:");
scanf_s("%d,%d,%d", &a, &b, &c);
s = (a + b + c) / 2.0;
if (a + b <= c || b + c <= a || a + c <= b) {
printf("不构成三角形/n");
}
else
{
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形的面积是:%f\n", area);
}
}
#include<math.h>
int main()
{
int a, b, c;
float area;
double s;
printf("请输入三角形的三条边长:");
scanf_s("%d,%d,%d", &a, &b, &c);
s = (a + b + c) / 2.0;
if (a + b <= c || b + c <= a || a + c <= b) {
printf("不构成三角形/n");
}
else
{
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形的面积是:%f\n", area);
}
}
关系运算符,逻辑运算符,条件运算符
关系运算符和表达式
关系运算符:关系运算符是判断两个操作数的大小关系
注意
关系运算符都是双目运算符,其结合方向是左结合的
关系运算符的优先级低于算数运算符,但是高于赋值运算符
关系表达式
注意事项
注意区分运算符,=是赋值运算符,==是关系运算符
对实数进行相等判断可能得不到正确结果
关系运算符中可以出现赋值运算符
逻辑运算符和逻辑表达式
常用的逻辑运算符
!=:不等于
&&:并且
||:或者
示例:#include<stdio.h>
int main()
{
int a = 3, b = 3, c = 2, d;
printf("%d,", !a && !b && c);
printf("%d,", !a || !b || c);
printf("%d\n", a >= b && b > c);
d = c-- || (b = 6) && a++;
printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
return 0;
}
int main()
{
int a = 3, b = 3, c = 2, d;
printf("%d,", !a && !b && c);
printf("%d,", !a || !b || c);
printf("%d\n", a >= b && b > c);
d = c-- || (b = 6) && a++;
printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
return 0;
}
逻辑表达式
逻辑表达式的结果也是一个逻辑值”真“或者”假“,即为”1“或者”0“
条件运算符和条件表达式
条件运算符:条件运算符由“?”和“:”两个符合组成,用于一个三目运算符,需要三个操作数
条件表达式:表达式1?表达式2:表达式3 表达式1是否满足,:的意思为“或者”
示例:求两个数中较大的数(条件表达式):#include<stdio.h>
int main()
{
int x, y;
printf("请输入两个整数:");
scanf_s("%d,%d", &x, &y);
printf("两个整数的最大数为:%d\n", x > y ? x : y);
return 0;
}
int main()
{
int x, y;
printf("请输入两个整数:");
scanf_s("%d,%d", &x, &y);
printf("两个整数的最大数为:%d\n", x > y ? x : y);
return 0;
}
使用if-else语句实现分支结构
双分支if语句
形式:if(表达式)
语句1;
else
语句2;
语句1;
else
语句2;
示例:求两个数中较大的数(双分支if语句)#include<stdio.h>
int main()
{
int a, b;
printf("请输入两个整数:");
scanf_s("%d%d", &a, &b);
if (a > b)
{
printf("两个整数中的最大数为:%d\n", a);
}
else
{
printf("两个整数中的最大数为:%d\n", b);
}
}
int main()
{
int a, b;
printf("请输入两个整数:");
scanf_s("%d%d", &a, &b);
if (a > b)
{
printf("两个整数中的最大数为:%d\n", a);
}
else
{
printf("两个整数中的最大数为:%d\n", b);
}
}
单分支if语句
形式:if(表达式)
语句;
语句;
示例:输入一个数,输出该数的绝对值:#include<stdio.h>
int main()
{
float x;
scanf_s("%f", &x);
if(x<0)
{
x = -x;
}
printf("%f", x);
}
int main()
{
float x;
scanf_s("%f", &x);
if(x<0)
{
x = -x;
}
printf("%f", x);
}
if语句的嵌套
if(表达式1)
if(表达式2)
语句1;
else
语句2;
else
if(表达式3)
语句3;
else
语句4;
if(表达式2)
语句1;
else
语句2;
else
if(表达式3)
语句3;
else
语句4;
示例:输入3个任意整数,输出其最大值:#include<stdio.h>
int main()
{
int a, b, c, max;
scanf_s("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a > c)
max = a;
else
max = c;
}
else
{
if (b > c)
max = b;
else
max = c;
}
printf("max=%d\n", max);
return 0;
}
int main()
{
int a, b, c, max;
scanf_s("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a > c)
max = a;
else
max = c;
}
else
{
if (b > c)
max = b;
else
max = c;
}
printf("max=%d\n", max);
return 0;
}
流程图表示:
多分支if语句
形式:if(表达式1)
语句1;
else if(表达式2)
语句2;
.......
else if(表达式n-1)
语句n-1
else
语句n;
语句1;
else if(表达式2)
语句2;
.......
else if(表达式n-1)
语句n-1
else
语句n;
示例;输入x的值,按分段函数计算并输出y的值:#include<stdio.h>
#include<math.h>
int main()
{
float x, y;
printf("输入x的值:");
scanf_s("%f", &x);
if (x < 2)
{
y = 2 * x;
}
else if(x<=10)
{
y = 7 - 3 * x;
}
else
{
y = 1 - cos(x);
}
printf("y=%0.6f\n", y);
return 0;
}
#include<math.h>
int main()
{
float x, y;
printf("输入x的值:");
scanf_s("%f", &x);
if (x < 2)
{
y = 2 * x;
}
else if(x<=10)
{
y = 7 - 3 * x;
}
else
{
y = 1 - cos(x);
}
printf("y=%0.6f\n", y);
return 0;
}
流程图表示:
使用switch语句实现分支结构
形式:switch(表达式)
{case常量表达式1:语句1;break;
case常量表达式2:语句2;break;
...
case常量表达式n:语句n;break;
default:语句n+1;break;
{case常量表达式1:语句1;break;
case常量表达式2:语句2;break;
...
case常量表达式n:语句n;break;
default:语句n+1;break;
流程图表示
示例:输入年份,月份,输出该月份的日数:#include<stdio.h>
int main()
{
int year, month, days;
printf("请输入年,月:");
scanf_s("%d,%d", &year, &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
days = 29;
else
days = 28;
break;
}
printf("%d年%d月的天数是%d天\n", year, month, days);
}
int main()
{
int year, month, days;
printf("请输入年,月:");
scanf_s("%d,%d", &year, &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
days = 29;
else
days = 28;
break;
}
printf("%d年%d月的天数是%d天\n", year, month, days);
}
分支结构程序设计示例
判断闰年平年:#include<stdio.h>
int main()
{
int year, leap;
printf("输入年份:");
scanf_s("%d", &year);
if ((year % 4 == 0 && year && year % 100 != 0) || (year % 400 == 0))
leap = 1;
else
leap = 0;
if (leap)
printf("%d是闰年\n", year);
else
printf("%d不是闰年\n", year);
}
int main()
{
int year, leap;
printf("输入年份:");
scanf_s("%d", &year);
if ((year % 4 == 0 && year && year % 100 != 0) || (year % 400 == 0))
leap = 1;
else
leap = 0;
if (leap)
printf("%d是闰年\n", year);
else
printf("%d不是闰年\n", year);
}
解释:leap=1是闰年,leap=0是平年
自由主题
0 条评论
下一页