设为首页 加入收藏

TOP

c语言笔记第六天:extern,引用,排序(一)
2017-07-20 10:22:16 】 浏览:4456
Tags:语言 笔记 extern 引用 排序

c语言笔记第六天:extern,引用,排序,使用函数目的:1.程序复用2.提高主程序结构的清晰性和易读性3.使程序的调试和维护更容易。

数组名是一个符号常量,不能被修改

取余的时候不能用小数

引用是另一个变量的别名,引用本身不占用内存空间,必须在声明时初始化

希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。

数据的完整性是指数据的正确性、有效性和相容性

extern:外来的

下面语句的输出结果是________。

printf("%d\n",strlen("\t\"\065\xff\n"));

A)14 B)8

C)5 D)输出项不合法,无正常输出

答案:C

评析:在c语言中,以“\”开头的字符均为转义字符,其中“\”后可跟1~3位八进制数或在“\”后跟字母x及1~2位十六进制数,以此来代表一个特定的字符。

malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。

而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。

int *p;

p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);

或:

int* parr;

parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;

int* p;

p = (int *) malloc (sizeof(int));

比如想分配100个int类型的空间:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。

1.一般将数据结构分为两大类型:线性结构与非线性结构。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

2.

若进栈序列为1,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_______。

A)1,4,3,2 B)2,3,4,1

C)3,1,4,2 D)3,4, 2,1

答案:C

评析:栈是一种后进先出表,选项c中,先出栈的是3,说明此时栈内必然有1,2,由于1先于2进栈,所以l不可能在2之前出栈,故选项C这种出栈序列是不可能的。

3.

对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为_______。

A)n-1 B)n C)n+1 D)2n

答案:C

评析:在n个结点的单向链表(无表头结点)中,每个结点都有一个指针单元(即指针域),加上头指针,至少需要n+1个指针单元。

4.

若有以下类型说明语句:

char w;int x;float y,z;

则表达式w*x+z-y的结果为________类型。

A)float B)char C)int D)double

答案:A

评析:在进行运算时,不同类型的数据参加运算,需要先将其转换成同一类型的数据,然后再进行运算。转换的顺序由低到高为:char,short→int→unsigned→long→double→float,故结果为float型。

5.

问题一:写出冒泡排序

void pop_sort(int a[],int N)

{

int tmp, i , j;

for(j=0; j for( i=0; i<9-j; i++)

if( a[i]>a[i+1])

{

tmp=a[i];

a[i]=a[i+1];

a[i+1]=tmp;

}

}

问题一:写出选择法排序

void select_sort(int a[],int N)

{

int i , j, k, t;

for(i=0; i k=i;

for( j=i+1; j if( a[j] k=j;

tmp=a[k];

a[k]=a[i];

a[i]=tmp;

} }

6.

设有int a=3;则执行语句a+=a-=a*a;后 变量a的值是? 答案:-12

7.

1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。( 正确 ) 2、int (*ptr) (),则ptr是一维数组的名字。(错误 int (*ptr) ();定义一个指向函数的指针变量 )

3、指针在任何情况下都可进行>, <,>=, <=,==运算。( 错误 ) 4、switch(c) 语句中c可以是int ,long,char ,float ,unsigned int 类型。( 错,不能用实形 )

8.

交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3; 答案:有两种解法, 一种用算术算法, 一种用^(异或) a = a + b; b = a - b; a = a - b;

or a = a^b; b = a^b; a = a^b; or a ^= b ^= a; // 只能对int,char.

9.

程序的局部变量存在于(栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

10.

#include

void main()

{

int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化

int *p[3];//定义指针数组,每一个元素都是指针

int m;//定义变量m

for(m=0;m<3;m++)//循环三次

p[m]=&a[m*4];

/**************开始分析循环语句******************

m=0时,p[0]=&a[0] ,p[0]指向a[0]

m=1时,p[1]=&a[4] ,p[1]指向a[4]

m=2时,p[2]=&a[8] ,p[2]指向a[8]

*************************************************/

printf("%d\n",p[2][2]);

// 相当于p[2]+2 因为p[2]指向a[8],故p[2][2]指向a[10]

//a[10]所对应的值是11 ,故输出11

}答案是11 ,它定义了一个指针数组 int *p[3] 里面的元素是指针,有3个元素,每个指针都可以指向一个数组。 执行for循环时 第三个元素指针 p[2]=&a[2*4] 也就是p[8] ,

也就是p[2][0]=a[8]

p[2][2] 就是再向后数三个元素,也就是 11

11.

能否返回局部变量的指针或引用?

不能,因为函数中的局部变量在函数调用结束后就会被释放,

为什么不能返回局部指针变量,却可以返回局部变量

函数的局部变量用作返回值时,会生成一个局部变量的拷贝用作返回值,之后局部变量会被系统回收,函数不能返回局部变量的地址,因为如果返回局部变量的地址,系统回收后,指针指向的内容就无意义了,但是对于静态变量也可以返回其指针。

12.

如何引用一个已经定义过的全局变量?

有两种方法:

(1)引用头文件的方式

(2)在extern关键字声明

注意:

(1)如果是头文件的方式,在用全局变量的时候,把变量名字写错了,在编译的时候就会报错。

(2)如果是extern关键字声明,如果把全局变量的名字写错了,在编译的时候不会报错,在连接的时候报错。

13.

使用malloc分配五个空间,存储五个整形元素,键盘输入

#include

#include

int main()

{

int i;

int *t= ( int * )malloc( sizeof( i

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言笔记第八天:c语言面试题大全 下一篇C语言程序设计(基础3)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目