今天对多维数组和字符数组进行了学习;
一、二维数组
1、二维数组说的是二维但在内存中的本质还是一维数组,只是在这个一维数组中每一个元素存的是数组。
2、二维数组的形式:a[m][n],
3、一个二维数组int a[m][n],它的函数名可以表示成这样:a=int (*pa)[n];a[m]=&a[m][0]
4、对于二维数组a[m][n]用作坐标轴的时候m是对应y轴,n是对应x轴
二、字符数组
1、C语言中没有字符串的类型,所谓的字符串是一个个字符的组合。
2、“ ”内的内容是字符串,每个字符串都是以‘\0 ’结束的
3、注意字符串与字符数组是两码事,字符数组是一段空间它的值是可以改动的,字符串的数是一个常量,指针指向字符串是一个常量区域(是非法访问),不能对其改变值。
4、字符数组的初始化同一维数组是一样的
5、对于字符数组是允许字符串对它初始化的,例如 char a[]=“hello world”;
6、可以直接打印字符数组,字符数组是当字符串来处理的printf("%s\n",a);
7、字符串本身就是指针,字符串的首个元素的地址就是字符串的地址
8、对于没有初始化的指针,将其 等于NULL
8、字符数组要留一个空间给‘\0’,不然会继续打印下一个地址的字符直到遇到‘\0’为止,类似char a[5]=“hello”;是不对的
三、小程序
一、知道银行存8年、5年、3年、2年、1年的利息率。利息=本金利息率12*存款年。不满存款的期限没有利息,要求计算怎么存拿到的钱最多
#include <stdio.h>
#include <math.h>
int main()
{
int i8,i5,i3,i2,i1,size8,size5,size3,size2,size1;
float max=0;
float a;
for(i8=0;i8<3;i8++)
for(i5=0;i5<=(20-8*i8)/5;i5++)
for(i3=0;i3<=(20-i8*8-i5*5)/3;i3++)
for(i2=0;i2<=(20-i8*8-i5*5-i3*3)/2;i2++)
for(i1=0;i1<=(20-i8*8-i5*5-i3*3-i2*2);i1++)
{
a=2000*pow((double)(1+0.0063*12),i1)*pow((double)(1+2*0.0066*12),i2)
*pow((double)(1+3*0.0069*12),i3)*pow((double)(1+5*0.0075*12),i5)
*pow((double)(1+8*0.0084*12),i8);
if(max<a)
{
max=a;
size1=i1;size2=i2;size3=i3;
size5=i5;size8=i8;
}
}
printf("8年的次数=%d\n",size8);
printf("5年的次数=%d\n",size5);
printf("3年的次数=%d\n",size3);
printf("2年的次数=%d\n",size2);
printf("1年的次数=%d\n",size1);
printf("最后拿到的钱=%g\n",max);
return 0;
}
做这个程序时只要了解:求利息的话,本利合计是看存入的年数,本利=(1+利息)为底次数位指数。就很好处理了。
二、一辆肇事逃逸的车,有目击者说它车牌前两位相同,还有目击者说后两位相同但是和前两位的数不同,还有目击者说这个车票是一个完全平方数(吐槽:既然知道车牌号是完全平方数那不就知道车牌号了吗)。要求求出车牌号
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,a,c;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i != j)
{
a=i*1000+i*100+j*10+j;
c=sqrt(a);
if(c*c==a)
{
printf("a=%d\n",a);
}
}
}
}
return 0;
}
这题注意前两位相同,后两位相同;那么就可以只用2个变量定义前后的数了。再次可以用开跟的数对其平方看其是否和原来的数相等就能判断是否是完全平方数了。