C语言学习笔记(>A<)

目录

       前言

一、学前基础

二、数据类型

三、

四、运算符号

五、分支与循环

分支语句(选择结构)

if语句                                                                

switch语句

        循环语句

while循环

         for循环

do...while()循环

练习

总结


前言

新手开始学习C语言笔记记录 ,基于b站张鹏伟老师的视频,写给自己的笔记,刚开始会比较杂乱后面会慢慢完善补充修改。从分支循环开始写,前面缺的部分以后会慢慢补上。大家一起学习。

!( >A<) !

(富文本编辑的目录没搞明白,上面的蓝色目录没有转跳功能只能用左侧的目录,目前只有蓝色前言可以跳转,但是会转到总结处。有知道我哪出错的可以简单说下哈)


一、学前基础

●代码中所有符号均为英文半角符号。

●\n 换行     语句的结束需要换行。

●语句结束的时候末尾需要有分号;。

●//注释(不被机器所识别,便于程序员理解)

●= 赋值 (不允许连续赋值,如a=b=1错误) 

== 判断相等(5=a 错误,a无法赋值给5 。  5==a好写法,易于避免把a==5写成a=5进行赋值,变量在右侧方便识别错误)   

==不能用来判断两个字符串相等,应使用库函数-strcmp

strcmp(passward,"123456")==0  //把两个字符串传给strcmp,若相等返回0,若前者大于后者返回大于0数字,后者大于前者返回小于0数字

●0表示假,非零表示真


二、数据类型


三、

●%s:字符串

●数组

int arr[]={1,2,3,4,5,6,7,8,9,10};                        //[1 2 3 4 5 6 7 8 9 10 \0]    数组元素

int sz=sizeof(arr)/sizeof(arr[0]);                       // [0 1 2 3 4 5 6 7 8  9 10]   数组下标

//计算数组中元素个数

●指针是变量用来存放字节

●default

●x%y  取余子式  计算x/y的余数,常用来判断奇偶 x%2

●goto语句: 无条件转移语句,可以随意跳进跳出循环,从一个语句块转移到另一个语句块无所顾忌。goto语句只能在一个函数范围内跳转,不能跨函数。

goto again直接跳转到下面的again,中间的hello被跳过。

不被推荐使用易出bug,常用于终止程序在某些深度嵌套的结构的处理过程。

goto语言真正适合的场景如下,当从多重循环深处直接跳转到某个外循环之外时。如果用break,就只能一重一重的退,用goto要更合适。

for (...)
	for (...)
	{
	for (...)
		{
		if (disaster)
			goto error;
		}
	}
	…
error :
	if (disaster)
// 处理错误情况

四、运算符号


五、分支与循环

由一个分号(;)隔开的就是一条语句

;     //空语句

分支语句(选择结构)

if语句                                                                

语法结构                  (if后语句不加;)

1.if(表达式)                                                   2.if(表达式)

          语句;                                                               语句1;

                                                                            else

                                                                                    语句2;

//多分支

if(表达式1)

    语句1

else if(表达式2)

    语句2;

else

    语句3

例:

{
    int age = 10;
    if(age<18)
        printf("未成年\n");
}

若条件成立需要执行多条语句,使用代码块{}

if(表达式)

{

        语句列表1;

}

else

{

        语句列表2;

}

else会与最近的一个未匹配的if相匹配   就近原则

switch语句

switch语句常用于多分支的情况

switch(整形表达式)

{

        语句项;

}

 语句项:一些case语句(整形常量表达式)                    ( 1.0不是整形,a不是常量)

break跳出switch语句,每一个case后面加上一句break语句。当case语句后面没有break;来打断时会进入吓一条case。

break只能从最内层循环退出跳到上一层的循环。

defalut子句:所有值于case标签都不匹配,位置无所谓顺序。

循环内的switch中break和continue使用区别:

break语句在循环和switch语句中使用,用于终止最近的封闭代码块,如果在嵌套循环中,则只终止最近的循环。

continue语句在循环中使用,不能单独在switch中使用,可以在循环内的switch中使用,用于跳过当次循环,直接进入下一次循环。

switch举例:

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    default:
        printf("输入错误\n");
        break;
    }
        return 0;
}

小测试:判断m,n的值

int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:m++;
    case 2:n++;
    case 3:
        switch (n)    //switch可以嵌套
        {
        case 1:n++;
        case 2:m++, n++;
            break;
        }
    case 4:m++;
        break;
    default:
        break;
    }
    printf("m=%d,n=%d\n", m, n);
    return 0;
}

m=5,n=3

循环语句

● while

●  for

●  do while 

while循环

while(表达式)             //表达式为真,执行语句,循环

        循环语句;

例:

int main()
{
    int i = 1;
    while (i < 10)
    {
        printf("%d ", i);
        i++;
    }
    return 0;
}

break在while循环中的作用:永久终止循环

int main()
{
    int i = 1;
    while (i < 10)
    {

        if(i==5)

                break;
        printf("%d ", i);
        i++;
    }
    return 0;
}

continue在while循环中的作用:终止本次循环,后面代码不会执行,跳转到while语句的判断部分。

int main()
{
    int i = 1;
    while (i < 10)
    {

        if(i==5)

                contine;
        printf("%d ", i);
        i++;
    }
    return 0;
}
int main()
{
    int ch = 0;
    //输入函数赋值给ch,当不等于EOF文件结束标志end of file执行循环
    //EOF  ctrl+z
    while ((ch = getchar()) != EOF)
    {
        //输出函数
        putchar(ch);
        printf("%c\n", ch);
        //二者效果相同
    }
    return 0;
}

 例:while的应用,清楚缓冲区

int main()
{
    int ret = 0;
    int ch = 0;
    char passward[20] = { 0 };
    printf("请输入密码>:");
    scanf("%s", passward);//%s,字符串
    //读取缓冲区passward后面内容到\n,包括\n
    while (ch=getchar()!='\n')
    {
        ;
    }
    printf("请确认 (Y\N)>:");
    ret = getchar();
    if (ret == 'Y')
        printf("确认成功\n");
    else
        printf("确认失败\n");
    return 0;
}

例2:

int main()
{
    int ch = 0;
    while( (ch = getchar() )!= EOF)
    {
        if (ch<'0' || ch>'9')
            continue;
        putchar(ch);
    }
    return 0;
}

for循环

循环中最常用,基本可完成所有循环。

for(表达式1;表达式2;表达式3)

        循环语句;

表达式1:初始化

表达式2:条件判断

表达式3:调整

截自b站比特

对比while循环

int main()
{
    int i = 0;             //i的初始化
    while (i < 10)     //i的判断
    {
        printf("%d\n", i);
        i++;               //i的调整
    }
    return 0;
}

例:

int main()
{
    int i = 0;
    for (i = 1; i < 10; i++)
        printf("%d\n", i);
        return 0;
}

建议:

1.不要在for循环中修改循环变量,防止for循环失去控制。

2.for语句的循环控制变量采用“前闭后开区间”的写法。

3.for循环的初始化、判断、调整都可以省略。当判断被省略时,判断条件:恒为真。

建议不要随便省略。

判断题

int main()
{
    int i = 0;
    int k = 0;
    for (i = 0, k = 0; k = 0; i++,k++;)    //判断部分把0赋值给k,k为0,假,循环不成立。若判断部分表达式为非零,则陷入死循环。
        k++;
    return 0;
}

do...while()循环

语法:

do

        循环语句;

while(表达式);

特点:循环至少执行一次,很少被使用。

例:

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

练习

1.计算n的阶乘。

int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    scanf("%d", &n);
    for (i = 1; i <=n; i++)
    {
        ret = ret * i;
    }
    printf("%d\n", ret);
    return 0;
}

2.计算1! + 2! + 3! +.....+10!          正确答案:4037913 

int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    int sum = 0;
    for (n = 1; n <= 10; n++)
    { 

         ret=1;
        for (i = 1; i <= n; i++)
        {
            ret = ret * i;
        }
        sum = sum + ret;
    }
    printf("%d\n", sum);
    return 0;
}

进行优化,删减多余计算

int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    int sum = 0;
    for (n = 1; n <= 10; n++)
    {
        ret = ret * n;
        sum = sum + ret;
    }
    printf("%d\n", sum);
    return 0;
}

3.二分查找。在一个有序数组中查找某个具体的数字。

int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int k = 7;
    int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
    int left = 0;//左下标
    int right = sz - 1;//右下标
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else
        {
            printf("找到了,下标是:%d\n", mid);
            break;
        }
    }
    if (left>right)
        printf("找不到\n");
    return 0;
}

4.编写代码实现用户登录,模拟用户登录场景,并且只能登录三次(只允许输入三次密码,如果密码正确则提示登录成功,如果三次密码均输入错误,则退出程序)

int main()
{
    int i = 0;
    char passward[20] = {0};
    for (i = 1; i <= 3; i++)
    {
        printf("请输入密码:");
        scanf("%s", &passward);
        if (strcmp(passward, "123456") == 0) //上面有讲
        {
            printf("密码正确\n");
            break;
        }
        else
            printf("密码错误\n");
        
    }
    if (i == 3)
        printf("三次密码输入错误,账号已被冻结\n");
    return 0;
}

5.打印乘法口诀表

int main()
{
    int i = 0;
    for (i = 1; i <= 9; i++)  //行
    {
        int k = 0;
        for (k = 1; k <= i; k++)   //列
        {
            printf("%d*%d=%-2d ", i, k, i*k);
            //%2d 宽度为2,右对齐   %-2d  宽度为2,左对齐
        }
        printf("\n");
    }
    return 0;
}

//int main()
//{
//	int i = 0;
//	for (i = 1; i <= 9; i++)
//	{
//		int k = 0;
//		for (k = 1; k <= i; k++)
//		{
//			printf("%d*%d=%-2d ", i, k, i*k);
//			//%2d 宽度为2,右对齐   %-2d  宽度为2,左对齐
//		}
//		printf("\n");
//	}
//	return 0;
//}

六、猜数字游戏

1.电脑会生成一个随机数

2.玩家猜数字

我们将见到学习c语言来第一个小游戏的实现,由于会遇见我们之前并不了解的随机数,所以要先对随机数的生成进行学习,这里贴星空之路Star的随机数生成详解,很详细。

C语言随机数的生成【详解】_⭕星空之路Star的博客⭕-CSDN博客_c语言随机数生成

看完后我们一步步的来实现这个游戏

首先是游戏开始界面

芭比Q了,查后说是把w32改成x64,但我改完后没解决,卡这了,解决后再写 


七、函数

1.函数是什么

2.库函数

3.自定义函数

4.函数参数

5.函数的嵌套调用和链式访问

6.函数的嵌套调用与链式访问

7.函数的声明与定义

8.函数递归

函数是什么

●子程序:有一个或多个语句块组成,他负责某项特定任务,且相较于其他代码,具备相对的独立性。

●一般会有输入函数并有返回值,提供对过程的封装与细节的隐藏,这些代码通常被集成为软件库。

c语言中函数的分类;

●库函数:C语言为我们提供的可调用的库函数,我们之前学习C语言时候用到的 printf, scanf, 这些都是c语言为我们提供的。在我们使用某一库函数的时候,需要在程序中嵌入(#include<>) 该函数所需要的头文件。

●自定义函数:与库函数一样,有函数名,返回值与函数参数。但不一样的是这些都是沃恩自己设计。

//返回类型    //函数名        //函数参数
int            ADD       (int x, int y)
{
    int z = 0;        //函数体
    z = x + y;        //交代函数的实现
    return 0

//定义函数
int get_max(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}

int main()
{
	int a = 1;
	int b = 2;
	//函数的使用
	int max = get_max(a, b);
	printf("max = %d\n", max);
	return 0;
}


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值