精华内容
下载资源
问答
  • c语言终止符如何输入

    千次阅读 2018-08-01 22:44:54
    计空格、制表与换行个数 */ { int c, n1, n2, n3; n1 = 0 ; n2 = 0 ; n3 = 0 ; while ((c=getchar()) != EOF) { if (c == ' ' ) ++n1; if (c == '\t' ) ++n2; if (c == '\n' ) ++...
    > #include<stdio.h>
    > main()
    /*统计空格、制表符与换行符个数*/
    {
        int c, n1, n2, n3;
        n1 = 0;
        n2 = 0;
        n3 = 0;
        while ((c=getchar()) != EOF)
        { 
            if (c == ' ')
                ++n1;
            if (c == '\t')
                ++n2;
            if (c == '\n')
                ++n3;
        }
        printf("%d %d %d\n", n1, n2, n3);
    }

    这是c程序设计语言一书中统计空格、制表符和换行符的程序,初学遇到EOF输入的问题,不知该如何结束程序,方法如下:
    windows 系统中 在新的一行输入 Ctrl+z
    Unix/Linux系统中 输入Ctrl+d

    展开全文
  • C语言 操作

    2021-04-26 19:49:30
    算数操作: 在C语言中,%只能针对 整数 进行. %不能对0求,如果编译器能够检查出/0了,那么就会编译期报错,如果检查不出来,就运行时报错. 如果除数时常量,能检查出来,除数是变量(int b = 0, 5 / b ),编译器无能为力. ...

    算数操作符

    在C语言中,%只能针对 整数 进行.
    %不能对0求,如果编译器能够检查出/0了,那么就会编译期报错,如果检查不出来,就运行时报错.
    如果除数时常量,能检查出来,除数是变量(int b = 0, 5 / b ),编译器无能为力.
    计算除法基于CPU, CPU执行到当前这个除以0的指令的时候,就会产生一个中断,此时操作系统 就会检测到这个中断,就会给对应的进程发送一个信号,导致这个进程异常终止.

    C中整数除以整数,结果还是整数.
    直接把小数部分给舍弃了,没有四舍五入

    如果两个不同的类型的变量进行算术运算,就会触发隐式类型转换, 内置的转换规则为 短的往长的转.

    #include<stdio.h>
    
    int main(){
        double a = 5.0;
        int b = 2;
        printf("%f",a / b);
        return 0;
    }
    

    强制类型转换(显示类型转换)

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

    移位操作符

    (针对二进制)
    1.左移运算 <<

    10=>1010(二进制)
    左移一位之前:
    0000 0000 0000 0000 0000 0000 0000 1010
    左移一位后:
    0000 0000 0000 0000 0000 0000 0001 0100

    1010 << 1 = 10100
    10100 => 20

    左移二位后: 101000 => 40

    每次左移一位相当于 * 2

    2.右移运算 >>
    (1) 算术右移:最低位舍弃,整体往右挪一位,最高位补符号位.
    (2)逻辑右移:最低位舍弃,整体往右挪一位,最高位补0. (C语言中不支持)

    符号为正负号,
    计算机表示一个负的整数:拿最高为作为符号位.
    如果符号位为0,表示是整数.如果符号位为1,表示是负数.
    -10 二进制表示:
    1000 0000 0000 0000 0000 0000 0000 1010(大概就是这样)

    10二进制右移一次:
    0000 0000 0000 0000 0000 0000 0000 0101

    101 => 5

    针对算术右移操作,右移一位,相当于除以2

    遇到考试/面试题时候如果在代码中,需要计算乘除2 ^ n,就可以等价转换成移位运算~
    *4 就可以转换成<< 2.

    实际开发角度就不需要转换,代码可读性优先.


    位操作符

    1.& 按位与
    2.| 按位或
    3.^ 按位异或
    4.~ 按位取反

    把两个操作数的对应的二进制位进行按位运算.

    &,如果两个位都是1,结果为1,否则为0
    |,如果两个位都是0,结果为0,否则为1
    ^,相同为0,相异为1.

    ~,针对一个操作数来进行计算的,针对每一位0 -> 1,1 -> 0

    a = 1 0001
    b = 2 0010
    a & b 0000
    a | b 1100
    a ^ b 0011

    #include<stdio.h>
    
    int main(){
        int a = 1;
        int b = 2;
        printf("%d\n",a&b);
        printf("%d\n",a|b);
        printf("%d\n",a^b);
        printf("%x\n",~a);   //%x 按照十六进制打印
        return 0;
    }
    

    运行后就可以的看到
    在这里插入图片描述

    %x按照十六进制来进行打印.
    表示二进制的时候,人是不容易识别二进制的数字的.
    就可以使用十六进制来简化表示.
    一个十六进制数字,就是4个二进制位.
    两个十六进制数字,就是一个字节

    fffffffe=>
    1111 1111 1111 1111 1111 1111 1111 1110
    1=>
    0000 0000 0000 0000 0000 0000 0000 0001
    fffffffe就是1的按位取反结果

    练习题: 不能创建临时变量,实现两个数的交换.

    #include<stdio.h>
    
    int main() {
        int a = 10'
        int b = 20;
        //常见含临时变量做法:
        //int tmp = a;
        //a = b;
        //b = tmp
    
        //做法:1 借助加减运算完成.
    	//a = a + b;
    	//b = a - b;
    	//a = a - b;    
        
        //做法:2使用按位异或运算.
    	a = a ^ b;
    	b = a ^ b;
    	a = a ^ b;
        printf("%d %d",a,b);
    	return 0;
    }
    

    异或的重要特性~
    a ^ 0 => a
    1010
    0000 => 1010

    a ^ a=>0
    1010
    1010 => 0000

    a ^ b ^ a => b

    ![a = 10            01010b = 20            10100a ^  b              11110a ^ b ^ a         10100   => b]

    练习:求一个整数存储在内存中的二进制中1的个数.

    #include<stdio.h>
    
    int bitOneCount(int num ){
     	int count = 0;
        for(int i = 0; i < 32;i++){
            if(num & (1 << i)){
                count++;
    		}
       	}
       	return count;
    }
    int main(){
       printf("%d",bitOneCount(10));
       return 0;
    }
    

    赋值操作符

    赋值 和 初始化.
    赋值:已经有变量了对其进行修改.
    初始化:第一次创建变量,设置一个值.

    const int a = 10; //初始化
    a = 20.   //错误. !!! 常量不能进行赋值. 
    
    int a[] = {1,2,3,4};
    a = {3,4,5,6}; //错误, 数组不能这样赋值.!!! 
    
    //c中这两个代码是等价的.
    a += 5;
    a = a + 5; //多了一次临时对象的构造.
    

    单目操作符

    ! 逻辑取反.
    这是把当前的操作数先当成真假值,再进行运算.~(非0为真,0为假.)
    如果操作数为非0的值, !之后统一变成0
    如果操作数为0,!之后变成1.

    --a;//就是自减
    - - a; //相当于两次负号
    

    sizeof不是一个函数. 不光能求变量的字节数,还能求类型的字节数.

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

    sizeof 还可以编译期求值

    int a[4]={1,2,3,4};
    printf("%d\n",sizeof(a[100]));
    

    所谓的"数组下标越界"是发生在程序运行时的事情~本质上是访问了非法内存.
    在这里插入图片描述
    程序运行时就相当于

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

    编译期:把.c文件变成.exe文件
    运行时:运行.exe文件

    前置++ 和 后置++
    如果你要是把++这个运算符理解成是一个函数的话

    前置++(int num){
           num += 1;
           return num;
      }
    
    后置++(int num){
           int tmp = num;
           num +=1;
           return tmp;
      }
    

    强制类型转换

    注意:

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

    运行后就会强制截断.
    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

    把short 强转为 int 的时候,前面高位的两个字节,填充的都是符号位.
    把int强转为short的时候,前面高位的两个字节,就直接不要了.

    强制类型转换一定要谨慎使用

    隐式类型转换也是类似的规则.


    逻辑操作符

    短路求值:
    对于逻辑与运算来说,如果左侧表达式为假,此时整个表达式的值一定为假,右侧表达式不用求.
    对于逻辑或运算来说,如果左侧表达式为真,此时整个表达式的值一定为真,右侧表达式不用求.

    笔试题

    #include<stdio.h>
    
    int main(){
    	int i = 0, a = 0, b = 2, c = 3, d = 4;
    	i = a++ && ++b && c++ & d++;
    	// i = a++ || ++b || c++ || d++;
    	printf("a=%d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);   
    	return 0;
    }
    

    通过短路求值 就可以很快算出 程序的运行结果~


    条件操作符

    exp1 ? exp2 : exp3
    

    先判断表达式1的值,如果表达式1的值为真,结果就是表达式2的值.如果表达式1的值为假,结果就是表达式3的值.

    int maxNum(int a, int b){
    	//if(a > b){
    	//	return a;
    	//}
    	//return b;  就可以写成下面这样
    	return a > b ? a : b;
    }
    

    三目运算符优先级比较低
    如果要求输出值+100 就要给整体+.

    int maxNum(int a, int b){
    
    	return (a > b ? a : b )+ 100;
    }
    

    逗号表达式

    exp1, exp2, exp3, ...expN
    

    逗号表达式整个表达式的结果是最后一个表达式的结果.


    下标引用 函数调用和结构成员

    1.[ ]下标引用操作符,
    在C语言中,数组和指针都能进行[ ]操作.
    对于数组来说,[ ]的有效下标范围[0,length - 1]
    如果下标越界 就会出现未定义行为.

    对于指针来说, [ ]的有效下标范围就不好说了…

    2.( )函数调用操作符

    #include<stdio.h>
    void func(){
    	printf("hello\n");
    }
    
    int main(){
    	//不加括号,func,这是函数指针.
    	func();
    	return 0;
    }
    

    3.访问一个结构的成员

    .      结构体.成员名
    ->     结构体指针->成员名
    

    隐式类型转换

    隐式类型转换,主要是两种场境会触发.
    1.不同类型的变量相互赋值的.
    把 short 赋值给 int ,多出的两个字节,要填符号位.

    #include<stdio.h>
    
    int main(){
       //0x1122 => 0001 0001 0010 0010
       short a = 0x1122;
       int b = a;
       printf("%x\n",b);
       return 0;
    }
    

    把 int 赋值给 short ,少的两个字节就直接被舍弃了.(可能导致数据直接丢失. 风险太大…)

    2.不同类型的变量混合运算的.
    此处的隐式类型转换的基本规则和上面类似.
    拿short和int混合运算的时候, 将短的转成长的.short => int

    特殊情况 “整形提升”
    在这里插入图片描述
    整形提升,对于 short 和 char 这种比 int 短的都会产生.

    运算符优先性.
    先算乘除,后算+ -.
    先算单目运算符,后算双目运算符,三目运算符优先级最低.
    其他的多加括号就行了!!!

    求值顺序是不确定的,不同编译器可能会有不同的求值顺序.!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 2)str2:c语言会在字符串常量的结尾添加一个终止符‘\0’,因此,str2数组中包含的字符有:‘a’, ‘p’, ‘p’, ‘l’, ‘e’, ‘\0’,共6个,所以sizeof(str2)=6 1=6字节 字符串长度(strlen求字符串长度时,...

    之前在使用字符串的时候,总觉得‘\0’很诡异,有些时候有,有些时候没有,没搞懂。。。今天偶然看到一本好书,书上对‘\0’进行了详细的介绍,通过介绍终于搞清楚了‘\0’,下面就跟大家分享一下。
    字符数组的初始化有两种方式:

    1. 字符为字符数组赋初值
    2. 字符串常量为字符数组赋初值

    在c语言中,为自动在字符串常量的结尾添加一个终止符‘\0’。因此赋初值方式的不同,会造成数组的大小不同。
    采用字符为字符数组赋初值,如:

    char str1[5]={'a', 'p', 'p', 'l', 'e'};
    

    采用字符串常量为字符数组赋初值

    char str2[]="apple";
    

    下面,分别对两个字符数组求数组大小(sizeof)和字符串长度(strlen)

        char str1[5] = { 'a', 'p', 'p', 'l', 'e' };
    	char str2[] = "apple";
    	unsigned int size_str1 = sizeof(str1);
    	unsigned int size_str2 = sizeof(str2);
    	unsigned int len_str1 = strlen(str1);
    	unsigned int len_str2 = strlen(str2);
    	printf("size_str1=%d\n", size_str1);
    	printf("size_str2=%d\n", size_str2);
    	printf("len_str1=%d\n", len_str1);
    	printf("len_str2=%d\n", len_str2);
    

    程序运行之后结果如下:
    在这里插入图片描述
    结果分析:

    1. 数组大小
      1) str1:在定义时str1[5],已经明确了该字符数组包含了5个字符,因此sizeof(str1)=51=5字节
      2)str2:c语言会在字符串常量的结尾添加一个终止符‘\0’,因此,str2数组中包含的字符有:‘a’, ‘p’, ‘p’, ‘l’, ‘e’, ‘\0’,共6个,所以sizeof(str2)=6
      1=6字节
    2. 字符串长度(strlen求字符串长度时,遇’\0’结束)
      1)str1:str1在初始化时,并没有包含’\0’,因此strlen(str1)的结果不定
      2)str2:str2在初始化时,已经包含了’\0’,因此strlen(str2)=5
    展开全文
  • C语言笔记

    2021-03-01 10:06:05
    C 库函数 char *strstr(const char *haystack, const char *needle)在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。 声明 char *strstr(const char *haystack, const char *needl

    C语言—— C 标准库笔记 stdlib.h——

    strstr()

    描述 char *strstr()

    C 库函数 char *strstr(const char *haystack, const char *needle)在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。

    声明

    char *strstr(const char *haystack, const char *needle);
    

    参数

    • haystack – 要被检索的 C 字符串。
    • needle – 在 haystack 字符串内要搜索的小字符串。

    返回值

    该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

    实例

    #include <stdio.h>
    #include <string.h>
     
     
    int main()
    {
       const char haystack[20] = "RUNOOB";
       const char needle[10] = "NOOB";
       char *ret;
     
       ret = strstr(haystack, needle);
     
       printf("子字符串是: %s\n", ret);
       
       return(0);
    }
    

    子字符串是: NOOB

    展开全文
  • C语言strcpy()库函数的实现 strcpy()是C语言对字符串处理的库函数中的一种;.../*其中stra数组必须大于或等于strb数组,函数会把strb指向的字符串复制到str1中去,strb必须是终止符为'/0'的字符串指针
  • C语言复习资料.docx

    2020-03-08 20:39:13
    第一章 C语言程序设计概述 • c程序基本结构特点 o 函数与主函数 1. 程序由一个或多个函数组成,...”作为语句终止符 2. /* */或 / /后的内容 作为注释,不能嵌套,不产生编译代码 o 编译预处理不是C语言的一部分
  • 牛客C语言

    2021-01-07 22:53:01
    --数组的长度包含终止符\0 --字符串的长度不包含\0 B.语句char str[10]=“string!”; 和 char str[10] = {“string!”}不等价 错误 对于字符串来讲 未赋值的部分自动赋值“\0” 两个时等价的 C. 对于一位字符数组...
  • c语言预处理

    2015-03-05 16:07:05
    条件指示#ifndef 的最主要目的是防止头文件的重复包含和编译。 #ifndef x //先测试x是否被宏定义过 #define x 程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1 #else 程序段2 //如果x已经定义过...
  • C语言一些常用的函数

    千次阅读 2020-03-20 21:10:51
    C语言一些常用的函数 ...计算变量占了多大字节的空间,当计算字符串时我们知道,字符串后面会默认会加一个终止符也就是’\0’, sizeof()也会把它计算进去。 例子: (2)strlen()函数在头文件<...
  • c语言的学习

    2015-09-22 11:58:00
    其中/0表示字符串终止, 终止符是编译时自动加上的, 然后一个字符一个字符地复制到s所指的内存区域。因此定义字符串数组时, 其元素个数至少应该比字符串的长度多1。 2. 预处理运算符# #为宏扩展提供了一种连接实际...
  • C语言不像其他编程语言有专门的字符串类型,C语言的字符串一般是存于字符数组或由字符指针表示,字符串是指一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾,因为NUL为非打印字符,所以选它为终止符,字符...
  • 空格充满到下一个制表符终止的位置 */ #include #define TABINC 8 // 每隔TABINC个位置就会出现一个制表 int main() { int c,nb,pos; nb=0; //到达下一个制表需要的空格数 pos=1; //文本行中的当前位置,...
  • 返回字符串d的长度,不包括终止符NULL 字符串连接函数 char *strcat(char*d,char*s) 连接字符串s到字符串d,返回字符串d char *strncat(char*d,char*s,int n) 连接字符串s中至多n个字符到字符串d,返回字符串d ...
  • NUL字节是字符串的终止符,但是本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。2.字符串长度字符串的长度就是它所包含的字符个数,可以通过对字符进行计数来计算字符串的长度。但是我们不需要这样做,...
  • C语言str系列函数

    千次阅读 2017-12-03 23:59:41
    1.strlen函数 /*** 计算一个字符串的长度 ***/ .../* 依次访问字符串的内容,计算字符数,直到遇到NUL终止符 */ while( *string++ != '\0') length += 1; return length; } /* ** 这里简单的说明:strlen与
  • C语言系列——static关键字 常见用法有三种: 1:用于局部变量的修饰; 2:用于全局变量的修饰; 3:用于函数的修饰。 1、用于局部变量的修饰 当 static 用于修饰局部变量时,通常是在某个函数体内,...
  • C语言应用小技巧

    2016-02-26 15:41:40
    1、求字符串长度#include <stdlib.h>size_t strlen( char *string ) ... ** 依次访问字符串的内容,计数字符数,直到遇到NUL终止符 */ while( *string++ != '\0' ) length += 1; return length; }2
  • //->是成员指示,用来访问一个自定义数据类型的成员 } void DestroyList(SqList *L)//摧毁线性表 { free(L); } bool ListEmpty(SqList *L)//判断线性表是否为空 { return (L->length==0); } int ...
  • C语言的输入 所有的输入都是依赖于C语言函数进行的,这个函数是C语言标准库自带的...这是一个获取输入字符串的函数,其定义如下文,作用是从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。 char * g...
  • C语言--字符串操作

    千次阅读 2018-12-28 21:22:37
    1、字符串基础 字符串是一种重要的数据类型,但是C语言并没有显式的字符串数据类型,因为...NUL字节是字符串的终止符,但他本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。 2、字符串长度 库函数s...
  • 前序 当学习到C语言字符串的操作时,我们知道了字符串的定义方式,字符串的输出方式,其中包括字符串的输入输出语句,例如 puts,gets ...在字符串的输出语句使用中,总是离不开 NUL,这个终止符。 NUL ,在C语言每个...
  • 第一部分 C语言程序设计概述 -c程序基本结构特点 函数与主函数 程序由一个或多个函数组成,函数由函数头和函数体构成。程序的基本组成模块是函数。 必须有且只能有一个主函数main() ...”作为语句终止符 /* ...
  • C语言语法规则.pdf

    2020-09-01 14:11:24
    在 C 程序中分号是语句结束也就是说每个语句必须以分号结束它 表明一个逻辑实体的结束 例如下面是两个不同的语句 注释 注释就像是 C 程序中的帮助文本它们会被编译器忽略它们以 /* 开始 以字符 */ 终止如下
  • C语言的字符串操作

    2017-11-10 13:04:11
    在 C 语言中,字符串的使用需要注意,字符串实际上是使用字符 '\0' 终止的一...//如果按照字符数组的定义, "Hello" 五个字符,需要包含一个'\0'终止符,也就是要初始化char[6],而不能是char[5]。这个需要特别注意。
  • C语言---指针

    2017-12-17 11:16:00
    一、PTA实验作业 题目1:使用函数实现字符串部分复制 1. 本题PTA提交列表 2. 设计思路 主函数: 定义字符数组t,s 定义整型变量m,表示从第m个字符开始复制 ... 只要满足*(t+k)不是终止符 将*(t+k)赋给*s ...
  • 疑惑:主要是搞清楚制表符终止位是什么意思。 题意理解:制表符终止位可以看成是Excel单元格之间的竖线。这道题可以理解为:从键盘依次输入字符序列,往Excel单元格中填(自己想象),一个单元格的宽度为N(也就是可...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 209
精华内容 83
关键字:

c语言终止符

c语言 订阅