C语言基础教程(11)基础总结

总结练习


1.什么叫分配内存,什么叫释放内存

分配内存:操作系统把某一块内存空间的使用权力分配给该程序

内存释放:操作系统把分配给该程序的内存空间的使用权力收回,

                 该程序就不能使用这块内存空间

附注:释放内存不是把该内存的数据清零

 

2.变量为什么必须初始化

不初始化,变量通常是垃圾值,很可能是上次程序结束遗留下来的数据。

 

3.详细说明系统如何执行:int i = 5; 这条语句的

  • 1> Vc++6.0软件请求操作系统为i分配存储空间
  • 2> 操作系统会在内存中寻找一块空闲的区域,把该区域当作i来使用
  • 3> Vc++6.0会把i和这块空间区域关联起来,今后对字母i操作就是对这块空闲的区域操作。
  • 4> 把5存储到字母i所关联的内存区域中

附注:所谓内存区域也就是内存的一块存储单元

 

4.详细列出C语言所有基本类型

int long int   short int  char   float    double

 

5.printf函数中,int%d输出

请问:long int   char   double   float分别用什么输出

%ld    %c  %lf    %f

 

6.函数的优点

1>避免重复操作

2>有利于程序的模块化

 

7.谈谈你对函数的理解

 

8.什么是指针,什么是地址,什么是指针变量,三者之间的关系?

地址是内存单元的编号 指针就是地址 指针和地址是同一个概念

指针变量是存放内存单元编号的变量

 

指针变量和指针是两个完全不同的概念,只不过人们通常把指针变量称作指针

 

9.请写出静态变量和动态变量的异同

相同点:

    都需要分配内存

不同点:

    静态变量是由系统自动分配,自动释放,程序员无法在程序运行的过程当中手动分配,

    也无法在程序运行的过程中手动释放。

    静态变量是在栈中分配的,

    只有在函数终止之后,静态变量的存储空间会被系统自动释放。

   

    动态内存是由程序员手动分配,程序员可以在程序运行的过程当中手动分配,手动释放。

    动态变量是在堆中分配的,

    程序员可以在行是执行过程中的任何时刻手动释放动态变量的空间

    不需要等到函数终止才释放。

 

10.C语言中哪些知识点是我们学习的重点,请一一列举出来

流程控制 函数 指针 静态内存和动态内存 

 

11.for(1;2;3)

   A;

   B;

1> 2成立,会继续执行哪条语句:A

2> 3执行完毕后,会继续执行哪条语句: 2

3> A执行完毕后,会继续执行哪个语句:3

4> 1总共会执行几次:1次

 

12.for(1;2;3)

   for(4;5;6)

   {

       A;

       B;

   }

   C;

1> 6执行完毕后,会继续执行哪个语句:5

2> 5成立,会继续执行哪个语句:A

3> 5不成立,会继续执行哪个语句:3

4> 2不成立,会继续执行哪个语句:C

5> 2成立,会继续执行哪个语句:4

6> A 和 B语句是否一定会被执行 不会 (2或5不成)

7> C语句是否一定会执行

 

13. for(1;2;3)

   {

       while(4)

          5;

          6;

          break;

       if(7)

          8;

          9;

   }

   10;

1> 5执行完毕后,会继续执行哪个语句:4

2> break终止什么? 终止for, break终止最里层包裹它的循环

3> 如果8是break语句,则8执行完毕之后会继续执行哪个语句 10

4> 如果7不成立,会继续执行哪条语句 9

 

方法:调整清楚

    for(1;2;3)

    {

       while(4)

       {

           5;

       }

           6;

           break;

       if(7)

       {

           8;

       }

          9;

    }

    10;

 

14 判断下列程序语法上是否有错误,说出错误原因

A) int *p; *p = 10;        错 p没有指向,*p数据不可读和操作

B) char *p; char ch=A; p=&ch;  错 A改成'A' A非法无意义

C) int i,j; i=j=0; int *p; p=&i;对 i=j=0; 从右向左

D) int *p; int **q; q = &p;    对 指针的指针是int ** 类型

E) int *p; int i=5; p=&i; *p=10;对 p指向i,*p=5;把10赋值给*p

 

15 编程实现:如果x大于0,则y为1.如果x小于0,则y为-1,如果x等于0,则y为0,

以下程序段中,不能根据x值正确计算出y值的是  CD

A) if(x>0) y=1;

   else if(x==0) y=0;

   else y=-1;

B) y=0;

   if(x>0) y=1;

   else if(x<0) y=-1;

C) y=0;

   if(x>=0);(;空语句)

   if(x>0) y=1;

D)     if(x>=0)

   if(x>0) y=1;

   else y=0;

 

16.若变量已正确定义有以下程序段

int a=3, b=5, c=7;

if (a>b)

   a=b;

c=a;

if(c!=a)

c=b;

printf("%d, %d, %d\n", a, b, c);

输出结果是:B

A)程序段有语法错误  B)3,5,3

C)3,5,5       D) 3,5,7

 

17.执行以下程序后,输出'#'的个数是:6

   #include <stdio.h>

   int main(void)

   {

       int i,j;

       for(i=1; i<5;i++)

          for(j=2; j<=i; j++)

             printf("%c\n",'#');

       return 0;

   }

 

18.有以下程序

   #include <stdio.h>

   int main(void)

   {

       int i,s=0;

       for(i=1; i<10; i+=2)

          s+=i+1//s = s + (i + 1);

       printf("%d\n", s);

       return 0;

   }

程序执行后的结果是D

A自然数19的累加和

B)  自然数110的累加和

C)  自然数1~9中的奇数之和

D)  自然数1~10中偶数之和

 

19.若有一些定义和语句

int a = 4;

int b = 3;

int *p;

int *q;

int *w;

p=&a;

q=&b;

w = q;

q = NULL;

则以下选项中错误的语句是 A

A)*q=0;   B)w=q;    C)*p=88;  D)*p=*w;

 

20 以下程序  

#include <stdio.h>

void fun(char *a, char *b) {

   a=b; //指针ab相互指向,则他们的值相同

   (*a)++;

}

int main(void){

   char c1='A', c2='a', *p1, *p2;

   p1=&c1;

   p2=&c2;

   fun(p1,p2);

   printf("%c%c\n", c1, c2);

}

//程序运行后的输出结果是:Ab

//实验程序

/*

#include <stdio.h>

void fun(char *a, char *b) {

    printf("%c %c\n", *a, *b);   // A a

    a=b;

    printf("%c %c\n", *a, *b);   // a a

    (*a)++;

    printf("%c %c\n", *a, *b);   // b b

}

int main(void) {
 
    char c1='A', c2='a', *p1, *p2;

    p1=&c1;

    p2=&c2;

    fun(p1,p2);

    printf("%c %c\n", c1, c2);   // A b

}

*/


#include <stdio.h>

int main(void) {

    int i = 0;

    int j = 1;

    int *a = &i;

    int *b = &j;

    a=b; //OK 互为指向 *a=*b=1;

    printf("%d %d\n", *a, *b);   //1 1


    */

    *a+=1;         

    printf("%d %d\n", *a, *b); 

    //2 2   指针a和指针互为指向,改变*a的值,就是改变*b的值


    /*

    a=a+2;  //把指针a的址编号加2,b不指向a,

    //b仍然指向a原来的地址无法知道与a地址相隔2个单元的内容*a.

    printf("%d %d\n", *a, *b);   //1245088 2

    return 0;

}

21. 若有定义:int k;

    以下程序段的输出结果是##2##4

for(int k=2; k<6; K++, K++) printf("##%d", k);

K++,K++ = 1个循环因子

 

 

22. break

23. 进制转化

24. C的一些认识问题。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值