#import <Foundation/Foundation.h>
#define knum 5
#define kArr "shuguangnvshen"
int main(int argc, const char * argv[]) {
//数组:数组是一组具有相同数据类型的成员组成的有序的集合
//格式:类型修饰符 数组名=(赋值运算符) {数组元素};
//访问数组元素:数组名加下标;
/*
int array[]={12,3,4,8};
0 1 2 3
array[0];//12
*/
//
// int arr[]={1,2,3,4};
// //[] 中括号 里面是我们数组元素的个数
//
//
// int arr1[8-4]={1,2,3,44};
// //数组元素个数可以使用常量表达式来表示
//
//
//
// //中括号里面放的只能是常量 这里放的是变量所以是错误的
// int a =4;
// int arr2[a]={1,3,4,5,}
//
////
// int arr2[3]={0};
// printf("%d
",arr2[1]);
//
//遍历数组元素
// for (int i =0; i<3; i++) {
// printf("%d",arr2[1]);
// }
//
//两种凡是打印数组元素
//数组当中的元素下标是从0开始,最大下标我们数组的总元素个数减一
// int arr3[5]={9,8,7,6,5};
// printf("%d
",arr3[0]);
// printf("%d
",arr3[1]);
// printf("%d
",arr3[2]);
//
// for (int i=0; i<5; i++) {
// printf("%d
",arr3[i]);
// }
//如果我们中括号内什么都不写的话 那么我们系统会自动判断数组里边的个数
// int array[]={1,2,3,4};
// //如果我们花括号内部的元素不满足我们数组元素的总个数,那么我们系统会自动补零
// int arr[4]={1,2,3};
//
//
// //数组越界问题:
// //数组元素个数和数组元素不匹配会发生数组越界的问题
// //一定要避免数组越界的问题,因为发生数组越界问题的时候我们数组内部元素是不可以把控的.
// int arr1[3]={1,2,3,4};
// printf("%d
",arr1[3]);
//
// //我们在定义数组的时候,如果我们没有给定我们数组的元素,那么为了避免一些问题的发生,我们应该去对我们的数组进行一个初始化(也就是赋值0的操作)
// int arr2[4]={0};
// //遍历数组的每个元素
// for (int i=0; i<4; i++) {
// printf("%d
",arr2[i]);
// }
//
//字符数组
//我们字符数组有一个特殊情况就是字符串数组 字符串数组默认是以" "结尾.多以当我们判断数组元素的个数时候不要去忽略" "
// char ch[]={'a','b','c','d','e','f'};
// printf("%c
",ch[5]);
// for (int i=0; i<7; i++) {
// printf("%c
",ch[i]);
// }
//
// //字符串数组
// char ch1[]="iphone";
// printf("%c
",ch1[6]);
// for (int i=0; i<7; i++) {
// printf("%c ",ch1[i]);
// }
//// //sizeof 打印出数组在内存中所占字节的
//
// printf("数组ch=%lu
",sizeof(ch1));
//
// int arr[4]={1,2,3,4};
//
// printf("%lu
",sizeof(arr));
// float arr1[3]={3,12,24,55};
// printf("%lu
",sizeof(arr1));
//
//
//数组所占字节字节数大小=数组类型*元素个数
//
// int array[5]={1,2,3,4,5};
// //通过数组下表可以访问数组元素
// printf("%d
",array[4]);
//
//
// //通过数组下标也可以去修改我们数组元素
// array[4]=6;
// printf("%d
",array[4]);
// for (int i=0; i<5; i++) {
// printf("%d ",array[i]);
// }
//
/* *定义⼀一个具有20个元素的整型数组,每个元素的 取值范围是30-70之间,求数组元素的和
•复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中
•定义 2个数组,每个数组都有 10个元素 ,元素取值范围20-
40之间,数组对应元素相加,放到另外一个数组中
*/
//定义一个具有20 个元素的整型数组
// int a[20];
// //定于一个变量 接收他们相加的和
// int sum=0;
// //使用for循环接收随机出来的书序元素
// for (int i=0; i<20; i++) {
// a[i]=arc4random()%(70-30+1)+30;
// sum=sum+a[i];
// printf("%d ",a[i]);
// } printf("sum=%d
",sum);
//
//
//
// int b[20];
// for (int i=0; i<20; i++) {
// b[i]=a[i];
// printf("b[%d]=%d
",i,b[i]);
// }
//
// int a[10],b[10],c[10],i;
// for (i=0; i<10; i++) {
// a[i]=arc4random()%(70-30+1)+30;
// b[i]=arc4random()%(70-30+1)+30;
// c[i]=a[i]+b[i];
// printf("a[%d]=%d",i,a[i]);
// printf("b[%d]=%d",i,b[i]);
// printf("c[%d]=%d
",i,c[i]);
// }
//
//手抄6遍
//敲20 次
//for和我们数组联系起来 去计算
//冒泡排序(要求我们是一个升序排列)
// //首先定义一个无序的数组
// int i, j, temp;
// int a[5]={5,4,3,2,1};
//
//
// //外层循环控制的是我们找出最终结果的一个趟数(元素个数-1)
// for (j = 0; j < 4; j++)
// {
// //内层循环控制的是我们每次找出最大数字的次数
// for (i = 0; i < 4 - j; i++)
// {
// //if()括号里面的>,<控制的是我们冒泡排序的一个升序或者是降序
// if (a[i] >a[i + 1])
// {
// //定义第三方变量辅助交换,将a[i]的值赋值给我们temp此时我们a[]里边是一个空的
// temp = a[i];
// a[i] = a[i + 1];
// //a[i+1]的值赋值给a[i],a[i+1]为空
// a[i + 1] = temp;
// }//第三方变量赋值给a[i+1];
// }
// }
// 打印输出
// for (i = 0; i < 5; i++)
// {
// printf("%d,", a[i]);
// }
// printf("
");
//
//随机产⽣生10个[20,40]数 ,并对10个数从⼩小到⼤大排序
//
// //首先定义一个int类型的数组,数组元素个数为10
// int a[10];int temp=0;int i=0;
// //使用随机数对数组进行赋值
// for (int i=0; i<10; i++) {
// a[i]=arc4random()%(40-20+1)+20;
// } printf("a[%d]=%d",i,a[i]);
// //冒泡排序
// for (int i=0; i<9; i++){
// for (int j=0; j<9-i;j++){
// if (a[j]>a[j+1]) {
// temp = a[j];
// a[j] = a[j + 1];
// a[j + 1] = temp;
// }
// }
//
// }
// for (int j= 0;j < 10;j++)
// {
// printf("%d,",a[j]);
// }
// printf("
");
/* //stelen()计算字符串的长度
字符串的内部表示使用一个空字符" "作为字符串的结尾.
因此存储字符串的物理存储单元数比括在双引号中的字符串数多一个,这种表示方法也说明,c语言对字符串的长度是没有限制的,但是程序必须扫描完整个字符串后才能确定字符串的长度,标准库函数strlen()可以返回字符串参数的长度,但是长度不包括末尾的" "
*/
// char ch[]="iphone";
// //int result=strlen(ch);
// printf("%lu
",strlen(ch));
// //strlen()内部实现
// int i=0;//用来计数
// while (ch[i]!=' ') {
// i++;
// }
//
// //字符数组
// char ch1[]={'i','p','h','o','n','e'};
// //int result1=strlen(ch1);
// printf("%lu
",strlen(ch1));
/*
strcpy():字符串拷贝
库函数strcpy(s,t)把指针t指向的字符串复制到指针s指向的位置,如果使用语句s=t实现该功能,其实他的是指只是拷贝了指针,而并没有赋值字符,为了进行字符的赋值,这里使用了循环语句,strcpy函数实质是拷贝指针没有赋值字符
*/
// //这里将str复制到str1当中,我们要确定str1的元素个数一定要大于str的元素个数否则会发生数组越界的问题,
// char str[]="iphone";
// char str1[]=" ";
// strcpy(str1, str);
// printf("%s
",str1);
// //内部实现:
// int i=0;
// while ((str1[i]=str[i]!=' ')) {
// i++;
// }
/*
字符串拼接:strcat()
现在有两个字符串s,t
它是将字符串t连接到字符串s的尾部,函数strcat 嘉定字符串s中有足够的空间保存这两个字符串的连接结果.
*/
//
// char t[]="s";
// char s[]="io";
// printf("%s ",strcat(s, t));//将第二个参数拼接到第一个参数的后边
//注意s数组里面的元素个数一定要大于t数组元素个数(如果小于的话也是会发生数组越界的问题)
// char a[]="iphone";
// char b[]="6s";
// printf("%s",strcat(a,b));
/*
字符串比较 stramp()
字符串比较函数stramp(s,t)该函数比较字符串s,t,并且根据s按照字典顺序小于,等于或者大于t的结果分别返回负整数,0或者正整数
该返回值是s,t由前向后注意字符比较式遇到第一个不相等的字符的差值
如果比较的结果为零那么表示的两个字符串相等,如果返回的值是正整数的话,代表我们前边的字符串大 负整数则相反
*/
// char a[9]="abo";
// char b[10]="abc";
// printf("%d",strcmp(a, b));
//
//一个汉字占三个字节.
// char ab[10]="蓝欧";
// printf("%lu",strlen(ab));
//
//查找字符串中的空格数
// I love ios, i want an iphone6s
// //while循环
// char b[]="I love ios, i want an iphone6s";
// int i=0;//定义一个让循环开始的变量
// int count=0;//定义变量记录空格数
// //使用while循环
// while (b[i]!=' ') {
// if (b[i]==' ') {
// count ++;
// }
// i++;
//
// }
// printf("%d",count);
//使用for循环
// char b[]="I love ios, i want an iphone6s";
// int a=0;//a用来记录空格的个数
// //使用strlen函数它是就计算我们字符串的个数
// //并且该函数会自动忽略 .我们不需要在考虑 的情况
// for (int i =0; i<strlen(b); i++) {
// if (b[i]==' ') {
// a++;
// }
// }printf("%d",a);
//
// /*
// 将字符串倒转
// 例如:“afjnpue”转变成字符串“eupnjfa”(注:是改变字符串本⾝身,不是反向输出
//
// */
// char str[]="afjnpue";
//
//
// char temp;
// int i,j;
// j = strlen(str)-1;
// for (i=0; i<j; i++) {
// //首先第一个元素和最后一个元素进行交换,数组最大下标是strlen(str-1);而我们第一个元素下标为0.最后一个元素下标为strlen(str)-1-0;倒数第二个元素下标为strlen(str)-1-1..........
// temp=str[i];
// str[i]=str[j];
// str[j]=temp;
// j--;
// }
// printf("%s",str);
////
//
/*宏定义:
//#define kArrlen 10//kArrlen: 是 宏名oc当中推荐使用的是驼峰命名法,首字母为k其他单词首字母字符大写
#define ARR_LBN 10//是我们c语言但中宏定义的命名;所有字母大写,单词使用下划线分隔
// */
// int arr[knum]={1,2,3,4,5};
// int arr1[knum]={1,2,5};
// int arr2[knum]={1};
// char array[]=kArr;
// char arrar1[]=kArr;
// printf("%s
",array1);
/*
带参数的宏
#define MIN(A,B)A>B?A:B
#define SOR(Num) Num*Num
SQR(2+1)/SQR(2+1)编译过后变成:
2+1*2+1/2+1*2+1=7;
*/
// int a[5]={5,4,3,2,1};
// int i,j,temp;
// for (i=0; i<4; i++) {
// for (j=0; j<4-i; j++) {
// if (a[j]>a[j+1]) {
// temp=a[j];
// a[j]=a[j+1];
// a[j+1]=temp;
// }
// }
// }for (i=0; i<5; i++) {
// printf("a[%d]=%d",i,a[i]);
// }printf("
");
return 0;
}