重学C语言之计算机二级准备(中)

基本语句:

表达式语句:其表现形式一般为:表达式;

执行表达式语句就是计算表达式的值。

空语句:一般由{ }来表示空语句,更简单明了,什么也不执行的语句;

复合语句:把多个语句看成一条语句去,复合语句中的各条语句以 ;结尾,同时在{ }外不可以加“ ;”

输入输出函数:

printf(" " );输出一个字符串;

打印格式

对应数据类型

含义

%d

int

接受整数值并将它表示为有符号的十进制整数

%hd

short int

短整数

%hu

unsigned short

无符号短整数

%o

unsigned int

无符号8进制整数

%u

unsigned int

无符号10进制整数

%x,%X

unsigned int

无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF

%f

float

单精度浮点数

%lf

double

双精度浮点数

%e,%E

double

科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写

%c

char

字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

%s

char *

字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

%p

void *

以16进制形式输出指针

%%

%

输出一个百分号

 scanf(“ %d ”,&a)输入一个整型的值赋给a,scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据。

三大语句结构:

顺序语句:顺序结构没有任何关键字对代码进行流程控制,个语句依照顺序执行,例如:

int a =1;

int b =3;

int c =5;

int x;

a = c + b;

c = a + b;

x = a + c;

选择语句:

if语句:

if (a > b)

{

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

}

if-else语句:

if (a > b)

{

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

}

else

{

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

}

if-else if-else语句:

if (a < 10)

{

printf("个位\n");

}

else if (a < 100)

{

printf("十位\n");

}

else if (a < 1000)

{

printf("百位\n");

}

else

{

printf("很大\n");

}

switch( 表达式){

case(常量表达式):

        复合语句;

        break;

case2(常量表达式2):

        复合语句2;

        break;

............

default:

        复合语句....

        break;

处理流程:首先计算表达式中的值,而后与其下case语句中的常量表达式相比较若其值相等则执行其下的复合语句,要不然执行default条件下的语句;

三目运算符表达式1?表达式2: 表达式3例如 (a >= b) ? a : b;美观且直接,执行效率比较快;

循环语句

for语句: for(条件表达式1;条件表达式2;条件表达式3)

int i;

for(i = 0; i <= 100;i ++)

{
  中间循环体
}

while语句: while(条件表达式)如果为真,则执行while中的循环体,为假则跳出循环;

while(a >20)

{
          scanf("%d\n",&a);

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

do-while语句:do{循环体}while(条件表达式)当条件满足的时候会执行循环体的内容;

do{

a++;

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

}while(a < 10)

break和continue语句:

break语句: 

  1. 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。

      2.当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码 。

      3.当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。

while(1)

{
    int i = 0;

    i++;

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

   if(i == 10)

{

break;
}
}

continue语句:终止本次循环,并执行下一次循环;

for (int i = 1; i <= 100; i++)

{

if (i % 2 == 0)   //如果i是一个偶数,执行if语句中的代码

{

continue;      //结束本次循环

}

sum += i;          //实现sum和i的累加

}

循环的嵌套:

#include<stdio.h>

#include <Windows.h>

int main(void)

{
        int i , j , k;

        for(i = 0;i < 24;i++)

        {
                  for(j = 0;j < 60; j++)

                        {
                                for(k = 0; k < 60; k++)

                                        {

                                        printf(" %d: %d : %d\n",i,j,k);

                                        sleep(960);

                                        system("cls");

                                        }

                                }

        }

return 0;
}

编译预处理:

宏定义:使用户能以一个简单的名字代替一个长的字符串,在预编译时将宏名替换成字符串的过程称为“宏展开”;

说明

  1. 宏名一般用大写,以便于与变量区别;
  2. 宏定义可以是常数、表达式等;
  3. 宏定义不作语法检查,只有在编译被宏展开后的源程序才会报错;
  4. 宏定义不是C语言,不在行末加分号;
  5. 宏名有效范围为从定义到本源文件结束;
  6. 可以用#undef命令终止宏定义的作用域;
  7. 在宏定义中,可以引用已定义的宏名;

带参数的宏定义:  #define SUM(X,Y)  ((x)+ (y))

注意

  1. 宏的名字中不能有空格,但是在替换的字符串中可以有空格。ANSI C允许在参数列表中使用空格;
  2. 用括号括住每一个参数,并括住宏的整体定义
  3. 大写字母表示宏的函数名。

如果打算宏代替函数来加快程序运行速度。假如在程序中只使用一次宏对程序的运行时间没有太大提高。

文件包含处理:

意思:一个源文件可以将另外一个文件的全部内容包含进来。C语言提供了#include命令用来实现“文件包含”的操作;

#include<> 与 #include“”的区别

1. #include <>常用于包含库函数的头文件;

2. #include " "常用于包含自定义的头文件;

3. 理论上#include可以包含任意格式的文件(.c .h等) ,但一般用于头文件的包含;

指针:

内存地址:这个内存编号我们称之为内存地址。内存中的每一个数据都会分配相应的地址:

int类型会分配4个字节,char类型会分配1个字节,以及数组,结构体等等

内存区的每一个字节都有一个编号,这就是地址 

指针是内存单元的编号,指针变量是存放地址的变量;

指针变量的定义与使用

  1. 指针也是一种数据类型,指针变量也是一种变量
  2. 指针变量指向谁,就把谁的地址赋值给指针变量
  3. “*”操作符操作的是指针变量指向的内存空间

所有的指针类型在32位上均为unsigned int 类型在内存中均占4个字节; 

值传递,形参不可以改变实参的值,地址传递,形参可以改变实参的值; 

数组名作为函数参数: 数组名做函数参数,函数的形参会退化为指针:

void printArrary(int *a, int n)

{

int i = 0;

for (i = 0; i < n; i++)

{

printf("%d, ", a[i]);

}

printf("\n");

}

指针数组

数组名是数组的首地址,是一个常量;

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    printf("a = %p\n", a);
    printf("&a[0] = %p\n", &a[0]);   //数组只是常量不可以修改

加法运算:

  1. 指针计算不是简单的整数相加
  2. 如果是一个int *,+1的结果是增加一个int的大小
  3. 如果是一个char *,+1的结果是增加一个char大小  

    int a;
    int *p = &a;
    printf("%d\n",p);
    p += 2;  //移动两个int类型
    printf("%d\n",p); 

通过改变指针指向操作数组元素

 

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int i = 0;
    int n = sizeof(a) / sizeof(a[0]);

    int *p = a;
    for (i = 0; i < n; i++)
    {
        /*printf("%d, ", *p);
        p++;*/
        printf("%d ",*(p+i));  // 两种方式改变其偏移量
        printf("%d ",p[i]);   //把指针当成数组来使用
    }
    printf("\n");

指针数组:它是数组,数组的每个元素都是指针类型。

int a = 10;
    int b = 34;
    int c = 100;
    int * arr[3] = {&a,&b,&c};
    * arr[1] = 123;
    for(int i = 0;i< 3;i++)
    {
        printf("arr为:%d\n",*arr[i]);
    }

多级指针:一级指针接收变量的地址值,二级指针接收一级指针的地址值,同理三级指针接收二级;

int a = 21;
    int b = 20;
    int *p = &a;
    int **p1 = &p;
    int *q = &b;
    int **q1 = &q;
    printf("%d\n",*p);
    printf("%d\n",*q);
    printf("%d\n",**q1);
    printf("%d\n",**p1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MAX梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值