前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c 语言学习第六天

c 语言学习第六天

作者头像
冬夜先生
修改2021-09-06 10:46:56
1850
修改2021-09-06 10:46:56
举报
文章被收录于专栏:csicocsico

数组

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

代码语言:javascript
复制
int a[6];  //  4*6 字节
char b[24]; // 1*24  字节
double c[2]; // 2*8  字节

访问数组中的元素

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

代码语言:javascript
复制
a[2];
b[4];
c[1];
  • 注意
代码语言:javascript
复制
int a[6];
a[0]; // 访问第一个元素
a[6]; // 访问第七个元素 出现数组越界。

使用循环给数组赋值

代码语言:javascript
复制
#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\n",(double) sum/NUM);
	return 0;
}

初始化

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

代码语言:javascript
复制
#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\n",i+1,a[i]);
		printf("b的第%d个元素为:%d\n",i+1,b[i]);
	}
	return 0;
}
代码语言:javascript
复制
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:0
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
代码语言:javascript
复制
#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\n",i+1,a[i]);
    printf("b的第%d个元素为:%d\n",i+1,b[i]);
	}
	return 0;
}
代码语言:javascript
复制
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:26
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
  • 有时候初始化了数组的值,可以在定义的时候不写数组的长度
代码语言:javascript
复制
#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\n",i+1,b[i]);
	}
	return 0;
}
  • c99 新特性:指定初始化的元素。未被赋值的元素自动初始化 0;
代码语言:javascript
复制
#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\n",i+1,b[i]);
	}
	return 0;
}
代码语言:javascript
复制
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
  • sizeof
代码语言:javascript
复制
#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\n",i+1,b[i]);
	}
	printf("sizeof b:%d个字节",sizeof(b));
	return 0;
}
代码语言:javascript
复制
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
sizeof b:20个字节
  • c99 支持可变长度,是值用变量指定数组的长度
代码语言:javascript
复制
#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] = '\0';
	printf("你输入的字符串是:%s\n",a);
	return 0;
}

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

数组越界

代码语言:javascript
复制
#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\n",a[i]);
	}

	return 0;
}
代码语言:javascript
复制
0
1
2
3
4
5
6
7
8
9
10

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

字符数组

定义方式
  • 初始化字符串数组每个元素,以\0结尾
代码语言:javascript
复制
char str[6] ={ 'H','e','l','l','o','\0 '};
  • 可以不写元素的个数,因为编译器会自动计算
代码语言:javascript
复制
char str[] = { 'H','e','l','l','o','\0 ' };
  • 使用字符串常量初始化字符串数组
代码语言:javascript
复制
char str[] = {"Hello"};
  • 使用字符串常量初始化,可以忽略大括号
代码语言:javascript
复制
char str[]= "Hello";
字符串处理函数
  • 获取字符串长度(个数):strlen
代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
int main(){
	char str[] = "hello";
	printf("sizeof str = %d\n",sizeof(str)); // sizeof str = 6
	printf("strlen str = %u\n",strlen(str)); // strlen str = 5
	return 0;
}
  • 拷贝字符串:strcpy,strncpy
代码语言:javascript
复制
#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\n",str1,sizeof(str1));
	printf("str2 = %-20s , size = %4d\n",str2,sizeof(str2));
	printf("str3 = %-20s , size = %4d\n",str3,sizeof(str3));
	// str1 = 123                  , size =   12
	// str2 = hello world          , size =   15
	// str3 = 321                  , size =  100
	return 0;
}

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

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
int main(){
	char str1[] = "to be No.1";
	char str2[50];
	strncpy(str2,str1,4);
	str2[4] = "\0";
	printf("str2 = %s\n",str2); // str2 = to b
	return 0;
}

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

  • 连接字符串:strcat,strncat
代码语言:javascript
复制
#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;
}
代码语言:javascript
复制
#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
代码语言:javascript
复制
#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\n",b);
	printf("c = %d\n",c);
	if(!c){
		printf("两个字符串前%d完全一致!\n",num);
	}else{
		printf("两个字符串前%d存在差异!\n",num);
	}
	if(!b){
		printf("两个字符串完全一致!\n");
	}else{
		printf("两个字符串存在差异!\n");
	}
	// b = -1
	// c = 0
	// 两个字符串前3完全一致!
	// 两个字符串存在差异!
	return 0;
}

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组
    • 访问数组中的元素
      • 使用循环给数组赋值
        • 初始化
          • 数组越界
            • 字符数组
              • 定义方式
              • 字符串处理函数
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档