0、问题
(1)输入5个数字,逆序打印出这5个数字 (2)输入50个数字,逆序打印出这50个数字。 (3)输入n个数字,逆序打印出这n个数字。
1、数组是什么?
数组是存储一个固定大小的相同类型元素的顺序集合。
2、数组怎么用?
2.1 定义数组
(1)语法
类型 数组名[元素个数];
(2)例子
int days[12];
2.2 初始化数组
(1)语法
类型 数组名[元素个数] = {值1,值2,值3,值4,等等};
(2)例子
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
(3)简化
初始化数组可以不指定数组大小,此时数组的大小则为初始化时元素的个数。例如:
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
这种初始化的方式被称为数组的集成初始化。
2.3 访问数组元素
访问就是读写 数组元素可以通过数组名称加索引(下标)进行访问。元素的索引(下标)是放在方括号内,跟在数组名称的后边。注意:数组的索引(下标)是从0开始。
(1)语法
数组名[索引];
每个数组元素都是一个变量,变量的类型就是数组声明时的类型。 数组元素可以在赋值的左边或者右边。
(2)例子
int n = days[0];
days[1]=29;
printf("%d",days[0]);
2.4 数组遍历
(1)基本套路
for (int i=0;i<n;i++){
arr[i]
}
(2)练习
按顺序打印月份与对应的天数
#include <stdio.h>
int main(){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i=0;
for(i;i<12;i++){
printf("第%d月的天数为%d\n",i+1,days[i]);
}
}
2.5 数组输入
(1)案例
int n;
scanf("%d",&n);
int arr[n];
for (int i=0;i<n;++i){
scanf("%d",&arr[i]);
}
(2)练习
a)输入10个整数,根据输入循序方向输出。
#include <stdio.h>
int main(){
int nums[10]={};
int i=0;
for(i;i<10;i++){
scanf("%d",&nums[i]);
}
i=0;
for(i;i<10;i++){
printf("%d\n",nums[i]);
}
}
b)输入100个整数,根据输入循序方向输出。
#include <stdio.h>
int main(){
int nums[100]={};
int i=0;
for(i;i<100;i++){
scanf("%d",&nums[i]);
}
i=0;
for(i;i<100;i++){
printf("%d\n",nums[i]);
}
}
2.6 数组赋值
数组不能使用=直接赋值,可以通过遍历方式赋值。
for(int i=0;i<12;++i){
temp[i] = days[i];
}
3、特点
(1)数组创建后大小不能修改。 (2)数组内所有元素具有相同数据类型。 (3)数组中元素在内存中是依次连续排列的。
4、实践
4.1 统计
在12月中有几个月是30天?几个月是31天?
#include <stdio.h>
int main(){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int days_31=0,days_30=0,i=0;
for(i;i<12;i++){
if(days[i] == 31){
days_31++;
}else if(days[i] == 30){
days_30++;
}
}
printf("31天的月份有%d个\n",days_31);
printf("30天的月份有%d个\n",days_30);
}
4.2 替换
输入年份,打印当前年份所有月份的天数。(注意:闰年替换二月份天数)
#include <stdio.h>
int main(){
int year,i;
scanf("%d",&year);
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int days1[12]={};
for(i=0;i<12;i++){
days1[i]=days[i];
}
days1[1]=(year%4==0 &&year%100!=0 || year%400==0)?29:28;
printf("%d年各月份天数如下:\n",year);
for(i=0;i<12;i++){
printf("%d ",days1[i]);
}
}
4.3 查找
(1)第一个30天的月份是几月?
#include <stdio.h>
int main(){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=0;i<12;i++){
if(days[i]==30){
break;
}
}
printf("第一个30天的月份是%d月\n",i+1);
}
(2)第n个30天的月份是几月?
#include <stdio.h>
int FindDays(int y){
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int x=y,i=0;
while(y){
if(days[i] == 30){
--y;
}
i++;
}
printf("第%d个30天的月份是%d月\n",x,i);
}
int main(){
int n;
printf("请输入你要查询的第n个30天的月份(0<n<5:\n");
scanf("%d",&n);
if(n>=0 && n<=4){
FindDays(n);
}else{
printf("Input Error!\n");
}
}
(3)输入年份和月份,获取这个月的天数
#include <stdio.h>
int main(){
int year,month;
printf("请输入查询的年份和月份:\n");
scanf("%d%d",&year,&month);
int days[]={31,((year%4==0 &&year%100!=0) || year%100==0 )?29:28,31,30,31,30,31,31,30,31,30,31};
printf("%d-%d有%d天",year,month,days[month-1]);
}
4.4 累加
(1)输入年份和起式月份m和终止月份n,求出从m到n之间的天数。
#include <stdio.h>
int main(){
int month1,month2,year,sum=0,i;
printf("请输入年份间隔的两个月份:\n");
scanf("%d%d%d",&year,&month1,&month2);
int days[]={31,((year%4==0 &&year%100!=0) || year%100==0 )?29:28,31,30,31,30,31,31,30,31,30,31};
for(i = month1+1;i<month2;i++){
sum+=days[i];
}
printf("%d-%d和%d-%d之间有%d天\n",year,month1,year,month2,sum);
}
(2)输入某年某月某日,判断这一天是这一年的第几天?
#include <stdio.h>
int main(){
int month,day,year,sum=0,i;
printf("请输入年月日:\n");
scanf("%d%d%d",&year,&month,&day);
int days[]={31,((year%4==0 &&year%100!=0) || year%100==0 )?29:28,31,30,31,30,31,31,30,31,30,31};
for(i=0;i<month-1;i++){
sum+=days[i];
}
sum+=day;
printf("%d-%d-%d是%d年的第%d天\n",year,month,day,year,sum);
}
|