扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
因为p+2指向a[2],然后+=2,所以a[2]的值变为E。p+1指向a[1],输出是从a[1]开始输出字符串,所以答案是 BEDE
创新互联建站专业为企业提供湘乡网站建设、湘乡做网站、湘乡网站设计、湘乡网站制作等企业网站建设、网页设计与制作、湘乡企业网站模板建站服务,十载湘乡做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
计算机二级C语言考试内容:
◆ 考试内容
一、C语言程序的结构
程序的构成,main函数和其他函数。
头文件,数据说明,函数的开始和结束标志以及程序中的注释。
源程序的书写格式。
C语言的风格。
二、数据类型及其运算
C的数据类型(基本类型,构造类型,指针类型,无值类型)及其定义方法。
C运算符的种类、运算优先级和结合性。
不同类型数据间的转换与运算。
C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
三、基本语句
表达式语句,空语句,复合语句。
输入输出函数的调用,正确输入数据并正确设计输出格式。
四、选择结构程序设计
用if语句实现选择结构。
用switch语句实现多分支选择结构。
选择结构的嵌套。
五、循环结构程序设计
for循环结构。
while和do-while循环结构。
continue语句和break语句。
循环的嵌套。
六、数组的定义和引用
一维数组和二维数组的定义、初始化和数组元素的引用。
字符串与字符数组。
七、函数
库函数的正确调用。
函数的定义方法。
函数的类型和返回值。
形式参数与实在参数,参数值传递。
函数的正确调用,嵌套调用,递归调用。
局部变量和全局变量。
变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。
八、编译预处理
宏定义和调用(不带参数的宏,带参数的宏)。
“文件包含”处理。
九、指针
地址与指针变量的概念,地址运算符与间址运算符。
一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的定义。通过指针引用以上各类型数据。
用指针作函数参数。
返回地址值的函数。
指针数组,指向指针的指针。
十、结构体(即“结构”)与共同体(即“联合”)
用typedef说明一个新类型。
结构体和共用体类型数据的定义和成员的引用。
通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。
十一、位运算
位运算符的含义和使用。
简单的位运算。
十二、文件操作
只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。
文件类型指针(FILE类型指针)。
文件的打开与关闭(fopen,fclose)。
文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数的应用),文件的定位(rewind,fseek函数的应用)。
◆ 考试方式
自2013年3月实施无纸化考试,即只有上机考试,考试时长120分钟,满分100分。
一、题型及分值
单项选择题 40 分(含公共基础知识部分10分),操作题60分(包括填空题18分、改错题18分及编程题24分)。
二、考试环境
Windows7操作系统,Visual C++6.0环境。
c语言知识点有:
1、C语言程序是由多个函数构成的。
2、每个C语言程序中有且只有一个main函数。
3、C语言不使用行号,无程序行的概念。
4、程序中可使用空行和空格。
5、C语言程序格式常用锯齿形书写格式。
6、C语言程序中可加任意多的注释,注释形式/*……*/,并且注释形式不能嵌套,即不能注释里面又有另一个注释。//行注释是C++当中新增加的内容。
7、引用C语言标准库函数,一般要用文件包含预处理命令将其头文件包含进来。
8、用户自定义的函数,必须先定义后使用。
9、变量必须先定义后使用。
10、变量名,函数名必须是合法的标识符,标识符习惯用小写字母,C语言是字母大小写敏感的语言。
11、不能用关键字来命名变量和函数。
12、C语言的语句都是以分号结尾的。
13、计算机中使用的进制数是二进制数,而不是十进制数,因为二进制只有两个数码,运算简单便于硬件实现,同时二进制便于逻辑运算。
将十进制数转换成二进制数应分为整数部分转换和小数部分转换,整数部分转换可采用基数除法来实现,小数部分转换可采用基数乘法来实现。八进制和十六进制也是C语言中经常表示数据的进制,因为它们与二进制之间的转换非常方便,但要注意他们不是计算机中使用的进制。
14、机器数的表示形式有原码、反码和补码几种形式,计算机中通常使用补码的形式来表示一个数,因为补码运算可以连同符号位一起参与运算,这便于运算器的设计与实现。
继承
多态
封装
虚函数
。。。。。。
一、#include “filename.h”和#include filename.h的区别
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件
#include filename.h是指编译器将从标准库目录中开始查找此文件
二、头文件的作用
加强安全检测
通过头文件可能方便地调用库功能,而不必关心其实现方式
三、* , 修饰符的位置
对于*和修饰符,为了避免误解,最好将修饰符紧靠变量名
四、if语句
不要将布尔变量与任何值进行比较,那会很轻易出错的。
整形变量必须要有类型相同的值进行比较
浮点变量最好少比点,就算要比也要有值进行限制
指针变量要和NULL进行比较,不要和布尔型和整形比较
五、const和#define的比较
const有数据类型,#define没有数据类型
个别编译器中const可以进行调试,#define不可以进行调试
在类中定义常量有两种方式
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;
2、 用枚举代替const常量。
六、C++函数中值的传递方式
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)
void fun(char c) //pass by value
void fun(char *str) //pass by pointer
void fun(char str) //pass by reference
假如输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构
函数的类型不能省略,就算没有也要加个void
七、函数体中的指针或引用常量不能被返回
Char *func(void)
{
char str[]=”Hello Word”;
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉
return str;
}
函数体内的指针变量并不会随着函数的消亡而自动释放
八、一个内存拷贝函数的实现体
void *memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)(pvFrom!=NULL));
byte *pBTo=(byte*)pvTo; //防止地址被改变
byte *pbFrom=(byte*)pvFrom;
while (size-- 0)
pbTo++ = pbForm++;
return pvTo;
}
九、内存的分配方式
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存轻易有限。
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。
十、内存分配的注重事项
用new或malloc分配内存时,必须要对此指针赋初值。
用delete 或free释放内存后,必须要将指针指向NULL
不能修改指向常量的指针数据
十一、内容复制与比较
//数组……
char a[]=”Hello Word!”;
char b[10];
strcpy(b,a);
if (strcmp(a,b)==0)
{}
//指针……
char a[]=”Hello Word!”;
char *p;
p=new char[strlen(a)+1];
strcpy(p,a);
if (strcmp(p,a)==0)
{}
十二、sizeof的问题
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节
char a[]=”Hello World!”
char *p=a;
countsizeof(a)end; //12字节
countsizeof(p)endl; //4字节
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4
void fun(char a[1000])
{
countsizeof(a)endl; //输出4而不是1000
}
十三、关于指针
1、 指针创建时必须被初始化
2、 指针在free 或delete后必须置为NULL
3、 指针的长度都为4字节
4、释放内存时,假如是数组指针,必须要释放掉所有的内存,如
char *p=new char[100];
strcpy(p,”Hello World”);
delete []p; //注重前面的〔〕号
p=NULL;
5、数组指针的内容不能超过数组指针的最大轻易。
如:
char *p=new char[5];
strcpy(p,”Hello World”); //报错 目标轻易不够大
delete []p; //注重前面的〔〕号
p=NULL;
十四、关于malloc/free 和new /delete
l malloc/free 是C/C+的内存分配符,new /delete是C++的内存分配符。
l 注重:malloc/free是库函数,new/delete是运算符
l malloc/free不能执行构造函数与析构函数,而new/delete可以
l new/delete不能在C上运行,所以malloc/free不能被淘汰
l 两者都必须要成对使用
l C++中可以使用_set_new_hander函数来定义内存分配异常的处理
十五、C++的特性
C++新增加有重载(overload),内联(inline),Const,Virtual四种机制
重载和内联:即可用于全局函数,也可用于类的成员函数;
Const和Virtual:只可用于类的成员函数;
重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual要害字。和全局函数同名的函数不叫重载。假如在类中调用同名的全局函数,必须用全局引用符号::引用。
覆盖是指派生类函数覆盖基类函数
函数名相同;
参数相同;
基类函数必须有Virtual要害字;
不同的范围(派生类和基类)。
隐藏是指派生类屏蔽了基类的同名函数相同
1、 函数名相同,但参数不同,此时不论基类有无Virtual要害字,基类函数将被隐藏。
2、 函数名相同,参数也相同,但基类无Virtual要害字(有就是覆盖),基类函数将被隐藏。
内联:inline要害字必须与定义体放在一起,而不是单单放在声明中。
Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
1、 参数做输入用的指针型参数,加上const可防止被意外改动。
2、 按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上const要害字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:
将void Func(A a) 改为void Func(const A a)。
而void func(int a)就没必要改成void func(const int a);
3、 给返回值为指针类型的函数加上const,会使函数返回值不能被修改,赋给的变量也只能是const型变量。如:函数const char*GetString(void); char *str=GetString()将会出错。而const char *str=GetString()将是正确的。
4、 Const成员函数是指此函数体内只能调用Const成员变量,提高程序的键壮性。如声明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。
Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现体;
十六、extern“C”有什么作用?
Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。
Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 要害字即可。
十七、构造函数与析构函数
派生类的构造函数应在初始化表里调用基类的构造函数;
派生类和基类的析构函数应加Virtual要害字。
不要小看构造函数和析构函数,其实编起来还是不轻易。
#include iostream.h
class Base
{
public:
virtual ~Base() { cout "~Base" endl ; }
};
class Derived : public Base
{
public:
virtual ~Derived() { cout "~Derived" endl ; }
};
void main(void)
{
Base * pB = new Derived; // upcast
delete pB;
}
输出结果为:
~Derived
~Base
假如析构函数不为虚,那么输出结果为
~Base
太多了,先写这些
1、C语言是一门程序的基础语言,知识点有很多,如果只是应付考试的话,把函数、数组和指针学会了就基本没有问题了,还有就是几种结构按是基础,也是学习必不可少的。C++是在C语言的基础上而法发展起来的,他继承了C语言的大多数编程风格,现在市场上对C语言要求的人很少,软件公司现在都是要C++/java等,极少数招收C语言的,不过学好C++的前提是学好C。
2、非语言部分:
1)首先是基础数学,简单的运算需要会,加减乘除问题不大
2)逻辑数学,分析解决问题逻辑需要清晰有条理
3)线性代数,数据结构中使用
4)概率统计
我谈谈自己的感受:
1:学C之前,先去了解程序的物理本质是什么?运行本质是什么?这个和C无关。C语言只是编程语言的一种~以后你会接触各种工具,各种编程语言(C++,java,等)~先大概了解的程序本质,你就不会陷在各种编程语言的代码和结构规范里出不来!
2:如果说怎么学C,,我自己是这样的
多比较,把老师教的当做参考,,去网站找其他学校的视频比较,这样很有帮助
具体章节:
***:正式开始学习编程前:了解计算机处理程序的流程就是 :代码编辑- 预处理 - 编译- 链接等,这些过程发生在哪里,计算机具体怎么做~只要建立概念,但是概念必须清楚。(不然你对预处理、编译没有概念)
-------------------------------------------------------------------------------------------------------------------
a:了解变量和常量的概念和本质、顺带粗略的了解变量的命名规则,变量的分类,分类的本质是什么
b:了解运算符的分类,逻辑、算术、关系等。。然后了解运算符优先集。了解 ++ ,.--等 ,三目运算的意思
c:在a和b的基础上,了解怎么构建表达式,知道各种表达式是有值的。值是什么
d:有了以上的基础再了解基本C语句,什么时候带“;”号,组合语句要在{}里等,,之类,毕竟写语句的时候,格式还是要的,了解清楚,会少了很多麻烦
e:有了上面的基础,开始准备进入编写程序学习,程序是处理问题的流程,一个流程可以是 顺序、分支、循环等~~看下C语言用什么语法来具体表示这些结构~,了解for ,while 这2个循环结构和含义
==========================================================================
f:正式开始学习编程:
了解变量的作用域、作用时间的概念,全局/临时 ,静态/动态 变量的区分。
了解函数的概念~~函数就是功能,表示实现某个功能块,了解C语言描述的格式。
知道main函数是入口函数等。。函数原型等。
了解函数调用。。和递归调用的区别。。一个是调用别人,。一个是调用自己,等。
知道函数 中return的意义。。知道函数返回值表示什么,,
===============================================================
g:了解预处理的本质概念和个各种预处理命令。。宏拉。。文件包含拉。。条件编译拉的意思和本质,然后去看C的实现语法。充实你对函数的认识
==================================================================
进阶阶段,。,重点来拉。。。指针(C得成败关键)
需要你对程序的物理实现,就是计算机结构有一定的了解。。知道地址的概念,为什么程序需要地址;地址代表什么~~
学习指针变量和指针运算符(取得值和取地址 * ,)..运用一下。。做几个实验。了解下和之前基本数据类型的区别
然后学习 复杂数据类型,。。数组,结构。。并在学使用这些结构中,运用指针。。继续体会指针的使用。。
-=====================================================================
将指针和函数作结合。。把指针当返回值和入参,,临时变量等。。体会一下。。进一步体会指针的使用!粗粗了解链表。。就是指针和结构的融合~~建立一个概念,,加强体会
======================================================
最后,。。了解文件的概念。。。发现还真难写,。却是C的体系很庞大。。而要去体会,只能是多练多写代码。,。多想。。这个计算机学习和以前学习真心不一样~~光看书是不行的,一定要敲代码。。多敲。。越敲就越有心的。。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流