复习
题目
- 从用户处获取两个字符串(使用gets函数)
- 比较这两个字符串是否相等(使用strcmp函数)
- 如果字符串相等,则输出"The strings are equal.";如果不等,则将第二个字符串附加到第一个字符串的末尾(使用stract函数),并输出合并后的字符串。
- 最后,程序需要输出合并后字符串的长度(使用strlen函数)
答案
#include "stdafx.h"
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
char str1[100],str2[100];
printf("请输入第一个字符串:\n");
gets(str1);
printf("请输入第二个字符串:\n");
gets(str2);
if(strcmp(str1,str2)==0)
{
printf("The strings are equal.");
}
else
{
strcat(str1,str2);
printf("合并之后的字符串为:%s\n",str1);
}
int len = strlen(str1);
printf("合并后的总长度为:%d",len);
return 0;
}
题目
- 定义一个5位的一维数组,给数组每一位通过键盘赋值。
- 输出整个一维数组。
- 计算整个一维数组的平均值(带小数)
答案
int num[5],i=0;
printf("输入一个5位的数组:\n");//输出显示
for(i=0;i<5;i++)
{
printf("输入第%d个数:",i);
scanf("%d",&num[i]);
if(i == 4)
{
printf("\n\n");
}
}
for(i=0;i<5;i++)
{
printf("第%d个数字为:%d \n",i,num[i]);
if(i == 4)
{
printf("输出完成\n\n");
}
}
double avg=0;
int count=0,sum=0;
for(i=0;i<5;i++)
{
sum = sum + num[i];
count ++;
}
printf("和为%d,共有%d位,平均值为%f",sum,count,(double)sum/count);
二维数组的定义和引用
定义
一般形式:类型说明符 数组名常量表达式1
int a3;
float b5;
应用说明
二维数组的逻辑结构就如同一张表格,按行存放
a[0] | a[0][0] | a[0][5] | a[0][6] | a[0][7] |
a[1] | a[1][0] | a[1][8] | a[1][9] | a[1][10] |
a[2] | a[2][0] | a[2][11] | a[2][12] | a[2][13] |
int a3就像一个坐标系的第一象限
a行
看表格有助于理解
初始化
int i=0,j=0;
printf("\n");
int a1[3][16]={{11,22,13,24},{45,26,47,78},{39,510,211,112}};
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a1[i][j]);
}
printf("\n");
}
此类型至少有两个for
int i=0,j=0;
printf("\n");
printf("-----------------------2----------------------\n");
int a2[3][17]={41,32,783,34,125,876,37,678,29,10,2311,7612};
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a2[i][j]);
}
printf("\n");
}
-
int i=0,j=0;
printf("\n");
printf("-----------------------3----------------------\n");
int a3[ ][18]={231,42,893,344,235,96,47,38,29,610,211,412};///只能省略行!!
//int a3[3][]={231,42.893.344};行固定的时候,这个数组不唯一
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a3[i][j]);
}
printf("\n");
}
二维数组的初始化
初始化:指在定义时指定初始值,编译器把初值赋给数组变量
- 对全部数组元素赋数值
int a3={{1,2,3,4}{5,6,7,8}{9,10,11,12}};
int a3={1,2,3,4,5,67,89,10,11,12};
- 全部赋初值,第一纬长度省略
int [][21]={1,2,3,4,5 6 7,8,9,10,11,12};
- 对每行部分元素赋初值
int a3={{1},{5,6},{9,10,11}};
- 可以只给一部分元素赋初值
int a3={,2,3,4,5,6,7,8,9};
缺少的元素自动变为0
例题
- 定义一个2行3列的数组,键盘输入二维数组中所有元素的值
- 找出二维数组所有元素的最大值
- 求出二维码数组中所有元素的平均值
答案
int num[2][24]={0};//赋初值,否则部分编译器报错
int max = num[0][0];
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
printf("请输入%d行%d列的元素:\n",i,j);
scanf("%d",&num[i][j]);
if(num[i][j]>max)
{
max = num[i][j];
}
}
}
printf("输入的元素如下:\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
printf("%d\n",num[i][j]);
}
}
printf("最大值为:%d\n",max);
float avg=0;
int sum=0,count=0;
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
sum=sum+num[i][j];
count++;
}
}
printf("和为%d,共%d位,平均数为%f",sum,count,(double)sum/count);
字符数组在二维数组中的应用
【相关知识】
- 二维字符数组的定义与引用
二维字符数组的定义格式为:
字符数组元素也可以通过数组名和下标引用。字符数组也可以在定义时初始化,方法和其他类型的数值一样。若没有对字符数组全部元素赋值,编译系统会对剩余的元素自动赋值为空字符。空字符用'\0'来表示,是ASCII码值为0的字符。表示什么都不做,也不显示。在定义字符数组后。只能逐个给数组元素赋值。
上文助记
char a[2][3]
'1'(a [0][0]='1') | '2' | '3' |
'4' | '5' | '6' |
看一下代码,思考该程序会输出什么
答案/解析
"ABCD"代表'A''B''C''D''\0'↓
题目
1题:*c3没学。是指针
2题D选项:给字符串和字符串之间赋值用strcpy | 字符串"B"='B''\0'
3题:define相当于定义一个常量,没问题
字符串数组 - 复习
字符串处理的函数 #include<string.h>
char a[10]="abc",b[10]="ABC"
输出字符串 puts(a)
输入字符产 gets(a)
字符串连接 stract(a,b)
字符串复制 strcpy(a,b)
字符串比较 strcmp(a,b)
字符串长度 strlen(a)
大写字母转换成小写字母函数 strlwr(b)
小写字母转换成大写字母函数 strupr(a)