复习:
类型转换:
隐式转换
显示转换
=
字符串处理函数:
strlen abc\0cd\0
strcpy(str1,str2)
strcat(str1,str2)
strcmp(str1,str2)
ch = getchar()
scanf("%c",&ch);
gets(str);
scanf("%s",str);
putchar()
puts()
printf()
随机函数:
srand(time(NULL));
rand()%10+1
新知识:
一、二维数组
数组:相同数据类型的集合
int a[3];
1.定义
int a[2][3] //a是数组名 int代表数组中元素的类型 2代表数组行数 3代表数组列数
2.赋值:
a[0][0]=100;
a[0][1]=67;
...
3.循环赋值及输出
#include<stdio.h>
int main()
{
int a[2][3];
int i,j;
for(j=0;j<2;j++)//行
{
for(i=0;i<3;i++)//列
{
scanf("%d",&a[j][i]);
}
}
for(j=0;j<2;j++)//行
{
for(i=0;i<3;i++)//列
{
printf("%d",a[j][i]);
}
}
return 0;
}
练习:定义一个二维数组 赋值并输出 要求:3*5矩阵
#include<stdio.h>
#define ROW 3
#define COL 5
int main()
{
int a[ROW][COL];
int i,j;
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
scanf("%d",&a[j][i]);
}
}
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
printf("%d ",a[j][i]);
}
putchar('\n');
}
return 0;
}
继续:将上题中二维数组的值求和
#include<stdio.h>
#define ROW 2
#define COL 3
int main()
{
int a[ROW][COL];
int sum=0;
int i,j;
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
scanf("%d",&a[j][i]);
sum = sum+a[j][i];
}
}
printf("%d\n",sum);
return 0;
}
练习:查询一个二维数组中 是否存在某个数 如果存在 计算有多少个这样的数
#include<stdio.h>
#define ROW 2
#define COL 3
int main()
{
int a[ROW][COL];
int i,j,n,count=0;
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
scanf("%d",&a[j][i]);
}
}
puts("please input a integer:");
scanf("%d",&n);
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
if(a[j][i]==n)
{
count++;
}
}
}
if(count==0)
{
puts("not found!");
}
else
{
printf("%d\n",count);
}
return 0;
}
练习:在二维数组中 找最小值及其位置
#include<stdio.h>
#define ROW 2
#define COL 3
int main()
{
int a[ROW][COL];
int i,j,n,min,c=0,r=0;
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
scanf("%d",&a[j][i]);
if(i==0&&j==0)
{
min = a[j][i];
}
else
{
if(min>a[j][i])
{
min = a[j][i];
r = j;
c = i;
}
}
}
}
printf("min:%d row:%d col:%d\n",min,r,c);
return 0;
}
练习:打印20*20map 打印. 可以在map中赋任意字符
.....
.....
...x.
....a
.....
3,4 a
2,3 x
#include<stdio.h>
#define ROW 20
#define COL 20
int main()
{
char map[ROW][COL];
int i,j;
char input;//
int x,y;
for(j=0;j<ROW;j++)//行
{
for(i=0;i<COL;i++)//列
{
map[j][i]='.';
}
}
do
{
do
{
system("clear");
for(j=0;j<ROW;j++)//行a
{
for(i=0;i<COL;i++)//列
{
printf("%c",map[j][i]);
}
putchar('\n');
}
puts("please input:char row col ");
scanf("%c%d%d",&input,&x,&y);
getchar();
map[x][y] = input;
}while((x<0||x>=ROW)||(y<0||y>=COL));
}while(map[x][y]!='.');
return 0;
}
4.二维数组初始化
(1)完全初始化
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={{1,2,3},{4,5,6}};
(2)部分初始化
int a[2][3]={{1,2},{4,6}};
a[0][0]=1
a[0][1]=2
a[0][2]=0
a[1][0]=4
a[1][1]=6
a[1][2]=0
(3)默认初始化
int a[2][3]={1,2,3,4,5};//行数可以省略 列数不可以省略
int a[][3];//错
练习:杨辉三角 输出10阶
1 0 0 0 0
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1
a[i][j]=a[i-1][j-1]+a[i-1][j]
#include<stdio.h>
int main()
{
int a[10][10]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i>=j)
{
printf("%3d ",a[i][j]);
}
}
putchar('\n');
}
return 0;
}
二、进制
1.进制
十进制:逢十进一 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
二进制:逢二进一 0000 0001 0010 0011 0100 0101 0110 0111.。。
八进制:逢八进一 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 21..
十六进制:逢十六进一 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11....
2.进制前缀:区分不同进制
八进制前缀:0 034
十六进制前缀:0x 0x4
3.二进制转换成其他进制
二转十:
1100101=
1*2^0+0*2^1+1*2^2+0*2^3+0*2^4+1*2^5+1*2^6=1+4+32+64=101
二转八:
001 100 101=0145
1 4 5
二转十六:
0110 0101=0x65
6 5
练习: 将下列二进制转为其他进制
01101100 00101110 10010011 11010111
十进制 108 46 147 215
八进制 0154 056 0223 0327
十六进制 0x6c 0x2e 0x93 0xd7
作业:
1。求两个矩阵对应元素之和 并将其放到第三个矩阵中
int a[3][4];
int b[3][4];
int c[4][4];
2.输出一个N阶矩阵 矩阵中每个元素的形成规律是:
右上三角(含对角线)元素值为1 其他元素值为:行下标-列下标+1
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1
3.在一个二维数组中 判断是否存在这样的数值(鞍点)
该值 在行中最大 同时在列中最小 例如:
1 2 6 4
1 6 7 8
9 10 11 12
6就是这样的数