关于c:小凯15天快速讲完c语言简单学习第四课

这节课笔记的排版有点问题,感觉是markdown语法有问题,当然不排除思否社区的排版问题,哈哈哈,已反馈官网啦,大家对付看。

0. 温习

0.1 运算符

1.赋值
留神的点:
// 定义变量的时候,给的值 这时叫做初始化。
int a = 0;
int b = 10;
int c = 0;
// 定义完变量,再去给值,这个就叫赋值
a = 100; //正确的
100 = a; //谬误的
a = b = c = 500;
复合赋值运算
a+=b; //相当于 a = a+b;
2.算术运算符
有几个:+ – * / % ++ —
须要留神的:
除法运算:两个整数相除,后果就是一个整数
取模运算:参加运算的两个数,必须是整数 取模运算常常被用于判断A是不是B的倍数
自增自减:自增自减的同时参加了其余运算,前置自增是先自增,再参加其余运算,后置,反过来。 3. 取地址

获取一个变量的地址,常常用于scanf_s 输出数据
留神:数组的名字,就是数组的起始地址

4.sizeof

求得一个数据类型或者一个曾经定义好的变量的大小
 int a= 200; 
 sizeof(int)  就是4
 sizeof(a)    也是4
 int  arr[8] = {0};
 sizeof(arr);  这个就是32 

5.逗号

 他是优先级最低的运算符

6.关系运算符

>    >=   < <=  ==  !=   他们是用于比拟大小关系的,后果只能是 true 或者false
true和false  是bool类型。
从数值上看  true  就是1    false 就是0

7.逻辑运算符

&&     
||    
!

0.2 数组

定义:
数据类型 数组名[数组长度] = {初始值};
应用:

   数组名[数组下标] = 数值;

比方:

  int   arr[10] = {0};
  arr[2] = 100; 
 scanf_s("%d",&arr[2]);

数组名是下标,给0号元素输出数据的时候,能够写成上面的形式:

 scanf_s("%d",arr);
 scanf_s("%d",&arr[0]);

留神:
如果数组有10个元素,那么下标就是 0~9
数组越界,个别是比拟难以寻找的BUG
字符数组
char arr[20] = “hello”;
如果想要用字符数组当成字符串应用,个别就能够间接应用数组名。
scanf_s(“%s”,arr,20);
如果想要打印:
printf(“%s”,arr);

还有四个函数:
strlen 求长度 留神 不算结尾的0
strcpy 拷贝 留神应用平安版
strcat 拼接 也是应用平安版
strcmp 比拟 相等0 不等为非0

每一个函数,都有对应的wchar版本的函数。

0.3 三大构造

程序
抉择
a 单if
if()
{
}
b if-else
if()
{
}
else
{
}
c if-else-if
if()
{
}
else if()
{
}
else if()
{
}
else if()
{
}
else
{
}
switch-case
switch(数值)
case 常量1:
break;
case 常量2:
break;
case 常量3:
break;
default:
都不匹配执行这个

1.循环

while()
{

}

输入0-100的值(理论有很多种办法,能输入即可)

1.1while循环输入

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //第一种办法:循环输入0到100
    int n = 1;
    int nNum = 0;
    while (n<=101)
    {
        printf("%d ", nNum);
        nNum++;
        n++;
    }
    printf("\n");

//第二种办法:循环输入0到100

int nNum1 = 0;
while (nNum1 <= 100)
{
    printf("%d ", nNum1);
    nNum1++;
}

return 0;

}


### 2.do-while循环

include <stdio.h>

include <stdlib.h>

int main()

{
    int i = 0;
    do
    {
        printf("%d\n", i);
        i++;
    }
    while (i < 100);
    return 0;
}


### 3.for循环



include <stdio.h>

include <stdlib.h>

int main()
{

//输入0~100
for (int i = 0; i <= 100; i++)
{
    printf("%d ", i);
}
return 0;

}



对于for的总结:
1.for有三条语句,第一句 用于初始化一个循环变量  第二句  用于管制循环条件  第三句  用于循环变量的变动。
2.三条语句标准上,应该依照以上的写法,实际上,写什么都行

### 1.4 对于三种循环的总结
1.三种循环个别状况下,是能够互相替换的。
2.当明确循环次数的时候,个别应用for循环,不能明确循环次数的时候,个别应用while循环。
3.while和for有可能一次循环体都不执行,do-while 至多执行一次循环体

对于while和for   while就是简化版的for


for (; ;)
    {
        printf("我是循环体\n");
    }

    while (1)
    {
        printf("我是循环体\n");

    }

### 1.5有限循环

当循环条件始终为真的时候,就会有限循环。也称之为死循环

### 1.6 break和continue
break是完结循环
continue 是完结本轮循环,间接开始下一轮循环

1.输入0~100以内的所有偶数---要求应用continue


 #include <stdio.h>
 #include<stdlib.h>
int main()
{
    for(int i=0;i<=100;i++)
    {
        if (i % 2 == 1)
        {
            continue;
        }
        else
        {
            printf("%d", i);
        }
        system("pause");
        return 0;



2.如果咱们有一个数组  int  arr[8] = {5,3,6,7,1,2,9,0},从键盘上输出一个数字,判断这个数字在不在数组中,如果在的话,输入他的下标,如果不在的话,输入NO---应用break


//2. 如果咱们有一个数组 int arr[8] = { 5,3,6,7,1,2,9,0 },

//    从键盘上输出一个数字,判断这个数字在不在数组中,
//    如果在的话,输入他的下标,如果不在的话,输入NO-- - 应用break
int  arr[8] = { 5,3,6,7,1,2,9,0 };
int nNum = 0;
printf("请输出一个整数:");
scanf_s("%d", &nNum);
//_contof是用来获取数组元素的个数的
//比方这个地位_countof(arr) 就是8
//这个代码是有问题的
//for (int i = 0; i < _countof(arr); i++)
//{
//    if (nNum == arr[i])
//    {
//        printf("%d\n", i);
//        break;
//    }
//    else
//    {
//        printf("NO\n");
//    }
//}
//如何可能比拟好的解决这种,找到还是没找到的问题
//办法2:应用下标去判断
//int i = 0;
//for (; i < 8; i++)
//{
//    if (nNum == arr[i])
//    {
//        break;
//    }
//}
//if (i == 8)
//{
//    printf("NO\n");
//}
//else
//{
//    printf("%d\n", i);
//}
//办法2:应用标记
bool nFind = false;
for (int i = 0; i < 8; i++)
{
    if (nNum == arr[i])
    {
        printf("%d\n", i);
        nFind = true;
        break;
    }
}
if (nFind == false)
{
    printf("NO\n");
}
return 0;

### 1.7 循环的嵌套
![图片.png](/img/bVc3veg)


 #include <stdio.h>
 #include <stdlib.h>
int main()
{
    for (int i = 1; i <= 9; i++)
    {
        for (int n = 1; n <= i; n++)
        {
            printf("%d ", n);
        }
        printf("\n");
    }

    //for (int n = 1; n <= 1; n++)
    //{
    //    printf("%d ", n);
    //}
    //printf("\n");
    ////....
    //for (int n = 1; n <= 7; n++)
    //{
    //    printf("%d ", n);
    //}
    //printf("\n");
    //for (int n = 1; n <= 8; n++)
    //{
    //    printf("%d ", n);
    //}
    //printf("\n");
    //for (int n = 1; n <= 9; n++)
    //{
    //    printf("%d ",n);
    //}
    //printf("\n");
    return 0;
}


练习2:打印99乘法表

#include <stdio.h>
#include <stdlib.h>
int main()
{

//打印一个99乘法表
for (int i = 1; i <=9; i++)
{
    for (int n = 1; n <= i; n++)
    {
        printf("%d*%d=%d ", n, i, n * i);
    }
    printf("\n");
}


//for (int n = 1; n <= 8; n++)
//{
// printf(“%d%d=%d “, n, 8, n 8);
//}
//printf(“\n”);
//for (int n = 1; n <=9; n++)
//{
// printf(“%d%d=%d “, n, 9, n 9);
//}
//printf(“\n”);
}


练习3:鸡兔同笼
办法1:

include <stdio.h>

include <stdlib.h>

int main()
{

//鸡    i只
//兔子  j只
//i+j==40 
//2*i+4*j == 110
int n = 0;
bool bSign = false;
for (int i = 0; i <=40; i++)
{
    for (int j = 0; j <= 40; j++)
    {
        if (i+j==40&&2*i+4*j==110)
        {
            printf("鸡的数量是%d 兔子的数量是%d\n", i, j);
            bSign = true;
            break;
        }
        n++;
    }
    if (bSign == true)
    {
        break;
    }
}
printf("内层循环执行了%d次", n);
return 0;

}


办法2:

for (int i = 0; i < 40; i++)

{
    if (i * 2 + (40 - i) * 4 == 110)
    {
        printf("鸡的数量是%d 兔子的数量是%d\n", i, 40 - i);
        break;
    }
}




## 2. 预处理
以#结尾的命令,称之为预处理命令。
在编译之前,对于源代码进行一些  复制  粘贴 替换的操作。
### 2.1  #include蕴含
 #inlucde的作用,就是将头文件复制粘贴到命令所在的地位。
有两种用法:
 #include  <文件名.h>
 #include  "文件名.h"
尖括号 <>和双引号 ""  有什么区别呢???
<>是去系统目录寻找头文件。所以个别库函数的头文件,都应用  <>
“” 先到工程所在的当前目录中寻找文件,找不到,再去系统目录外面找。
个别状况下,零碎的头文件,都应用 <>
本人工程的头文件,都应用  "  "

### 2.2 #define 宏定义
2.2.1 无参宏
常常会被用于定义一个符号常量

include <stdio.h>

include <stdlib.h>

define PI 3.1415926

int main()
{

//如果咱们编写了一个UFO的程序
//在这个程序中有100万个中央用到了圆周率
//double pi = 3.1415926;
double r = 4.8;
double s = 0;
double l = 0;
//........
//s = 3.141592 * r * r;
s = PI * r * r;
//这里有10万行代码
//l = 2 * 3.141592 * r;
l = 2 * PI * r;
return 0;

}

为什么要应用无参宏???
1. 便于代码的批改
2. 平安,因为这是一个常量,无奈在运行中去批改值
3. 起了一个名字,加强了可读性
无参宏的实质就是  替换

2.2.2 有参宏
能够给替换的地位,填充一个参数

include <stdio.h>

include <stdlib.h>

define PI 3.1415926

define GETS(r) PIrr

//有参宏的局限性

define M(n) n*n

int main()
{

double r1 = 4.8;
double r2 = 8.7;
double s = 0;
double l = 0;
//好多代码
s = PI * r1 * r1;
s = GETS(r1);//PI*r1*r1
//好多代码
//s = PI * r2 * r2;
s = GETS(r2);

//有参宏的局限性:
int n = M(8);// 8*8
printf("%d", n);
int m = M(4+4);//宏是纯替换,不会先把4+4算进去,再去替换
               //所以后果就是:4+4*4+4  也就是24了
printf("%d", m);
return 0;
## 3.二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int arrTest4[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    int arrTest1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    int arrTest2[3][4] = { {1,2,3},{4,5},{6} };
    int arrTest3[][4] = { {0},{0} };//相当于是2行

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            printf("%d  ", arrTest1[i][j]);
        }
        printf("\n");
    }


    return 0;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理