d=a>b
f=a>b>c
2注意:
5>2>7>8在C中是允许的,值为0
若a=0;b=0.5;x=0.3;则a<=x<=b的值为0
3“=”和“==”的区别
四逻辑运算符和表达式
1用法演示
a<=x&&x<=b
a>b&&x>y
a==b||x==y
!
a||a>b
2短路现象
五逗号运算符和逗号表达式
六自加,自减
第三章输入输出
一字符输出
1说明
格式:
putchar(c)
参数:
c为字符常量、变量或表达式
功能:
把字符c输出到显示器上
2举例
#include
main()
{intc;
chara;
c=65;a='B';
putchar(c);putchar('\n');putchar(a);
}
二格式输出函数
1说明
格式:
printf(“格式控制串”,输出表)
功能:
按指定格式向显示器输出数据
返值:
返回输出数据个数
2举例
例inta=3,b=4;
printf(“%d%d\n”,a,b);
printf(“a=%d,b=%d\n”,a,b);
输出结果:
34
a=3,b=4
三字符输入
1说明
格式:
getchar()
功能:
从键盘读一字符
返值:
返回读取的代码值
2举例:
#include
main()
{intc;
printf("Enteracharacter:
");
c=getchar();
putchar(c);
printf(“\n%c--->hex%x\n",c,c);
}
四数据输入函数
1说明
格式:
scanf(“格式控制串”,地址表)
功能:
按指定格式从键盘读入数据,存入地址表指定的
存储单元中,并按回车键结束
返值:
返回输入数据个数
2举例
例scanf(“%d”,&a);
输入:
10
则a=10
五顺序存储结构
1流程图
2复合语句,空语句
3举例:
编程,将华氏温度转换成摄氏温度,公式:
摄氏温度=5/9(华氏温度-32)
第四章选择程序设计
讲课引入:
顺序结构解决问题非常少。
举例
一if语句
1举例if(x>y)z=x;
If(x>y){z=x;x=x+1}复合语句
2一般形式:
3说明:
If关键字()必须有,{多条语句}
执行过程
4练习:
求x的绝对值
如果a>b交换a和b的值
5重点讲解:
通过举例的形式讲解复合语句
二if-else语句
1引入:
对于“如果x>0则y=x 如果x<=0,则y=-x ”可以写成两个if语句,对连个条件都判断,实际上没有必须,x>0就意味着x<=0。
实现功能“求绝对值。
能否把两条合成一条”
2语句形式
3说明
子句可以是一条或复合语句
Else不能单独使用
4执行过程
5输入一个数,比较两个数的大小;判断一个数是否是偶数
6练习:
输入一个数,判断是否能被3整除
三if-else-if语句
1多重判断
2语句形式
3说明
4执行过程
5举例:
根据输入学生的成绩,给出相应的等级
6练习:
商场打折
购物10件,按8折优惠
购物100件,按7折优惠
输入:
购买量;商品单价
输出:
客户应付金额
四if语句的嵌套
1举例
if(x>0)
{
If(y>0)
Printf(“x,y”);
Else
;
}
Else
{
If(y>0)
Printf(“x,y”);
Else
}
2else和if的匹配问题
If(n>6)
If(n<12)
;
Else
3举例:
输入年,月,判断有多少天;
五switch语句
1语句形式
2说明
Switch()中的表达式可以是整型,字符型,枚举型
Case后的值应该互不相同,之间有空格case10正确case10错误
Default可以有,也可以没有
3执行过程
4break
第五章循环结构
引入:
写程序求1*1+2*2+3*3=?
inta;
a=1*1+2*2+3*3;
printf(“%d”,a);
如果要求1*1+2*2+3*3+。
。
。
+100*100=?
毫无办法。
仔细观察:
重复操作作两个数的乘积以及将一个一个乘积加起来。
一概述
1何时采用循环结构:
重复做的事情
2对循环变量所做的三件事情
(1)赋值
(2)结束条件
(3)递增,递减变化,为下一次循环做准备
三while语句
1一般形式:
当型循环
2执行过程
3说明
4举例:
(1)求1到100的和值:
分析:
我们心算时,总是先求1+2=3然后计算3+3=6依次类推。
编程sum=sum+i;
5练习:
(1)求12+22+32+。
。
。
。
的和直到和的值大于等于1000为止的n的值。
(2)计算一个学生一年的费用的总和,并统计费用超过500元的共有几个月
四do-while语句
1一般形式
2执行过程
3说明
4举例:
(1)求阶乘
5练习
(1)输出100以内能被3整除的所有数
五while和do-while的比较
六for语句
1一般形式
2执行过程
3说明
4举例
(1)求10个数中的最大值
5练习
(1)求10个数中的最小值
七三种循环的比较及其优势
八break和continue
第六章函数
一库函数
1include命令
2标准库函数的调用
函数名(参数表)
二函数定义
1一般形式
2说明
(1)同一个文件中函数名唯一,只能有一个。
同一个函数中,形参唯一
Abs(inta,inta)错误
Abs(inta,intb)
不同函数中形参,变量命名可以一样
(2)函数不能嵌套定义:
一个函数中不能定义另一个函数
(3)无函数值,写void
(4)形参的只有定义,不需要赋值,
(5)形参是已知量,盒子里面已经有东西了
Abs(inta)
{
inta=10;错误
}
(5)多个变量定义,中间用“,”隔开,必须分别定义
Abs(inta,ntb)正确
Abs(inta,b)错误
3所在位置
(1)遵循原则:
必须先定义,后使用
(2)若先主函数,后自定义函数,需要在主函数前加声明
声明就是函数定义的头,末尾必须加分号。
若先自定义函数,后主函数,则不需要加声明
三函数的返回值
1一般形式
return(表达式);
return表达式;
2说明
(1)只能有一个return,并且只能返回一个值
(2)可以有,也可以没有return语句
(3)return一般是函数的最后一条语句。
(4)碰到return,函数就结束
3举例:
请在屏幕上输入15个星号
4练习:
编写函数求两个双精度之差的函数
四函数的调用
1一般形式
(1)若函数没有返回值:
函数调用是一条单独的语句
函数名(实参表);
(2)若函数有返回值:
函数调用一般是赋值语句;
变量=函数名(实参表)
2说明
(1)调用为一个语句,末尾必须有一个分号
(2)函数名必须一致
(3)实参和形参个数,类型必须一致
(4)参数传递相当于一条赋值语句
3程序的执行过程
五数据传递
1举例:
两个数的交换
2举例:
编写程序,求2个数的加,减,乘,除
3举例:
编写函数,求n的阶乘
4输入10个数,统计并输出正数,负数和0的个数
六程序的基本结构(模块化编程思想)
自定义函数()
{
完成某一个功能,没有输出
}
main()
{
变量定义,赋值;
函数调用;
输出结果;
}
七:
函数中参数传递问题
1值传递:
实参向形参传递的是内容,形参的变化不能引起实参的变化
2地址传递:
实参向形参传递的是地址,形参的变化可以引起实参的变化
实参:
取地址符号:
&变量main中其它地方不加
形参:
*变量表示内容自定义函数中所以用到形参的地方都加*
总结:
如果在自定义函数中,变化的量只有一个,通常采用return语句
如果在自定义函数中,变化的量不止一个,有两个以上,通常采用地址传递
3练习
1编写函数,用以求a被b除之后的余数
2编写函数,求x的b次方
3定义一个函数intcheck(intn,intd)如果数字d在整数n的某位中出现,则返回1,否则返回0
4定义一个函数dig(n,k)它返回整数n的从右边开始数的第k个数字的值
‘
第七章数组
一概念
1数组的引入:
以例子的形式给出10个儿童的体重,要求计算平均体重并打印出低于平均体重的数值。
用以前的知识,需定义10个变量,太麻烦,而且不能用循环。
解决方法答案是数组
2定义:
相同类型的数有序的排列
3特点:
(1)长度固定
(2)其元素必须同类型
二一维数组
1定义
类型名数组名【元素个数】
2说明
(1)例如:
火车,它由一节一节的车厢组成
火车有名字------数组名
车厢---------数组元素
车厢编号-----------数组元素的编号(下标),从0开始
(2)函数定义时【】中只能是常量或符号常量,不允许是变量
intn=8;inta[n];错误
#defineN13
inta[N];
(3)元素个数是常量表达式,其值只能是正整数
inta[3.5]错误
3数组元素的使用
(1)形式:
数组名【下标表达式】
(2)说明:
下标从0开始
(3)正确的使用形式
doublex[8];
x[0]x[j]x[i+j]
4注意:
(1)数组元素的赋值时逐个元素进行,不允许把一个数组作为一个整体赋给另一个数组
inta[5],b[5];a[5]=b[5];a=b错误
a[0]=5a[1]=5
5练习:
(1)定义inta[10]请对数组的a的第三个元素赋值8
(2)定义inta[10],b[10]请将b的第10个元素的值赋给a的第一个元素
(3)inta[5];a={2,3,4,5,6};是否正确
(4)inta[2];scanf(“%d,%d”,&a[1],&a[0],a);是否正确
(5)inta[10];
floati=3;
a[i]=10;是否正确
(6)inta(10)是否正确
(7)intn=3;inta[n];是否正确
(8)charname[0]intarray[-100]是否正确
(9)floatw[10.3]是否正确
6一维数组的初始化
(1)一般形式
(2)所赋初值小于元素个数,将自动给后面的元素补0
(3)所赋初值多于元素个数,将出错
(4)初始化时,元素个数可以省略,这时可以通过赋初值的多少来确定数组的大小
7编程用法:
(1)一维数组的使用都采用一个for循环实现eg。
赋值,输出,实现各种功能
(2)在函数的用法:
传递的是数组时inta[5]
实参:
数组名a
形参:
inta[];
8排序和查找
9举例:
inta[]={12,23,34,45,56,67,78,89,90,87}
{879089342312}
(1)编写函数,定义一个30个元素的数组,依次给数组赋值奇数,每行10个,并且逆序输出
(2)从键盘上输入10个学生的成绩,求出分数最高的学生的序号
if()
{
max=a[i];
b=i;
}
returnb;
(3)已知存放在a数组中的数不重复,查找和x值相同的元素的位置,返回位置
if(a[i]==x)
{
returni;
}
(4)将数组中的数按颠倒的顺序重新存放,
(a)能定义新的数组
intb[];
for(i=9;i>=0;i--)
b[9-i]=a[i];
(b)不能定义新的数组
循环一半,循环过程中交换
a[i]a[9-i]交换
(5)把第2题改成函数形式,输出一个函数,完成功能一个函数
三二维数组
1定义:
行列表格
2一般形式:
3说明
(1)【行】【列】
(2)先行后列
4练习:
(1)定义一个5行3列的二维float型数组
(2)inta[0][3]a[0][3]是否正确
(3)inti=3,j=4;
inta[i][j]a[i][j]是否正确
5二维数组的初始化:
分行赋值
(1)所赋值个数与数组元素个数相同
(2)每行所赋初值个数小于数组元素列个数,补0
(3)所赋行数小于数组行数,系统自动给后面各行的元素补0
(4)可以省略内层{},该方法容易出错
(5)可以省略行的个数,不能省略列的个数
(i)inta[][3]={{1,2,3},{4.5},{6,},{7}}
(ii)intc[][3]={1,2,3,4,5};
当初值个数能被第二维的列个数除尽时,所得的商就是第一维的大小
当初值个数不能被第二维的列个数除尽时,第一维的大小=所得的商+1
6练习:
(1)inta[2][3]={{5,6},{7,8}}得到的数组是?
560
780
inta[2][3]={5,6,7,8}得到的数组是?
567
800
(2)定义一个2行3列的二维整形数组,并按分行初始化的方式初始化全部元素为0
inta[2][3]={0};
(3)inta[][10];写法是否正确?
(4)floatf[2][]={1.1,.2.2}该初始化方法是否正确?
7二维数组的使用
1形式:
数组名【行下标】【列下标】
2doublew[4][5]
错误形式:
w[0,1]w[I,j]w[i+k,j+k]
正确形式:
w[0][1]w[i][j]w[i+k][j+k]
8编程使用
四字符数组
1定义及初始化
2输出以下图形:
*
**
**
**
*
3字符数组的引用
4字符串
(1)初始化:
charc[]={“Iamhappy!
”};或charc[]=“Iamhappy!
”;等价于
charc[]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’,’!
’,‘\0’};
(2)输入输出
逐个字符:
%C必须用循环
整个字符串:
%S字符串可以整体输入输出
5注意:
(1)%s输出时,intc【10】;printf(“%s”,c);是数组名
%s输出时,intc【10】;scanff(“%s”,c);是数组名,不要加&
(2)%s输入字符串时,空格或回车都作为输入数据的结束符而不能被读入
charstr[13];
scanf(“%s”,str);
若输入Howareyou?
则输出:
How而不是Howareyou?
6gets(字符串)和puts(str)
gets(字符串)方法是从终端键盘读入字符串(包括空格),直到读入一个换行符为止。
charstr[13];
gets(str);
若输入Howareyou?
则输出:
Howareyou?
7字符串处理函数
第八章指针与结构体
一指针的定义
1定义:
指针里面放地址
inta=8;
int*p;
p=&a;//注意:
指针赋值时候没有*;类型一致
p=a;错误
2初始化:
int*p=&a;
3指针的使用:
*p的用法
放在等号的左边:
指针p所指的存储单元(盒子,变量)
放在等号的右边:
指针p所指向变量的内容
二数组在指针中应用
chars[8]=“abcdefg”;
char*p=&s[0];
p=s;
p=&s[2];
*(p+1)
abcdefg
内容*p*(p+1)*(p+2)*(p+3)*(p+4)
p++p++p++
*s*(s+1)*(s+2)*(s+3)
地址pp+1p+2p+3p+4
数组s[0]s[1]s[2]s[3]
实参:
数组名
形参:
inta[]int*p
*p++(*p)++区别
*p++取*p的内容,然后地址加1
(*p)++取*p的内容,然后内容加1