数组
来源:互联网 发布:javascript冒泡排序 编辑:程序博客网 时间:2024/05/21 06:32
1.一维数组
int scores[5];//数组的声明#define LENGTH 5int scores1[LENGTH];//使用宏定义声明scores[0]=10;//一维数组的访问,使用下标索引,下标从0开始//arr[5]=100;X//数组下标越界。可能得到非期望值int i;i=arr[1];//使用第二个元素进行赋值//数组初始化为0int arr1[5]={1,2,3,4,5};char codes[5]={'A','b','c','D','e'};double pices[3]={1.2,2.4,3.6};//数组初始化必须在数组声明时//数组声明时可以省略数组长度,但是需要初始化数据来决定长度int arr1[ ]; //代码错误,数组长度不可知int codes[ ] = {1, 2, 3, 4, 5}; //代码正确//数组初始化时的初始化数据个数可以不跟数组长度匹配int arr1[5] = {1, 2, 3}; //数组前三个元素被初始化int codes[3] = {1, 2, 3, 4, 5}; //最后两个值被丢弃
2.冒泡排序法、折半查找法
//冒泡排序法//例:使用数组进行冒泡排序,要求结果从大到小排列,并且输出排序后的结果/*void func3(int a[]);int main(int argc, const char * argv[]) { int scores[5]={88,77,66,100,99}; func3(scores); return 0;}void func3(int a[]){ //传参传递的是数组的地址 for (int i=0; i<4; i++) { //进行比较趟数 for (int j=0; j<4-i; j++) { //每趟比较次数 if (a[j]<a[j+1]) { //将较小的值存入scores[j],较大的数值存入scores[j+1] int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (int i=0; i<5; i++) { printf("%d ",a[i]); }}//使用数组进行折半查找(二分查找)void func4(int x);int zheban(int n);int main(int argc, const char * argv[]) { int x; printf("请输入你要找的数据(12,15,18,88,99)\n"); scanf("%d",&x); func4(x); printf("----------------------------\n"); printf("请输入你要找的数据(12,15,18,88,99,100)\n"); int location=zheban(x); printf("%d是数组中下标为%d的值\n",x,location); return 0;}void func4(int x){ //我做的 =.=只适应n为偶数,求各位大神指点 int arr[]={12,15,18,88,99}; int n=4; for (int i=0; i<3; i++) { if (x>arr[n/2]) { n=n+n/2; }else if (x<arr[n/2]) { n=n-n/2; }else{ printf("执行%d次后,找到下标%d的元素%d\n",i+1,n/2,arr[n/2]); break; } }}int zheban(int n){ //老师答案 int scores[6]={12,15,18,88,99,100}; int left=0; int right=5; while (left<=right) { int mid=(left+right)/2; if (scores[mid]==n) { return mid; } if (scores[mid]>n) { right=mid-1; }else{ left=mid+1; } } return -1;}
3.数组作为函数参数
1.传递给函数的数组是一个地址2.只需要将数组首元素的地址传入即可//与指针作为参数的效果一样,会改变主函数中的数组值3.在函数的参数声明时只需要将参数定义为数组形式即可,而无须定义长度eg:void printArray(int arr[ ]); //函数声明 *中括号不能省略
<span style="font-size:10px;">eg.//输入一个字符串,然后将其中的单词个数统计出来并打印void funcdc(char str[]);int main(int argc, const char * argv[]) { char str[100]; printf("请输入一个字符串\n"); gets(str); funcdc(str); return 0;}void funcdc(char str[]){ int i=0; int sum=0; if (str[0]!=' ') { //字符串首字母为非空格(=1)时,单词总数+1 sum=1; } do { //当前字符为空格且下一个字符为非空格时,单词总数+1 if (str[i]==' '&&str[i+1]!=' ') { sum+=1; } i++; } while (str[i]!='\0'); printf("字符串:%s\n一共有%d个单词\n",str,sum);}</span>
4.字符串
字符串存储在字符数组中,结尾加上NULL(’\0’)作为字符串末端标志字符串初始化:char str[7] = "Hello!";//默认自动添加'\0'char str[ ] = "Hello!";//默认自动添加'\0'char str[7] = {'H', 'e', 'l', 'l', 'o', '!', '\0'};char str[ ] = {'H', 'e', 'l', 'l', 'o', '!', '\0'};//后面两种需要手动添加'\0'
字符串的输入和输出
使用getchar( )函数输入
char ch1=getcar();//(单)字符输入函数。当按回车键时,把第一个值赋给ch1。*只接收第一个字符,不管输入多少字符,按几次回车键。
使用putchar( )函数输出
getchar(c1);//(单)字符输出函数,将一个字符输出到标准输出设备。c1=字符变量、整型变量、整型常量,其值为字符的ASCII值
使用scanf( )函数输入
scanf("%s",str); //默认以空格分割
使用printf( )函数输出
printf("%d-格式控制字符串",i-输出参数表);//格式输出函数。数据项的个数、类型、顺序应与格式控制符对应一致
使用gets( )函数输入
gets(str);//输入到指定字符数组
使用puts( )函数输出
puts(str);//字符数组输出到标准输出设备--控制台
eg.
void func11(){//声明字符串数组接受控制台输入的字符串char str[100];printf("请输入一个字符串\n");//scanf("%s",str); //默认以空格分割gets(str);//输入到指定字符数组printf("您输入的字符串是:%s",str);puts(str);//输出到标准输出设备--控制台}void func22(){//声明字符数组接受控制台输入的字符串char str[100];char c;int i=0;//从控制台上获取输入的字符//!=‘\n’ 判断字符是否回车printf("请输入一个字符串\n");while ((c=getchar())!='\n') { str[i]=c; //将获取到的字符存储到字符数组中 i++;}str[i]='\0';printf("你输入的字符串是:%s",str);}int main(int argc, const char * argv[]) { func11(); func22(); return 0;}
字符串的相关库函数
包含string.h头文件 strcpy(str1,str2)
字符串复制函数,将str2的内容复制到str1中。
strcat(str1,str2)
字符串连接函数,将str2连接到str1之后
strlen(str)
获取字符串长度函数,不包括末端字符
strcmp(str1,str2)
字符串比较函数,str1大于str2返回正数,相等返回0,str1小于str2返回负数
字符的相关库函数
包含ctype.h头文件 常见的有以下几个函数
isalpha(chr)//该字符是否为字母 isupper(chr)//该字符是否为大写字母 islower(chr)//该字符是否为小写字母 isdigit(chr)//该字符是否为数字 …… toupper(chr)//小写字母转换为大写字母 tolower(chr)//大写字母转换为小写字母
字符串数字转换库函数
包含stdlib.h头文件atoi(str) 将字符串转为整型数字函数atof(str) 将字符串转为浮点型数字函数
字符串格式化
使用控制字符串进行字符串的输入和输出控制字符串 %s代表字符串,默认左对齐,%-s代表右对齐 %10s代表输出占据10个字长,如果不足则按照对齐方式对其进行空格的填充以补齐占据长度 %10.3s代表输出占据10个字长,从格式化之前取3个长度字符串sprintf(str1,format,str2) 将str2按format格式化的结果存入str1中sscanf(str,format,变量1,变量2……) 从str按照format进行扫描,存入相应变量中
二维数组
二维数组的声明:
int values[3][4];double prices[3][6];char messages[4][100];
二维数组元素的访问
values[0][0] = 10; //第1行第1个元素values[1][3] = 30; //第2行第4个元素printf(“%d”,values[2][2]); //访问第3行第3个元素sum = 0;for(i = 0;i < 3;i++){ for(j = 0;j < 4;j++){ sum += values[i][j]; }}
二维数组的初始化
int values[3][4] ={{81,16,11,34},{23,45,33,55},{12,32,45,53}};//指定行列个数int values[3][4] = {8,1,11,34,23,45,33,55,12,32,45,53};//不用明显指出行,由系统自动分配int values[ ][4] = {81,16,11,34,23,45,33,55,12,32,45,53};//初始化可以省略行数,列数不能省略
随堂笔记为个人学习笔记,若有错误,望指出,谢谢!!
0 0
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- wiki_word2vec_python实验
- Java_day07
- 【OpenCV笔记 06】OpenCV中绘制基本几何图形【矩形rectangle()、椭圆ellipse() 、圆circle() 】
- Eclipse中忽略的有用快捷键
- HDOJ 5538 House Building
- 数组
- 算法基础-字符移位----腾讯2017暑期实习生编程题
- 判断一个点是否在一个复杂多边形的内部
- Android 运行时权限
- C# 汉字转拼音(支持GB2312字符集中所有汉字)
- Generate Parentheses
- 2016计蒜之道复赛 B. 联想专卖店大促销(二分)
- MySQL order by case when 排序
- E/JavaBinder:FAILED BINDER TRANSACTION错误解决+RadioGroup调用check方法的时候,onCheckedChanged被调用多次的问题解决