❤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字符一定是个整数,汉字的第一个字节一定是负数。