第章:C语言概述
1C语言特点
1)C程序main()函数
2)C程序文件main()函数
C程序总main()函数开始执行
3)C程序基单位 函数
4)C函数基单位 语句
5) C程序语句必须 结束
6)C程序 * * 作注释开始结尾
7)C程序语句写行
8)C程序行写语句
:a10 printf(d\na)
9)C语言区分写 _
10)C语言没输入输出语句函数代
11)#编译预处理include包含语句
12)C识半角语言字符全角果想输出汉字必须函数括起
第二三章:数类型运算符表达式标准输入输出
1 C程序标识符 字母 数字 划线 组成第1字符必须 字母 划线____
2 常量
整型:三种表示形式:a)十进制整数例:12b)八进制整数例:012c)十六进制整数0258387503570x35b6945L
实型:两种表示形式:a)十进制数形式例:123456b)指数形式例:1e323e31367950584510005e5124e10125E2
注意:1)E指数部分必须整数
2)字母Ee前必须数
3)字母Ee前数字间空格
字符型: ’括号括起单字符
1)普通字符:’a’’B’’’’’’#’’’
2) 转义字符:’\n’ ’\t’ ’\r’ ’\b’ ’\\’ ’\’’ ’\’
3) \加1~3位八进制表示字符(范围0~377)’\54’’\127’ ’\07’
\x加1~2位16进制表示字符’\x54’’\xa7’ ’\xaf’
字符串型: 括号括起字符c语言动面加’\0’
This is a mapbdWQ\\hm\bab\’89\4A\tOU
符号常量:#define PI 314
#define EOF (1)
3 变量包含五素类型名称容址存储类型
4填写表
类型
表示
占字节数
(视系统定)
表数范围/效位数
输出格式
整型
Int
2
32768+32767
d o x
符号整型
unsigned
2
0~65535
u o x
长整型
Long
4
2147483648 +2147483647
ld lo lx
单精度浮点型
Float
4
f e g
双精度浮点型
Double
8
lf f e
字符型
Char
1
0~255
c
字符串型
char
N
n
s
5 类型数进行混合运算时数转换方式两种:动转换强制类型转换中前种转换方式规:低类型转换成高类型赋值号右边类型转换成左边类型
6 printf(格式控制输出列表)
1) 格式控制包括:原样输出字符格式符转义字符
格式符包括(doxXufeEgGcsp)
2) 输出列表常量变量表达式输出值项间分隔
3) 格式控制输出列表类型项数相
4) 指定宽度mmn
A) m表示输出总宽度实际宽度
B) n表示四舍五入输出数位数表示取字符串左端n字符
printf(73f54s5905327abcderf)
5) 加Ll:输出long型double型
6) 加减号:左齐
7) 加0:左边补0
7 scanf((格式控制输入址列表)
1) 格式控制包括:格式符原样输入字符
2) 址列表定址:普通变量址字符串数组名(首址)
3) 输入项间空格Tab键回车分隔
4) 格式符前加l表示输入长整型数(ldlolxlu)double数(lfle)
5) 格式符前加数字m指定输入数宽度指定精度mn
:scanf(3d4d&a&b)
6)加*m表示跳(丢掉)m列
:scanf(4d*3d4d&a&b) (分输入12 345 67123456789)
7)scanf()输入字符串时遇空格输入结束
8 算术运算 (+*++)
1)两整数相结果整数两实数相结果double实数
:508 值:__6_____ 508 值:___6125____
printf(df\n508508) 结果_______
2) 取余运算适整数余数符号数符号相
:508 值:_______ 508 值:_______
508 值:_______ 508 值:_______
3)增减运算
A)++ii:变量值先加1减1然新值进行运算
B)i++i:变量先原值参运算然值加1减1新值表达式语句生效:
main()
{int i3jk
ji++kii++
printf(ddd\nijk)
}
执行i3j(i++)+(i++)+(i++)i值___6____j值___9____
执行i3j( ++ i)+(++i)+(++i)i值___6____j值___18____
C)++运算变量常量表达式
D)注意区普通变量增数组指针变量结构数组指针变量增减意义
:int a3b[5]*pb
a++p++意义
4)算术运算优先级++ * +
9 赋值运算(+*…)
a) 赋值号左边必须变量右边常量变量表达式
b) 赋值变量值变新赋值原值掉法恢复
c) 赋值运算结合性右左
:执行a10 a+aa*aa值:________
a5执行a+a*a3a值__________
4)区a10aa10~aa<<2
10 关系运算(><>< )
a) 关系运算结果:01
b) 关系运算非零数成1
c) ><><优先级高
11 逻辑运算(&&||非)
a) &&:两数1’结果1
b) ||:两数0’结果0
c) 非:0非1 1非0
d) 优先级:高&&居中||低
e) 注意短路现象
12条件运算(式1式2:式3)
1) 条件运算优先级仅高赋值运算逗号运算
2) :x4y6zx>yx+yxyz值________
x4y6zx+5>yx+yxyz值________
x4y6z5z+x+5>y+3x+yxyz值________
13逗号运算(式1式2…式n)
1) 次计算表达式值表达式值作整逗号表达式值
2) 逗号运算优先级低
:表达式(x(a2a+7)b5))值________
a5执行语句xa+7b5 x
3) 逗号表达式表达式构成新逗号表达式
:表达式(x2*5x*5)x+5值
4) 出现方作逗号运算符(intprintfscanf)
:printf(dd\n(xyz)z)
14sizeof()运算符
1)计算类数占存储空间字节数
2)括号常量变量类型说明符等
int ab[20]char *pabcdefghi
sizeof(5)sizeof(52)sizeof(a’)sizeof(abcde)
sizeof(a)sizeof(b)sizeof(p)
sizeof(char)sizeof(double)sizeof(strucu student)
15运算优先级
1级()[ ]>
2级单目运算~*&++ 右左
34级算术运算:*+
5级移位运算:<< >>
左移位等该数*2右移位等该数2取整
67级关系运算:><><
8910级位运算:&位^(异)|位
先化二进制进行位运算中异算法两位相0两位相异1
1112级逻辑运算:&&||
13级条件运算:式1?式2:式3右左
14级赋值运算:+*结合性右左
15级逗号运算:式1式2… 式n
第四章:选择结构
特注意:C语言中非0表示逻辑真0表示逻辑假
C语言构造类型没逻辑类型
关系运算符号:注意<写法区(考试重点)
if面语句请括号
If(a) if(a)表示什意思
1单分支:if (表达式)
语句
功:先计算表达式值1执行语句然执行续语句
0直接执行续语句
2双分支:if (表达式)
语句1
else
语句2
功:先计算表达式值1执行语句1然执行续语句
0执行语句2然执行续语句
说明:1)应if语句成条语句分两部分写两行缩
2)语句包含条时{}括起组成复合语句
3)分支双分支构成
4)else总if结合
5)分支形式种构成if…else嵌套
6)分支单分支完成
7)条件表达式中运算&&&&前面式子值0运算&&面式子:
main()
{int abk
a
b
结果
1
5
5 0
4
5
4 3
4
0
3 1
if(++a<0&& b printf(dd\nab)
else
printf(dd\nba)
printf(dd\nab)
}
3分支:if (表达式1)
语句1
else if (表达式2)
语句2
else if (表达式3)
语句3
else
语句4
4分支:switch (表达式)
{case 常量表达式1:语句1
break
case 常量表达式2:语句2
break
……
case 常量表达式n:语句n
break
default 语句n+1
}
1)功:先计算表达式值case常量表达式相时进入相default中进入进入序执行遇break退出switch语句
2)default语句位置先
3)表达式结果整型值字符值case面定整型常量字符常量
表达式0453+250A’b等i+3abcd等
例:main()
{int a
scanf(d&a)
switch(a3)
{case 1 a+1
case 2 a+2
case 3 a+3
case 4 a+4
case 5 a+5
default a+10
}
printf(ada)
}
4)写出列程序结果
main()
{int xy
scanf(d&x)
输入x值
Y值
5
1
0
0
4
1
y1
if (x<0)
if (x0)
y0
else
y1
printf(d\ny)
}
第五章:循环结构
1while循环
while (表达式)
循环体
2do…while循环
do {
循环体
}
while (表达式)
3for循环
for (表达式1表达式2表达3)
循环体
4说明
1)理解三种循环执行程
条件1执行循环体条件0退出循环执行续语句
2)整循环语句作语句写成两行注意缩
3)注意if语句区:条件表达式if语句判断执行次循次判断执行
4)注意简易方法分析循环
5)注意if语句连时分析
6)理解双循环执行程
7)进入循环前注意某变量赋初值:求s0求积n1排序求公约数等
8)条件表达式中运算&&&&前面式子值0运算&&面式子:
main()
a
b
结果
7
7
8
6
8
4
{int a5b8
while(++a>7&&b<7)
printf(dd\nab)
printf(dd\nab)
}
5break:①结束整循环
②跳出循环跳出外层循环
③循环switch语句
6continue结束次循环开始次循环
7程序举例:
1)判断数否素数输出 100~200间素数数(例5758)
2)计算∏值(见例54p100)
3)计算级数值(见题58P113)
4)求阶n
第六章:数组
数组
维数组
1定义意义
格式:数类型 数组名[整型数]
:int a[10]
意义:定义10变量(元素)变量存放整数
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
说明:标0开始定义时标整型数整型数表达式符号常量变量
:#define N 10
int a[10] score[N]b[4+6]
2赋值:
1)直接赋值 a[0]6 a[1]5 a[2]a[0]+a[1]
2)定义时赋值
int a[10]{75389121064}
float b [20]{658946}
注意:A)定义时赋初值元素值确定赋值部分余元素值0\0’
B)省略标 int a[ ]{75389121064}
C)赋值数标数否系统会报错
D)int a[10]{ }int a[10]{75 912 }
3)键盘赋值:scanf(d&a[0])(循环元素赋值)
3输出:数值数组必须单独输出printf(da[0])
4数组存储:元素先序存储数组名表示首址常量定义赋值
5注意区:定义时赋值非定义时赋值
:int a[10]{75389121064}
a[10]{75389121064}(错误)
6例题:
1)找出列数值输出(三种方法编程)
3 2 5 9 6 4 7 10 8 1
2)输入10整数找出值输出值位置
3)键盘输入10整数输出计算均值
4)键盘输入10整数存入数组中然数倒置输出
5)列数排序输出(分选择排序泡排序直接交换排序编程)
3 8596210714
二字符数组
1字符数组作:存放字符串(string)字符串双引号括起串字符面动加’\0’ABCDEStudent This is a map
2字符数组定义意义
格式:数类型 数组名[整型数]
:char s[10]
意义:定义10变量(元素)变量存放字符
s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]s[9]
3赋值:
1)直接赋值 s[0]’A’ s[1]’m’ s[2]’7’
2)定义时赋值
char s[10]{A’’B’’C’’D’’E’’F’’G’’H’’I’’’’\0’} *需手工加’\0’*
char s[10]{ABCDEFGHI}
char s[10]ABCDEFGHI
注意:定义时赋初值元素值确定赋值部分余元素值0\0’
3)键盘赋值:
scanf(c&s[0]) *循环元素赋值接收意字符*
scanf(ss) *面写数组名输入时空格回车Tab键作结束字符串动加’\0’*
gets(s) *输入时回车键作结束字符串动加’\0’*
strcpy(sABCDE)
4输出:
printf(cs[i]) *循环输出*
printf(ss) *整体输出面写数组名遇’\0’结束*
puts(s) *整体输出面写数组名遇’\0’结束输出完换行*
5数组存储:元素先序存储数组名表示首址常量定义赋值
6字符串处理:前遍
7例题
1)输入字符串然输出(三种方法输入输出ABCDEFGIHJ)
2)输入句英文统计出英文字符数
3)输入段文字中写字母转换写然输出
4) 输入行字符统计中字母数字字符数
5) 输入行字符串复制字符数组中
6 ) 输入两字符存入St数组中t连接s面
三字符串处理函数
1输入字符
格式:cgetcher() scanf(c&c)相
功:键盘接收字符存变量C中接收意字符
2输出字符
格式:putchar(c)
功:C中字符显示屏幕
:putchar (A’) char c’A’ putchar(c)
3输入字符串
格式:gets(s)
功:接收字符串存入数组s中输入时回车键作结束字符串动加’\0’
4输出字符串
格式:puts(s)
功:数组s中字符串输出屏幕遇’\0’结束输出完换行
5求字符串长度
格式:strlen(s)
功:返回字符串含字符数(长度)’\0’记
:char s[50]ABCDEF
strlen(s) 结果:6
strlen(This is a map) 结果:14
6字符串复制
格式:strcpy(st)
功:数组t(源)中字符串复制s(目标)中
:char s[20]t[20]ABCDE
strcpy(st)
strcpy(sstudent)
说明:源定字符串变量目标字符串变量字符串常量
7字符串连接
格式:strcat(st)
功:字符串t连接字符串s
:char s[50]abcdet[20]m123
strcat(st) 结果:abcdem123
strcat(sxyz) 结果:abcdexyz
说明:源定字符串变量目标字符串变量字符串常量
8字符串较
格式:strcmp(st)
功:st中字符较s返回正整数n s返回负整数n相等返回0
:strcmp(abcfabcdefg) 结果 2
strcmp(abcdabcdefg) 结果101
strcmp(ABCDEABCDE) 结果 0
说明:两字符串字符串变量字符串常量
9说明:
getcher()putchar(c)gets(s)puts(s)包含stdioh中
strlen(s)strcpy(st)strcat(st)strcmp(st) 包含stringh中
10例:
意输入两字符串存入a中存入b中然输出
四二维数组
1定义意义
格式:数类型 数组名[m][n]
:int a[3][4]
意义:定义3行4列3*4变量(元素)变量存放整数
a[0][0]a[0] [1]a[0] [2]a[0] [3]
a[1][0]a[1] [1]a[1] [2]a[1] [3]
a[2][0]a[2] [1]a[2] [2]a[2] [3]
2赋值:
1)直接赋值 a[0][0]6 a[0][1]5
2)定义时赋值
int a[3][4]{123456789101112}
int a[3][4]{{1234}{5678}{9101112}}
int a[][4]{{123}{56}{9}}
注意:A)定义时赋初值元素值确定赋值部分余元素值0\0’
B)省略第标 int a[ ][4] {12345678910 }
3)键盘赋值:scanf(d&a[0][0])(输入双循环元素赋值)
3输出:数值数组必须单独输出双循环输出元素
printf(da[0][0])
4数组存储:行序存储数组名表示首址常量定义赋值
:main()
{int a[3][4]{123456789101112}ij
for(i0i<3i++)
for(j0j<4j++)
printf(d a[i][j])
printf(\nu a)
}
5例
1)编程:求5行5列矩阵角线元素
2)编程:4行4列矩阵转置
3)某班30四门课程语文数学英语专业课编程输入成绩求总分均分科科分
五二维字符数组
1定义意义
格式:数类型 数组名[m][n]
:char s[3][10]
意义:定义3行10列3*10变量(元素)变量存放字符
行存放字符串存s[0]s[1]s[2]中
s[0] s[0][0]s[0] [1]s[0] [2]s[0] [3]……s[0] [9]
s[1] s[1][0]s[1] [1]s[1] [2]s[1] [3] ……s[1] [9]
s[2] s[2][0]s[2] [1]s[2] [2]s[2] [3] ……s[2] [9]
2赋值:
1)直接赋值 s[0][0]’A’ s[0][1]’B’
2)定义时赋值
int s[3][10]{A’’B’’C’’\0’}
int s[3][10]{ABCXYZMNOPQ}
int s[][10]{chismchangechankchar check }
3)键盘赋值:
次输入字符:scanf(c&s[0][0])
s[0][0]getchar()
次输入字符串:scanf(ss[0])
gets(s[0])
3输出:
次输出字符:printf(c s[0][0])
putchar(s[0][0])
次输出字符串:printf(ss[0])
puts(s[0])
4例
1)输入列五字符串排序输出
chismchangechankchar check
第七章 函数
1函数定义
1) 函数定义格式
类型 函数名(形参列表) *函数首部*
{语句组 *函数体*
return 式子
}
2)类型:指函数返回值类型intfloatcharlongvoid…
中int型省略
3) 形参列表:子函数调函数接收数变量(等赋值左边)形参说明类型分隔没形参
4) 函数体:完成相应功
2函数调:
1)格式:函数名(实际参数)
2)说明:实际参数函数传递子函数数等赋值右边数变量式子
3)调形式:
①函数作单独行语句进行调mj(ab)
printf(…)
②函数作表达式部分 xmj(ab)
nsqrt(x)
③函数作函数参数进行调:printf(f\n mj(ab))
printf(f\n sqrt(x))
3函数返回:函数返回return返回执行函数尾动返回调函数函数返回值时须函数定义void型
4函数说明:
A)般子函数应写前面函数写面果函数定义调应先进行说明正确调
B)说明方法:定义时函数首部相似加分号省略形参int型函数说明float mj(float afloat *b)
float mj(floatfloat *)
C)说明位置:函数部外部
5函数运行程:
运行函数前部→调子函数→运行子函数→返回函数→运行函数部
6函数参数传递(特注意函数子函数中变量名意情况)
1)赋值调:赋值调时函数实参值复制份传递形参进行单传递实参常量变量表达式
2)传址调:传址调函数调函数变量址传子函数中调语句采swap(&a&b)传递存址子函数参数般指针型swap(int *aint *b)
7数组调
1)维数组 int a[10]{ 12345678910}
①调时般传递数组名数组子函数fun(a10)
②子函数首部形式:fun(int a[]int n)fun(int *aint n)
种形式子函数指针指函数首址
2)二维数组 int a[3][4]{123456789101112}
①调时般传递数组名行数子函数fun(a3)
②子函数首部形式:fun(int a[][4]int n)fun(int (*a)[4]int n)
3)字符串数组般传递数组名
8函数嵌套
1)意义:函数中调函数函数嵌套
main()调a()函数a()函数调b()函数 b()函数调c()函数…
2)函数递调:
函数身调身main()调a()函数a()函数调a()函数…
9局部变量全局变量
1) 局部变量:函数定义函数块定义函数块效退出函数块时动释放定义初值定
2) 全局变量:定义函数外变量定义开始程序文件结束变量直效初值0
3) 分析列程序运行结果
练1 练2
int m13 main()
int fun2(int xint y) {int a3b2c1
{int m3 c++b
return(x*ym) b*a+c
} {int b5c12
cb*2
main() ac
{int a7b5 printf(dddabc)
printf(d\nfun2(ab)m) a+c
} }
printf(ddd\nabc)
}
10变量存储类型
动态存储 动变量:auto
1)变量存储类型 寄存器变量register
静态存储 静态变量static
外部变量extern
2)特点
名称
表示
初值
函数结束存储空间
特点
动变量
auto
定
动释放
默认auto变量
寄存器变量
register
定
动释放寄存器
存放cpu寄存器中cpu寄存器够时转auto
静态变量
static
0’\0’
释放
次进入进行次定义初始化
外部变量
extern
0’\0’
释放
1)外部变量进行说明
2)面定义变量提前
3)程序文件间变量引
11 程序举例
P184185:题13911
第八章:指针
指针基知识
引例:int abx[10]{12345678910}*p*q
通列程序变量名称容址
#include
#define N 10
main()
{int x100y200a[N]{12345678910}*p&a*qxi
printf(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n x y ) *显示xy名称*
for (i0i
printf(\n6d6dxy) *显示xy容*
for (i0i
printf(\n6u6u&x&y) *显示xy址*
for (i0i
}
1指针变量:定义时带*号变量存放变量址种变量称指针变量
指针变量存放变量址说指变量
2指针定义方式意义
类型 *变量名
:int a5b10*p&a*q&b
float mn*x
char s[10]ABCD*ch
int *p[5] 意义:
int (*p) [5] 意义:
int **p1 意义:
指针变量六属性:
指针变量名称类型容址存储类型指针变量指容
3指针赋值(赋值画指图)
1) 变量址赋指针变量:int a*p p&a
2) 数组名赋指针变量:float a[10]*x xa
3) 指针变量赋指针变量 :int a10*p&a*q qp
4)赋空值:(0’\0’NULL):char *c cNULL
5)赋值形式:定义时赋值 int a*p&a
定义赋值 p&a
6)注意:指针变量值存中址数值表达式指针变量赋值指针变量存放类型变量址
:int *p
p1000 p400+1500 (错)
char c p&c (错)
4指针引:取值运算符*存取指变量值
:*p5 *x4565
b*p+*x printf(d d\n*p*x)
5说明:
1)注意区定义时*p引时*p
int *a
*a8
2)类型指针变量占存储空间2字节(存址0~65535)
6例键盘输入两整数交换值输出
二指针数组(数组首址某元素址指针指针数组建立联系)
1维数组: int a[10]{2468101214161820}*pa
容:a[0]~a[9]p[0]~p[9]
*a*(a+0)~ *(a+9) *p*(p+0)~ *(p+9)
址:&a[0]~&a[9]&p[0]~&p[9]
a (a+0)~ (a+9) p (p+0)~ (p+9)
2指针运算(指针运算前必须先指针指数组)
指针加(减)整数结果指该数组元素
指针增(减)结果指该数组()元素
两指针相减结果相距元素数
3二维数组指针:
1)二维数组转化维指针
int a[3][4]{24681012141618202224}*pa
容:a[0][0]~a[2][3]p[0]~p[11]
**a*(*(a+0)+0)~ *(*(a+2)+3) *p*(p+0)~ *(p+11)*(a[i]+j)*(a+i)[j]
:a[1][2]表示:*(p+7)p[7]*(*(a+1)+2)*(a[1]+2)*(a+1)[2]
址:& a[0][0]~&a[2][3]&p[0]~&p[11]
a (a+0)~ (a+2) *a *(a+0)+0~* (a+2)+3p (p+0)~ (p+11)
2)二维数组a[n][m]转化二维指针:建立行指针(*p)[m]
3)二维数组a[n][m]转化二维指针:建立指针数组*p[n]
已知int a[4][5]{1 2 3 4 56 7 8 9 1011121314151617181920}
数组a[n][m]
维指针p
行指针(*q)[m]
数组指针*r[n]
int a[n][m] *p (*q)[m] *r[n]
赋值
pa
qa
ra(赋值错误)
r[0]a[0]
r[1]a[1]…
a[1][2]
p[6]
q[1][2]
r[1][2]
*(a[1]+2)
*(p+6)
*(q[1]+2)
*(r[1]+2)
(*(a+1))[2]
(*(q+1))[2]
(*(r+1))[2]
*(*(a+1)+2)
*(*(q+1)+2)
*(*(r+1)+2)
4例题:
例1:种方法显示维数组容(址)(4种方法)
2468101214161820
例2:种方法显示列二维数组容(址)
int a[4][5]{1 2 3 4 56 7 8 9 1011121314151617181920}
main()
{
int *p(*q)[5]*r[4]ij
pa
qa
for (i0i<4i++) *ra赋值*
r[i]a[i] 行址
for (i0i<4i++)
{for(j0j<5j++)
printf(4d(*(a+i))[j]) * 注意(*(a+i))外括号少 *
printf(\n)
}
}
例3:int ija[3][4]{24681012141618202224}*pa*qa+1
显示容14显示14址
三字符数组指针
1维字符数组指针
1)字符串两种存储方式意义:
char a[10]*pa 采字符数组方式
char *pStudent 采字符指针方式
pxyz
2)字符串数组字符串指针区
(1)字符数组已事先预备空间字符串定存入空间里数组名常量
(2)字符指针事先预备空间字符串放里指里指针名变量
注意:果指针没指赋值
:char *p p[0]’a’p[1]’b’错误
(3)赋值方法:
定义时赋值 char a[10]abcd*babcde
键盘输入赋值 gets(a) gets(b)
直接赋值 a[0]’a’a[1]’b’ bxyz
aStudent(错误) bStudent (正确)
2二维字符数组指针
1)定义意义
char s[5][20]
char *p[5]
二维字符数组第维表示少字符串第二维表示字符串少字符
字符指针数组表示少指针指针指字符串
2)赋值方法:
定义时赋值:char s[5][20]{abcmnopqxyxze1235m1235}
char *p[5] {abcmnopqxyxze1235m1235}
键盘输入赋值:scanf(ss[i])
scanf(sp[i])
直接赋值:s[0][0]'a'
p[0]abcdef
3注意区数值数组字符数组
1)数值数组名表示首址字符数组名表示首址时表示整字符串
int a[]{123…} char b[]This
printf(d\nsab) (a错误)
2)定义赋初值时
int a[10]{123…} char b[10]{Student}c[]map
3)输入输出时方式
数值数组输入输出字符数组输入输出整体输入输出
4)维字符数组表示字符串二维字符数组表示字符串50姓名
4例:1)键盘输入五整数找出整数输出
main()
{int a[5]imax
for(i0i<5i++)
scanf(d&a[i])
maxa[0]
for(i1i<5i++)
if(max maxa[i]
printf(maxd\nmax)
}
2)键盘输入五字符串找出字符串输出
#include
#include
main()
{char a[5][20]max[20]
int i
for(i0i<5i++)
scanf(sa[i])
strcpy(maxa[0])
for(i1i<5i++)
if(strcmp(maxa[i])<0)
strcpy(maxa[i])
printf(maxs\nmax)
}
四二重指针:存放指针变量址变量称二重指针
: main()
{int ab*p&a**q&p
a10
*p20
**q100
printf(d\na)
}
五区练
1区
int *p p *p *p++ *(p++) (*p)++ *p+1 *(p+1)
2练:
1)定义int a[]{1223314759}*pa *q&a[4]
*p值_________ *q值_________
*p++值_________ *q++值_________
(*p)++值_________ *(q)值_________
*p+1值_________ *(q1)值_________
2)定义int a[2][3]{123456}*pa
a[1][0] 值________ *(*(a+0)+1) 值________
p[4] 值________ *(p+2) 值________
第九章 结构体体枚举
结构体
1结构体定义意义
struct 结构体名
{类型 成员变量表1
类型 成员变量表2
类型 成员变量表3
……
}
1)学生信息包括学号姓名年龄性址语文数学英语总分均分
struct student
{int num
char name[10]
int age
char sex[3]
char addr[20]
int ywsxyysum
float avg
}
2)说明:见课p249
3)结构体定义时嵌套递
2结构体变量定义四种方法意义存储
1)定义结构体定义结构体变量
struct student s1*p
2)定义结构体时定义结构体变量
struct student
{int num
char name[10]
int age
char sex[3]
char addr[20]
int ywsxyysum
float avg
} s1*p
3)定义结构体时定义结构体变量省略结构体名
struct
{int num
char name[10]
int age
char sex[3]
char addr[20]
int ywsxyysum
float avg
} s1{1zs18ncz859077}*p&sla
asl
4)先结构体取名名定义结构体变量
typedef struct student
{int num
char name[10]
int age
char sex[3]
char addr[20]
int ywsxyysum
float avg
}ST
ST s1*p
3结构体变量引
结构体变量成员名 s1name s1sum
结构体指针变量>成员名 p>name p>sum
4结构体变量赋值|
1) 定义变量时赋值(初始化)
2) 直接单独赋值
s1age18
s1yw85
p>sx96
strcpy(s1nameWangJun) *错误:p>name WangJun*
3)键盘赋值
scanf(sdds1name&s1yy&s1sx)
gets(s1addr)
5结构体变量名
1) 变量名赋变量名整体赋值ba
2) 变量址赋变量指针变量p&a
:struct student
{int num
char name[10]
int age
char sex[3]
char addr[20]
int ywsxyysum
float avg
}
main()
{struct student s1{1001王艳18女郴州869779}s2*p
s2s1
printf(s\ns2addr)
p&s1
p>sex男 *语句错误 *
printf(s\np>sex)
printf(s\np>addr)
printf(uuuu\n&s1&s2&pp)
printf(uuuuuuuu&s1nums1name&s1age
s1sexs1addr&s1yw&s1avg&s2)
}
6链表:
链表头指针指第结点链表结点少数项指结点指针
:1) struct link 2) struct link
{int x {int num
float y char name[10]
struct link *next struct link * next
}abc }s
ax5ay65anext&a
bx10by125b next &c
cx12cy155c next NULL
链表操作例题
#include
#include
typedef struct student
{int data
struct student *next
}ST
ST *insert(ST *head)
void liulan(ST *head)
ST *delete(ST *headint n)
main()
{ST abcd*head*p*q*s
int n15
adata5
bdata10
cdata15
ddata20
head&a
anext&b
bnext&c
cnext&d
dnextNULL
liulan(head)
headinsert(head)
printf(\n)
liulan(head)
headdelete(headn)
printf(\n)
liulan(head)
}
void liulan(ST *head)
{ST *p
phead
while(pNULL)
{printf(d p>data)
pp>next
}
}
ST *insert(ST *head)*链表插入*
{ST *p*q*s
s(ST *)malloc(sizeof(ST))
s>data12
phead
qhead
while(pNULL&&p>data
{qp
pp>next
}
s>nextp
q>nexts
return head
}
ST *delete(ST *headint n)
{ST *p*q
phead
qhead
while(pNULL&&p>datan)
{qp
pp>next
}
q>nextp>next
free(p)
return head
}
例题:某班50学生生包含学号姓名语文数学总分均分编程输入学生基信息计算总分均分输出学生信息
struct student
{int num
char name[10]
int ywsxsum
float avg
}
main()
{struct student st[50]
int i
for (i0i<3i++)
{scanf(dsdd&st[i]numst[i]name &st[i]yw&st[i]sx)
st[i]sumst[i]yw+st[i]sx
st[i]avgst[i]sum30
}
for (i0i<3i++)
printf(d s d d d1f\nst[i]numst[i]namest[i]ywst[i]sx st[i]sumst[i]avg)
}
例1:union aa 例2union aa 例3 union aa
{char c[2] {char c0c1c2c3 {char c[4]
int d int d int d
} } }
main() main() main()
{union aa ab {union aa ab {union aa ab
ac[0]'a' ac07>>2 ac[0]7>>2
ac[1]'b' ac18^10 ac[1]8^10
printf(dad) printf(dad) printf(dad)
} } }
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档