第一章
软件是为完成某些特定功能而编制的一到多个程序文件的集合。可以被连续执行的指令集合,称为计算机程序。程序是计算机指令的序列,编制程序的工作就是为计算机编制指令序列。是人和人相互交流信息不可缺少的工具。
1、程序语言的发展:机器语言(全是0和1)—十进制数和二进制数;汇编语言;高级语言主要做软件开发,特点是面向用户的语言。
2、软件开发的基本方法与步骤:①分析问题,建立数学模型②确定数据结构和算法③编制程序④调试程序
3、算法:算法是一个有穷规则的集合,这些规则确定了某类问题的一个运算序列。
基本特征有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
算法的表示—流程图:就是给定算法的一种图形解法。流程图又称为框图,它用规定的一系列图形、流程图及文字说明来表示算法中的基本操作和控制流程,其优点是形象直观、简单易懂、便于修改和交流。
4、结构化程序设计:①顺序结构:按照一定的规定依次进行②选择结构:会出现至少两种结构③循环结构
5、编码的实现:①编写源代码 ②将源代码编译成目标代码二进制 ③链接目标代码成为可执行程序 ④运行
6、调试程序:程序中最易出现的几种不同类型错误是语法错误、逻辑错误、开发错误和运行时的错误。
第二章
1、编程语言的基本组成:
①字符集:C语言的基本字符集包括:数字字符、拉丁字母、运算符、特殊符号和不可显示字符。
②标识符:由C语言字符集中的字母、数字或下划线组成,它的第一个字必须是字母或下划线,不能以关键字命名。
③关键字:auto-----声明自动变量、break-----表示中断,一般用来循环中判断是否满足条件然后中断当前循环、case----配合switch一起使用、char----字符型变量、const----常量、continue-----表示跳过其后面的语句,继续下一次的循环、default----默认、do----与while语句配合使用、double----双精度类型、else----常用来配合if一起使用、enum----用来声明枚举变量、extern----声明全局变量、float----声明变量的类型、for----循环语句、goto----无条件循环语句、if----判断语句用来判断语句是否满足条件、int----声明量的类型、long----声明长型的类型、register----声明为寄存器变量也为局部变量、return----返回语句、short----声明一个短整型变量、signed----将变量声明为有符号型、sizeof----用来获取变量的存储空间大小、static----静态变量、struct----结构体类型、switch----条件选择语句、typedef----类型重定义可以重定义类型、union----定义联共体、unsigned----定义为无符号的变量、void----声明函数为无返回值或无参数、volatile----将变量声明为可变的、while----循环控制语句。
④语句:组成程序的基本单位,每一位语句就是一条告诉计算机要执行某条特定操作的指令。
(1)选择语句:if,switch、(2)流程控制语句及循环语句:for,while,do_while、(3)转移语句:break,continue,return,goto、(4)表达式语句(5)复合语句(6)空语句
⑤标准库函数
2、一个完整的C程序应符合以下几点:
①C程序是以函数为基本单位,整个程序由函数组成。一个完整的C程序至少要有一个且仅有一个主函数,它是程序启动时的唯一入口。除主函数外,C程序还可包含若干个其它C标准库函数和用户自定义的函数,使C语言便于实现模块化的程序结构。
②函数是由函数说明和函数题两部分组成。函数说明部分包括对函数名、函数类型、形式参数等的定义和说明;函数体包括对变量的定义和执行程序两部分,由一系列语句和注释组成。整个函数由一对花括号括起来。
③语句是由一些基本字符和定义符按照C语言的语法规定组成,每个语句以分号结束。
④注释:(1)/* */可一行可多行、(2)// 只可一行。
第三章
1、数据在计算机中的表现形式
2、在编程语言中对数据进行分类
(1)基础的数据类型有:
int:整型,一般的会占4个字节,32位
float:浮点类型(单精度),一般的会占4个字节,32位 存储的数据应该是带小数的数据 1.2 13.5 7.0
char:字符类型,一般的会占1个字节,8位,会存储单个字符。A,B,a,b,.,+,-,(,), ’A’,’X’,’\n’ ’\t’
long:长整型,存储的数据量要多一点 一般的应该是4个字节
short:短整型,一般的应该是2个字节
double:双精度的浮点类型,8个字节。
①char的大小为一个字节
3、数据在编程语言中的表现形式:常量和变量
转义序列 | 字符 |
---|---|
\b | 退格 |
\f | 走纸换页 |
\n | 换行 |
\r | 回车 |
\t | 横向跳格 (Ctrl-I) |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
4、使用变量存储数据
5.数据的输入输出
- printf(“格式控制字符串”,输出表列)
- 格式字符串的一般形式为:
- [标志][输出最小宽度][.精度][长度]类型
-
格式字符
意 义 d或i输入十进制整数 o输入八进制整数 x输入十六进制整数 u输入无符号十进制整数 c输入单个字符 s输入字符串 f或e输入实型数(用小数形式或指数形式) - (2)格式化输出函数
- scanf("格式控制字符串",地址表列);
- 格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。
- 地址是由地址运算符“&”后跟变量名组成的。
- &是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。
- 字符型数据和整型数据可以相互赋值。
格式符意 义 d整型数据以十进制形式输出 o整型数据以八进制形式输出 x整型数据以十六进制形式输出 u整型数据以十进制形式输出 c字符的ASCll码数据,输出对应的字符 s输出字符串 f以“整数部分。小数部分”形式输出实型数据 e以[-]n.nnnnne±xx输出实型数据 g以f或e格式输出 -
第四章
-
1、表达式
-
(1)简单表达式:最简单的表达式只包含一个操作数:一个简单变量、字面量或符号常量。(2)复杂表达式:复杂表达是由多个更简单的表达式组成,表达式之间用运算符连接。(操作数可以是常量、变量或者是二者的结合)
-
2、运算符
-
(1)算术运算符:加法运算符、减法运算符、乘法运算符、除法运算符、取余运算符(2)赋值运算符
- (3)增量和减量运算符
- (4)关系运算符
- (5)逻辑运算符
- (6)条件运算符
- (7)数据类型强制转换运算符
- (8)特殊运算符:①长度运算符sizeof(求出运算对象在计算机中的内存中所占用的字节数量)
- ②取址运算符&
-
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2: 表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
说明:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
3、语句
*选择语句:if switch
*流程控制语句及循环语句:for while do-while
*转移语句:break continue return goto
*表达式语句
*复合语句
*空语句
-
第五章
-
1、用if语句设计选择结构程序
-
(1)C语言有两种选择结构:if语句,用来实现两个分支的选择结构;switch语句,用来实现多分支的选择结构
2、if语句: -
if语句的一般形式如下:
if(表达式)
语句1;
或者是:
if(表达式){
语句1;
}
说明:
【1】:if语句中的表达式可以是关系表达式,逻辑表达式,甚至是数值表达式,返回的是一个逻辑值,即真或假!
3、所有形式如下:
(1):单判断语句
if(表达式1)
语句1;
或者是:
if(表达式1){
语句1;
}
(2):双分支语句
if(表达式1)
语句1;
else
语句2;
或者是:
if(表达式1){
语句1;
}else{
语句2;
}
(3):多分支语句
if(表达式1)
语句1;
else if(表达式2)
语句2;
......
else if(表达式n)
语句n;
else
语句n+1;
说明:
【1】:整个语句可以写在多行上,也可以写在一行上;
例子:
if(x>0) y=1;else y=0;
【2】:if语句写在多行上,都是一个整体,属于一个语句。不要误认为if部分是一个语句,else部分是另一个语句。在系统中对if语句编译的时候,还要检查是
否有else语句,如果有else语句,会把它当做if语句的部分;如果没有else语句,则认为if语句已经结束!还要注意else语句不能作为单独语句来结束,它必须和
if语句配对使用,而且是和最近的if语句配对,采用就近原则!
【3】:if语句不加大括号,只对第一句代码有约束作用,后面的代码不在约束,会按照顺序往下执行;如果加上大括号会对括号里面的所有代码都有约束作用。
4、选择结构语句的嵌套
if语句的嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。
形式如下:
(1):在if语句中再嵌套if语句
if(表达式1){
if(表达式2){
语句1;
}
}
(2):在if语句中再嵌套双分支语句
if(表达式1){
if(表达式2){
语句1;
}else{
语句2;
}
}
(3):在if语句中嵌套多分支语句
if(表达式1){
if(表达式2){
语句1;
}else if(表达式3){
语句2;
}else if(表达式4){
语句3;
}else{
语句4;
}
} -
5、用switch语句实现多分支语句switch语句是多分支选择语句
switch语句作用:根据表达式的值来使流程跳转到不同的语句。
6、一般的形式如下:
(1):无break语句形式
switch(表达式){
case 常量1:语句1;
case 常量2:语句2;
case 常量3:语句3;
default: 语句4;
}
(2):有break语句形式
switch(表达式){
case 常量1:语句1; break;
case 常量2: 语句2; break;
case 常量3: 语句3; break;
default: 语句4; break;
}
说明:
1):switch语句后面的“表达式”,其值的类型应为整数型(包括字符型)【字符型也属于整数形式,按照ASCII码来存储到计算机当中】
2):switch语句下面的大括号是一个复合语句,一定要打上,不打则会报错!里面是case关键字和default组合的若干语句。case后面的必须跟一个常量,
或是常量表达式。被当做标号作用,用来标识一个位置。
3):没有break语句,是按照顺序依次往下执行;有break语句,符合哪一种情况就执行哪一种情况下的语句,之后马上退出整个switch语句。
4):switch语句的运行原理:在执行switch语句时,先计算switch后面的表达式的值,然后将它与各个case标号比较,如果与某一个case标号中的常量相同
,流程就转到此case标号的后面的语句。如果没有switch表达式相匹配的case常量。再检查有没有default语句,若有就执行default标号后面的语句,若没有则退
出整个switch语句。
5):各个case标号出现的次序不影响结果,可以先出现default语句,其他case语句可以打乱。
6):每一个case常量必须互不相同,否则会出现矛盾现象,重复定义系统报错!
7):在case语句下不需要加大括号,会自动执行case标号语句后面的所有语句!
8):多个case标号可以共用一组执行语句。如下:
case 'a':
case 'b':
case 'c':
printf("及格了!\n");break;
7、多分支选择语句嵌套:
(1):可以在switch中嵌套switch语句
switch(表达式1){
case 常量1:
switch(表达式2){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
}
break;
case 常量2:
语句3;
break;
}
8、if语句与switch语句综合嵌套使用
(1):可在if语句嵌套switch语句
if(表达式1){
switch(表达式2){
case 常量1:
break;
case 常量2:
break;
}
}
(2):可以在switch语句中嵌套if语句
switch(表达式1){
case 常量1:
if(表达式2){
语句1;
}else{
语句2;
}
break;
} -
9、无条件转向语句: C语言中的goto语句可以转向同一函数内任意指定位置执行
-
功能:goto语句无条件转向语句标号所标识的语句执行。它将改变顺序执行方式
-
(1)语句标号用标识符后跟冒号表示
-
eg:......
-
goto k;
-
......
-
k;
-
(2)goto语句与相应的语句标号必须处在同一个函数中,不允许跨越2个函数。
-
eg:在嵌套switch语句的内层switch语句中,利用break语句只能一层一层地退出,若采用goto语句,可以一次退出多层switch语句。
-
第六章
-
1、循环的基本概念
-
当型循环:while语句和for语句;直到型循环语句:do_while
-
2、while语句
(1)while语句的形式:
while(表达式) //表达式为真执行循环体;为假时跳过循环体。
循环体;
(2)while语句常称为“当型”循环语句。
(3)说明:
先判断表达式,后执行语句。
表达式同if语句后的表达式一样,可以是任何类型的表达式。
while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。
循环体多于一句时,用一对{}括起。
example:
i=1;
while(i<=100)
{putchar('*');
i++;}
如果没有大括号,就是一个死循环。
example:
输入一系列整数,判断其正负号,当输入0时,结束循环。
#include <stdio.h>
void main()
{
float x;
scanf("%f",&x);
while(x!=0)
{
if(x>0)printf("+");
else printf("-");
scanf("%f",&x);
}
}
注意:
表达式在判断前,必须要有明确的值;
循环体当中一般有改变条件表达式的语句;
while (表达式)后面没有分号。
3、do-while语句
(1)do-while的形式:
do
while(表达式);
(2)do while语句常称为“直到型”循环语句。
(3)说明:
先执行语句,后判断表达式,因此循环体至少执行一次。
第一次条件为真时,while,do-while等价;
第一次条件为假时,二者不同。
注意:
在if、while语句中,表达式后面都没有分号,而在do-while语句表达式后面必须加分号;
do-while和while语句相互替换,要注意修改循环控制条件。
4、for语句
表达式1:用于循环开始前为循环变量设置初始值。
表达式2:控制循环执行的条件,决定循环次数。
表达式3:循环控制变量修改表达式。
循环体:被重复执行的语句。
(2)如果表达式为真,执行循环体,如果为假,跳过循环体。
for(i=1;i<=100,i++)
sum=sum+i;
相当于
i=1;
while(i<=100)
(3)说明:
三个表达式都可以是逗号表达式;
三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。
语句中表达式省略的形式:
①for语句一般形式中的“表达式1”可以省略;
如:sum=0;i=1;
②表达式2省略,即不判断循环条件,循环无终止的进行下去;
如:for(sum=0,i=1;;i++)
③表达式3可以省略,但此时保证循环能正常结束。
如: for(sum=0,i=1;i<=100;)
④可以省略表达式1和表达式3,只有表达式2;
如:
⑤三个表达式都可以省略,如:
如:sum=0,i=1;
⑥循环体为空语句[while后面跟分号]
对for语句,循环体为空语句的一般形式为:
5、break语句和continue语句
(1)break:终止它所在的switch语句或循环语句的执行,break语句只能出现在switch语句或循环语句的循环体中
(2)continue:结束本次循环,即跳过循环体中continue语句后面的语句,开始下一次循环。
注:break不能直接用在if语句中,但可在循环中一起使用。
①continue语句只能出现在循环语句的循环体中
②若执行while或do_while语句中的continue语句,则跳过循环体中continue语句后面的语句,直接转去判别下次循环控制语句;若continue语句出现在for语句中,则执行continue语句就是跳过循环体中continue语句后面的语句,转而执行for语句的表达式3.
第七章
1、数组的基本概念:
所谓数组,就是按照一定的顺序排列,具有某种相同性质的同类型变量的集合。这些变量具有相同的名字和数据类型。数组中的各数据项称为数组元素,用数组名和下标名表示。
2、一维数组
①一维数组的定义
定义一维数组的形式为:
数据类型 数组名 [整形常量表达式];
说明:
*数据类型是数组中全体数组元素的数据类型。
*数组名用标识符表示,整形常量表达式代表数组具有的数组元素个数。
*数组元素的下标一律从0开始。
*编译程序为数组开辟连续的存储单位,用来顺序存放数组的各数组元素。用数组名表示该数组存储区的首地址。
注意:
定义数组元素个数的表达式是整形常量表达式,不能出现变量或者非整形常量表达式。
例如下列数组定义是正确的:
#define n 5
int a[n]; /*n不是变量,是符号常量,其值为5*/
int b[2+3]; /*2+3是常量表达式,其值为5*/
int c[10];
②一维数组的引用
引用数组元素的形式为:
数组名[下表表达式];
注意:
*定义时整形常量表达式与引用的数组元素的下标表达式是完全不同的概念。对数组定义:int a[5]; 这里整形常量表达式5表示a数组有5个数组元素。对数组元素的引用:a[3]=a[2]+a[5]; 这里下表表达式3和2均表示数组元素的下标。而a[5]是错误的数组元素引用,因为下表从0开始,所以数组元素的小于5,下表已经越界。
*系统不检查数组元素的越界,只能由自己掌握。下标越界会破坏其它变量的值,因此编程时一定要保证数组元素的下表不越界。
③一维数组的初始化
一维数组初始化的形式为:
数据类型 数组名[整形常量表达式]={初值1,初值2,初值3,...........};
初始化方法:
1.int a[4]={1,2,3,4};
数组中有若干数组元素,可在{ }中给出各数组元素的初值,各初值之间用逗号隔开。把{ }中的初值依次赋给各数组元素。表示把1,2,3,4依次赋给a[0], a[1], a[2], a[3]。
2.static int a[4]={1,2};
只给部分数组元素初始化。注意到关键字static,它表示a数组的存储类型为static(静态存储)。存储类型为静态存储的变量或数组的初值自动设置为0。即a[0]=1; a[1]=2; a[2]=0; a[3]=0.
3.int a[ ]={1,2,3};
初始化时,定义数组元素的个数的常量表达式可以省略。若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数。如上例,a数组有3个数组元素:a[0]=1; a[1]=2; a[2]=3。
④一维数组的应用
需求:输入100个数,输出它们的平均值和这些数当中所有大于平均值的数。
#define N 100
#include<stdio.h>
int main(void){
int k;
int a[N],s;
float av;
s=0;
for(k=0;k<N;k++){
scanf("%d",&a[k]);
s=s+a[k];
}
av=s/N;
printf("average=%f",av);
for(k=0;k<N;k++)
if(a[k]>av) printf("%d",a[k]);
return 0;
}
3、二维数组
①二维数组的定义
定义二维数组的形式为:
数据类型 数组名[整形常量表达式] [整形常量表达式];
数据类型是数组全体数组元素的数据类型;数组名用标识符表示;两个整形变量表达式分别代表数组具有的行数和列数。数组元素的下标一律从0开始。存储方式为按行存储。
②二维数组的引用
数组元素的形式为:
数组名[行下表表达式] [行下表表达式]
例如希望从键盘依次为数组元素输入数据,可以采用如下语句:
for(i=0;i<20;i++)
for(j=0;j<30;j++)
scanf("%d",&a[ i ] [ j ]);
③二维数组的初始化
二维数组初始化的形式为:
数据类型 数组名[整形常量表达式] [整形常量表达式]={初始化数据};
初始化方式:
1.分行进行初始化。例如:int a[2] [3]={ {1,2,3},{4,5,6} };
2.不分行的初始化。例如:int a[2] [3]={1,2,3,4,5,6}; //3个数字为一行
3.为部分数组元素初始化。例如: int a[2] [3]={ {1,2},{4} };
第一行只有2个初值,按顺序分别赋给a[0] [0]和a[0] [1];第二行的初值赋给a[1] [0].
4.可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维德长度可以确定第一维的长度。例如: int a[ ] [3]={1,2,3,4,5,6};
初始化数据为6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2.
省略第一维定义时,第一维的大小按如下规定:初值个数能被第二维正处,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。
④二维数组的应用
需求:实现行列互换问题
#include<stdio.h>
int main(void){
int i,j;
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
printf("互换前的数组为:\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%3d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("互换后的数组为:\n");
for(i=0;i<3;i++){
for(j=0;j<2;j++)
printf("%3d",b[i][j]);
printf("\n");
}
return 0;
}
4、字符数组与字符串
在c语言中,只能用一个字符数组来表示一个字符串。字符数组的每个元素占一个字节,字符数组中包含一个' \0 '字符,代表字符串的结尾。因而字符数组的元素个数,应该不少于被存储的字符串的字符数目加1.
下面以一段代码说明字符串变量的用法,代码如下:
#include<stdio.h>
#include<string.h>
int main(void)
{
char cNational [ ]="zhongguo";
char cCity[ 10]="北京";
char cEnglish[10];
char szResponse[100];
printf("中国的汉语拼音是%s,用英文表示出来是?\n", cNationa);
scanf("%s",&cEnglish);
if(strcmp(cEnglish,"china")==0){
printf("对的,你喜欢%s吗?\n", cCity);
}
else{
strcpy( szResponse,"你的英文不好!\n"); //调用string.h中声明的字符串拷贝库函数strcpy为字符数组赋值
printf("%s", szResponse);
}
return 0;
}
在C语言中,只能用一个字符数组表示一个字符串
①strlen字符串函数:
eg:#include<stdio.h>
#include<string.h>
int k=0;
k=strlen("1230");
printf("%d",k); /*打印字符串长度*/
②比较2个字符串大小:strcmp(字符串1,字符串2)
对2个字符串进行从左到到右逐个字符相比。
比较规则:按ASCII码值大小来比较,不同的字符或者遇到‘\0’为止,若全部字符完全相同,则认为相等;若出现不同的字符则以第一个不相同的字符的字符的比较结果为准;如果字符串1等于字符串2则返回值为0;如果字符串1大于字符串2则返回一个正整数;如果字符串1小于字符串2则返回一个负整数。
第八章
1、C语言数据类型:
①基本类型{整数型int;浮点型(单精度型float,双精度型double);字符型char}
②指针类型
③构造类型{数组,结构性struct,联合型union,枚举型enum}
④空类型void
2、枚举定义变量的方式:
方式一:
enum score { score , avgScore , sumScore};
enum score a , b , c ;
方式二:
enum score { score , avgScore , sumScore}a,b,c;
方式三:
enum { score , avgScore , sumScore}a,b,c;
枚举使用注意:
(1)枚举值是常量,不能是变量
(2)枚举元素本身由系统定义了一个表示序号的值:0、1、2.。。。。。可以这样访问
例:a = (enum score)1;//相当于 a = avgScore ;
(3)枚举元素不是字符常量也不是字符串常量,用的时候不能加单、双引号
3、指针使用注意:
(1)指针变量只能存储地址,所以在赋值时会以*p=100 等。
(2)int *num=&a;//正确用法
int *num;
*num=&a;//错误用法,&a、num本来就是存储地址,*num代表指向num地址的地址。
(3)"*"在定义和使用时作用大不相同:定义时int *相当于一个数据类型;在使用时,是访问p所在的存储空间。
(4)指针用在数组时,指向数组的首元素,指针可以像数组一样访问元素。
4、结构体
结构体是不同数据类型的集合。很多地方类似于数组。
结构体的形式:
struct 结构体名
{
结构体元素
};结构体变量定义和赋值方式:
方式一:
struct Person
{
int age;
char name[];
double weight;
};
struct Person p1 = {33,"Tom",100};
方式二:
struct Person
{
int age;
char name[];
double weight;
}p2 = {22,"Jerry",65.5};
方式三:
struct {
int age;
char name[];
double weight;
}p3 = {20,"Angle",55.5};
第九章
1、函数的分类:在C语言中的函数分为两类,一类是系统提供的标准函数,又称库函数。另一类是用户自己定义的函数。
2、函数的定义
函数类型 函数名称(形式参数表){
说明语句序列
可执行语句序列
}
3、函数的参数①有返回值的无参函数
②有返回值的有参函数
double add (double a,double b){
③无返回值的无参函数
int main(){
void wf();
printf("水仙花数是:\n");
wf();
return 0;
}
int wf(){
int i,j,k,n;
for(n=100;n<1000;n++){
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k){
printf("%4d\n",n);
}
}
printf("\n");
return 0;
}
④无返回值的无参函数
void jianfa (int a,int b){
void sorting(int a[])
{
int n,k,temp;
for(n=0;n<=9;n++){
for(k=0;k<9-n;k++){
if(a[k]>a[k+1]){
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
printf("从小到大的顺序为:");
for(n=0;n<10;n++){
printf("%4d",a[n]);
}
}
int main(){
printf("input 10 numbers with int type:\n");
int a[10],n;
for(n=0;n<10;n++){
scanf("%d",&a[n]);
}
sorting(a);
printf("\n");
return 0;
}