C语言实验5数组和字符串.docx
- 文档编号:5472887
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:10
- 大小:16.90KB
C语言实验5数组和字符串.docx
《C语言实验5数组和字符串.docx》由会员分享,可在线阅读,更多相关《C语言实验5数组和字符串.docx(10页珍藏版)》请在冰点文库上搜索。
C语言实验5数组和字符串
C语言实验5数组和字符串
一. 一维数组的定义
类型标识符数组名[整型常量表达式]
1.类型标识符可以是:
int、float、char、指针等各种
2.数组名遵循命名规则(第一个为字母),在一个函数内,数组、变量名不能重名
3.整型常量表达式说明数组元素个数,不能包含变量或者函数
4.数组和变量可同时定义
5.数组序号从零开始!
!
!
!
!
!
!
!
!
!
!
例一:
一维数组的引用:
输出全部元素
voidmain()
{
ints[10];
inti;
for(i=0;i<=9;i++)
s[i]=i*i;
for(i=0;i<=9;i++)
printf("%d\n",s[i]);
}
例二:
一组数组的初始化方法:
// 1. for(i=0;i<=x; i++) scanf("%d",a[i]); // for循环赋值,手动输入
// 2. inta[8]={0,1,2,3,4,5,6,7}; // 所有元素赋值
// 3. inta[8]={0,1,2,3,4}; // 部分元素赋值,后面的元素自动附为零
// 4. inta[]={1,2,3,4,5}; // 通过赋值来确定数组大小
例三:
一维数组程序设计举例:
冒泡排序法(从小到大)
voidmain()
{
inta[50],i,j,t,n;//i:
第i个数据j:
第j趟比较t:
经典交换中的交换变量n:
数据个数
printf("输入数据个数:
\n");//经典的循环输入数组数据
scanf("%d",&n);
printf("请输入原始数据:
\n");
for(i=0;i
scanf("%d",&a[i]);
for(j=1;j<=n-1;j++)//进行n-1次循环;
for(i=0;i<=n-j-1;i++)//每次循环比较前n-j个数,共n-j-1次;
if(a[i]>a[i+1])
{
t=a[i];//经典的交换数据
a[i]=a[i+1];
a[i+1]=t;
}
printf("\n");
for(i=0;i
printf("%d\n",a[i]);
}
二、二维数组和多维数组
定义形式:
类型标识符数组名[exp1](行)[exp2](列);
储存形式:
按行存储,第一行存完再继续存储第二行
1. 二维数组元素的引用:
经典
voidmain()
{
inti,j,a[3][2];
printf("请按行输入原始数据:
\n");//经典的二维数组输入
for(i=0;i<3;i++)
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)//经典的二位数组输出
for(j=0;j<2;j++)
printf("\na[%d][%d]=%d\n",i,j,a[i][j]);
}
2. 二维数组的初始化:
// 1. inta[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; // 分行给二维数组赋初值
// 2. inta[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12}; // 不够的元素赋值为0
// 3. inta[3][4]={ {1}, {2}, {3} };
// ={ {1,0,0,0},{2,0,0,0},{3,0,0,0} };等
// 4. inta[][4]={ 1,2,3,4,5,6,7,8,9 }; // 可省略行数,系统自动计算行数
// 5. inta[3][]={ {0,0,3}, {0}, {0,10} }; // 省略列数,但应分行赋值;
3. 二维数组程序设计举例:
求转置矩阵
voidmain()
{
inta[2][3],b[3][2],i,j;
printf("按行输入原始数据:
\n");
for(i=0;i<=1;i++)
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
for(i=0;i<=1;i++)
for(j=0;j<=2;j++)
b[j][i]=a[i][j];//转置矩阵的算法灵魂!
!
!
!
!
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)//先排列输出一行再换行输出第二行。
矩阵的经典输出!
!
!
printf("%4d",b[i][j]);
printf("\n");
}
}
三、字符数组与字符串
1.字符数组的初始化:
// 1. charc[10]={ 'p','r','o' };
// 2. charstr[]={ 's','t','r','i' };
// 3. charca[][5]={ {'a'}, {'b','b'},{'c','c','c'}};
// 4. charc[12]="computer&C";
错误,字符十二个,但是要给“\0”预留空间,所以数组大小为13;
// 5. charca[3][5]={{"a"},{"bb"},{"ccc"}}; //
2. 字符串的输入输出:
voidmain()
{
charstr[20];
inti;
printf("请输入字符串\n");//经典的字符串输入
for(i=0;i<=12;i++)
scanf("%c",&str[i]);
for(i=0;i<=12;i++)//经典的字符串输出
printf("%c",str[i]);
printf("\n");
printf("请输入字符串\n");//特殊的字符串输出(无空格)
scanf("%s",str);
printf("%s\n",str);//scanf在输出时碰到空格等便停止输出,最终输出computer.
}
3. puts(str)和gets(str);
voidmain()
{
charstr[13];
printf("请输入一个字符串\n");
gets(str);
puts(str);
}
4. 字符串处理函数:
1.strcat(字符数组名1,字符串2)
连接两个字符串;字符数组1足够长;
voidmain()
{
charst1[30]="Mynameis",st2[]="John";
strcat(st1,st2);
puts(st1);
}
2.strcyp(字符数组名1,字符串2)
字符串2的内容全部复制给字符串1; 字符数组1的长度不小于字符数组二的长度;
voidmain()
{
charst1[15],st2[]="CLanguage";
strcpy(st1,st2);
puts(st1);
}
3.strcmp(字符串1,字符串2)
比较两个字符串的大小;
从左到右比较两个字符串的大小,若相等继续比较,直到不同字符或遇到"\0"为止,
以第一个不同字符的比较为准:
exp1=exp2返回值为0;
exp1>exp2返回正值;
exp1<=""p="">
voidmain()
{
intk;
charst1[15],st2[]="CLanguage";
printf("请输入一个字符串:
\n");
gets(st1);
k=strcmp(st1,st2);//C语言不允许关系运算符比较两个数组的大小,
//if(st1>=st2)是错误的;
if(k==0)printf("st1=st2\n");
if(k>0)printf("st1>st2\n");
if(k<0)printf("st1
}
4.strlen(字符串)
计算字符串的实际长度(不含字符结束的"\0"),并作为返回值:
voidmain()
{
intk;
charst[80];
printf("请输入一个字符串:
\n");
gets(st);
k=strlen(st);
printf("字符串的长度为:
%d\n",k);
}
四、字符数组程序设计举例:
1.从键盘输入若干字符串,存入二维数组,然后从小到大排序:
voidmain()
{
chara[3][80],b[80];
inti,j;
printf("请输入三个数组:
\n");//gets的经典算法
for(i=0;i<3;i++)
gets(a[i]);
for(i=0;i<3;i++)//类似冒泡排序法的算法
for(j=2;j>i;j--)
if(strcmp(a[j],a[j-1])<0)//经典的两个字符比大小并交换的算法;类似于max;
{
strcpy(b,a[j]);
strcpy(a[j],a[j-1]);
strcpy(a[j-1],b);
}
for(i=0;i<3;i++)
puts(a[i]);
}
2. 一个字符串的逆置:
voidmain()
{
chars[60],ch;
intm,j;
printf("请输入一个字符串:
\n");
gets(s);
m=strlen(s)-1;//在计算循环次数的时候经常使用!
!
!
!
!
for(j=0;j ch=s[j]; s[j]=s[m]; s[m]=ch; printf("逆置的字符串为: %s\n",s); 3. 将一个数字字符串转换为一个整数: voidmain() charstr[80]; longx=0; inti=0,n; printf("请输入一个数字字符串\n"); gets(str); n=strlen(str); if(str[0]=='-')i++;//若第一个字符为符号,进行下一个数字计算; for(;i ! <=""p=""> x=x*10+str[i]-'0'; if(str[0]=='-')x=-x;//如为负值,加上负号; printf("%d\n",x); ———————————————
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 数组 字符串