数组
一维数组
用一个变量来存储具有一定关系的数据,的数据集合叫数组 其中存储的变量是数组元素
a [ i ]
定义时:
int a [ 100 ]
部分赋值时,后续的具数据可以缺省
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}
int last[5] = {1,2,3}
int last[5] = {1,NULL,3,NULL,5}
**不建议!**以变量定义数组,例如:
int n=10;
int a[n]
练习
练习:定义一个一维数组a[6]={1,4,6,2,4,10},输出其中最大的数组元素与下标
#include<stdio.h>
int main(){
int a[6]={1,5,6,7,4,6};
int i=0;
int x=0;
for(i=1 ; i<6 ; i++){
if(a[x]<a[i]){
a[x]=a[i];
x=i;}
}
printf("a[%d]=%d",x,a[x]);
return 0;
}
扩展 “a” 是一个指向 “&a[0]” 的指针 因此,*(a + 4) 是一种访问 a[4] 数据的合法方式 double *p; double a[10]; p = a;是合法的 使用*p、*(p+n)访问数据
字符数组
char a[10];
字符串
多个字符构成的序列,其实字符串==字符数组 ,但有一定的区别
所以,赋值时可以 char a[10]=“abcdef” 注意错误用法:
a="abcdef"
a [10]="abcdef"
**常量字符串末尾默认有一个 ’ \0 ’ **  特殊的定义方法:
int a[] = {1,2,3,4,5};
char str[] = {'c','a','b'};
char str[]="acb";
sizeof(a)
切忌:
- 越界
- 定义跟赋值傻傻分不清
- 字符串的结束’ \0 ‘,在定义了长度后,没有字符的地方都是’\0’
输入与输出
-
输出 格式化:"%s",遇到’ \0 '结束 ?在char a [6]="abcdef"时到底会怎样参考 -
输入 scanf("%s",a);//输入一整串 接收的字符串 空格或回车结束。例如:输入 123 231 ,存入的只有123
练习
输入一个字符串,获取字符串中有多少个大写字母,小写字母  
多维数组
作业
-
选择法、冒泡法排序,i<4  -
数组?小为20,输?10个整数,在输?是就进?排序,得到降序序列。之后每输??个,不打 乱数组降序 -
已知有?个字符数组,把数组中?写字?改为小写字?,小写字?改为?写字? char a[50] = “aBcDeFgHiJ”;
#include<stdio.h>
int main(){
char str[50];
scanf("%s",str);
for(int i=0;str[i]!='\0';i++){
if(str[i]>='A'&&str[i]<='Z'){
str[i]=str[i]+32;
}
else if(str[i]>='a'&&str[i]<='z'){
str[i]=str[i]-32;
}
}
printf("%s",str);
}
- 已知有?个字符数组b[] =“hello”,把数组b拷?到数组a[10]中
#include<stdio.h>
int main(){
char b[10] ="hello";
char a[10] ;
for (int i = 0; i < 10; i++)
{
a[i]=b[i];
}
printf("b:%s\n",b);
printf("a:%s",a);
return 0;
}
- 有两个数组str1,str2,把数组str2与str1拼接在?起存放在str1中
str1[20] = "hello ";str2[] = "world
#include<stdio.h>
int main(){
char str1[20] = "hello ";
char str2[] = "world";
int count1=0;
int count2=0;
for(int i=0;str1[i]!='\0';i++){
count1++;
}
for(int i=0;str2[i]!='\0';i++){
count2++;
}
int k=0;
for (int j = count1; j < count1+count2; j++)
{
str1[j]=str2[k];
k++;
}
printf("%s\n",str1);
return 0;
}
|