c语言extern,引用,排序

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<N; 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<N; i++) {  
k=i; 
    for( j=i+1; j<N; j ++) 
   if( a[j]<ak])     
 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<stdio.h>
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<stdio.h>
#include<stdlib.h>
int main()
{
   int i;
   int *t= ( int * )malloc( sizeof( int ) * 5);
        for ( i = 0; i < 5; i++)
        {
            scanf("%d",t+i);
        }
        
        for ( i = 0; i < 5; i++)
        {
            printf("%d",t[i]);
        }
        free(t);
   
    return 0;
}




14.
#include<stdio.h>
void f()
{
    int count = 100;//栈区
    printf("%d\n",count);
    count++;
}
int main()
{
    
    f();
    f();
    f();
    return 0;
}
结果为100 100 100,count为局部变量,存放在栈区,每次函数调用完都会被回收
改成static int count = 100;结果变为100,101,102.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值