2022年6月15日星期三

2022年6月15日-2

 2022年6月15日

转义字符,(让某个字符不再是之前的意义)

数数"c:\test\32\test.c"字符串中有多少个字符

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d \n",strlen("c:\test\32\test.c"))
return 0 ;
}

答案是13

因为 \t 被记为一个转义字符, \32 也被记为一个转义字符,

这时候要查一下ASCII表看看 \32 表示什么





因为 \ddd //ddd表示1~3个8进制数字,如\32和\032一样

        \xdd //dd表示1~2个十六进制数字(:A~F表示10~15)

\32 对应→,也被记为一个转义字符,因此答案是13

另外,若不想让\t表示转义字符,需将\t写为\\t

条件,

进入驾校你要学习,认真(1)即可通过,摆烂(0)就会挂科,最后判断是否通过。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int judge = 0;
printf("您进入了驾校,请问考前是否复习(1/0)? >: \n");
scanf("%d" , &judge );
if(judge = 1)
printf("通过\n");
else
printf("挂科\n");

return 0 ;
}

 但是一个代码块内,if只能用一次吗?

这里又犯了判断等于的错误

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int judge = 0;
    printf("您进入了驾校,请问考前是否复习(1/0)? >: \n");
    scanf("%d", &judge);
    if (judge = 1)
        printf("通过\n");
    else
        printf("挂科\n");
    printf("\n此时judge=%d\n", judge);
    return 0;
}

输入0,输出judge = 1

所以,应该是

if(judge == 1)

    printf("ao");

循环中的while语句,

为了通过科目一,你需要在考前刷题,驾校一点通一共有2186道摸呢题,你需要刷完才能过。

刷题(n/2186),循环,每一次经过让knowledge +1

→判断是否刷完

→通过

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("您进入了驾校一点通\n开始刷题\n");
int knowledge = 0 ;
while(knowledge<2186)
{
printf("您刷了一道题目,知识+1\n");
knowledge++;
printf("您已经刷了%d道题目\n" , knowledge);

}
if(knowledge>=2186)
printf("您通过了科目一考试");
return 0 ;
}

替换knowledge++的方法,如一次性+10

printf("您刷了一道题目,知识+10\n");
        knowledge = ("%d",knowledge) + 10 ;

 

自定义函数,

用新建的自定义函数,如取名add(两数相加)和addpro(三数相加)

需要在主要代码块前先定义一下之后要用到的函数。

想一想这里为什么是add(int x , int y);而之后都是直接用已经有了的变量add(num1 , num2);

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int add(int x, int y)//定义add为两数相加
{
    int z = x + y;//这里等效于int z = 0;并且z = x + y;
    return z;
}

int addpro(int x, int y, int z)//定义addpro为三数相加
{
    int w = x + y + z;
    return w;
}


int main()
{
    int sum = 0;
    int num1 = 2;
    int num2 = 4;
    int num3 = 8;
    int num4 = 16;//我找了三个数哦


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

    sum = addpro(sum, num3, num4);
    printf("%d \n", sum);
    return 0;
}

若不定义addpro,就会报错,并提示“函数不接受三个参数”。

思考一下如何只定义一个函数,就能满足任意数相加,而不啻于定义多个add(pro,plus,extra,evolved)函数

那么,自定义函数有什么用呢,sum = x + y他不香吗?

遇到复杂的运算,一次要好多步,那么可以首先定义一波,之后就能像用快捷键一样“一键就叫”。

 数组,

定义:一组相同类型元素的集合。

如--int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个存放10个整数数字的数组,其中每个数都有一个序号与之对应0,1,2,3,4,5,6,7,8,9

这里想简单的创建一个数组,并打印其中的一个数。

#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//创建数组
printf("%d \n" , arr[4]);//打印序号为4的数,也即5
return 0 ;
}

如果想把数组中的每一个数都打印一遍,可使用循环语句。

//错误例,笑
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0 ;
int m = 0 ; 
while(i<10)
{
printf("数值i从%d升级为%d \n",i , m ) ;
i++;
}
return 0;
}
//真实例
#include <stdio.h>
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int i = 0;
    while (i <10)
    {
        printf("%d \n ", arr[i]);
        i++;
    }
    return 0;
}

操作符简单介绍,

算术计算符:+ - * / %(取mod)

取mod介绍

如果用 / 除,结果为2

#include <stdio.h>
int main()
{
int a = 5/2;
printf("%d \n",a );    
return 0;
}

如果用 % ,取mod,结果为1

#include <stdio.h>
int main()
{
int a = 5%2;
printf("%d \n",a );    
return 0;
}

 移位操作符

左移<<和>>右移

整型1占4个字节--32bit

1的二进制表达为00000000000000000000000000000001

左移2后,左边丢弃,右边补0

00000000000000000000000000000100结果为1*2^2=4

#include <stdio.h>
int main()
{
int a = 1;
int b = a<<2;
printf("%d \n" , b);
return 0 ;
}

而a本身不变。

位操作符(二进制位)

&按位与

#include <stdio.h>
int main()
{
    int a = 3;
    int b = 5;
    int c = a & b;//c来接收值
    printf("%d\n", c);
    return 0;
}

结果为1,

3的二进制011,5的二进制101

 3=011

 5=101→001→1 找交集

tips:

如何将10进制转化为二进制

展开

 

|按位或

3=011

5=101→111→7 找并集

^按位异或

对应的二进制位相同,则为0;对应的二进制位相异,则为1。 

#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a^b;
  printf("%d \n",c);
return 0 ;
}

结果为6

赋值操作符

int a = 10 ;//一个=叫赋值 ==两个叫判断相等
a = a + 10;//给a+10再赋给a
a += 10;//a在自己本身+10
a = a - 10;//
a -= 10;//&= |= ^= /= *= <<= >>=复合操作符
return 0;

单目操作符,双目操作符,三目操作符

a + b 左右各1个(共两个操作数),所以叫双目操作符

单目操作符

!逻辑反操作

c语言中,0表示假,其他一切表示真

int a = 10;

printf("%d",!a);//→0

但若!0得到的答案默认为1

-和+负值与正值

int a = -2

-a→2      +a→-2

故与数学相同,+无实际价值,通常省略

sizeof计算变量或类型所占空间大小

单位字节,

变量

int a = 4;
printf("%d \n",sizeof (a));

结果为4,因为一个基本整型占4个字节的空间

同时对变量来说,也可用sizeof a 直接计算

但对于类型如(int)、(long int)来说则不行,必须加上(括号)

数组

int main()
{
    int arr[10] = { 0 };//10个整型元素的数组
    printf(" % d \n", sizeof (arr));
        //计算一下数组的元素个数
                //数组总大小/每个元素的大小=个数
        printf("%d \n", sizeof(arr) / sizeof(arr[0]));
    return 0;
}

↑元素个数的计算方法↑

0 评论:

发表评论