学院课程:c
算法
算法+数据结构=程序
算法顾名思义,做一个计算往往有多种方法
算法的特性
算法的表示
1.自然语言
2.传统流程图
3.结构化流程图 N-S
4.伪代码 就是写个大概的东西
用流程图表示算法
传统流程图的弊端
传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。
三种基本结构的特点
1.只有一个入口
2.只有一个出口
3.结构内的每一部分都有机会被执行到
4.结构内不存在”死循环“
用N-S流程图表示算法
用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章一样,自上而下地写下来。每一-行(或几行)表示-一个基本操作。它不用图形符号,因此书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法(即程序)过渡。
输入输出
printf输出
scanf输入
输入输出操作是由c标准函数库中的函数(库函数)来实现的.也就是在使用的时候要把头文件加上(不加上头文件,就没有库函数可以用)
优点是简化编译系统简化
增强通用性和可移植性
在%d中例如:%4d就会在后面空格
-号就是前面空格
.4%f可以收纳为小数点4位
作业:
字符函数:
输入:getchar 输出:putchar
putchar只能输出一个字符一次性
getchar是输入一个字符一次性
随机数
rand()的范围是(0,1)
srand是随机总值函数
srand(time(NULL))随机种子可以让rand每次不一样
随机数的计算:(大数-小数+1)+小数
选择结构
c语言有两种选择语句if,和switch
比较运算符和关系运算符
1.●用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。
2.●关系表达式的值是一个逻辑值,即"真"或“假”。
3.●在C的逻辑运算中,以"1"代表"真", 以“0"代表"假"。
1.用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式。.
逻辑运算符及其优先次序
比关系运算符的优先级低,比赋值运算符高
在&&要么双真,一真一假为假
条件运算符
max=当a大于b时则a否则b
讲了if跟之前学的一样
char *c字符串可以输入整数
%s可以输出字符串
char*是变量,值可以改变, char[]是常量,值不能改变。
if再次讲解
if括号内只要是一个非0数就是真,就可以往下运行
如果不为非零数就是假,非零为真,零为假
次方是pow(x,2)
绝对值是abs 双精度的绝对值是fabs
- #include<stdio.h>
- #include<math.h>
- intmain()
- {
- int a =3, b =-4, c, d;//为变量赋初值
- c =abs(a);//求a的绝对值
- d =abs(b);//求b的绝对值
- printf("%d\n%d\n", c, d);
- return0;
- }
函数名: log10
功 能: 对数函数log,以10为底
用 法: double log10(double x);
程序示例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double result;
double x = 800.6872;
result = log10(x);
printf("The common log of %lf is %lf\n", x, result);
return 0;
}
函数名: log
功 能: 对数函数log,以e(2.71828)为底
用 法: double log(double x);
程序示例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double result;
double x = 800.6872;
result = log(x);
printf("The common log of %lf is %lf\n", x, result);
return 0;
}
C语言中&&是啥意思
如果想写一个判断字符是否是小写字母的表达式如何写呢?
比如此变量定义为ch:是否可以写成: ‘a’<=ch’z’ 这样呢?
虽然我们从小的数学习惯让我们觉得这样写没错,但在C语言中这样写是错误的(即便编译没错),而正确的做法是将这个其实是两个条件的表达式(一个上限一个下限)分开写,并要求两个表达式同时满足即可
两个表达式很容易实现,即:’a’<=ch 和 ch<=’z’
那么如何要求两个都成立呢,这就可以说&&这个运算符了,它表示逻辑与的意思,即要求两边的表达式都为真,整体才为真
因此这个表达式完整的写法可以写成:
’a’<=ch && a<=’z’
逻辑或运算符 ||
如果我们想实现多个表达式,只要满足其中任意一个就可以的功能,该如何实现呢?
比如判断一个字符是不是字符(无论大小写都算)。
那么我们会写两个表达式:
’a’<=ch && a<=’z’ 以及 ’A’<=ch && a<=’Z’
那么这两个表达式,其实只要满足一个就可以符合条件,那么解决办法就是用逻辑与运算符||来链接即:
(’a’<=ch && a<=’z’) || (’A’<=ch && a<=’Z’)
即可实现,||运算符左右两边只要有一个满足条件整体表达式就成立。
C语言中->是什么意思
答:C语言中,->是指针才可以使用的访问结构体成员的运算符
比如一段程序中有一个结构体:
struct Data
{
int a;
int b;
}
struct Data A;
sruct Data *p=&A
此时我们定义一个struct Data类型的变量A,再定义一个指针类型p
如果通过变量名A访问结构体中的成员则则以用.的方式访问,比如为a赋值,则写成:
A. a=10;
如果用指针p来访问赋值,则可以写成:
p->a=10;
两者意义等价,第二种就是我们用到的->,可以理解为指向,左侧必须为指针!
因此,可以看到,->是C语言中结构体指针使用的一种指向运算符,与.的作用一样,用于访问结构体成员。不同的是.只能用于变量,->只能用于指针,这是两者的区别。
小练习
switch语句
每个case语句后必须接break跳出
switch后的数对应case后的数时,就运行这一行
操作符在操作数之前输出
char类型使用单引号,%c
在case四则运算中,使用/号时,除数不得为0,使用if语句进行判断.
语法结构
switch(整型表达式)
{
语句项;
}
那么语句项是什么呢?
//是一些case语句
//如下:
case 整形常量表达式:
语句;
在switch 语句中的break
#include <stdio.h>
int main()
{
int day = 0;
switch (day) //必须用整形表达式
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
return 0;
}
在switch语句中我们不能实现分支,就像上面的代码,输入几,就会从几开始执行到最后
因此,我们需要结合使用break来实现分支:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
在每个语句项后面加上一个break;
就可以只执行指定的语句,从而实现分支。
ps:
有时在有相同的操作时,我们可以只留下一个执行语句:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day) //必须用整形表达式
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
default 子句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句:
default:
可以写在任意位置,与case语句一样。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
————————————————
版权声明:本文为CSDN博主「蒲公英的吴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zijin555/article/details/125931377如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句:
default:
可以写在任意位置,与case语句一样。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 6:
case 7:
printf("休息\n");
break;
default:
printf("工作\n");
}
return 0;
}
像这样,case语句中没有匹配的项,就执行default语句。
switch语句规则
switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
1、只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则不能使用switch语句。
2、switch()的参数类型不能为实型 。因为switch后面只能带自动转换为整形(包括整形)的类型,比如字符型char,unsigned int等,实数型不能自动转换为整形。
3、case标签必须是常量表达式(constantExpression),如62或者’8’等。
4、case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。
5、在case后,允许有多个语句,可以不用{}括起来。
6、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
7、default子句可以省略不用。
switch语句格式解释
1.switch ----->启用当前switch语句
2.表达式------>一般接收具体的变量
3.表达式的类型必须为整型,如:byte,short,int,char
4.如果是jdk1.5以后,表达式的类型可以是"枚举"
5.如果是jdk1.7以后,表达式的类型可以是String类型 (String:是一个引用类型)
6.case语句---->需要将当前的case的值和switch中表达式进行比较,是否匹配
7.break语句—> 表示结束,中断 switch语句
8.default ---->case后面都不匹配,执行default
编程好习惯
在每个case语句后都加上一条break语句
在每个switch语句中都放一条default子句,并且在后边加上一个break语句
循环
for循环
for循环中三个表达式只能用分号隔开
括号内第一个条件是初始条件;
第二个是循环继续的条件;
第三个是循环每轮要做的动作;
for循环就想一个计数器,先给一个值,然后在到达哪个值之前都一直做哪个括号中的事情.
for循环后不能加分号
for循环三个表达式都可以省略
break:退出本层循环
continue:结束本次循环继续下一次
应用
while循环
可跟for循环平替
先判断条件再执行循环
while`,中文叫 当…时,其实就是当条件满足时就执行代码,一旦不满足了就不执行了
语法 while (条件) { 满足条件就执行 }
因为满足条件就执行,所以我们写的时候一定要注意,就是设定一个边界值,不然就一直循环下去了
*// 1. 初始化条件*
var num = 0;
*// 2. 条件判断*
while (num < 10) {
*// 3. 要执行的代码*
console.log('当前的 num 的值是 ' + num)
*// 4. 自身改变*
num = num + 1
}
如果没有自身改变,那么就会一直循环不停了
do while 循环
do while循环时直到型循环 先执行循环体,再来判断条件
至少执行一次再来判断条件
数组
批量用数组,但是必须同类型
数组分为:数值型数组,字符型数组
int cj【10】和flout num 【5】
这些都是数值类型
char str 【50】这是字符型数组
也可以分为一维数组,跟多维数组
例如:int cj 【56】【8】这是多维数组
数组声明:数据类型 数组名 【长度】
先定义后使用
数组赋值多个用括号括起来
跟c89,c99有所关系
c99可以用变量
c89不行
数组引用:数组名【下标】
从0开始,到长度-1.
一维数组的初始化