c语言基础.docx
- 文档编号:16646663
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:37
- 大小:72.64KB
c语言基础.docx
《c语言基础.docx》由会员分享,可在线阅读,更多相关《c语言基础.docx(37页珍藏版)》请在冰点文库上搜索。
c语言基础
关键字(系统标识符):
是系统定义的用来标识语句的功能。
32个:
autobreakcasecharconstcontinuedefaultdodoubleelseenum
externfloatforgotoifintlongregisterreturnshortsignedstatic
sizeofstructswitchtypedefunionunsignedvoidvolatilewhile
1.标识符:
自定义标识符:
是用户定义的用来标识语句中的成份。
如函数名,变量名,类型名
标识符定义的规则:
1)第一个字符必须是字母(不分大小写)或下划线(_);
2)后跟字母(不分大小写)、下划线(_)或数字组成;
3)标识符中的大小写字母有区别
4)不能与c编译系统已经预定义的关键字同名。
2.数据类型:
一个值的集合和对该集合值的操作。
基本类型的类型符、占用空间和取值范围表
基本型 所占字节 取值范围 输入格式符举例 输出格式符举例
[signed]char 1 -2^7~2^7-1 %c %c、%d、%u
unsignedchar 1 0~2^8-1 %c %c、%d、%u
[signed]short[int] 2 -2^15~2^15-1 %hd
unsignedshort[int] 2 0~2^16-1 %hu、%ho、%hx
[signed]int 4 -2^31~2^31-1 %d、%o、%u
unsigned[int] 4 0~2^32-1 %u、%o、%x
[signed]long[int] 4 -2^31~2^31-1 %ld
float 4 +/-3.40282e+038 %f、%e、%g
double 8 +/-1.79769e+308 %lf、%le、%lg、%f、%e、%g
long double 10 +/-1.79769e+308 %Lf、%Le、%Lg
常量:
程序运行期间数据的值不改变。
程序中有两种形式:
直接书写的数据和符号表示。
整数:
十进制,八进制(0),十六进制(0x)
实数:
十进制,科学计数(小数e指数)
字符:
‘字符‘
字符串:
”一串字符”
符号常量定义:
#define标识符名常量
const[类型名]常量名=表达式;
变量:
程序运行期间数据的值不确定。
程序中,用户定义的标识符代表数据存储的空间。
3.数据在程序中访问内存空间直接使用变量名字。
变量的声明和定义:
[扩展]类型名变量标识符名[,变量…,变量];
1存数据:
初始化、赋值语句和键盘输入函数
变量的操作:
2取数据:
用变量参与表达运算
数据的存储:
数据在内存中,如果是字符用ASCII码;如果是数值用二进制补码
4.运算符:
告诉编译程序执行特定算术或逻辑操作的符号
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!
表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!
=
不等于
表达式!
=表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?
:
条件运算符
表达式1?
表达式2:
表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
说明:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:
!
>算术运算符>关系运算符>&&>||>赋值运算符
5.表达式:
是用括号将常量、运算符、函数连接起来的有意义的式子。
单个的常量,变量,函数是最简单的表达式。
表达式的运算顺序:
从左往右依次取出运算数据和运算符,按运算符优先级别和结合性决定运算的先后。
intx,y,t;charc;表达式含义
x<=>!
x<=>!
(x==0)x不等于0为真
c=getchar()!
=’\n’键盘输入的符号不是换行
x>=’a’&&x<=’z’||x>=’A’&&x<’Z’x是字母为真
x%2==0x是偶数吗
x%10取x的各位
x=x/10去掉个位数
t=x,x=y,y=x;交换x,y值
c=c+32大写变小写
x%y==0x是否能被y整除
x>y?
x:
yx,y的最大值
y=y+xx累加和
x>=0&&x<=100≤x≤10
x> =0x30&&x<=0x39x>=‘0’&&x<=’9’
6.常用函数:
数学运算:
函数名
函数声明在
用途
abs
math.h
取整数的绝对值
atof
stdlib.h
轉換字串為浮點型態數值。
atoi
stdlib.h
轉換字串為整數值。
atol
stdlib.h
轉換字串為長整數值。
ceil
math.h
取得一個浮點數的極大值。
cos
math.h
計算餘弦值。
exp
math.h
計換指數。
fabs
math.h
計算浮點數的絕對值。
fcvt
stdlib.h
將浮點數轉成字串。
floor
math.h
傳回浮點數的整數部份。
log
math.h
計算對數值。
log10
math.h
計算對數值。
pow
math.h
計算次方值。
pow10
math.h
計算十的次方。
srand
rand
stdlib.h
随机种子
產生一個虛擬隨機亂數。
sin
math.h
計算正弦值。
sqrt
math.h
計算平方根值。
srand
stdlib.h
設定隨機函數rand的基數。
strtod
stdlib.h
將字串轉換為雙精度數值。
tan
math.h
計算正切數值。
字符处理类函数
函数名
声明在
用途
isalnum
ctype.h
測試某一整數值是否為‘A’-‘Z’,‘a’-‘z’,‘0’-‘9’等文數字之一。
isalpha
ctype.h
測試某一整數值是否為’A’-‘Z’,‘a’-‘z’,等字母之一。
isascii
ctype.h
如果ch的值判於0-127,則傳回非零整數(0x00-0x7F)。
isupper
ctype.h
ch若為大寫字母,則傳回非零整數。
isxdigit
ctype.h
ch若為一個十六進位數字,則傳回非零整數。
字符串处理
函数名
函数声明在
用途
stpcpy
string.h
將某一字串抄錄到另一字串中。
strcat
string.h
字串合併。
strchr
string.h
順向搜尋字符第一次出現的位址。
strcmp
string.h
比較兩字串間的關係,並傳回比較值。
strcmpi
string.h
不考慮字母之大小,比較兩字串。
strcpy
string.h
字串拷貝。
strcspn
string.h
找出字串中不含指定字符集之任何子集的第一段子字串。
strdup
string.h
將一字串抄錄到一個新產生的位置上。
stricmp
string.h
不計大小寫之字串比較。
strlen
string.h
字串長度計算。
strstr
string.h
子字串搜尋函數。
strupr
string.h
將小寫字母轉換為大寫。
字符与字符串转换
函数名
函数声明在
用途
atof
stdlib.h
轉換字串為浮點數值。
atoi
stdlib.h
轉換字串為整數值。
atol
stdlib.h
轉換字串為長整數值。
ecvt
stdlib.h
轉換浮點數為字串。
fcvt
stdlib.h
轉換浮點數為字串。
gcvt
stdlib.h
轉換浮點數為字串。
itoa
stdlib.h
轉換整數為字串。
ltoa
stdlib.h
轉換長整數為字串。
strtod
stdlib.h
將字串轉換為雙精度值。
strtol
stdlib.h
將字串轉換為長整數。
strtoul
stdlib.h
將字串轉換為無負號的長整數。
toascii
ctype.h
將字符轉換成指定的格式。
tolower
ctype.h
將字符轉換成指字的格式。
toupper
ctype.h
將字符轉換成指字的格式。
ultoa
stdlib.h
將數字轉換成以空字符結尾的字串。
_lrotl
stdlib.h
向左旋轉一無正負號長整數值。
_lrotr
stdlib.h
向右旋轉一無正負號長整數值。
_lrotr
stdlib.h
向右旋轉一整數值。
时间与日期类函数
函数名
函数声明在
用途
asctime
time.h
產生時間字串。
ctime
time.h
把時間值轉換成字串。
_sleep
stdlib.h
暫停執行片刻。
difftime
time.h
計算兩時間差。
time
time.h
取得MS-DOS的時間。
localtime
time.h
將格林治標準時間依時區調整為本地時間。
输入输出函数
函数名
函数声明在
用途
cputs
conio.h
顯示字串。
cgets
conio.h
由控制台讀取一字串。
eof
io.h
偵查檔案終了。
fopen
stdio.h
開啟緩衝式的檔案。
fclose
stdio.h
關閉某一開啟之檔案。
fcloseall
stdio.h
關閉所有開啟之檔案。
fgetc
stdio.h
讀取字符。
fgetchar
stdio.h
從標準輸入stdin中讀取字符。
fgetpos
stdio.h
取得檔案指標。
fgets
stdio.h
讀取字串。
filelength
io.h
傳回檔案的長度。
fprintf
stdio.h
將格式化資料輸出到檔案中。
fputc
stdio.h
輸出字符到某一管道中。
fputs
stdio.h
輸出字串到某一管道中。
fscanf
stdio.h
由檔案中讀取格式化的資料。
getc
stdio.h
讀取字符。
getch
conio.h
讀取字符。
getchar
stdio.h
讀取字符。
getche
conio.h
讀取字符。
gets
stdio.h
讀取字串。
scanf
stdio.h
格式化輸入。
printf
stdio.h
格式化輸出。
read
io.h
讀取檔案資料。
write
io.h
將資料寫入檔案中。
fread
stdio.h
從管道中讀取資料。
fwrite
stdio.h
將資料寫到輸出管道中。
puts
stdio.h
輸出字串。
putc
stdio.h
輸出字符。
putch
conio.h
輸出字符。
putchar
stdio.h
輸出字符。
7.语句:
它由一个词或句法上有关连的一组词构成,表达计算机执行的一个动作或声明定义一个符号的名称。
语句
格式
功能
变量声明语句
[扩展]类型名变量名1,变量名2…变量名n;
声明程序中自定义的符号
赋值语句
变量名=表达式;
计算表达式的值并赋给变量
表达式语句
表达式;
如:
printf(“字符或格式符”,[变量1,变量2…变量n])
格式符:
%[标志][宽][.位数][l|h]类型符
标志:
-|+|#|0|空格|
类型符:
d|o|x|u|
c|s|p|
f|e|g|%
scanf(“字符或格式符”,[地址1,地址2…地址n])
格式符:
%[*][宽][扫描字符]类型符
实现数据的处理
分支语句
if(表达式)
语句1;
[else
语句2;]
根据表达式的值决定语句是否执行。
switch(表达式)
{
case值1:
语句;[break];
.
.
.
case值n:
语句n;[break];
[default:
语句n+1;[break];]
}
循环语句
while(表达式)
{
语句;
[break;]
[continue;]
}
重复执行语句;
do
{
语句;
[break;]
[continue;]
}
for(表达式1;表达式2;表达式3)
{
语句;
[break;]
[continue;]
}
转向语句
标号:
goto标号;
8.编程
程序结构:
按执行语句的次序:
顺序;分支;循环
按编排语句的次序:
声明数据和输入数据;处理数据;输出数据;
步骤:
1分析问题,确定算法
①问题中需要对那些数据进行处理?
②所处理的数据中,其中那些是输入数据,那些是输出数据,输入数据的初始值是什么?
③数据的类型是什么?
④从输入的已知数据如何导出要输出的数据的过程,即构造出一个或多个表达式;实现数据处理所构造的表达式是否有条件(条件表达式);是否有重复(数据开始值,终止值,如何变化);
情况:
Ⅰ对于已给定的数据,如果数据是多个类型相同且有规律的数据.
首先设定该数据为变量;然后分析一个数据的处理过程,其次分析被处理的数据从什么数开始,到什么数结束,变化的规律是什么?
从而构造循环的初始化表达式;条件表达式;增值表达式,以及循环体表达式;最后利用循环控制变量控制多个数据的输入。
如:
100内奇数累加;100以内能被7整除的数;
Ⅱ对于已给定的数据,仅仅是一个,但需要处理多位.每位所有可能都处理。
分析方法同上.首先设定每位为变量,然后分析一个数的每一位的处理过程。
最后设定循环控制变量控制一个数的多位变化。
如:
水仙花数153=1^3+5^3+3^3
对于已给定的数据,仅仅是一个,每位只处理其一次但需要处理多位。
首先设定一个数x,结果y,然后先考虑一个数的每一位的处理过程。
一般要进行拆分数(x%10,x=x/10)或合并数(y=y*10+x;),其次分析被处理的数据的每一位从什么数开始,到什么数结束,变化的规律是什么。
如:
统计一个数3出现的次数;
1000以内的“完数”
Ⅲ几个数据作同样的处理,重复做多次。
首先设定几个数据为变量,然后分析已知导出结果的过程;
如:
最大公约数和最小公倍数,展转相除;
Ⅳ如果数据处理的结果有多个,且有规律
首先设定输出一个数据为变量或输出语句;然后分析输出数据间的规律;
显示时间;百鸡问题;打印图形;迭代法求方程的根;fibonacci数列问题;
穷举法;递推法;迭代法;二分法;冒泡法等
2画框图描述算法
开始或结束数据处理处理流向数据输入输出判断
数据处理判断循环
3框图转换程序
处理框----表达式语句
菱形框-----分支或循环
平行框----变量说明或输入输出函数;
4程序开发过程
编辑:
新建->文件->c++源程序->输入代码->修改-保存;
编译:
组建->编译
连接:
组建->组建
运行:
组建->执行
调试:
组建->开始调试->go,stepinto,runtocousor
查看->调试窗口->变量窗口variables|表达式窗口watch|内存窗口memory|寄存器窗口register|汇编窗口disassembly
编译常见错误提示:
warningC4508:
'main':
functionshouldreturnavalue;'void'returntypeassumed
警告错误类型号主函数应返回一个值;返回假定的void类型
errorC2065:
'i':
undeclaredidentifier
错误错误类型号未声明的标识符;
errorC2143:
syntaxerror:
missing';'before'for'
错误错误类型号语法错误:
丢失;在for之前
errorC2143:
syntaxerror:
missing')'before'{'
错误错误类型号语法错误:
丢失)在{之前
errorC2106:
'=':
leftoperandmustbel-value
错误错误类型号赋值号左操作必须是左值(变量)
errorC2374:
'x':
redefinition;multipleinitialization
错误错误类型号x重新定义;多次初始化
fatalerrorC1004:
unexpectedendoffilefound
致命错误错误类型号无法预计程序的结束少了一个}
fatalerrorC1083:
Cannotopenincludefile:
'stdio':
Nosuchfileordirectory
致命错误错误类型号不能打开stdio:
没有这样文件或目录
多重循环(循环的嵌套)
循环体中包含循环
如:
inti,j;
for(i=1;i<5;i++)
{
printf(“i=%d”,i);
for(j=0;j<5;j++)
{
printf(“j=%d”,j);内循环体外层循环体
}
printf(“\n”);
}
1.循环头不能交叉
2.内外循环控制变量不能重名
3.内外层循环结构可以相同,也可不同
4.内层循环控制变量初值,在外层循环每变化一次都对其进行初始化
5.内层循环体执行次数:
外层循环每变化一次,会引起内层变换多次.
例1:
1+3+5…+99
解:
1分析问题,确定算法
设被处理的数据中一个为 x;结果为 s;数据类型 int
x取值:
0~99, 下个数变化规律 x=2*x-1
s取值:
0
x与y关系(x=>s):
s=s+x;
2画框图描述算法
3框图转换程序
intx=0,s=0;
for(;x<=99;x=2*x-1)
{
s=s+x;
}
printf(“”,s);
例2 三位数以内的水仙花数 穷举法
解:
方法一;设x是 0~1000中一个 结果x 条件 x==x%10^3+x/10%10^3+x/100^3
方法二:
1分析问题,确定算法
设 k,j,i分别为一个数的个位十位百位;结果为y;
i取值:
1~9 下个数位变化规律:
i++
j取值:
0~9 下个数位变化规律:
j++
k取值:
0~9 下个数位变化规律:
k++
数据关系(I,j,k=>y):
y=i+j*10+k*100条件 y==i^3+k^3+j^3
2画框图描述算法
3框图转换程序
3框图转换程序
inti=1,j=0,k=0;
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
for(k=0;k<=9;k++)
{
y=i+j*10+k*100;
if(y==i^3+k^3+j^3)
printf(“%d”,y);
}
}
}
例3 m,n最大公约数
方法一:
根据定义
1分析问题,确定算法
设 m,n为两个任意整数; y为公约数;
y取值:
min(m,n)~2下个数变化规律 y--
数据关系(m,n=>y):
条件m%y==0且n%y==0的第一个数;
3框图转换程序
intm,n,y;
scnaf(“%d%d”,&m,&n);
y=m m: n; for(;y<1;y--) if(m%y==0&&n%y) printf(“%d”,y) ; 方法二: 展转相除迭代法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 基础