小白学c语言第三天总结

一、一维数组

1.1定义及格式

数据类型 数组名【元素个数】

例如:

1、存储班级同学年龄,班级有5人

int //年龄整型

age//自定义数组名

5//元素:数组内的数据个数

int age[5]

1.2数组下标

下标:从0~数据个数-1     

1.3变量定义

定义时必须要有明确的空间    例如:int a[10];    float b[4];                                                                                           char ch[5]="12345";

1.4数组初始化

列如    int a[10]={'\0'};     -----   不用\0清除数据,可能会有之前的数据留在内存里

1.5数组的注意事项

1、数组只能在初始化的时候整体赋值。

2 、数组名是数组首元素的地址

3、数组只能在初始化的时候整体赋值。

例:    int b[5] = {1,2,3,4,5};

错误写法,警惕警惕!!!!

int b[5];  // 数据总个数

b[5] = {1,2,3,4,5};  // 错误  使用的时候[]里面是下标

int c[5];

c = {1,2,3,4,5};  // 错误 不对   c是数组名,它是首元素的地址

4、数组名是数组首元素的地址

int a = 30;

//printf("%d\n",a);   查看空间里面的数据 

printf("%p\n",&a); // 获取内存分配给a的地址

错误写法int b[5];

b = {1,2,3,4,5};         // 错误 相等于是写 0x0062Fe9C = {1,2,3,4,5};                

  //不能给常量赋值

int c[5] = {1,2,3,4,5};

int d[5];

d = c;                        // 相当于 0x0062Fe9C = 0x0062Fe90

int i;

for(i=0;i<5;i++)

{

d[i] = c[i];

}

二、二维数组

2.1定义格式

数据类型 数组名[行数][列数];        例: int a[2][3];

2.2解析

a的类型:int [2][3]

a[0]和a[1]的类型:int [3]

a[0][0]  a[0][1]  a[0][2]  a[1][0]  a[1][1]  a[1][2]的类型: int 

#include<stdio.h>
int main(void)
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,c;     
for(i=0;i<3;i++)
 {
      int sum = 0;  // 在列循环前重置变量sum=0;便于每行求和
      for(j=0;j<3;j++)
      {         
        c=a[i][j];
        sum = sum +c;
        printf("a[%d][%d]:%d ",i,j,c);         
      }
        printf("和: %d\n",sum);
  }
}

三、字符串和字符数组

3.1初始化

初始化可以简写        例如    char name[5]="a,b";-------//{'a','b','\0','\0','\0'}

省略数据个数            例如    int a[]={1,2,3};

3.2字符串的专用格式控制符

%s ----------输入输出只需要给字符串首地址即可,遇到\0结束

例: char b[] = "abcdefghijklmnopqrstuvwsyz";

 printf("%s",&b[0]);

3.3字符串处理函数

//-求字符串长度不包含\0,遇到\0结束
#include<stdio.h>
#include<string.h>
int main()
{
  char name[20];
  printf("请输入您的姓名: ");
  scanf("%s",&name[0]);
  int len = strlen(&name[0]);
  if(len < 8 || len > 12) 
  {
    printf("no");
  }
  else
  {
    printf("yes");
  }
  return 0;
}

//strcat  --- 拼接   “hello”  "world"  "hello world"
//-求字符串长度不包含\0,遇到\0结束
#include<stdio.h>
#include<string.h>
int main()
{
  char str1[100] = "hello";  
  char str2[20] = "world";
  char *res = strcat(str1,str2);
  printf("%s",res);
  printf("%s",str1);
  return0;
}
//strcmp  --- 比较   
#include<stdio.h>
#include<string.h>
int main()
{
  //  用户登录界面 
	char name1[]="lili";
	char key1[]="123456";
	char name2[100]={'\0'};
	char key2[]={'\0'};
	printf("请输入用户名\n");
	scanf("%s",&name2[0]);
	int n = strcmp(name1,name2);
	if(n == 0)
	{
		printf("请输入密码\n");
		scanf("%s",&key2[0]);		
		int k = strcmp(key1,key2);
		if(k==0)
		{
			printf("登陆成功");
		}
		else
		{
			printf("请重新输入密码");
		}
	}
	else
	{
		printf("请重新输入用户名"); 
	}
    return0;
}

//strcpy  --- 拷贝   char names[30]; 定义后整体赋值用strcpy
#include<stdio.h>
#include<string.h>
//char *strcpy( char *to, const char *from );
int main()
{
  char names[30];
  strcpy(names,"xiaoming");//xiaoming拷贝到names
  printf("%s",names); 
  
  return0;
}






//strstr  --- 在一个字符串里面定位另外一个字符串。
#include<stdio.h>
#include<string.h>
//char *strstr( const char *str1, const char *str2 );
//函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL。
int main()
{
  //"temp:36.50,humid:200"
  char *res = strstr("temp:36.50,humid:200","temp1:");//字符串内没有找到"temp1:"
  if(res == NULL)
  {
    printf("no");
  }
  else
  {
    printf("yes");
  }
  
  return0;
}
//strchr  --- 在一个字符串里面定位一个字符
//char *strchr( const char *str, int ch );
//函数返回一个指向str 中ch首次出现的位置,当没有在str 中找ch到返回NULL。
#include<stdio.h>
#include<string.h>
int main()
{
  char *res = strchr("hello",'l');//"hello"内找l
  if(res == NULL)
  {
    printf("no");
  }
  else
  {
    printf("%s",res);
  }
  return0;
}
//memset  --- 整体设置内存  ---  将一段内存空间填入某值
//void *memset( void *buffer, int ch, size_t count );
#include<stdio.h>
#include<string.h>
int main()
{
  char names[15] = "hello world";//15只是为了有足够空间而随机定义的数char型1个字符为1字节
  memset(names,'t',6);
  printf("%s",names);
  return0;
}

函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。

例如:

memset( the_array, '\0', sizeof(the_array) );

// sizeof -- 求空间字节数 可以放数据类型也可以放空间的名称

// printf("%d",sizeof(int));  // 4

// int a;

// printf("%d",sizeof(a));  // 4

// int a[5];

// printf("%d",sizeof(a));  // 在sizeof里面数组名代表空间名称 -- 计算整个空间有多少字节 --- 20

//memcpy  --- 从一个字符串拷贝n个字符到另外一个字符串里面

#include<stdio.h>
#include<string.h>
int main()
{
  	char str1[40] = "xxxxtemp:36.50,humid:200";
	char t[8] = {'\0'};
    // 定位temp:    strstr
    // 跨越 temp:   + 5
    // 拷贝 5个字符目标数组里面去  memcpy
	char *res = strstr(str1,"temp:");
	if(res == NULL)
	{
	printf("找不到");
	}
	else
	{
		res = res + 5;  // char *指针偏移5个char
		memcpy(t,res,5);
		printf("%s",t);
	}
    return0;
}

         void *memcpy( void *to, const void *from, size_t count );

         函数从from中复制count 个字符到to中,并返回to指针。         

        如果to 和 from 重叠,则函数行为不确定。

3.4通性

        char *str1        可以通过str1对它指向的字符串进行读写操作

        const char *str1  可以通过str1对它指向的字符串进行读操作,不能写

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值