ios学习记录 day5
1.数组是一种构造类型. 一维数组的定义: 类型说明符 数组名[数据个数//只能是常量] = {值1,值2.....}
2.数组下标从 0 开始,到 总个数-1 .
3.数组元素是变量, 区别 定义数组 和 数组元素 (有没有类型)
4.下标注意不要越界 系统不会检测 . 数组是一个整体 不能直接参加运算 只能对对单个元素进行处理 通常用到数组的地方都会用到循环
课上练习(1):有一个10个元素的数组,输出 每个数组元素的值=原值/数组首元素
float a[10] = {0};
for (int i = 0; i < 10; i++) {
a[i] = arc4random() % (100 - 1 + 1) + 1;
printf("a[%d] = %.2f\n",i,a[i]);
}//正序
for (int i = 9; i >= 0; i--) {
a[i] /= a[0];
printf("a[%d] = %.2f\n",i,a[i]);
}//逆序
(2).一个数组复制给另一个
int a[20] = {0},b[20] = {0};
for (int i = 0; i < 20; i++) {
a[i] = arc4random() % (50 - 20 + 1) + 20;
b[i] = a[i];
printf("a[%d] = %d\n",i,a[i]);
printf("b[%d] = %d\n",i,b[i]);
}
(3).两个数组下标相同的元素相加赋给第三个数组
int a[10] = {0},b[10] = {0},c[10] = {0};
for (int i = 0; i < 10; i++) {
a[i] = arc4random() % (40 - 20 + 1) + 20;
b[i] = arc4random() % (40 - 20 + 1) + 20;
c[i] = a[i] + b[i];
printf("a[%d]=%d\n",i,a[i]);
printf("b[%d]=%d\n",i,b[i]);
printf("a[%d]+b[%d]=%d\n",i,i,c[i]);
}
5.冒泡排序
双层循环 外层是冒泡趟数,内层是比较次数;
练习:随机输出10个数,并从小到大输出
int a[10] = {0};
int temp = 0;
for (int i = 0; i < 10; i++) {
a[i] = arc4random() % (100 - 1 + 1) + 1;
}
for (int i = 0; i < 10 - 1; i++) {
for (int j = 0; j < 10 - i - 1; j++) {
if (a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i = 0; i < 10; i++) {
printf("a[%d]=%d\n",i,a[i]);
}
6.字符数组
(1)strlen//计算字符串长度
字符 char c[7]={'i','p','h','o','n','e','\0'}; // \0结束符 不算字符
字符串 char c[7] = "iphone";//字符串 系统自带\0
字符串所占的空间 至少比 字符串长度 大1课上练习:
char a[] = {'H','e','l','l','o',' ','L','a','n','o','u','\0'};
char b[] = "Hello lanou";
long alength = strlen(a);//字符串长度
long blength = strlen(b);
printf("alength = %ld\n",alength);
printf("blength = %ld\n",blength);
long asize = sizeof(a);//所占空间长度
long bsize = sizeof(b);
printf("asize = %ld\n",asize);
printf("bsize = %ld\n",bsize);
输出:alength = 11
blength = 11
asize = 12
bsize = 12
(2)strcpy(b,a);//把a复制给b 注意 b的空间要比a大
练习char a[] = "hello";
char b[6] = "";//char b[6] = {'\0'};
strcpy(b, a);
printf("b = %s\n",b);
(3)strcat(a,b);//b拼接在a后面 赋给a 注意 a 要足够大
char a[12] = "Hello";
char b[] = "Lanou!";
strcat(a, b);
printf("%s\n",a);
(4)int value = strcmp(a,b);//a - b赋给value a,b不能是单个字符
char a[] = "hi";
char b[] = "hello";
int value = strcmp(a, b);
printf("value = %d\n",value);
练习
(1)char a[] = "i love ios,i want an iphone5s";
int i = 0,count = 0;
while (a[i] != '\0') {
if (a[i] == ' ') {
count++;
}
i++;
}
printf("有%d个空格\n",count);
作业:
1.交换两个数 不申请第三个变量
int a = 0,b = 0;
scanf("%d,%d",&a,&b);
printf("原来输入的是%d,%d\n",a,b);
a = a + b;
b = a - b;
a = a - b;
printf("倒过来输出%d,%d\n",a,b);
2、随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和。
3.编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。
4、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。
5.有1000000个数,每个数取值范围是0-999999,找出其中重复的数。(面试题)