//
#import <Foundation/Foundation.h>
int main( int argc, const char * argv[])
{
// 数组是 构造类型
int array[ 5 ] = { 6 , 8 , 12 , 15 , 17 }; // 中括号内必须是 常量表达式 , 代表多少元素 , 注意要初始化 ({0}), 即可
unsigned long a = sizeof (array);
printf ( "%lu" ,a); //ld 也可以 a = 20, 连续的内存空间 ,00,00,00,06-00,00,00,08..........
//{0} 数组中的每个元素都给初值 0
int array1[ 10 ] = { 0 };
// 第一个元素为 1, 其余 7 个为 0
int array2[ 8 ] = { 1 };
// 中括号中不写元素的个数 , 则看实际有多少个元素分配内存
float array3[] = { 6.8 , 7.2 , 3.5 };
int array[ 3 ] = { 5 , 6 , 8 };
// 定义的数组个数不能小于后边赋值的个数
// 数组元素的下标从 0 开始
// 数组中 存的 每个元素都是 变量
// 在使用数组元素的时候 ,[] 内可以使变量
int i = 0 ;
array[i] = 5 ;
printf ( "%d" ,array[i]);
int array[ 5 ] = { 5 , 6 , 8 , 1 , 14 };
for ( int i = 0 ; i < 5 ; i++) {
printf ( "%d\t" , array[i]);
}
// 产生随机数 , 求和
int array[ 20 ] = { 0 }, sum = 0 ;
for ( int i = 0 ; i < 20 ; i++) {
array[i] = arc4random () % 41 + 30 ;
sum += array[i];
printf ( "%d " , array[i]);
}
printf ( "\n%d\t" , sum);
// 复制数组 , 我写的是倒序 , 呵呵
int array[ 5 ] = { 5 , 6 , 8 , 1 , 14 }, array1[ 5 ] = { 0 };
for ( int i = 0 ; i < 5 ; i++) {
array1[ 4 -i] = array[i];
printf ( "%d\t" , array[i]);
}
printf ( "\n" );
for ( int i = 0 ; i < 5 ; i++) {
printf ( "%d\t" , array1[i]);
}
// 两个数组相加 , 赋给第三个数组
// 随机 随机 每次都是随机
// 不要取错下标
int array2[ 10 ] = { 0 }, array3[ 10 ] = { 0 }, array4[ 10 ] = { 0 };
for ( int i = 0 ; i < 10 ; i++) {
array2[i] = arc4random () % 21 + 20 ;
printf ( "&%d " , array2[i]);
array3[i] = arc4random () % 21 + 20 ;
printf ( "*%d " , array3[i]);
array4[i] = array2[i] + array3[i];
printf ( "+%d\t" , array4[i]);
}
// 冒泡排序
int array[ 20 ] = { 0 };
for ( int i = 0 ; i < 20 ; i++) {
array[i] = arc4random () % 101 ;
printf ( "%d " , array[i]);
}
printf ( "\n" );
// 外层循环控制比较趟数
for ( int i = 0 ; i < 20 - 1 ; i++) {
// 内层循环用来控制每趟比较次数
for ( int j = 0 ; j < 20 - 1 - i; j++) {
if (array[j] > array[j + 1 ]) {
// 定义一个临时变量先保存一个数
int temp = array[j];
array[j] = array[j + 1 ];
array[j + 1 ] = temp;
}
}
}
printf ( "\n" );
for ( int i = 0 ; i < 20 ; i++) {
printf ( "%d " , array[i]);
}
// 选择排序
// 思想 : 每次选出一个最小值的下标 , 一趟结束后把最小值放到最前边
int array[ 10 ] = { 0 };
for ( int i = 0 ; i < 10 ; i++) {
array[i] = arc4random () % 101 ;
printf ( "%d " , array[i]);
}
printf ( "\n" );
// 外层循环控制比较趟数
for ( int i = 0 ; i < 10 - 1 ; i++) {
// 每次假定无序区的第一个数是最小值
int minIndex = i;
// 从无序区的第二个数开始 , 到最后一个
for ( int j = i + 1 ; j < 10 ; j++) {
// 如果这个数比当前的最小值更小
if (array[minIndex] > array[j]) {
// 就把这个数的下标更改成最小值的下标
minIndex = j;
}
}
// 如果这一趟比较下来 , 最小值不是开始假定的最小值下标 , 才交换 , 否则不交换
if (minIndex != i) {
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
printf ( "\n" );
//输出
for ( int i = 0; i < 10; i++) {
printf( "%d ", array[i]);
}
// 字符数组 , 字符串就是一维的字符数组
char c[ 10] = { 'i', 'P', 'h', 'o', 'n', 'e'};//不包含\0
// 如果不写数组元素个数 , 那么默认数组元素个数是 总字符数+1
// 系统会自动补一个 '\0' 用来标示字符串的结束
char c1[ 10] = "iPhone";
char c2[] = "iPhone"; // 共 7 个元素 , 末尾是 '\0'
printf( "%lu ", sizeof(c2));
for ( int i = 0; i < 10; i++) {
printf( "%c ", c[i]); //i P h o n e 反问号
//printf("%d ", c1[i]);//"\0" 对应的 ASCII 是 0
}
// 定义字符串的时候 , 元素个数至少是字符个数 +1
char str[ 8] = "andr0id"; //andr\0id,\0 就会截取
str[ 4] = 0;
printf( "%s",str); //%s 工作原理 , 碰到数字 0 就会结束
//strlen() 是函数 , 用来计算字符串的长度 , 不包含 '\0'
//sizeof 是一个运算符 , 用来测算数据类型 , 或者变量 , 所占内存大小 ( 所占用的字节数 )
printf( "%lu", strlen(str)); // 无符号长整形
char str1[ 20] = "iPhone";
//char str2[20] = {0};
char str2[ 20] = "aaaaaaaaaaaaaa";
// 第一个参数 : 拷到哪儿 , 第二个参数 : 从哪儿拷
// 从 str1 第一个字符开始往 str2 拷贝 , 拷贝到 '\0' 结束
strcpy(str2, str1);
printf( "%s",str2);
printf( "\n%c",str2[ 13]); // 总共 14 个字符 , 下标到 13.
char str1[ 20] = "iPhone";
// 著名的崩溃
char str3[ 3] = "ok";
// 被拷入的字符串 , 要足够大
strcpy(str3, str1);
//笔试,编码习惯,逻辑思维,为OC垫底儿
char str1[ 20] = "iPhone";
char str2[ 10] = "Android";
// 把 str2 里边的内容拼接到 str1 后边
// 从 str1 的 '\0' 开始拼接
// 被拼入的字符内存要足够大
strcat(str1, str2);
printf( "%s",str1);
printf( "\n%d",str1[ 12]); // 没数字的是 0
char str[] = "abc";
char str1[] = "adc";
// 逐个 比较ASCII码 的差值 , 如果循环结束 , 结果为 0
// 代表两个字符串相等
int result = strcmp(str, str1); // 返回值是 int
printf( "%d",result);
// 计算空格个数
char str[ 30] = "I love ios,i want an iPhone5";
int count = 0, index = 0;
while (str[index] != '\0') {
if (str[index] == ' ') {
count++;
}
index++;
}
printf( "%d",count);
char str[ 100] = { 0};
// 使用 scanf 数组字符串要用 %s, 不用取地址符
// 但是默认 scanf 遇到空格或回车就代表输入结束
// 使用 %[^\n] 代表除了回车 , 其余的全接收
scanf( "%[^\n]", str);
printf( "%s", str);
return 0;
}
for ( int i = 0; i < 10; i++) {
printf( "%d ", array[i]);
}
// 字符数组 , 字符串就是一维的字符数组
char c[ 10] = { 'i', 'P', 'h', 'o', 'n', 'e'};//不包含\0
// 如果不写数组元素个数 , 那么默认数组元素个数是 总字符数+1
// 系统会自动补一个 '\0' 用来标示字符串的结束
char c1[ 10] = "iPhone";
char c2[] = "iPhone"; // 共 7 个元素 , 末尾是 '\0'
printf( "%lu ", sizeof(c2));
for ( int i = 0; i < 10; i++) {
printf( "%c ", c[i]); //i P h o n e 反问号
//printf("%d ", c1[i]);//"\0" 对应的 ASCII 是 0
}
// 定义字符串的时候 , 元素个数至少是字符个数 +1
char str[ 8] = "andr0id"; //andr\0id,\0 就会截取
str[ 4] = 0;
printf( "%s",str); //%s 工作原理 , 碰到数字 0 就会结束
//strlen() 是函数 , 用来计算字符串的长度 , 不包含 '\0'
//sizeof 是一个运算符 , 用来测算数据类型 , 或者变量 , 所占内存大小 ( 所占用的字节数 )
printf( "%lu", strlen(str)); // 无符号长整形
char str1[ 20] = "iPhone";
//char str2[20] = {0};
char str2[ 20] = "aaaaaaaaaaaaaa";
// 第一个参数 : 拷到哪儿 , 第二个参数 : 从哪儿拷
// 从 str1 第一个字符开始往 str2 拷贝 , 拷贝到 '\0' 结束
strcpy(str2, str1);
printf( "%s",str2);
printf( "\n%c",str2[ 13]); // 总共 14 个字符 , 下标到 13.
char str1[ 20] = "iPhone";
// 著名的崩溃
char str3[ 3] = "ok";
// 被拷入的字符串 , 要足够大
strcpy(str3, str1);
//笔试,编码习惯,逻辑思维,为OC垫底儿
char str1[ 20] = "iPhone";
char str2[ 10] = "Android";
// 把 str2 里边的内容拼接到 str1 后边
// 从 str1 的 '\0' 开始拼接
// 被拼入的字符内存要足够大
strcat(str1, str2);
printf( "%s",str1);
printf( "\n%d",str1[ 12]); // 没数字的是 0
char str[] = "abc";
char str1[] = "adc";
// 逐个 比较ASCII码 的差值 , 如果循环结束 , 结果为 0
// 代表两个字符串相等
int result = strcmp(str, str1); // 返回值是 int
printf( "%d",result);
// 计算空格个数
char str[ 30] = "I love ios,i want an iPhone5";
int count = 0, index = 0;
while (str[index] != '\0') {
if (str[index] == ' ') {
count++;
}
index++;
}
printf( "%d",count);
char str[ 100] = { 0};
// 使用 scanf 数组字符串要用 %s, 不用取地址符
// 但是默认 scanf 遇到空格或回车就代表输入结束
// 使用 %[^\n] 代表除了回车 , 其余的全接收
scanf( "%[^\n]", str);
printf( "%s", str);
return 0;
}