zoukankan      html  css  js  c++  java
  • c 语言学习第六天

    数组

    语法: 类型 数组名[元素个数];

    int a[6];  //  4*6 字节
    char b[24]; // 1*24  字节
    double c[2]; // 2*8  字节
    

    访问数组中的元素

    语法: 数组名[元素下标]

    a[2];
    b[4];
    c[1];
    
    • 注意
    int a[6];
    a[0]; // 访问第一个元素
    a[6]; // 访问第七个元素 出现数组越界。
    
    

    使用循环给数组赋值

    #include<stdio.h>
    #define NUM 10
    
    int main(){
    	int a[NUM];
    	int i,sum=0;
    
    	for(i = 0;i < NUM;i++){
    		printf("请输入第%i位同学的成绩:",i+1);
    		scanf("%d",&a[i]);
    		sum+=a[i];
    	}
    	printf("成绩录入完毕,该次考试的平均分是:%.2f
    ",(double) sum/NUM);
    	return 0;
    }
    

    初始化

    语法: 类型 数组名[元素个数] = {n,n+1,....};

    #include<stdio.h>
    #define NUM 5
    
    int main(){
    	int a[NUM] = {0};
    	int b[NUM] = {1,2,3,4,5};
    	int i;
    	for (i = 0;i < NUM;i++){
    		printf("a的第%d个元素为:%d
    ",i+1,a[i]);
    		printf("b的第%d个元素为:%d
    ",i+1,b[i]);
    	}
    	return 0;
    }
    
    a的第一个元素为:0
    b的第一个元素为:1
    a的第一个元素为:0
    b的第一个元素为:2
    a的第一个元素为:0
    b的第一个元素为:3
    a的第一个元素为:0
    b的第一个元素为:4
    a的第一个元素为:0
    b的第一个元素为:5
    
    #include<stdio.h>
    #define NUM 5
    
    int main(){
    	int a[NUM];
    	int b[NUM] = {1,2,3,4,5};
    	int i;
    	for (i = 0;i < NUM;i++){
    		printf("a的第%d个元素为:%d
    ",i+1,a[i]);
        printf("b的第%d个元素为:%d
    ",i+1,b[i]);
    	}
    	return 0;
    }
    
    a的第一个元素为:0
    b的第一个元素为:1
    a的第一个元素为:0
    b的第一个元素为:2
    a的第一个元素为:26
    b的第一个元素为:3
    a的第一个元素为:0
    b的第一个元素为:4
    a的第一个元素为:0
    b的第一个元素为:5
    
    • 有时候初始化了数组的值,可以在定义的时候不写数组的长度
    #include<stdio.h>
    #define NUM 5
    int main(){
    
    	int b[] = {1,2,3,4,5};
    	int i;
    	for (i = 0;i < NUM;i++){
    		printf("b的第%d个元素为:%d
    ",i+1,b[i]);
    	}
    	return 0;
    }
    
    • c99 新特性:指定初始化的元素。未被赋值的元素自动初始化 0;
    #include<stdio.h>
    #define NUM 5
    
    int main(){
    
    	int b[5] = {[3] = 4,[4] = 7};
    	int i;
    	for (i = 0;i < NUM;i++){
    		printf("b的第%d个元素为:%d
    ",i+1,b[i]);
    	}
    	return 0;
    }
    
    b的第1个元素为:0
    b的第2个元素为:0
    b的第3个元素为:0
    b的第4个元素为:4
    b的第5个元素为:7
    
    • sizeof
    #include<stdio.h>
    #define NUM 5
    int main(){
    
    	int b[5] = {[3] = 4,[4] = 7};
    	int i;
    	for (i = 0;i < NUM;i++){
    		printf("b的第%d个元素为:%d
    ",i+1,b[i]);
    	}
    	printf("sizeof b:%d个字节",sizeof(b));
    	return 0;
    }
    
    b的第1个元素为:0
    b的第2个元素为:0
    b的第3个元素为:0
    b的第4个元素为:4
    b的第5个元素为:7
    sizeof b:20个字节
    
    • c99 支持可变长度,是值用变量指定数组的长度
    #include<stdio.h>
    
    int main(){
    	int n,i;
    	printf("请输入字符串个数:");
    	scanf("%d",&n);
    	char a[n+1];
    
    	printf("请输入字符串:");
    	getchar(); // 把输入字符串个数之后的回车键获取扔掉
    	for(i = 0;i < n; i++){
    		scanf("%c",&a[i]);
    	}
    	a[n] = '';
    	printf("你输入的字符串是:%s
    ",a);
    	return 0;
    }
    

    在录入数据的时候会出现换行,所以在 for 前加上getchar();

    数组越界

    #include<stdio.h>
    
    int main(){
    	int a[10],i;
    	for(i = 0;i <= 10; i++){
    		a[i]=i;
    	}
    
    	for(i = 0;i <= 10; i++){
    		printf("%d
    ",a[i]);
    	}
    
    	return 0;
    }
    
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    可以打印出 11 个元素,越界不报错的原因是编译器做了手脚。不是所有的编译器可以正常执行。

    字符数组

    定义方式

    • 初始化字符串数组每个元素,以结尾
    char str[6] ={ 'H','e','l','l','o',' '};
    
    • 可以不写元素的个数,因为编译器会自动计算
    char str[] = { 'H','e','l','l','o',' ' };
    
    • 使用字符串常量初始化字符串数组
    char str[] = {"Hello"};
    
    • 使用字符串常量初始化,可以忽略大括号
    char str[]= "Hello";
    

    字符串处理函数

    • 获取字符串长度(个数):strlen
    #include<stdio.h>
    #include<string.h>
    int main(){
    	char str[] = "hello";
    	printf("sizeof str = %d
    ",sizeof(str)); // sizeof str = 6
    	printf("strlen str = %u
    ",strlen(str)); // strlen str = 5
    	return 0;
    }
    
    • 拷贝字符串:strcpy,strncpy
    #include<stdio.h>
    #include<string.h>
    int main(){
    
    	char str1[] = "hello world";
    	char str2[] = "New string 123";
    	char str3[100];
    	strcpy(str2,str1);
    	strcpy(str1,"123");
    	strcpy(str3,"321");
    	printf("str1 = %-20s , size = %4d
    ",str1,sizeof(str1));
    	printf("str2 = %-20s , size = %4d
    ",str2,sizeof(str2));
    	printf("str3 = %-20s , size = %4d
    ",str3,sizeof(str3));
    	// str1 = 123                  , size =   12
    	// str2 = hello world          , size =   15
    	// str3 = 321                  , size =  100
    	return 0;
    }
    

    使用 strcpy 第一个参数的字符串内存一定要大于第二个,否则会出现字符串截断。

    #include<stdio.h>
    #include<string.h>
    int main(){
    	char str1[] = "to be No.1";
    	char str2[50];
    	strncpy(str2,str1,4);
    	str2[4] = "";
    	printf("str2 = %s
    ",str2); // str2 = to b
    	return 0;
    }
    

    使用 strncpystrcpy多出一个参数,第三个参数,是表示复制的字符串数字个数。

    • 连接字符串:strcat,strncat
    #include<stdio.h>
    #include<string.h>
    int main(){
    
    	char str1[] = "hello";
    	char str2[] = " world!";
    	strcat(str1," big");
    	strcat(str1,str2);
    	printf("str1: %s",str1); // str1: hello big world!
    	return 0;
    }
    
    #include<stdio.h>
    #include<string.h>
    int main(){
    
    	char str1[] = "hello";
    	char str2[] = "world!";
    	strncat(str1," big",1);
    	strcat(str1,str2);
    	printf("str1: %s",str1);  // str1: hello world!
    	return 0;
    }
    
    • 比较字符串:strcmp,strncmp
    #include<stdio.h>
    #include<string.h>
    int main(){
    
     	char str1[] = "hellbe No.1";
    	char str2[] = "hello wold";
    	int num = 3;
    	int b = strcmp(str1,str2);
    	int c = strncmp(str1,str2,num);
    	printf("b = %d
    ",b);
    	printf("c = %d
    ",c);
    	if(!c){
    		printf("两个字符串前%d完全一致!
    ",num);
    	}else{
    		printf("两个字符串前%d存在差异!
    ",num);
    	}
    	if(!b){
    		printf("两个字符串完全一致!
    ");
    	}else{
    		printf("两个字符串存在差异!
    ");
    	}
    	// b = -1
    	// c = 0
    	// 两个字符串前3完全一致!
    	// 两个字符串存在差异!
    	return 0;
    }
    
    

    strcmp方法 相同返回0,不同返回其余数字。

  • 相关阅读:
    python D20 多继承、C3算法、super()
    python D19 约束、日志
    python D18 反射与md5 加密
    python D17 类与类之间的关系
    python D16 成员
    python D15 面向对象
    python D14 内置函数二
    python D13 内置函数
    python D12 生成器以及生成器表达式
    oracle函数
  • 原文地址:https://www.cnblogs.com/kongyijilafumi/p/15109944.html
Copyright © 2011-2022 走看看