数组 及试题

数组:

**什么是数组:**相同类型变量的组合,是一种批量定义变量的方式

**定义:**类型 数据名[数量];

​ int num1,num2,num3,num4,num5;

​ =int arr[5];

使用: 数组名[下标];

​ arr[0] ==num1 arr[4] == num5

​ 数组的下标从0开始,从0到n-1

**遍历:**与for循环配合使用,使用循环变量作为数组下标

int arr[5] = {12345}for(int i=0;i<5;i++)
{
    printf("%d",arr[i]);
}

初始化: 类型 数组名[数量] = {1,2,3,4,5};

  1. ​ 数组与普通变量一样,默认值是随机的,为了安全起见要对数组进行初始化

  2. ​ 初始化数据过多时,编译器会产生警告,并且多出来的数据丢弃

  3. ​ 初始化数据不足时,编译器自动补0

  4. ​ 初始化只能逐个赋值,不能整体赋值

  5. ​ 这种初始化语法只能在定义数组时使用,后面就要单个赋值

  6. ​ 初始化时数组的长度可以省略,编译器会自动统计数据的个数并告诉数组

    ​ 计算数组的长度:

    ​ sizeof(arr)/sizeof(arr[0])

数组越界:

为了程序运行效率不会检查数组下标

结果:

  1. 一切正常
  2. 段错误
  3. 脏数据:
int arr[10] = {};
for(int i=0;i<=10;i++)
{
	arr[i] = i;
	printf("%d ",arr[i]);//i=10时,arr[10]没有被赋值,i变成了1
}

练习:定义一个长度位10的数组并初始化,不能排序输出第二大的数

作业1:打印一个99乘法表

#include <stdio.h>

int main(int argc,const char* argv[])
{
	for(int i = 1;i <= 9; i++)
	{
		for(int j = 1;j <= i;j++)//注意:j的赋值要在里面,for循环的第一层循环的循环常量可以在外面
		{
			printf("%d * %d = %02d ",j,i,i*j);
		}
			printf("\n");
	}
}

作业2:编程解决百钱百鸡问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

#include <stdio.h>

int main(int argc,const char* argv[])
{
	int gj,mj,xj;
    //double xj;
	for(gj = 0;gj<=20;gj++)
	{
		for(mj = 0;mj<=33;mj++)
		{
			xj=100-mj-gj;
			if(gj*15+mj*9+xj==300)
			{
				printf("%d %d %d\n",gj,mj,xj);
			}
            /*if(gj*5+mj*3+xj/3==100)
			{
				printf("%d %d %g\n",gj,mj,xj); %g是除掉不必要的0
			}*/
		}
	}
}

作业3:计算出100~1000的素数

#include <stdio.h>

int main(int argc,const char* argv[])
{
	int num,i,cnt = 0;
	for(num=100;num<=1000;num++)
	{
		cnt = 0;//***注意:这里的cnt在每次for循环后要重新置0!否则无法继续!!!
		for(int i=2;i<num;i++)
		{
			if(num%i == 0)
			{
				cnt=1;
			}
		}
		if(cnt == 0)
		{
			printf("%d ",num);
		}
	}
}

作业4:输入一个日期(yyyy-mm-dd),计算出从公元1年1月1日起,到这个日期为止过了多少天?

#include <stdio.h>

int main(int argc,const char* argv[])
{
	short year = 0;
    char month = 0;
	char day = 0;
	int days = 0;
	int cnt = 0;
    printf("请输入年月日:");
	scanf("%hd%hhd%hhd",&year,&month,&day);
	char isleap = (year%4 == 0 && year%100 != 0 ||year %400 ==0);//可以作为0,1计算
	switch(month)
	{
		case 1:
		days = day-1;break;
		case 2:
		days = 31+day-1;break;
		case 3:
		days = 31+28+isleap+day-1;break;
		case 4:
		days = 31+31+28+isleap+day-1;break;
		case 5:
		days = 30+31+31+28+isleap+day-1;break;
		case 6:
		days = 31+31+31+28+isleap+day-1;break;
		case 7:
		days = 30+31+31+31+28+isleap+day-1;break;
		case 8:
		days = 31+30+31+31+31+28+isleap+day-1;break;
		case 9:
		days = 31+31+30+31+31+31+28+isleap+day-1;break;
		case 10:
		days = 30+31+31+30+31+31+31+28+isleap+day-1;break;
		case 11:
		days = 365+isleap-31-30+day-1;break;
		case 12:
		days = 365+isleap-31+day-1;break;
	}
	for(int i=1;i<year;i++)
	{
		int leap = (i%4 == 0 && i%100 != 0 || i % 400 ==0);
        //这里一开始用了前面的isleap,结果将每个年份都判断成了闰年,因为year默认为2020年
        //应该重新定义一个,将year换成循环变量i
		if(leap==1)
		{
			cnt++;
		}
	}
	days = (year-1)*365 + days + cnt;
	printf("%d\n",days);
}
int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
arr[1] = 28 + (year%4 == 0 && year%100 != 0 ||year %400 ==0);
for(int m = 0)
{
    
}

作业5:显示以下图形,要求每个printf一次只能输出一个字符

		 **********		
		**********
	   **********
	  **********
	 **********
	**********
   **********
  **********
 **********
**********
#include <stdio.h>

int main(int argc,const char* argv[])
{
	for(int j = 0;j<10;j++)
	{
		for(int k = 10;k>=j;k--)
		{
			printf(" ");
		}
		for(int i = 0;i<10;i++)
		{
			printf("*");
		}
			printf("\n");
	}
}

练习1:定义一个长度为10的数组并初始化,计算出最大值,最小值,平均值。

练习2:定义一个长度为10的数组并初始化,进行升序排序。

#include <stdio.h>

int main(int argc,const char* argv[])
{
	int max = 0,min = 0;
	int arr[] = {3,6,2,10,5,4,7,1,8,9};
	int t = 0;
	float avr = 0,sum = 0;
	for(int i = 0;i<9;i++)
	{
		for(int j = i+1;j<10;j++)
		{	
			if(arr[i]>arr[j])
			{
				t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;//交换位置
                //注意:赋值时右边的给左边赋值!!!!
			}
		}
	}
	for(int i = 0;i<10;i++)
	{
		printf("%d ",arr[i]);
		sum += arr[i];
	}
	max = arr[9];
	min = arr[0];
	avr = sum/10;
	printf("max = %d,min = %d,avr = %g ",max,min,avr);
}
#include <stdio.h>

int main()
{
    int arr[10] = {2,4,2,4,3,5,6,8,9,7};
    int max = arr[0],min = arr[0];
    float sum = 0;
    for(int i = 0;i<10;i++)
    {
        if(max <arr[i])
        {
            max = arr[i];
        }
        if(min > arr[i])
        {
            min = arr[i];
        }
        sum += arr[i];
    }
    printf("max = %d,min = %d,avg = %g\n",max,min,sum/10);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值