2019年7月5日星期五

1、在程序如何定义个变量?定义变量在内存中表明什么意思?linux

一、 变量的定义?框架

格式:数据类型 + 变量   函数

数据类型 -> 决定在内存中占用字节的大小。spa

变量名字 -> 决定如何访问到这片内存的空间。 指针

 

二、初始化变量的值?生命周期

1)定义的同时初始化内存

   int a = 100;  作用域

 

2)先定义,后初始化。字符串

   int a;    -> 局部变量a = 随机值it

            -> 全局变量a = 0

   a = 100;

 

注意:

"左值=右值"    -> 把右值(变量/常量)赋值给左值(只能是变量)。

"左值==右值"   -> 判断左值是否等于右值?

 

三、 变量的生命周期以及做用域?

生命周期: 这个变量从何时出如今内存中到何时在内存中释放。

做用域:变量可以做用的地方。

 

     局部变量     Vs    全局变量

 

1)在函数体内部定义的变量,就是局部变量,在函数体外部定义的变量,就是全局变量。

2)二者在内存中占用的空间位置?

   局部变量都在存在于栈区,全局变量都是存在于数据段(已初始化->data段,未初始化->bss段)

3)变量不初始化,则局部为随机值,全局为0。

4)局部变量做用域是函数内部,全局变量做用域整个程序。

5)局部变量在栈区申请空间,在定义该变量的函数结束时,这个局部变量的空间就会释放。

   全局变量在数据段申请空间,程序结束时,全局变量的空间才会被释放。

 

 

四、形式参数属于局部变量仍是全局变量?

局部变量,在栈区申请空间。

 

五、不一样函数中能不能定义相同名字变量。

能够,由于它们在栈区占用不一样的空间。

 

六、 全局变量的做用域?

只能往下,不能往上。

 

  练习1: 如下程序在内存空间中是如何变化的?结果是多少?

 

#include <stdio.h>

 

int fun2(int c)

{

       c = 20;

       return 0;

}

 

int fun1(int b)

{

       int c = 10;

       fun2(c);

       return 0;

}

 

int main(int argc,char *argv[])

{

       int a,b = 5;

       fun1(b);

       printf("b = %d\n",b);

       return 0;

}

 

2、ASCII码

一、 在Ubuntu中能够查看ASCII码表

    man ASCII(按'q'退出)

 

二、 什么是ASCII码?

其实ASCII表就是字符、八进制、十进制、十六进制转换。

 

 八进制   十进制   十六进制   字符

  Oct       Dec     Hex      Char

  060      48      30        0

  101      65      41        A

  141      97      61        a

 

 int a = 65;

 

 %d   -> 以十进制形式输出内容   printf("%d\n",a); //65

 %o   -> 以八进制形式输出内容   printf("%o\n",a); //101

 %x   -> 以十六进制形式输出内容 printf("%x\n",a); //41

 %c   -> 以字符形式输入内容     printf("%c\n",a); //'A'

 %f   -> 输出浮点型数据,保留小数点后6位。

 

 %s   -> 输出字符串

 %p   -> 输出指针地址

 

 结论: 其实字符类型也是整型数据。

 

3、语句与表达式?

表达式 = 语句;

a = 5   把5赋值给a  -> 赋值语句

a = 5;  表达式

 

一、 逗号表达式?

计算规则:从左到右依次计算,结果以最后一个表达式为准。

 

例子:

 

d = (a=a+b,c=b+c,a+c);

 

a=1+2=3

c=2+3=5

d=a+c=3+5=8

 

例子:

int a=1,b=2,c=3,d;

d = (a+b,b-=c,c+=c);  -> 6

d = (c=a+b,b-=c,c+=b); -> 2

 

二、自增自减

 

  a++  先运算后,再自加1.

  ++a  先自加1,再运算.

  a--  先运算后,再自减1.

  --a  先自减1,再运算.

 

例子:

int a = 10;

printf("%d\n",a++);//10   a=11

printf("%d\n",++a);//12   a=12

printf("%d\n",a--);//12   a=11

printf("%d\n",--a);//10   a=10

 

三、 +=  -=  *=  /=  %=

 

  a+=5  等价于  a=a+5

 

四、 三目运算

形式:

表达式?结果1:结果2;

 

若是表达式为真,则结果就是结果1。

若是表达式为假,则结果就是结果2。

 

例子1:

int a = 3,b = 2,c;

c = (a >= b ? a : b);  -> 求a与b之间的最大值。

 

例子2:

A ? i : j; 如下哪一个表达式与之等价?    假 -> 0  真  -> 1

 

A==0 ? i:j;

A!=0 ? i:j;  ->  OK

A==1 ? i:j;

A!=1 ? i:j;

 

4、IO函数?

头文件:#include <stdio.h>

 

printf()  -> 输出带格式内容到屏幕上

scanf()   -> 从键盘中输入带格式内容

 

int a;

a  -> 表明这整片内存空间

&a -> 表明这整片内存空间的地址

 

例子:

===================================================

#include <stdio.h>

 

int main(int argc,char *argv[])

{

       int a;

      

       scanf("%d",&a);

      

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

      

       return 0;

}

===================================================

 

5、linux C语言控制流

控制流有两大块,分别是分支、循环。

分支: if  else  switch

循环: for  while  do-while

 

一、 while循环

1)基本框架

while(断定条件)

{      -> 复合语句:循环体

       表达式;

}

-> 循环体以外

 

2)处理流程

断定条件  ->  真  -> 执行循环体内容  -> 断定条件   ->  假  -> 跳出循环

 

3)死循环

死循环就是断定条件恒为真,没法经过判断断定条件为假来跳出循环。

while(1)

{

       xxxx;  -> 一直执行!

}

 

4)省略{}写法

======================================================

while(1)

   xxxx;   -> 紧跟while(1)语句的表达式就是循环体的内容

   yyyy;   -> 不属于循环体的内容

 

等价于

while(1)

{

   xxxx;

}

yyyy;

======================================================

 

while(1);  -> 有分号,有循环,可是循环体没有内容。

  xxxx;

  yyyy;

 

等价于

while(1)

{

 

}

xxxx;

yyyy;

 

   结论: 当循环体表达式大于2个时,复合语句{}不能省略!

          当循环体表达式只有1个,则{}能够省略!

 

 

  练习2: 使用while循环实现将全部的参数都打印出来!

 

#include <stdio.h>

 

int main(int argc,char *argv[])  //  ./xxx aaa bbb   argc=3  argv[0]="./xxx"  argv[1]="aaa"

{

       int i = 0; //初始化语句

       while(i < argc)  //0~2   断定条件

       {

              printf("argv[%d] = %s\n",i,argv[i]);

              i++; //条件修改

       }

      

       return 0;

}

 

  练习3: 从键盘中获取整型数,存放到x中,并计算出1+2+3+4+...+x

 

#include <stdio.h>

 

int main(int argc,char *argv[])

{

       int x,i=1,sum=0;

       scanf("%d",&x);

      

       while(i<=x)

       {

              sum += i;

              i++;

       }

      

       printf("sum = %d\n",sum);

      

       return 0;

}

 

二、for循环

1)基本框架

for(初始化语句;断定条件;变量操做)  -> 里面三个语句不必定要填,能够空白!

{  -> 循环体

 

}

循环体以外。

 

2)处理流程

1

for(2;3;4)

{

   5;

}

6;

 

1->2->3->真->5->4->3->假->6    (初始化语句,只会执行一次)

 

3)死循环

for(;;); 等价于  while(1); 

 

等价于          等价于

for(;;)  等价于  while(1)

{             {

 

}             }

 

4)省略{}写法

for(;;)

   xxxx;  -> 紧跟语句才是循环体的内容

   yyyy;  -> 不属于循环体的内容

 

等价于

for(;;)

{

   xxxx;

}

yyyy;

 

  练习4: 从键盘中获取整型数,存放到x中,并计算出1+2+3+4+...+x,要求使用for循环。

 

#include <stdio.h>

 

int main(int argc,char *argv[])

{

       int x,i,sum=0;

       scanf("%d",&x);

      

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

       {

              sum += i;

       }

      

       printf("sum = %d\n",sum);

      

       return 0;

}

 

 

三、 do-while循环

1)基本框架

do{   -> 循环体

 

}while(断定条件);   -> 注意: 没有分号是语法出错!

 

2)处理流程

先执行一遍循环体  ->  断定条件  -> 真  -> 执行循环体   -> 判断条件  -> 假  -> 跳出循环

 

3)死循环

do{

 

}while(1);

 

4)省略{}写法

例子1:

do

  xxxx;

while(1);

 

等价于

do{

  xxxx;

}while(1);

 

例子2:

do

  xxx;

  yyy;    -> 编译出错: error: expected ‘while’ before ‘printf’

while(1);

 

  结论: 当表达式只有一条时,则复合语句能够省略,若是大于1条表达式,则必须添加,不然编译出错。

 

while(1)

   xxxx;

   yyyy;

 

等价于

do

  xxxx;

while(1);

yyyy;

 

 

   练习5:使用do-while循环实现将全部的参数都打印出来!

 

   int i = 0;

   do{

       printf("argv[%d] = %s\n",i,argv[i]);

       i++;

   }while(i<argc);

 

   练习6:从键盘中获取整型数,存放到x中,并计算出1+2+3+4+...+x,要求使用do-while循环。

 

   int x,i=1,sum=0;

   scanf("%d",&x);

 

   do{

       sum+=i;

       i++;

   }while(i<=x);

   printf("sum = %d\n",sum);

 

 

四、if分支

 

用法一: if单独使用

 

1)基本框架

if(断定条件)   -> 若是断定条件为真,则执行复合语句,不然不执行复合语句!

{    //复合语句

 

}

 

2)省略{}写法

if(断定条件)

   xxxx;   -> 若是条件为真,则执行xxxx;若是为假,就不执行xxxx;

   yyyy;   -> yyyy;不是if语句的断定范围,因此不管条件真假,这个yyyy都会被执行。

 

等价于

if(断定条件)

{

   xxxx;

}

yyyy;

 

================================================

 

if(断定条件);

    xxxx;

    yyyy;

 

等价于

if(断定条件)

{

 

}

xxxx;

yyyy;

 

 

用法二: if与else配合使用

1)基本框架

if(断定条件)   -> 若是断定条件为真,就执行复合语句1

{  //复合语句1

 

}

else     -> 不知足断定条件的状况,就会执行复合语句2

{  //复合语句2

 

}

 

2)省略{}写法

if(断定条件)

   xxxx;

else

   yyyy;    --> 能够!

 

 

if(断定条件)  xxxx   else   yyyy;   -> 编译出错: expected ‘;’ before ‘else’

 

 

 

if(断定条件)

   xxxx;

else

   yyyy;

else

   zzzz;  --> 编译出错: error: ‘else’ without a previous ‘if

 

 

if(断定条件1)

   xxxx;

if(断定条件2)

   yyyy;

else

   zzzz;   -> 编译经过,else受到最近的if语句的影响!

 

 

用法三: 多个状况判断  else if

1)基本框架

if(断定条件1)  -> 若是断定条件1是真,则执行复合语句1

{  //复合语句1

 

}

else if(断定条件2)  -> 若是断定条件1为假,则进行判断断定条件2,若是为真,则执行复合语句2

{  复合语句2

 

}

else    -> 不知足以上全部的断定条件,则执行复合语句3。

{  复合语句3

 

}

 

 

   练习7: 分别使用以上三种办法,完成该题。

          从键盘中获取一个数字

        0~100   -> 打印small

         101~200 -> 打印middle

          201~300 -> 打印large

 

   完成:<练习>

======================================================================================================================================================

#include <stdio.h>
int main(int argc,char *argv[])
{
 int a=0;
 printf("Please enter the number:\n");
 scanf("%d",&a);//输入数字
 if(a >= 0 && a <= 100)//0~100   -> 打印small
  printf("small\n");
 if(a >= 101 && a <= 200)//101~200 -> 打印middle
  printf("middle\n");
 if(a >= 201 && a <= 300)//201~300 -> 打印large
  printf("large\n");
 if(a < 0 || a > 300)//不在上诉范围输出error
  printf("error\n");
 return 0;
}
======================================================================================================================================================
#include <stdio.h>
int main(int argc,char *argv[])
{
 int a=0;
 printf("Please enter the number:\n");
 scanf("%d",&a);//输入数字
 if(a >= 0 && a <= 100)//0~100   -> 打印small
  printf("small\n");
 else
 {
  if(a >= 101 && a <= 200)//101~200 -> 打印middle
   printf("middle\n");
   else
   {
    if(a >= 201 && a <= 300)//201~300 -> 打印large
     printf("large\n");
    else//不在上诉范围输出error
     printf("error\n");
   }
 }
 return 0;
}
=====================================================================================================================================================
#include <stdio.h>
int main(int argc,char *argv[])
{
 int a=0;
 printf("Please enter the number:\n");
 scanf("%d",&a);//输入数字
 if(a >= 0 && a <= 100)//0~100   -> 打印small
  printf("small\n");
 else if(a >= 101 && a <= 200)//101~200 -> 打印middle
  printf("middle\n");
 else if(a >= 201 && a <= 300)//201~300 -> 打印large
  printf("large\n");
 else       //不在上诉范围输出error
  printf("error\n");
 return 0;
}
 
===========================================================================================================================================================
相关文章
相关标签/搜索