C语言学习笔记(1)——数组和字符串

❤2018.2.9

数组部分其实以前知道个大概,不过不是很了解数组的调用还有数组和指针的结合,争取这次能够真正掌握。

1、注意声明变量的初值

//求数组中元素和
int main()
{
	int array[10] = { 32,45, 643, 12, 56, 2000, 78, 22, 69, 10 };
	int sum = 0; //注意这里
	int i;
	for (i = 0; i < 10; i++)
	{
		sum += array[i];
	}
	printf("sum = %d\n", sum);
	getchar();
    return 0;
}

这里的sum我开始没有赋初值,结果就报错了,尴尬。。。

2018.2.22

2、水仙花数

一个n位数,n>3,它的每个位上的数字的n次幂的和,等于这个数本身。

练习:将100——999之间的所有的水仙花数打印出来。

//水仙花数
int main()
{
	int start = 100;
	int end = 110;
	int fst;
	int sco;
	int thr;
	int tmp;
	int i;
	for (i = start;i <= end;i++)
	{
		fst = i / 100;
		sco = i / 10 - fst * 10;
		thr = i - (fst * 100 + sco * 10);
		tmp = fst*fst*fst + sco*sco*sco + thr*thr*thr;
		if (tmp == i)
			printf("%d\n", i);
	}
	return 0;
	getchar();
}

自己瞎写的,感觉可能效率一般吧。

❤2018.2.23

3、求3-100素数之和

//求3到100素数之和
int main()
{
	int sum = 0;
	int i;
	for (i = 3; i < 100; i++)
	{
		int status = 1;
		int j;
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				status = 0;
				break;
			}
		}
		if (status == 1)
			sum += i;
	}
	printf("%d", sum);
	return 0;
}

注意那个break和status状态变量的应用


4、二维数组定义的时候同时初始化是大括号套大括号

如:

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

int array[2][3] = {0}; 都初始为0


5、输出二维数组需要双重循环

int i,j;

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

{   

     for(j=0;j<3;j++)

    {

        print("array[%d][%d]=%d\n",i,j,array[i][j]);

    }

}

return 0;


6、打印数组的时候一定不要越界,虽然不会报错,但是会出现一些奇怪的东西。


❤2018.2.27

7、字符串数组初始化

(1)char aray[100] = {'a','b','c'};

(2)char array[100] = "abcd";

(3)char array[100] = {0};

(4)char array[] = "abcd";

*字符窜是以0结尾,所以方法(4)占用5个字节。


8、字符串逆置

//字符串逆置
int main()
{
	char str[100] = "hello world";
	int i = 0;
	while (str[i++]);//这步很重要,求字符串的长度,如果直接把字符串数组逆置则会把0放到前面,字符串会失效
	int min = 0;
	int max = i - 2;
	while (min < max)
	{
		char tmp = str[min];
		str[min] = str[max];
		str[max] = tmp;
		min++;
		max--;
	}
	printf("%s\n", str);
	return 0;
}
注意中间求字符串长度那步。


9、注意:

●在定义变量的时候把变量值初始化是一个好习惯。

●数组维数越多,代码的可读性就越差,所以要尽可能的用维数少的数组。

●字符串一定是在内存中以0结尾的一个char数组。

●如果定义一个字符串数组的时候,没有写数组的维数,那么C语言编译器会自动根据字符串的长度自动填写(后面加个0)。

●如果定义长度则必须大于字符串内容的长度,不然就会出现乱码。


10、汉字逆置

//汉字逆置
int main()
{
	char buf[100] = "你好世界";//gbk编码的汉字,一个汉字占2个字节
	int len = 0;
	while (buf[len++]);
	len--;//因为是len++所以在统计完字符串长度之后又加了1,所以要减去,其实我觉得可以用++len。
	//printf("%d\n", len);
	int min = 0;
	int max = len - 1;
	while (min < max)
	{
		char tmp = buf[min];
		buf[min] = buf[max - 1];
		buf[max - 1] = tmp;

		tmp = buf[min + 1];
		buf[min + 1] = buf[max];
		buf[max] = tmp;

		min += 2;
		max -= 2;
	}
	printf("%s\n", buf);
	return 0;
}

*注意,如果在其他编译器用的不是gbk编码的汉字,这个程序有可能失效。

●如果将一个字符串当做char处理,那么标准的ASCII字符一定是个整数,汉字的第一个字节一定是负数。


猜你喜欢

转载自blog.csdn.net/ooorczgc/article/details/79300743
今日推荐