第一篇:《C程序设计》重点总结
C语言
最后加粗一下重点!
第二章 算法
1.计算计算法分两类:
数值运算算法:求数值解
非数值运算算法:排序、检索、管理
2.算法特性:有穷性、确定性、零或多输入、一或多输出、有效性
3.算法的三种基本结构:
顺序结构
选择结构
循环结构(当型、直到型)
第三章 顺序结构
常量和变量
1.常量:
整型常量
实型常量:小数形式
指数形式:12.34*103=12.34e3
字符常量:普通字符:用' '括起来
转义字符: 开头(a警告 b退格 n t空出一段距离 o xh)
字符串常量:用“ ”括起来
符号常量:#define PI 3.14(大写,行末无分号)
2.变量:先定义,后使用
3.常变量:const int a=3;(取代符号常量)
4.标识符(可作为变量名):
只能由字母、数字、下划线组成且不能数字打头
大小写是不同字符
数据类型
整型类型:基本整int 短整short int 长整long int 双长整long long int 字符char 尔bool
浮点类型:单精度浮点float 双精度浮点double 复数浮点
枚举类型:enum
布
空类型:
void
数组[] 函数
指针* 结构体struct 共用体union
字节数(有效数字)
int:
2、4 short:2 long:4 long long:8 char:1
float:4(6)double:8(15)long double:8(15)、16(19)规范化指数形式:3.14159→0.314159e001
运算符和表达式
1.实数相除得双精度实数 整数相除得整数(商向零取整)2.自增自减运算符(只用于变量):++i、--i先加减再使用
i++/i--先使用再加减 3.算术表达式自左向右结合,先乘除后加减 4.不同类型数据混合运算:
float和double→double
int和float/double→double
char和int→ASCII和int 5.强制类型转换:(double)(x+y)将x+y的值转换成double型
6.C运算符:等于== 不等于!= 与&& 或|| 非!赋值= 下标[]
C语句
1.分类
控制语句:如
continue(结束本次循环)
break(中止执行switch或循环)
switch(多分支选择)函数调用语句:printf(...);表达式语句:句末有分号
空语句:;(作流程转向点)
复合语句:用{ }括起来,语句句末写分号 用数学公式开头加#include
复合赋值运算符: x+=y等价于x=x+y
x*=y等价于x=x*y
x%=y等价于x=x%y
赋值表达式:a=b、a+b这种表达式不能作为左值
a=b=5 自右而左:b=5;a=b;
数据的输入输出
1.C语言本身不提供输入输出语句,以下都是函数:
putchar输出字符
getchar输入字符
printf格式输出
scanf格式输入
puts输出字符串
gets输入字符串 2.输入输出头文件:#include
格式控制=%格式字符+普通字符
输出表列可以是常量、变量、表达式 4.scanf(格式控制,地址表列):不能忘“&”
注意:逗号对逗号,空格对空格
%c中,空格和转义字符都作为有效字符
输入数值数据时遇非法字符认为数据结束 5.格式字符:
%d有符号的十进制整数
%f小数形式的实数(%7.2f表示共7位,小数2位)(%-7.2f表示向左对齐)双精度%lf
%c一个字符
%s字符串
%e %E指数形式(printf(“%e”,123.456)→ 1.23456e+002)
%o八进制整数(补码)
%x十六进制整数
%u无符号十进制整数
%g %G系统自动选择变成%f或%e
输出“%”用连续两个“%”表示
6.putchar()输出一个字符:putchar(66)输出“B”
putchar('n')换行 7.getchar(c)输入一个字符
第四章 选择结构
1.if:两分支选择
switch:多分支选择 2.将a和b的值互换:t=a;a=b;b=t;3.优先级:!→ 算术运算符 → 关系运算符 → && → || → 赋值运算符
关系运算符优先级:高:< <= > >= → 低:==!=
逻辑运算符优先级:!→ && → || 4.关系表达式:“1”代表真,“0”代表假
逻辑表达式:非0代表真,0代表假
a&&b&&c只有a为真才向后算
a||b||c只有a为假才向后算 5.逻辑型变量:头文件#include
switch(表达式)
{
case 常量:语句;break;
„
default:语句;
}
多个case共用一组语句:
case'A':
case'B':
case'C':printf(“>60n”);break;
第五章 循环结构
三种循环
1.while(表达式){语句;} 2.do {语句;} while(表达式)
3.for(初值;循环条件;循环变量增值):
改写成while:
初值;
while(循环条件)
{
语句;
循环变量增值;
}
for里3项都可以省略,第1、3项可含逗号,第2项可以是关系/逻辑/数值/字符表达式
逗号表达式内,整个逗号表达式的值=最右边表达式的值
跳出、结束循环
break:终止整个循环,只用于switch和3种循环语句 continue:结束本次循环
如果是双重循环,内循环里有break,则终止内循环而不是整个循环
第六章 数组
1.一维数组:
int a[10];含a[0]~a[9]十个元素
初始化:a[10]={0,1,2,3,4,5,6,7,8,9};中括号里可以不写,大括号里不写的得0
起泡法排序:n个数n-1趟比较,第j趟比较n-j次 2.二维数组:
float a[3][4];含a[0][0]~a[2][3]十二个元素
初始化:3行4列int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};第一维中括号可以不写,大括号里不写的得0
打擂台算法:先max=a[0][0],剩下的挨个跟a[0][0]比,赢了就赋给max 3.字符数组:
char a[10];含a[0]~a[9]十个元素
初始化:char a[]={'I',' ','a','m',' ','h','a','p','p','y'};
char a[2][3]={{'#','#','#'},{'#','#','#'}};
char a[]=“I am happy” 4.' '作为字符串结束的标志 5.scanf函数输入项如果是字符数组名不加&: scanf(“%s”,a);6.输出字符串:puts(字符数组)
输入字符串:gets(字符数组)
字符串连接:strcat(字符数组1, 字符数组2)
字符串复制:strcpy(字符数组1, 字符串2)将2复制到1中
strncpy(str1,str2,2)将2的前2个字符复制到1中
7.字符串比较:strcmp(字符串1,字符串2)
if(strcmp(s1,s2)>0)printf(“yes”);8.测字符串长度:strlen(字符数组)9.转换为小写:strlwr(字符串)
转换为大写:strupr(字符串)
第七章 函数
1.定义有参函数:三处类型名和return z不能少 2.形参:定义函数时括号中的变量
实参:主调函数调用时括号中的参数(常量、变量或表达式)3.数据传递(单向传递,值传递):实参的值给形参,函数中return z把z的值作为函数值返回主函数赋给相应变量 4.函数调用
函数类型名和里面return表达式的类型名一致(函数类型决定返回值类型)
不需要返回值的函数里边不写return,类型名为void(空类型)
调用结束时形参单元被释放,实参单元仍保留原值。形参和实参是两个不同存储单元
主函数的声明和函数的定义第一行(函数原型)一样,再加分号
声明中的形参名可以不写:float add(float,float)
函数原型专业写法:
void print(int num, char sex, float score);
声明也可以在int main()之前 5.嵌套调用
递推法:主函数声明a函数,a函数定义中声明b函数,定义b函数
改进:b函数只用一个return语句 6.递归调用(调用函数本身):
分为“回溯”和“递推”两个过程,必须具有一个结束递归的条件。7.数组名作参数
数组元素作实参,向形参传递元素的值
数组名作实参,想形参传递元素的地址
二维数组名作参数,函数定义里用两个for控制 8.局部变量和全局变量
局部变量:在函数内定义,比如形参
全局变量(外部变量):在函数外定义,范围直到本源文件结束
不同函数中可以使用同名变量
习惯:全局变量首字母大写
若同一源文件中全局变量和局部变量重名,则在局部变量作用范围内全局变量被屏蔽 9.变量的存储方式和生存期
第八章 指针
概念
1.“指针”就是地址。指针变量是存放地址的变量 2.直接访问:按变量名访问
间接访问:将变量a的地址存放在变量b中,通过b访问a 3.*a表示a指向的对象,a叫指针变量,a的值是地址(指针)4.定义指针变量必须指定基类型:int *a, *b;(int叫基类型)5.初始化时:int *p1=&a, *p2=&b;
赋地址时:
p1=&a;p2=&b;6.一个变量的指针的含义包含两个方面:
地址:以存储单元编号表示
数据类型:指向存储单元
7.不能写 *point_1=100;等号右边应该写变量,不能写数 8.引用指针变量:p=&a;
定义时:swap(*p1,*p2)调用时:swap(p1,p2)9.“交换值”:int temp;temp=*p1;*p1=*p2;*p2=temp;10.p=&a[0];p=a;表示a数组首元素的地址赋给p
数组指针
1.指针指向数组元素时可以:加减整数、自加自减
同一数组中的两元素p1、p2可以p1-p2 2.自加自减
*p++=*(p++):先引用p的值,再使p自增1
*(++p):先p+1,再取*p
++(*p):p所指向的元素值加1 3.一维:
fun(int arr[], int n)与fun(int *arr, int n)等价
a[i]与*(a+i)等价 4.多维:
*(*(a+i)+j)= *(a[i]+j),都是a[i][j]的值
a(&a[0])、a+1(&a[1])表示第0行、第1行
*a、*(a+1)表示a[0][0](a[0])、a[1][0](a[1])
a+i、a[i]、*(a+i)、&a[i]、&a[i][0]都代表同一地址
字符串指针
1.char *a=“blablabla”;printf(“%s”,a);没问题 2.字符数组名和字符指针变量可以做形参和实参 3.不能对数组名赋值
4.字符指针变量只分配一个存储单元
第二篇:《C程序设计》重点总结
Ainy晴
C語言
最後加粗一下重點!
第二章 算法
1.計算計算法分兩類:
數值運算算法:求數值解
非數值運算算法:排序、檢索、管理
2.算法特性:有窮性、確定性、零或多輸入、一或多輸出、有效性
3.算法の三種基本結構:
順序結構
選擇結構
循環結構(當型、直到型)
第三章 順序結構
常量和變量
1.常量:
整型常量
實型常量:小數形式
指數形式:12.34*103=12.34e3
字符常量:普通字符:用' '括起來
轉義字符: 開頭(a警告 b退格 n t空出一段距離 o xh)
字符串常量:用“ ”括起來
符號常量:#define PI 3.14(大寫,行末無分號)
2.變量:先定義,後使用
3.常變量:const int a=3;(取代符號常量)
4.標識符(可作為變量名):
只能由字母、數字、下劃線組成且不能數字打頭
大小寫是不同字符
數據類型
整型類型:基本整int 短整short int 長整long int 雙長整long long int 字符char 爾bool
浮點類型:單精度浮點float 雙精度浮點double 複數浮點
枚舉類型:enum Ainy晴
布 Ainy晴
空類型:
void
數組[] 函數
指針* 結構體struct 共用體union
字節數(有效數字)
int:
2、4 short:2 long:4 long long:8 char:1
float:4(6)double:8(15)long double:8(15)、16(19)規範化指數形式:3.14159→0.314159e001
運算符和表達式
1.實數相除得雙精度實數 整數相除得整數(商向零取整)2.自增自減運算符(只用於變量):++i、--i先加減再使用
i++/i--先使用再加減 3.算術表達式自左向右結合,先乘除後加減 4.不同類型數據混合運算:
float和double→double
int和float/double→double
char和int→ASCII和int 5.強制類型轉換:(double)(x+y)將x+yの值轉換成double型
6.C運算符:等於== 不等於!= 與&& 或|| 非!賦值= 下標[]
C語句
1.分類
控制語句:如
continue(結束本次循環)
break(中止執行switch或循環)
switch(多分支選擇)函數調用語句:printf(...);表達式語句:句末有分號
空語句:;(作流程轉向點)
複合語句:用{ }括起來,語句句末寫分號 用數學公式開頭加#include
複合賦值運算符: x+=y等價於x=x+y
x*=y等價於x=x*y
x%=y等價於x=x%y
賦值表達式:a=b、a+b這種表達式不能作為左值
a=b=5 自右而左:b=5;a=b;
數據の輸入輸出
1.C語言本身不提供輸入輸出語句,以下都是函數:
putchar輸出字符
getchar輸入字符
printf格式輸出
scanf格式輸入
puts輸出字符串
gets輸入字符串 2.輸入輸出頭文件:#include
Ainy晴
Ainy晴
格式控制=%格式字符+普通字符
輸出表列可以是常量、變量、表達式 4.scanf(格式控制,地址表列):不能忘“&”
注意:逗號對逗號,空格對空格
%c中,空格和轉義字符都作為有效字符
輸入數值數據時遇非法字符認為數據結束 5.格式字符:
%d有符號の十進制整數
%f小數形式の實數(%7.2f表示共7位,小數2位)(%-7.2f表示向左對齊)雙精度%lf
%c一個字符
%s字符串
%e %E指數形式(printf(“%e”,123.456)→ 1.23456e+002)
%o八進制整數(補碼)
%x十六進制整數
%u無符號十進制整數
%g %G系統自動選擇變成%f或%e
輸出“%”用連續兩個“%”表示
6.putchar()輸出一個字符:putchar(66)輸出“B”
putchar('n')換行 7.getchar(c)輸入一個字符
第四章 選擇結構
1.if:兩分支選擇
switch:多分支選擇 2.將a和bの值互換:t=a;a=b;b=t;3.優先級:!→ 算術運算符 → 關系運算符 → && → || → 賦值運算符
關系運算符優先級:高:< <= > >= → 低:==!=
邏輯運算符優先級:!→ && → || 4.關系表達式:“1”代表真,“0”代表假
邏輯表達式:非0代表真,0代表假
a&&b&&c只有a為真才向後算
a||b||c只有a為假才向後算 5.邏輯型變量:頭文件#include
switch(表達式)
{
case 常量:語句;break;
…
default:語句;
}
多個case共用一組語句:
case'A':
case'B': Ainy晴
Ainy晴
case'C':printf(“>60n”);break;
第五章 循環結構
三種循環
1.while(表達式){語句;} 2.do {語句;} while(表達式)
3.for(初值;循環條件;循環變量增值):
改寫成while:
初值;
while(循環條件)
{
語句;
循環變量增值;
}
for裏3項都可以省略,第1、3項可含逗號,第2項可以是關系/邏輯/數值/字符表達式
逗號表達式內,整個逗號表達式の值=最右邊表達式の值
跳出、結束循環
break:終止整個循環,只用於switch和3種循環語句 continue:結束本次循環
如果是雙重循環,內循環裏有break,則終止內循環而不是整個循環
第六章 數組
1.一維數組:
int a[10];含a[0]~a[9]十個元素
初始化:a[10]={0,1,2,3,4,5,6,7,8,9};中括號裏可以不寫,大括號裏不寫の得0
起泡法排序:n個數n-1趟比較,第j趟比較n-j次 2.二維數組:
float a[3][4];含a[0][0]~a[2][3]十二個元素
初始化:3行4列int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};第一維中括號可以不寫,大括號裏不寫の得0
打擂臺算法:先max=a[0][0],剩下の挨個跟a[0][0]比,贏了就賦給max 3.字符數組:
char a[10];含a[0]~a[9]十個元素
初始化:char a[]={'I',' ','a','m',' ','h','a','p','p','y'};
char a[2][3]={{'#','#','#'},{'#','#','#'}};
char a[]=“I am happy” 4.' '作為字符串結束の標志
Ainy晴
Ainy晴
5.scanf函數輸入項如果是字符數組名不加&: scanf(“%s”,a);6.輸出字符串:puts(字符數組)
輸入字符串:gets(字符數組)
字符串連接:strcat(字符數組1, 字符數組2)
字符串複制:strcpy(字符數組1, 字符串2)將2複制到1中
strncpy(str1,str2,2)將2の前2個字符複制到1中
7.字符串比較:strcmp(字符串1,字符串2)
if(strcmp(s1,s2)>0)printf(“yes”);8.測字符串長度:strlen(字符數組)9.轉換為小寫:strlwr(字符串)
轉換為大寫:strupr(字符串)
第七章 函數
1.定義有參函數:三處類型名和return z不能少 2.形參:定義函數時括號中の變量
實參:主調函數調用時括號中の參數(常量、變量或表達式)3.數據傳遞(單向傳遞,值傳遞):實參の值給形參,函數中return z把zの值作為函數值返回主函數賦給相應變量 4.函數調用
函數類型名和裏面return表達式の類型名一致(函數類型決定返回值類型)
不需要返回值の函數裏邊不寫return,類型名為void(空類型)
調用結束時形參單元被釋放,實參單元仍保留原值。形參和實參是兩個不同存儲單元
主函數の聲明和函數の定義第一行(函數原型)一樣,再加分號
聲明中の形參名可以不寫:float add(float,float)
函數原型專業寫法:
void print(int num, char sex, float score);
聲明也可以在int main()之前 5.嵌套調用
遞推法:主函數聲明a函數,a函數定義中聲明b函數,定義b函數
改進:b函數只用一個return語句 6.遞歸調用(調用函數本身):
分為“回溯”和“遞推”兩個過程,必須具有一個結束遞歸の條件。7.數組名作參數
數組元素作實參,向形參傳遞元素の值
數組名作實參,想形參傳遞元素の地址
二維數組名作參數,函數定義裏用兩個for控制 8.局部變量和全局變量
局部變量:在函數內定義,比如形參
全局變量(外部變量):在函數外定義,範圍直到本源文件結束
不同函數中可以使用同名變量
習慣:全局變量首字母大寫
若同一源文件中全局變量和局部變量重名,則在局部變量作用範圍內全局變量被屏蔽 9.變量の存儲方式和生存期
Ainy晴
Ainy晴
第八章 指針
概念
1.“指針”就是地址。指針變量是存放地址の變量 2.直接訪問:按變量名訪問
間接訪問:將變量aの地址存放在變量b中,通過b訪問a 3.*a表示a指向の對象,a叫指針變量,aの值是地址(指針)4.定義指針變量必須指定基類型:int *a, *b;(int叫基類型)5.初始化時:int *p1=&a, *p2=&b;
賦地址時:
p1=&a;p2=&b;6.一個變量の指針の含義包含兩個方面:
地址:以存儲單元編號表示
數據類型:指向存儲單元
7.不能寫 *point_1=100;等號右邊應該寫變量,不能寫數 8.引用指針變量:p=&a;
定義時:swap(*p1,*p2)調用時:swap(p1,p2)9.“交換值”:int temp;temp=*p1;*p1=*p2;*p2=temp;10.p=&a[0];p=a;表示a數組首元素の地址賦給p
數組指針
1.指針指向數組元素時可以:加減整數、自加自減
同一數組中の兩元素p1、p2可以p1-p2 2.自加自減
*p++=*(p++):先引用pの值,再使p自增1
*(++p):先p+1,再取*p
++(*p):p所指向の元素值加1 3.一維:
fun(int arr[], int n)與fun(int *arr, int n)等價
a[i]與*(a+i)等價 4.多維:
*(*(a+i)+j)= *(a[i]+j),都是a[i][j]の值
a(&a[0])、a+1(&a[1])表示第0行、第1行
*a、*(a+1)表示a[0][0](a[0])、a[1][0](a[1])
a+i、a[i]、*(a+i)、&a[i]、&a[i][0]都代表同一地址
字符串指針
1.char *a=“blablabla”;printf(“%s”,a);沒問題 2.字符數組名和字符指針變量可以做形參和實參 3.不能對數組名賦值
4.字符指針變量只分配一個存儲單元
Ainy晴
第三篇:C语言程序设计谭浩强重点笔记
C语言设计 学习笔记
早晨: 06:40
起床
07:20——08:20 上午: 08:30——10:30 10:50——11:30 中午: 12:00——02:00
下午: 02:30——04:30
晚上: 05:30——08:00 08:00——09:00 09:00——11:00
11:30
英语 1小时
新概念英语(单词、语法、听读背)大学英语(单词、语法、听读背)
计算机基础 2小时 计算机科学技术导论 计算机组成原理 微机原理及接口技术
Intel微处理器结构编程与接口 深入理解计算机系统 80x86汇编语言程序设计
8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理
Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版
午休
计算机应用及编程
Windows用户管理指南、AD配置指南、网络专业指南、Windows即学即会教程
Windows下32位汇编语言程序设计、C#编程 锻炼、晚餐 辅导
专业基础 2小时
大学数学、大学物理、电机及拖动、电力电子技术、通信技术 休息
目 录
第一章 C语言概述.................................................................................................................................1.1 C程序结构特点16................................................................................................................1.2 C程序上机步骤17...................................................................................................................第二章 程序的灵魂——算法23............................................................................................................2.1 算法24.....................................................................................................................................2.2 算法的三种基本结构...............................................................................................................2.3 结构化程序设计方法42..........................................................................................................第三章 数据类型 运算符与表达式48..................................................................................................3.1 C语言的基本元素48...............................................................................................................3.2 C的数据类型48.......................................................................................................................3.3 常量与变量48..........................................................................................................................3.4 基本类型...................................................................................................................................3.5 变量63.....................................................................................................................................3.6 不同类型数据间的混合运算...................................................................................................3.7 函数的调用过程(补充).......................................................................................................第四章 最简单的C程序设计——顺序程序设计77...........................................................................4.1 字符数据的输入输出...............................................................................................................第五章 选择结构的程序设计97............................................................................................................第六章 循环结构程序设计.....................................................................................................................6.1 语句标号...................................................................................................................................6.2 break语句和continue语句......................................................................................................第七章 数组132......................................................................................................................................7.1 构造类型...................................................................................................................................7.2 数组133...................................................................................................................................7.3 二维数组...................................................................................................................................7.4 字符串——字符数组...............................................................................................................7.5 字符串处理函数 #include
1.1 C程序结构特点16
1、C程序的基本构件——函数。
2、一个函数由函数首部和函数体两部分构成。
函数首部一般包括函数类型、函数名、函数参数等。
函数体一般包括声明部分和执行部分。其中:在声明部分中定义所用到的变量;执行部分则由若干个语句组成。
3、C程序只有一个main函数,且总是从main函数开始执行。
4、C语言语句必须以“;”结束。
5、用/*
*/作为注释。
6、C编译器一般自顶向下顺序编译C源程序,如果被调函数定义在主调函数之后位置时,要在主调函数前,给出被调函数的原型说明。以便编译器在编译被调函数的调用语句时,对调用语句进行参数检查。
如果不进行原型说明,则无法通过编译检查。
原型说明:类型说明 函数名(参数类型,参数类型,„„)
7、头文件——头文件包含了C语言的标准函数库的原型说明。
C语言通过使用#include <>预处理命令,将库函数的原型说明插入到源文件中。
1.2 C程序上机步骤17
1、编辑源文件.c;
2、编译成目标文件.obj;
3、连接——将目标程序和库函数及其他目标程序连接起来,生产可执行文件,文件扩展名为.exe;
4、执行。
结构体、共用体、枚举型。
3、指针类型:用于存储地址的一类数据类型。
4、空类型:
编译器根据变量的数据类型,给变量分配存储单元。
3.3 常量与变量48
1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。#define 符号常量(大写)常量
2、变量——变量由变量名和变量值标识。数据类型 变量;
变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。
3.4 基本类型
1、整形数据在内存中的存放,是以补码形式存放的。
2、实型数据:单精度 双精度。 在内存中以指数形势存放。
若数据超过有效位,则超过C语言规定有效位的数据将被舍去,故产生误差。
3、字符型数据:用一个字节存储单元存储。即将字符的ASCII码存储到内存单元中。
用单引号括起来的一个字符。
转义字符——特殊字符常量或者控制字符常量,它们都以“”开头。 Char、unsigned char区别:char用7位数表示,最大表示编码为127的字符;unsigned char用8位数表示,最大表示编码为255的字符。 字符数据与整型数据可以相互赋值。
字符数据可以以字符数据输出,也可以以整型数据形式输出。
4、字符串常量:C语言中,必须是用字符数组来保存字符串常量。在内存中顺序存储。
用一对双引号括起来的字符序列。
(2)一般把建立存储空间的声明称为变量定义,把不需要建立存储空间的声明成为变量声明。
3.6 不同类型数据间的混合运算
不同类型数据进行混合运算时,不同类型的数据要先转换成同一类型,按照类型级别由低到高(char,short—int——unsigned—long—double;float—double)的顺序进行转换。
强制类型转换——(类型名)表达式。强制类型转换也就是将存储数据的内存单元强制转换为另一种数据类型的单元大小。即强制将存放数据的内存单元改变。
赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量的类型。一般短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以保证数据的正确性。
3.7 函数的调用过程(补充)
C函数其实就是一个程序模块。
C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到的CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。
在调用函数时,一般利用堆栈传递输入参数;利用EAX传递输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX的值。
第四章 最简单的C程序设计——顺序程序设计77 4.1 字符数据的输入输出
1、C语言没有输入输出语句,IO操作通过调用系统函数实现。
2、在程序的开头,要有:#include “stdio.h”或 #include
stdio.h 输入输出语句
2、数组——数组必须先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。
3、C语言只能逐个引用数组元素,不能一次引用整个数组。
4、数组引用是“数组名+下标”引用,数组下标均为整数。如a[2]。
7.3 二维数组
1、数组元素为数组。
2、在内存中,C语言的二维数组中数组元素的存放顺序是按行存放的。
3、二维数组引用是“数组名+下标+下标”。如a[1][2]。
7.4 字符串——字符数组
1、一般用 来标识字符串结尾。 占用一个字符变量空间。
2、用字符串赋值字符数组时,C编译器在字符串后自动加 赋给字符数字。
3、字符数组可以一次引用整个字符串数组。如整个字符串(数组)的输入输出,用%s格式,且在输入字符数组时,用数组名代表数组的首地址,对于二维数组,仅仅写行下标不写列下标,也可以代表给行数组的首地址。
在用%s输入输出字符串数组时,遇到 结束。
7.5 字符串处理函数 #include
1、gets(字符数组名)
从键盘输入一个字符串(以回车结束),并返回字符数组的起始地址。如get(str)。
2、puts(字符数组名/字符串)
将数组中的字符串( 结尾的字符序列)输出到终端上,输完换行。如puts(str),puts(“ok”)。
3、strcpy(目的字符数组1名,源字符串/字符数组2名)拷贝时,将“ ”一起拷贝过去。
4、strcat(字符数组1名,字符串/字符数组2名)将字符串/字符数组2连接到字符数组1中。
在某个复合语句中定义的变量。
2、全局变量——在函数之外定义的变量。有效范围是从定义变量的位置开始到源文件结束。
8.4 变量的存储类别
变量的存储类别,即生存期。内存中供用户使用的存储空间包括:程序区、静态存储区、动态存储区。
1、静态存储区——在编译时分配空间,在程序运行完后才释放存储空间。存储静态局部变量和全局变量。
局部静态变量在编译时赋初值,在执行时可改变该值,但该存储空间一直保存到程序结束。
定义局部静态变量,如果没有赋初值,编译时会自动赋默认初值。 局部静态变量只能在定义它的函数中使用。 全局变量都是静态的。
利用extern 外部变量方式表示变量的定义在别的文件中,提示编译器遇到此变量时,在其他模块中寻找其定义。而函数则是利用函数原型来声明。 用static 关键字说明一个不能在其他源文件中引用的全局变量。即静态全局变量在声明它的整个文件都是可见的,但是在文件之外是不可见的。
2、动态存储区——仅在在执行时分配空间,用完后释放存储空间。存放自动变量和形式参数。
寄存器变量——用register关键字说明。寄存器变量对寄存器的占用是动态的。
第九章 预处理命令197 9.1 预编译命令作用
预编译命令主要完成宏定义、文件包含、条件编译三种功能。
1、宏定义——指用一个指定的标识符(名字)来代表一个字符串。在预编译时,将宏名替代成字符串的过程称为宏展开。如:
# define PI 3.1415926 定义宏, # undef PI
终止宏定义的作用域。
#define V(a,b,c)a*b*c 定义带参数的宏。当宏展开时,将引用宏名语句中的实参字符串代替宏定义的形参字符串。int v =V(2,3,4)则宏展开后为:int v= 2*3*4;
2、文件包含——指一个源文件可以将另一个源文件的全部内容包含进来。如: #include “文件名”或
#include <文件名> 编译预处理时,将包含文件的全部内容复制到源文件中。在编译时作为一个源程序来编译。
3、条件编译——在预编译处理时,确定编译时要编译的部分。如:
0
而数组名的值不可以改变。
6、函数的指针专门用来存放函数的入口地址,当把函数的地址赋值给它时,它就指向该函数的入口地址。
声明格式:数据类型(*指针变量名)()如:int(*P)();
赋值格式:p=max; 注max为定义的函数名;函数名代表该函数的入口地址。引用格式:c=(*p)(a,b);等价——c=max(a,b);
7、只能将变量已分配的地址赋值给指针变量,不能直接将整数赋值给指针变量。
8、指针变量可以有null值,防止指针误作用。
第十一章 结构体270 11.1 结构体270
1、作用——将不同类型的数据组合成一个有机的整体。
2、结构体的定义——结构体是一种数据结构,按照某种规则定义,将若干个不同数据类型(也可相同)的数据项的组合成的一个有机整体。
3、声明结构体类型的形式:struct 结构体类型名字 {成员列表}; 成员列表形式:类型符 成员名
如:int num;
11.2 声明结构体类型变量的方法271
1、先定义结构体类型:struct 结构体类型名字 {成员列表};再定义结构体变量:struct结构体类型名字 结构体变量名。
2、可在定义结构体类型时,定义结构体类型变量。struct 结构体类型名字 {成员列表}结构体类型变量1,结构体类型变量2,„„;
11.3 结构体变量引用273
1、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量成员分别赋值。
2、结构体变量成员引用方式:结构体变量名.成员名
3、如果结构体变量成员是另一个结构体变量,则要用若干个成员运算符,一级一级找到最低一级的成员。
11.8 共用体 297
1、共用体指将几种不同类型的变量存储在同一段内存单元中。
2、共用体变量的存储单元大小等于最长成员变量所占内存的长度
3、共用体变量中起作用的是最后一次存放成员。
4、共用体类型声明方式:union 公用体类型名称 {成员变量列表};
5、共用体变量声明方式:(1)union 公用体类型名称 {成员列表}共用体变量;(2)先声明共用体类型,然后声明共用体变量,union 公用体类型名称 共用体变量。
11.9 枚举类型301
1、枚举类型——指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内的一个。
2、声明枚举类型:enum 枚举类型名称 {枚举常量列表};
3、声明枚举变量:enum 枚举类型名称 枚举类型变量;
普通文件——指磁盘文件。
2、从操作系统的角度看:每一个与主机相关联的输入输出设备都可看作一个文件。
(1)根据文件的组织形式分为:顺序存取文件 和 随机存取文件。(2)根据文件的存储形式分为:ASCII文件 和 二进制文件。
13.3 C语言对文件的处理方法319 C语言中对文件的存取是以字符(字节)为单位的,一个输入输出流就是一个字节流或二进制流。
文件的存储方式分为缓冲文件系统和非缓冲文件系统。区别是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个文件设定缓冲区。
ANSI C标准只采用 缓冲文件系统 来处理文件。
13.4 文件结构体类型321 缓冲文件系统中,每个被使用的文件都在内存中开辟一个FILE结构体类型的区,用来存放文件的有关信息(文件名字、文件状态、当前位置、缓冲区等有关信息),FILE结构体类型原型: typedef struct{
short level;
/*缓冲区“满”或“空”的程度*/
unsigned flags;/*文件状态标志*/
char fd;
/*文件描述符*/
unsigned char hold;/*如无缓冲区不读取字符*/
short bsize;
/*缓冲区的大小*/
unsigned char *buffer;/ *数据缓冲区的位置*/
unsigned char *curp;/*指针,当前的指向*/
unsigned istemp;/*临时文件,指示器*/
short token;/*用于有效性检查*/}FILE;
13.5 文件结构体数组和指针321 FILE *fp——声明了一个指向FILE类型结构体的指针变量。
buffer:是一个指针。对fread 来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址(均指起始地址)。
size:
要读写的字节数。
count: 要进行读写多少个size字节的数据项。fp:
文件型指针。
6、格式化读写函数:
fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列);
注意:
用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。
7、以“字”或者整数为单位读写函数: putw(int i,FILE * fp); int i = getw(FILE * fp);
8、以“字符串”为单位读写文件的函数:
fgets(str,n,fp);从fp指向的文件读出n-1个字符,在最后加一个’ ’。返回值:str的首地址。如果遇到EOF则读入结束。
fputs(“china”,fp);把字符串写入到fp指向的文件。第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的′\0′不输出。
13.7 文件的定位333
1、将文件当前的位置指针重新返回到文件的开头位置:无返回值。 rewind(fp);执行后,将文件的位置指针重新定位到文件的开头。
2、随机读写:改变文件的位置指针,一般用于二进制文件。 fseek(文件类型指针,位移量,起始点);无返回值。起始点:文件开头
SEEK_SET
0
文件当前位置
SEEK_CUR
文件末尾
SEEK_END
putw()把一个字输出到指定文件
fread()从指定文件中读取数据项
fwrite()把数据项写到指定文件中
fscanf()从指定文件按格式输入数据
fprintf()按指定格式将数据写到指定文件中
第十四章 C++对C的扩充 338 14.1 C++的特点338
1、C++保留了C语言原有的所有优点,增加了面向对象的机制。
2、C++源文件以.cpp为后缀。
3、除了可以用 /*……*/ 形式的注释行外,还允许使用以// 开头的单行注释。
4、除了可以用printf函数输出信息外,还可以用cout进行输出。cout的作用是将<<运算符右侧的内容送到输出设备中输出。使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。
cout <<“ This is a c++ program.n” ;
14.2 C++的输入输出 339 C++为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C++的输出流,cin是由c和in两个单词组成的,代表C++的输入流。它们是在头文件iostream.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。
14.3 C++的输出cout
1、cout必须和输出运算符<<一起使用。<< 在这里不作为位运算的左移运算符,而是起插入的作用,例如:cout<<“Hello!n”;的作用是将字符串“Hello!n” 插入到输出流cout中,也就是输出在标准输出设备上。
2、也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。endl的含义是end of line,表示结束一行。
0
存。在C++中,这种输入操作称为“提取”(extracting)或“得到”(getting)。>> 常称为“提取运算符”。
2、cin要与 >> 配合使用。例如:
3、C++为流输入输出提供了格式控制,如:dec(用十进制形式),hex(用十六进制形式),oct(用八进制形式),还可以控制实数的输出精度等。
14.5 函数的重载342
1、C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不同,而且函数类型也可不同,这就是函数的重载,即一个函数名多用。
2、系统会根据参数的类型和个数找到与之匹配的函数,并调用不同的函数。
14.6 带缺省参数的函数344 C++允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。
例如某一函数的首部可用如下形式:
void fun(int a,int b,int c=100)在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。如果写成fun(2,4),即少写了最后一个参数,由于在函数定义时已指定了c的缺省值为100,因此a,b,c的值分别为2,4,100。请注意:赋予缺省值的参数必须放在形参表列中的最右端。例如:
void f1(float a,int b,int c=0,char d=′a′)(正确)void f2(float a,int c=0,char d=′a′,int b)
(不正确)注意:不要同时使用重载函数和缺省参数的函数,因为当调用函数时少写一个参数,系统无法判定是利用重载函数还是利用缺省参数的函数,会发生错误。
14.7 变量的引用类型345
1、“引用”(reference)是C++的一种新的变量类型,是对C的一个重要扩充。它的作用是为一个变量起一个别名。
2、假如有一个变量a,想给它起一个别名b,可以这样写:
int a;
实参把变量名传给形参。i的名字传给引用变量a,这样a就成了i的别名。同理,b成为j的别名。a和i代表同一个变量,b和j代表同一个变量。在swap函数中使a和b的值对换,显然,i和j的值同时改变了。
当读者看到&a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢?请记住,当&a的前面有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如&a),则是取变量的地址。
14.8 内置函数 348 调用函数时需要一定的时间,如果有的函数需要频繁使用,则所用时间会很长,从而降低程序的执行效率。C++提供一种提高效率的方法,即在编译时将所调用函数的代码嵌入到主调函数中。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。
例如:
#include
{ if(b>a)a=b;if(c>a)a=c;return a;} void main(){int i=7,j=10,k=25,m;m=max(i,j,k);cout<<“max=”< 14.9 作用域运算符349 1、作用域运算符∷,∷aa表示全局作用域中的变量。 2、不能用∷ 访问函数中的局部变量。 425- C程序设计算法总结举例 1.顺序结构举例 (该类题目,通常输入一些数据,再通过使用一个或几个数学公式求解,通过赋值表达式得到结果,并输出。包括求三角形面积,相关物体体积,求温度,解二元一次方程组、一元二次方程等) 1-1.求温度转换 华氏-摄氏温度转换公式:c=5/9(f-32)#include k = s = a;for(i = 1;i <= nyy1;j >= 0;j--){ printf(“%c”, 'A' + j);} printf(“n”); } } #include } } 4.数组 包括:排序、查找、字符串长度、字符串大小写转换、比较字符串大小、字符串连接、字符串拷贝、数列前n项、统计字符串中单词个数、求数组元素最值、二维数组输入、输出、转置、数字(字符串)逆序输出。数组中统计奇数偶数,二维数组对角线元素,行列元素的相关处理。 4-1排序(选择法、冒泡法)冒泡法 (1)冒泡法排序算法 将一个数字序列存放在数组中,相邻的两个数进行比较,若前一个数大则交换,...一趟下来最大数必然在最后,然后对于剩下元素反复执行上面操作 #include 编写自定义函数,实现冒泡法排序 #include { x = a[j]; a[j] = a[j + 1]; a[j + 1] = x;} }(3)选择排序算法 将一个数字序列存放在数组中,假设“剩下的序列中第一个元素”为最小值,将其与数组中其它元素进行比较,找到最小值,将该最小值与“剩下的序列中第一个元素”进行交换,最小元素放到剩下序列的第一个位置,反复做这个操作…… #include #include void xuanze(int a[]){ int i, j, x, m;for(i = 0;i <= 8;i++){ m = i;for(j = i + 1;j <= 9;j++)if(a[m] > a[j])m = j;x = a[m];a[m] = a[i];a[i] = x;} } 4-2查找 顺序查找:数字序列放到数组中,不要求数组元素本身有序,查找x是否在数列中: …… for(i=0;i<=9;i++)if(x==a[i])printf(“zhaodaole %d ,%d”,x,i+1); 折半查找:1.要求数列必须有序的;2.比较数列中间元素;3.缩小范围,重复2…… 4-3数列前n项 若已知 f1=1,f2=2,f3=3, fn=fn-1+3fn-2+fn-3 n>=4,用数组的方法求数列前n项(n由键盘输入)及前n项和。 #include //输出所有列下标大于行下标的数组元素 for(i = 0;i <= 2;i++)for(j = 0;j <= 2;j++)if(j > i){ printf(“n行标: %d,列标: %d,元素: %d”, i, j, a[i][j]);} //数组f里元素均初始化为0 for(i = 0;i <= 2;i++)f[i] = 0;//求每列元素的和,并将其放入数组f中 for(i = 0;i <= 2;i++){ for(j = 0;j <= 2;j++)f[i] = f[i] + a[j][i];printf(“列下标为 %d的元素和为: %3d”, i, f[i]);} //求所有能被2,3,5整除的数组元素的平方和 for(i = 0;i <= 2;i++)for(j = 0;j <= 2;j++){ if(a[i][j] %(2 *3 * 5)== 0)s1 = s1 + a[i][j] *a[i][j];} printf(“能被2,3,5整除的数组元素的平方和:%5dn”, s1); //将二维数组赋值给一维数组,并输出 n = 0;for(i = 0;i <= 2;i++)for(j = 0;j <= 2;j++){ b[n] = a[i][j];printf(“%5d”, b[n]);n++;} } 4-8 字符串应用举例 #include //编程序实现strlen函数的功能: i = 0;while(a[i]!= ' '){ i++;} printf(“%s”, “输入的字符串长度是:n”);printf(“%dn”, i); //编程序实现strcat函数的功能: i = j = 0;puts(“请输入字符串b:n”);gets(b);while(a[i]!= ' '){ i++;} while(b[j]!= ' '){ a[i] = b[j];i++;j++;} a[i] = ' ';puts(“连接后字符串为:n”);puts(a); //编程序实现strcmp函数功能: i = 0;k = 0;puts(“n请重新输入两个字符串:n”);gets(a);gets(b);while(a[i]!= ' ' || b[i]!= ' '){ if(a[i] > b[i]){ k = 1;break;} if(a[i] < b[i]){ k =32;} i++;} } 5-5编程序实现函数strcat(str1,str2)函数的功能:该函数实现将两个字符串(分别存放于str1,str2中)连接。 #include main(){ char a[100], b[30];puts(“请输入字符串a,b:n”);gets(a);gets(b);scat(a, b);//函数名做为参数 puts(“连接后字符串为:n”);puts(a);} 5-6编写函数实现:输入一维数组求数组中元素的最大值,输入a,b,c,d求最小值 #include int f2(int a, int b){ int c;if(a < b)c = a;else c = b;return c;} main(){ int a, b, c, d, s[10], i, max, min;scanf(“%d,%d,%d,%d”, &a, &b, &c, &d);for(i = 0;i <= 9;i++)scanf(“%d”, &s[i]);//以上给a,b,c,d和数组s赋值 max = f1(f1(f1(a, b), c), d);min = s[0];//假设min是数组中任意元素 for(i = 0;i <= 9;i++)min = f2(min, s[i]);printf(“max is:%3d, min is :%3dn”, max, min);} 5-7函数要求掌握的算法实现: 排序、查找、字符串求长度,连接,复制,比较大小,输入,输出,以及前面讲过的各种算法通过函数调用实现,求素数,求闰年,最大公约、最小公倍数等等。 5-8变量的作用域和生存期 变量的作用域分为:局部变量和全局变量函数。局部变量作用范围是定义它的函数内,全局变量作用范围是从定义点开始到程序结束。 #include int t = 6;//t全局变量 main(){ int x, y;//y,x局部变量 x = 5;y = a(x);printf(“%2d,%2d,%2d”, s, y, t);} 变量的生存期:静态变量和动态变量 #include int i = 1;//i动态变量,每次调用分配内存空间,每次都重新赋初始值1 c++;i++;return c + i + x;} main(){ int x, y = 0;for(x = 1;x <= 10;x++)y += a(x);printf(“%2d”, y);} y=c+i+x y=(1+2+1)+(2+2+2)+(3+2+3)+(4+2+4)+(5+2+5).....+(10+2+10)=130 6编译预处理命令 #include ....printf(“%5d”,n*n);其结果是? 答案 23 理由:纯粹置换!n*n---5+3*5+3 《C程序设计》内容总结 第一章:C语言概述 第二章:程序的灵魂-算法 第三章:数据类型,运算符和表达式 1.定义变量的规则 2.整型数据 1)常量:表示方法,类型 2)变量:表示方法,内存中的存放方式,分类,定义,溢出 3.浮点型数据 1)常量:表示方法,类型 2)变量:内存中的存放方式,分类,定义,舍入误差 4.字符型数据 1)常量:转义字符* 2)变量:内存中的存放方式 5.字符串(C语言没有字符串这种数据类型)1)常量:定义,内存中的存放方式,与字符型数据区别 2)变量:用字符数组表示 6.变量赋初值:赋值规则 7.各种数据类型间的混合运算 1)混合运算的自动转换规则 2)强制类型转换 3)赋值转换 8.算术运算符和算术表达式 1)+-* / 的计算规则 2)优先级问题(P365附录C)3)自增(++),自减(--)* 9.赋值运算符和赋值表达式 1)赋值规则 2)复合的赋值运算符 3)赋值表达式 10.逗号运算符和逗号表达式 1)表达式的计算规则 第四章:顺序程序设计 1.字符数据的输入和输出:putchar(c);getchar()2.格式输入与输出:printf();scanf()* 第五章:选择程序设计 1.关系运算符与关系表达式 2.逻辑运算符与逻辑表达式 3.条件运算符 4.if语句的几种形式 5.switch语句 第六章:循环控制 1.goto语句 2.while do-while for循环语句 3.break;continue语句 4.循环嵌套 第七章:数组* 1.一维数组的定义和引用:定义,引用,初始化 2.二维数组的定义和引用:定义,引用,初始化 3.字符数组:定义,引用,初始化,结束标志,输入输出 4.字符串处理函数 第八章:函数 1.函数定义的一般形式 1)无参函数的定义 2)有参函数的定义 2.函数参数与函数值 1)形参和实参 2)返回值 3.函数的调用 1)调用的一般形式及调用方式 2)函数定义与函数声明 4.函数的嵌套定义和递归定义 5.数组作为函数参数 1)数组元素做实参 2)数组名做函数参数 3)多维数组名做函数参数 6.局部变量与全局变量 7.变量的存储类别 1)auto变量 2)用static声明局部变量 3)register变量 4)用extern声明外部变量 5)用static声明外部变量 8.内部函数与外部函数 第九章:预处理命令 1.宏定义* 2.“文件包含”处理 第十章:指针 1.指针变量:定义,引用 2.指针变量做函数参数 3.数组与指针 1)指向数组元素的指针 2)通过指针引用数组元素 3)用数组名做函数参数 4.字符串与指针 1)字符串的表示形式 2)字符指针做函数参数 3)字符指针变量和字符数组的区别 5.指向函数的指针 6.返回指针值的函数 7.指针数组和指向指针的指针 8.有关指针的数据类型和指针运算小结 第十一章:结构体与共用体 1.结构体:定义,引用,初始化 2.结构体数组:定义,引用,初始化 3.共用体:定义,引用,初始化 补充:常见错误和程序调试第四篇:C程序设计算法总结举例
第五篇:C程序设计内容总结1(精选)