当前位置:首页 >> 数学 >>

复习201404


! !

考试系统使用注意(务必认真研读)

编程题上传前必须关闭VC应用程序,无法

正常关闭的也必须用任务管理器强行 关闭。否则会影响cpp文件的正确上传!

!

准备离场前,用“查看上传文件”菜单检查.cpp文 件是否正确上传,此检查步骤非常关键,具体操作见下 页。

/>
1、 单击 此菜 单后 弹出 如下 窗口

3、用记事本打开 该文件看其内容 是否为所编内容

2、 逐一打 开文件 夹查看 有否对 应的.cpp 文件

!

若考试时间已到,考试程序会进行自动上传,然后退出 考试系统。此时若发现尚有未关闭的VC程序,则需立即 关闭所有VC程序,然后马上再运行一下V考试程序,主 动做一次保存上传,再退出考试程序。注意,自动退出 考试程序后只有一分钟左右的时间可以做上述处理。

试题类型及分布:
题型及题量。具体如下: 单选部分:10题 程序填充:2题 编程部分:4题(其中两个编程题,两个改错题)

!

提示:考试系统的“帮助”菜单下有关于常用库函数的 功能介绍和头文件说明。

主要知识点

一、语法 标识符:
由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。 关键字不能作为用户定义的标识符。 用户定义标识符:

合法: char2 _abc a3 P1 不合法: int p[i] break 3a
常量:

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

?对操作数的要求
(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是非数字字符

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

++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码) 改为
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

?循环: (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++); 执行次数?

(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]; 数组做函数形参时,一维数组省略长度说明,数值型数组长 度可用另一整型参数说明。如:
里面为空

不要越界 数组名是地址常量,不可被赋值 只有字符数组可整体输入输出

void sort(int x[ ], int n )
数组长度

二维数组的输入 、输出、元素的存储

1 2 3 4 5 6 7 8 9

函数 定义: ? 函数头的末尾无分号 ? 若函数类型为非void 类型,则函数中应有return语句 返回同类型的数据。 ? 参数一一说明类型 调用: 以语句的形式调用(函数类型为void) 以表达式形式调用(函数类型非void) 说明: 函数定义在后调用在前时需要。 参数传递: 值参数——单向 地址参数(数组名或指针变量)-------参数本身单向传 递, 但指针变量所指内容或数组元素的改变是双向的 引用参数————形参的改变影响实参。

函数重载:

?函数名相同
?参数类型或参数个数不同 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)不正确

变量的作用域和存储类别 静态变量只初始化一次,若未初始化,默认值为0. 动态变量每调用一次函数,便初始化一次。若未初始化,默认 值为不定值

void test() {int i=0; static int j=0; i++;j++; cout<<i<<j<<endl; } void main() {int i; test(); test(); }

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

例:分析下面程序
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; }

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;}

指针
运算
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 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,
变量的引用做形参

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; }

返回指针值的函数 求一维数组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] }

函数定义在调用之后 故需函数说明

#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; }

结构体 struct student{ int num; char name[20]; float score; }st={123456L,”zhang san”,88},stclass[30],*p=&st,st1;

结构变量及结构成员的使用: st1=st;(同类型结构变量之间可整体赋值) 除了做函数参数可直接使用结构变量名,以及同类型结构变量间的 赋值可整体操作外,其他操作一律引用到成员,如: st.score=78; strcpy(stclass[5].name,”li si”); p->score=78; strcpy(p->name,”li si”);

常用内部函数:

?字符串处理函数 需使用 #include “string.h”

?strlen(str) 如:strlen(“ \nabcd ”)的结果为5(不包含对‘\0?的统计)
?strlwr(str) ?strupr(str) ?strcpy(str1,str2) 如:

char s1[30]=“abcd”;
strcpy(s1+2,“123”); cout<<s1; 输出结果为:ab123 ?strcat(str1,str2)

?strcmp(str1,str2)

常用内部函数:

?字符串处理函数 需使用 #include “string.h”

?strlen(str) 如:strlen(“ \nabcd ”)的结果为5(不包含对‘\0?的统计)
?strlwr(str) ?strupr(str) ?strcpy(str1,str2) 如:

char s1[30]=“abcd”;
strcpy(s1+2,“123”); cout<<s1; 输出结果为:ab123 ?strcat(str1,str2)

?strcmp(str1,str2)

需使用 #include “stdio.h”
gets、puts()

需使用 #include “math.h”
sqrt、fabs
需使用 #include “stdlib.h” rand、exit

二、算法

1、素数
(1) int isprime(int m) {int i; for(i=2;m%i!=0;i++);//注意此处分号不能少 return(i= =m); (2)

}

#include “math.h” ........ k=sqrt(m); for(i=2;i<=k;i++) if(m%i= =0)break; if(i= =k+1) ...... else ......

2. 最大公约数和最小公倍数
int gcd(int m,int n) {int h; while(h=m%n) {m=n;n=h;} return (n); } 也可以从定义出发求解最大公约数(程序略) 还可以用辗转相减的方法求解最大公约数(程序略)

3. 判断回文数和回文串

void main() {int a,b,c=0,c1; cin>>a; c1=a; while(a!=0) {b=a%10; c=c*10+b; a/=10; } if(c1==c) cout<<“yes”; else cout<<“no”; }

构造a的逆序数

a:123

c:321

int huiwen(char s[]) {char t[100]; strcpy(t,s); int len=strlen(s); int i; for(i=0;i<len/2;i++) { char c=s[i]; s[i]=s[len-1-i]; s[len-1-i]=c; } if(strcmp(s,t)==0) return 1; else return 0; }

int huiwen(char s[]) { int i,len=strlen(s); for(i=0;i<len/2;i++) if(s[i]!=s[len-1-i]) return 0; return 1; }

4.数组 (1)求极值(包括最大最小值及其下标) 求最大元素 max=a[0]; for(k=1;k<N;k++) if(a[k]>max) max=a[k]; 求最大元素的位置(即下标) int imax,k; imax=0; for(k=1;k<n;k++) if(a[k]>a[imax])//注意是元素之间比较,imax为最大下标 imax=k; //注意替换的是最大下标,而不是元素

(2)排序
冒泡法:
for(i=0;i<n-1;i++) /*从小到大排序*/ for(j=0;j<n-1-i;j++) if(a[j]>a[j+1]) {temp=a[j];a[j]=a[j+1];a[j+1]=temp;}

选择法:
for(i=0;i<n-1;i++) {k=i; for(j=i;j<n;j++) if(a[k]<a[j])k=j; if(i!=k){w=a[i];a[i]=a[k];a[k]=w;} }

(3)插入、删除 注意数组不同移动方向情况下循环控制变量的变化情况 插入: for(k=0;k<9;k++) if (x<a[k]) break; // 找到插入的位置下标为k for(i=8;i>=k;i--) a[i + 1] = a[i]; //从最后元素开始、往后移 a[k] = x; //插入 删除: for(i=0;i<10;i++) if(key==a[i])break; for(j=i;j<10;j++) //从待删位置开始、向前移 a[j]=a[j+1];

(4)二分法查找

在由小到大排列的N个元素组成的数组中查找x,主要实现部分如下: ...... bot=0;top=N; mid=(bot+top)/2; while(bot<=top&&a[mid]!=x) {if(x>a[mid]) bot=mid+1; else top=mid-1; mid=(bot+top)/2; } if( bot>top ) cout<<"not found.\n"; else cout<<"a["<<mid<<"]="<<a[mid]<<endl; ......

5. 字符串处理
(1) 求长度 long len(char s[]) {long i=0; while(s[i]!='\0')i++; return i; } 上述函数相当于库函数strlen 的功能 (2) 复制 完全复制: void copy_string(char *from,char *to)//两参数也可以为 字符数组名 {while(*from!='\0') *to++=*from++; *to='\0'; } 上述函数相当于库函数strcpy的功能

复制前n个字符组成的子串 for(k=0;k<n;k++) to[k]=from[k]; to[k]=?\0?;

复制从第n个字符开始的子串 for(k=0,j=n;from[j]!=?\0?;k++,j++) to[k]=from[j]; to[k]=?\0?;

(4)连接

假设有定义:char s1[80],s2[20]; …… int i=0; while(s1[i]!=?\0?) i++; //找到第一个串的末尾 int j=0; while(s2[j]=?\0? ) { s1[i]=s2[j]; i++; j++;} s1[i]=?\0?;
以上程序相当于库函数strcat的功能

(5)比较字符串
int cmp(char s1[],char s2[]) {int i=0,r; while(s1[i]= =s2[i]&&s1[i]!='\0')i++; if(s1[i]= ='\0'&&s2[i]= ='\0') r=0; else if(s1[i]>s2[i]) r=1; else r= -1; return (r); }

上述函数相当于库函数strcmp的功能

(6)字符转换
大写转小写: void change(char s[]) {int k=0; while(s[k]!=?\0?)

{

if(s[k]>=?A?&&s[k]<=?Z?)
s[k]=s[k]+32;//小写字母比相应大写字母大32 k++;

}}该函数的功能相当于库函数strlwr的功能 小写转大写、加密(程序略)

(7)查找 查找字符串s中与字符c匹配的字符并返回其在串 中的地址.
char *match(s,c) char s[],c; {int i=0; while(c!=s[i]&&s[i]!='\0')i++; if(s[i]!='\0') return(&s[i]); else return(NULL); }

(8) 字符串中字符出现频率的统计

代码见教材


相关文章:
201404单选复习
复习201404 暂无评价 42页 2下载券 复习201404 暂无评价 2页 免费 第一 二章...单选复习 2014.4 1 New technology was used in teaching. As a result, ...
201404自然灾害与防治专题复习(含分类试题)
201404自然灾害与防治专题复习(含分类试题)_政史地_高中教育_教育专区。价值 自然灾害专题复习★、自然灾害及其影响 自然灾害系统示意图 (一)自然灾害 1.自然异变...
2014上学期教学视导汇报材料201404
包科教干深入课堂推门听课, 按照学业考试说明, 对照教师复习计划认真评课, 提出改进意见, 努力挖掘课堂最大效益。 4.检查落实,保障复习实效 要求学科组每课调度...
201404精神文明建设考试题
201404精神文明建设考试题_社会学_人文社科_专业资料。时政要问及精神文明知识考题...口腔执业医师实践技能复习资料 中医护理学基础重点 执业医师实践技能考试模拟试题文...
微机原理作业201404
微机原理作业201404_工学_高等教育_教育专区。微机原理复习资料微机原理作业 一、单项选择题(本大题共 20 小题,每小题 1 分,共 20 分)08 年 在每小题列出...
201404七年级(下)期中数学卷(沪科)
201404七年级(下)期中历... 201404八年级(下)期中历...1/2 相关文档推荐 ...口腔执业医师实践技能复习资料 中医护理学基础重点 执业医师实践技能考试模拟试题©...
2014九年级一轮模拟考试答案
2012年初中物理总复习知... 2014九年级英语 2014九年级一轮模拟试题... 2014...2014春九年级英语一轮答... 2014九年级一轮模拟试题 201404九年级结业性考试1...
自考--近现代史选择题(自力201404复习资料)
《中国近现代史纲要》选择题汇总 第一章 反对外国侵略的斗争第一节 鸦片战争前的中国和世界 一、鸦片战争前的中国 (一)中国封建社会的基本特点 1.(补充单选)...
自考--马克思选择题(自力201404复习资料)
对马克思主义的产生起了巨 大影响的自然科学成果有(BCD) A.地理学的重大发现 B.细胞学说 C.能量守恒和转化定律 D.达尔文的生物进化论 三、马克思主义在实践中...
导学稿设计、编写及使用要求201404
导学稿设计、编写及使用要求201404_教学案例/设计_教学研究_教育专区。求是实验...4.定时将 “导学稿”进行归类整理,装订成复习资料。 (二)对教师的要求 1....
更多相关标签: