同济大学c语言复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delete p; ()
delete q1; delete q2;
指针和数组 若: int a[5]={1,3,5,7,9},*p=a+1; 则:*p+1的值为4 *(p+1)的值即p[1]的值为5 注意一些概念的区别: 指针变量做形参 若有函数:void fun(int *p,
变量的引用做形参
(2)break语句和continue语句 x=0; x=0; for(j=4;j<=6;j++) for(j=4;j<=6;j++) {if(j%2) {if(j%2) continue; break; x+=j; x+=j; } } cout<<x; 10 4 cout<<x;
数组
避免下面错误: char s[5]={“This is a book"}; char s[10]; s = "I am fine"; int n=10,a[n]; 数组做函数形参时,一维数组省略长度说明,数值型数组长 度可用另一整型参数说明。如:
! !
考试系统使用注意(务必认真研读)
编程题上传前必须关闭VC应用程序,无法
正常关闭的也必须用任务管理器强行 关闭。否则会影响cpp文件的正确上传!
!
准备离场前,用“查看上传文件”菜单检查.cpp文 件是否正确上传,此检查步骤非常关键,具体操作见下 页。
1、 单击 此菜 单后 弹出 如下 窗口 3、用记事本打开该文件看 其内容是否为所编内容
里面为空
不要越界 数组名是地址常量,不可被赋值 只有字符数组可整体输入输出
void sort(int x[ ], int n )
数组长度
二维数组的输入 、输出、元素的存储
1 2 3 4 5 6 7 8 9
函数 定义: 函数头的末尾无分号 若函数类型为非void 类型,则函数中应有return语句 返回同类型的数据。 参数一一说明类型 调用: 以语句的形式调用(函数类型为void) 以表达式形式调用(函数类型非void) 说明: 函数定义在后调用在前时需要。 参数传递: 值参数——单向 地址参数(数组名或指针变量)-------参数本身单向传 递, 但指针变量所指内容或数组元素的改变是双向的 引用参数————形参的改变影响实参。
(编程题中含一个带自定义函数的题目和一个文件操作的题目)
!
提示:考试系统的“帮助”菜单下有关于常用库函数的 功能介绍和头文件说明。
主要知识点
一、语法 标识符:
由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。 关键字不能作为用户定义的标识符。 用户定义标识符:
合法: char2 _abc a3 P1 不合法: int p[i] break 3a
结构体 struct student{ int num; char name[20]; float score; }st={123456L,”zhang san”,88},stclass[30],*p=&st,st1;
函数定义在调用之后 故需函数说明
#include "iostream.h" void maxmin(int a[],int n,int *p ,int *q) {int i,max=a[0],min=a[0]; for(i=1;i<n;i++) { if (a[i]>max)max=a[i]; if (a[i]<min) min=a[i]; } *p=max; *q=min; } void main() { int i,n,a[100],max,min; cin>>n; for (i=0;i<n;i++) cin>>a[i]; maxmin(a,n,&max,&min); cout<<"max= "<<max<< " min= " <<min<<endl; }
•对操作数的要求
(1) (i+j)++, 3++ (╳) ++,-- 变量 (2) a%b a,b必须为整型
百度文库
•结果的类型 int n,s=0; for(n=1;n<=10;n++) s+=1/n; 上述结果为1,若要得到正确结果,应用如下形式: s+=1.0/n 或:s+=1/(float)n
•用逻辑表达式表达某个命题 如: ch<„0‟||ch>„9‟ ch是非数字字符
例:分析下面程序
void cube(int x) {x=x*x*x;} 传值调用 void main() 结果为5 {int x=5;cube(x); cout<<x<<endl; } void cube(int *x) 传址调用 {*x=(*x)*(*x)*(*x); } 结果为125 void main() {int x=5;cube(&x); cout<<x<<endl; }
i=1,j=1 i=1,j=2
当全局变量和局部变量同名时,局部变量起作用
int m=10,n=10; void a(int n) {n=15/n;m=m/2;} void main() {int n=3; a(n); cout<<“n=“<<n<<“,m=“<<m<<endl; } n=3,m=5
返回指针值的函数 求一维数组a中的最大值。 int a[8]={45,6,35,-12,100,11,3,-40}; void main() {int *p,____(1)____; *max() p=max( ); cout<<*p; } int *max( ) //函数的返回值为指针 {int i,k=0; int t=a[0]; for(i=1;i<8;i++) if(t<a[i]) {t=a[i]; k=i; } return(___(2)___); &a[k] }
常量:
a+b
class public '\72'
合法: '\n' '\102 ' 不合法: 'ABC' 1.2e0.5
'\t ' M '[]'
运算符和表达式:
•结合性及优先级
例: (1) a+=a*2 a=a+(a*2) 若初始情况下a=3,则执行上述运算后a=? 9 (2) x==0?a++:b++ 若已知a=4,b=3,x=5 则a、b? (3)若已知int a[5]={0,2,4,6,8},*p=a; 设a的首地址为1000,则: 执行*p++后 表达式的值为0,p的值为1004 执行++*p后 表达式的值为1,p的值为1000 执行 *++p后 表达式的值为2,p的值为1004
int cube(int x) {x=x*x*x; return(x);} void main() {int x=5; x=cube(x); cout<<x<<endl; }
虽为传值调用,但 返回值赋值给x,故 结果为125
void int x=5; 无参函数,使用 void cube( ) 的全局变量,故 {x=x*x*x;} 结果为125 void main() {cube(); #include "iostream.h" cout<<x<<endl; } void cube(int &x) {x=x*x*x;} void main() 引用调用 {int x=5; cube(x); 结果为125 cout<<x<<endl;}
x>=0&&x<=200&&x%2==0 x是0到200之间的偶数
• 用随机函数产生在某一区间的数或字符 rand()%101 rand()%51+50 char x; x=rand()%26+65;
• &&与||运算并结合自增、自减运算 已知 a=b= 1; 则执行以下语句 后,各变量的值为? --a&&++b; a=0, a=2, b=1 b=1
gets(c) 则c的值为:how do you do
ch=ch+2; cout<<ch;
cout<<*(s+2); cout<<s+2 }
// 输出 d
// // 输出 c 输出 cde
cout依据其后表达式类 型决定输出内容
语句:
• if(条件表达式) 几种等价关系 if(x) 依据x的类型不同,分别等价于如下形式: if(x!=0) if(x!=„\0‟) 思考:if(!x)的等价关系 if(x!=NULL) switch语句 switch(a%5) char a=‟A‟; {case 0: cout<<a++; switch(a) case 1: cout<<++a; {case „A‟: cout<<a-1; case 2: cout<<a--; case „B‟: cout<<a+1; case 3: cout<<--a; case „C‟: cout<<a++; } default: cout<<--a; 若a=2,则输出: } 2 0
++a||--b;
初始化与赋值:
错误: int a=b=c=0; 应为: int a=0,b=0,c=0; 或:int a(0),b(0),c(0); 或: int a,b,c; a=b=c=0; • 引用 int x=5,&y=x; y是x的引用,二者同步变化.
输入和输出流 cin,cout
例: char c[20]; cin>>c; 若输入how do you do 则c的值为how void main() { char ch=„b‟, s[]=“abcde”; cout<<ch+2; // 输出 100 („d‟的ASCII码) 改为
int &q)
则相应的函数调用语句:
void main() {int a,b; ……
变量的地址做实参
fun(&a, b);
……}
变量做实参
•例:分析下面程序 #include “stdio.h” void f(float *p1,float *p2,float *s) {s=new float; 形参的指向已变,与实参 *s=*p1+*p2; 不再指向相同的内容 } void main() {float a=1.0, b=2.0,*s=&a; f(&a,&b,s); 1.0 cout<<*s<<endl; }
函数重载:
函数名相同
参数类型或参数个数不同 int fun(int a, int b)与 double fun(int a, int b)不是重载函数 int fun(int a, int b)与 int fun(int a)是重载函数
默认参数:
只能位于参数表列最右端 不能同时使用函数重载和默认参数 int fun(int a, int b, int c=10)正确 int fun(int a, int b=10, int c)不正确
2、 逐一打 开文件 夹查看 有否对 应的.cpp 文件
!
在“查看上传文件”菜单中只能检查.cpp文件是 否正确上传了,但不能在该打开窗口中直接对cpp文件进 行修改,若要进行修改,必须回到c:\ks文件夹下修改,并 关闭VC后重新上传,然后重新做以上检查步骤。
试题类型及分布:
题型及题量。具体如下: 单选部分:10题 程序填充:2题 编程部分:4题(其中两个编程题,两个改错题)
•循环: (1)do _while 先执行后判断,至少执行一次 for ,while 先判断后执行,可能一次也不执行 for循环条件中常使用逗号表达式 void main() 注意区分空循环 {int i; for(i=0;i<5;i+=2); cout<<i; 6 } void main() {int i; 024 for(i=0;i<5;i+=2) cout<<i<<„ „; } int k=0; while(k=0) k++; for(int k=1;k==3;k++); 执行次数?
变量的作用域和存储类别 静态变量只初始化一次,若未初始化,默认值为0. 动态变量每调用一次函数,便初始化一次。若未初始化,默认 值为不定值
void test() {int i=0; static int j=0; i++;j++; cout<<i<<j<<endl; } void main() {int i; test(); test(); }
指针
运算
float *p,*q; 若已知p=1000,则 q=1004
p是指向变 量a的指针
则 : q-p的值为1 p+2的值为1008
b是变量a的引用
int a=3,*p=&a,*q1,*q2,&b=a;
q1=new int(6); // *q1的值为6
q2=new int[10];//q2指向存放10个整数的连续内存的首地址
delete q1; delete q2;
指针和数组 若: int a[5]={1,3,5,7,9},*p=a+1; 则:*p+1的值为4 *(p+1)的值即p[1]的值为5 注意一些概念的区别: 指针变量做形参 若有函数:void fun(int *p,
变量的引用做形参
(2)break语句和continue语句 x=0; x=0; for(j=4;j<=6;j++) for(j=4;j<=6;j++) {if(j%2) {if(j%2) continue; break; x+=j; x+=j; } } cout<<x; 10 4 cout<<x;
数组
避免下面错误: char s[5]={“This is a book"}; char s[10]; s = "I am fine"; int n=10,a[n]; 数组做函数形参时,一维数组省略长度说明,数值型数组长 度可用另一整型参数说明。如:
! !
考试系统使用注意(务必认真研读)
编程题上传前必须关闭VC应用程序,无法
正常关闭的也必须用任务管理器强行 关闭。否则会影响cpp文件的正确上传!
!
准备离场前,用“查看上传文件”菜单检查.cpp文 件是否正确上传,此检查步骤非常关键,具体操作见下 页。
1、 单击 此菜 单后 弹出 如下 窗口 3、用记事本打开该文件看 其内容是否为所编内容
里面为空
不要越界 数组名是地址常量,不可被赋值 只有字符数组可整体输入输出
void sort(int x[ ], int n )
数组长度
二维数组的输入 、输出、元素的存储
1 2 3 4 5 6 7 8 9
函数 定义: 函数头的末尾无分号 若函数类型为非void 类型,则函数中应有return语句 返回同类型的数据。 参数一一说明类型 调用: 以语句的形式调用(函数类型为void) 以表达式形式调用(函数类型非void) 说明: 函数定义在后调用在前时需要。 参数传递: 值参数——单向 地址参数(数组名或指针变量)-------参数本身单向传 递, 但指针变量所指内容或数组元素的改变是双向的 引用参数————形参的改变影响实参。
(编程题中含一个带自定义函数的题目和一个文件操作的题目)
!
提示:考试系统的“帮助”菜单下有关于常用库函数的 功能介绍和头文件说明。
主要知识点
一、语法 标识符:
由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。 关键字不能作为用户定义的标识符。 用户定义标识符:
合法: char2 _abc a3 P1 不合法: int p[i] break 3a
结构体 struct student{ int num; char name[20]; float score; }st={123456L,”zhang san”,88},stclass[30],*p=&st,st1;
函数定义在调用之后 故需函数说明
#include "iostream.h" void maxmin(int a[],int n,int *p ,int *q) {int i,max=a[0],min=a[0]; for(i=1;i<n;i++) { if (a[i]>max)max=a[i]; if (a[i]<min) min=a[i]; } *p=max; *q=min; } void main() { int i,n,a[100],max,min; cin>>n; for (i=0;i<n;i++) cin>>a[i]; maxmin(a,n,&max,&min); cout<<"max= "<<max<< " min= " <<min<<endl; }
•对操作数的要求
(1) (i+j)++, 3++ (╳) ++,-- 变量 (2) a%b a,b必须为整型
百度文库
•结果的类型 int n,s=0; for(n=1;n<=10;n++) s+=1/n; 上述结果为1,若要得到正确结果,应用如下形式: s+=1.0/n 或:s+=1/(float)n
•用逻辑表达式表达某个命题 如: ch<„0‟||ch>„9‟ ch是非数字字符
例:分析下面程序
void cube(int x) {x=x*x*x;} 传值调用 void main() 结果为5 {int x=5;cube(x); cout<<x<<endl; } void cube(int *x) 传址调用 {*x=(*x)*(*x)*(*x); } 结果为125 void main() {int x=5;cube(&x); cout<<x<<endl; }
i=1,j=1 i=1,j=2
当全局变量和局部变量同名时,局部变量起作用
int m=10,n=10; void a(int n) {n=15/n;m=m/2;} void main() {int n=3; a(n); cout<<“n=“<<n<<“,m=“<<m<<endl; } n=3,m=5
返回指针值的函数 求一维数组a中的最大值。 int a[8]={45,6,35,-12,100,11,3,-40}; void main() {int *p,____(1)____; *max() p=max( ); cout<<*p; } int *max( ) //函数的返回值为指针 {int i,k=0; int t=a[0]; for(i=1;i<8;i++) if(t<a[i]) {t=a[i]; k=i; } return(___(2)___); &a[k] }
常量:
a+b
class public '\72'
合法: '\n' '\102 ' 不合法: 'ABC' 1.2e0.5
'\t ' M '[]'
运算符和表达式:
•结合性及优先级
例: (1) a+=a*2 a=a+(a*2) 若初始情况下a=3,则执行上述运算后a=? 9 (2) x==0?a++:b++ 若已知a=4,b=3,x=5 则a、b? (3)若已知int a[5]={0,2,4,6,8},*p=a; 设a的首地址为1000,则: 执行*p++后 表达式的值为0,p的值为1004 执行++*p后 表达式的值为1,p的值为1000 执行 *++p后 表达式的值为2,p的值为1004
int cube(int x) {x=x*x*x; return(x);} void main() {int x=5; x=cube(x); cout<<x<<endl; }
虽为传值调用,但 返回值赋值给x,故 结果为125
void int x=5; 无参函数,使用 void cube( ) 的全局变量,故 {x=x*x*x;} 结果为125 void main() {cube(); #include "iostream.h" cout<<x<<endl; } void cube(int &x) {x=x*x*x;} void main() 引用调用 {int x=5; cube(x); 结果为125 cout<<x<<endl;}
x>=0&&x<=200&&x%2==0 x是0到200之间的偶数
• 用随机函数产生在某一区间的数或字符 rand()%101 rand()%51+50 char x; x=rand()%26+65;
• &&与||运算并结合自增、自减运算 已知 a=b= 1; 则执行以下语句 后,各变量的值为? --a&&++b; a=0, a=2, b=1 b=1
gets(c) 则c的值为:how do you do
ch=ch+2; cout<<ch;
cout<<*(s+2); cout<<s+2 }
// 输出 d
// // 输出 c 输出 cde
cout依据其后表达式类 型决定输出内容
语句:
• if(条件表达式) 几种等价关系 if(x) 依据x的类型不同,分别等价于如下形式: if(x!=0) if(x!=„\0‟) 思考:if(!x)的等价关系 if(x!=NULL) switch语句 switch(a%5) char a=‟A‟; {case 0: cout<<a++; switch(a) case 1: cout<<++a; {case „A‟: cout<<a-1; case 2: cout<<a--; case „B‟: cout<<a+1; case 3: cout<<--a; case „C‟: cout<<a++; } default: cout<<--a; 若a=2,则输出: } 2 0
++a||--b;
初始化与赋值:
错误: int a=b=c=0; 应为: int a=0,b=0,c=0; 或:int a(0),b(0),c(0); 或: int a,b,c; a=b=c=0; • 引用 int x=5,&y=x; y是x的引用,二者同步变化.
输入和输出流 cin,cout
例: char c[20]; cin>>c; 若输入how do you do 则c的值为how void main() { char ch=„b‟, s[]=“abcde”; cout<<ch+2; // 输出 100 („d‟的ASCII码) 改为
int &q)
则相应的函数调用语句:
void main() {int a,b; ……
变量的地址做实参
fun(&a, b);
……}
变量做实参
•例:分析下面程序 #include “stdio.h” void f(float *p1,float *p2,float *s) {s=new float; 形参的指向已变,与实参 *s=*p1+*p2; 不再指向相同的内容 } void main() {float a=1.0, b=2.0,*s=&a; f(&a,&b,s); 1.0 cout<<*s<<endl; }
函数重载:
函数名相同
参数类型或参数个数不同 int fun(int a, int b)与 double fun(int a, int b)不是重载函数 int fun(int a, int b)与 int fun(int a)是重载函数
默认参数:
只能位于参数表列最右端 不能同时使用函数重载和默认参数 int fun(int a, int b, int c=10)正确 int fun(int a, int b=10, int c)不正确
2、 逐一打 开文件 夹查看 有否对 应的.cpp 文件
!
在“查看上传文件”菜单中只能检查.cpp文件是 否正确上传了,但不能在该打开窗口中直接对cpp文件进 行修改,若要进行修改,必须回到c:\ks文件夹下修改,并 关闭VC后重新上传,然后重新做以上检查步骤。
试题类型及分布:
题型及题量。具体如下: 单选部分:10题 程序填充:2题 编程部分:4题(其中两个编程题,两个改错题)
•循环: (1)do _while 先执行后判断,至少执行一次 for ,while 先判断后执行,可能一次也不执行 for循环条件中常使用逗号表达式 void main() 注意区分空循环 {int i; for(i=0;i<5;i+=2); cout<<i; 6 } void main() {int i; 024 for(i=0;i<5;i+=2) cout<<i<<„ „; } int k=0; while(k=0) k++; for(int k=1;k==3;k++); 执行次数?
变量的作用域和存储类别 静态变量只初始化一次,若未初始化,默认值为0. 动态变量每调用一次函数,便初始化一次。若未初始化,默认 值为不定值
void test() {int i=0; static int j=0; i++;j++; cout<<i<<j<<endl; } void main() {int i; test(); test(); }
指针
运算
float *p,*q; 若已知p=1000,则 q=1004
p是指向变 量a的指针
则 : q-p的值为1 p+2的值为1008
b是变量a的引用
int a=3,*p=&a,*q1,*q2,&b=a;
q1=new int(6); // *q1的值为6
q2=new int[10];//q2指向存放10个整数的连续内存的首地址