博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN🙉🙉🙉
未来很长,值得我们全力奔赴更美好的生活!💞💞💞
作业1 9个硬币显示状态
分析:
首先不要受到题目最开始的数列的影响,上来就定义一个二维数组,二维数组也能做,但是比较麻烦,我们先用一位数组去做,就是在最后打印的时候注意换行即可。
首先分析,在键盘中输入一个数,先将它转化为二进制数,就是不断地去对2取模,然后将模赋值给一个数组即可。
数组初始化全为o:
arr[9]={0};
数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
有了这个思路代码就比较好写了:
for(i=8;i>=0;i--)
{
arr[i] = a%2;
a /= 2;
}
先对2取模,赋值给数组arr,再取商,然后商再对2取模,赋值给arr数组,如此往复循环,便可破之。
还需要注意的是,在对数组赋值的时候,我们需要先赋值数组的最后一个元素,因为在打印的时候我们是从数组的第一个元素开始打印。
我们以7为例(对2取模分别为1、1、1,分别赋值给arr[8]arr[7]arr[6]):
数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
初始值 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
写到这里,代码结构已经很清晰了:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,a,b,c,arr[9]={0};
printf("请输入一个0-511之间的整数:\n");
scanf("%d",&a);
for(i=8;i>=0;i--)
{
arr[i] = a%2;
a /= 2;
}
for(i=0;i<9;i++)
printf("%d",arr[i]);
printf("\n");
for(i = 0; i < 9; i++)
{
if(i == 3 || i == 6)
printf("\n");
if(arr[i] == 0)
{
printf("H ");
}
else
{
printf("T ");
}
}
return 0;
}
作业2 左下角元素赋值全为0
分析:本题需要注意其实就是两点。1、注意定义好左下角元素 2、使用函数调用实现
1、定义好左下角元素:
if(i>=j)
a[i][j]=0;
2、使用函数调用
fun(arr,5,5);
注意是主函数进行实参调用时,数组只写出数组名,行列直接写出具体数字即可,因为前面对于主函数已经定义过,在调用子函数形参时直接调用赋值即可使用。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void fun(int a[5][5],int x,int y);
int main()
{
int i,j,arr[5][5]={0};
srand(time(0));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
arr[i][j]=rand()%100+1;
}
}
printf("数组元素赋值前:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d\t",arr[i][j]);
}
printf("\n");
}
fun(arr,5,5);
return 0;
}
void fun(int a[5][5],int x,int y)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
if(i>=j)
a[i][j]=0;
}
}
printf("数组元素赋值后:\n");
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
运行结果:
作业3 随机赋值4x4数组0和1,并打印有最多1的行和列。
分析:
首先我们解决一个4x4数组随机赋值0、1,然后打印出来即可。这个比较简单,运用一下随机数即可。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
arr[i][j]=rand()%2;
}
}
注意好头文件以及对2取模就行。
其次就是输出行列中具有最多的1的行号和列号。
何为最多1?其实就是行列元素数值相加最大的另外一种表述。这里我们思路就很清晰了,循环遍历计算行列元素数值,找出最大值,输出此时的行列号即可:
if(max1<count1)
{
max1=count1;
a=i;
}
}
printf("第%d行1最多\n",a+1);
源代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void seek(int arr_01[4][4],int x,int y);
int main()
{
int i,j,arr[4][4]={0};
srand(time(0));
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
arr[i][j]=rand()%2;
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%d",arr[i][j]);
}
printf("\n");
}
seek(arr,4,4);
return 0;
}
void seek(int arr_01[4][4],int x,int y)
{
int i,j,max1=0,max2=0,a,b,count1=0,count2=0;
for(i=0;i<x;i++)
{
count1=0;
for(j=0;j<y;j++)
{
if(arr_01[i][j]==1)
count1++;
}
if(max1<count1)
{
max1=count1;
a=i;
}
}
printf("第%d行1最多\n",a+1);
for(i=0;i<x;i++)
{
count2=0;
for(j=0;j<y;j++)
{
if(arr_01[j][i]==1)
count2++;
}
if(max2<count2)
{
max2=count2;
b=i;
}
}
printf("第%d列1最多",b+1);
}
运行结果: