数组—固定日期,计算日历,计算两个矩阵相乘

【用数组取代复杂分支结构】
1、有时会用一个数组存放一些固定不变的值,以取代复杂的程序分支结构。
例:接受一个整数作为输入,如果输入1,则输出“Monday”,输入2,则 输出“Tuesday”…输入7,则输出“Sunday”,输入其他数,则输出 “Illegal”。

#include<stdio.h>
int main(){
      int n;
      char * weekdays[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
      scanf("%d",&n);
      if(n>7||n<1)
            printf("Illegal");
      else
            printf("%s\n",weekdays[n-1]);
    return 0;
}
输出结果为:
5
FridayProgram ended with exit code: 0

2、
例题: 已知2012年1月25日是星期三,编写一个程序, 输入用“年 月 日”表示的一个2012年1月25日以后的期, 输出该日期是星期几(星期天输出0)。
Sample Input
2015 11 02
Sample Output
1

#include<stdio.h>
int main(){
      int year,month,date;
      int mondays[]={31,28,31,30,31,30,31,31,30,31,30,31};
      char * weekday[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
      int days=0;
      scanf("%d %d %d",&year,&month,&date);
      for(int y=2012;y<year;y++){    //判断年数差;分两种情况,是否为闰年?
            if((y%4 ==0 && y%100!=0)||y%400==0){
                  days+=366;
            }else
                        days+=365;
            }
      if((year%4 ==0 && year%100!=0)||year%400==0) //判断是否为闰年;
            mondays[2]=29;   //闰年2月份为29天,平年2月份为28天;
            for(int m=1;m<month;++m)    //计算给定日期前两个月的天数总和,再加上给定的date,减去22天,剩下7天为一轮
                  days+=mondays[m-1];
            days+=date;
            days-=22;
            printf("%d %s\n",days%7,weekday[days%7]);
      return 0;
}

3,编程求两个矩阵相乘的结果。输入第一行是整数m,n, 表示第一个矩阵是m行n列的。接下来时一个m×n的矩阵。 再下一行的输入是整数p,q,表示下一个矩阵是p行q列(n=p) 再接下来就是一个p行q列的矩阵。 要求输出两个矩阵相乘的结果矩阵(1 < m,n,p,q <= 8)。


#define ROW 8
#define COL 8
int main(){
      int a[ROW][COL];
      int b[ROW][COL];
      int c[ROW][COL];  //定义结果矩阵
      int m,n,p,q;
      scanf("%d %d",&m,&n);
      for(int i=0;i<m;i++)        //读入a矩阵
            for(int j=0;j<n;j++)
                  scanf("%d",&a[i][j]);
      scanf("%d %d",&p,&q);
      for(int i=0;i<p;i++)          //读入b矩阵
            for(int j=0;j<q;j++)
            scanf("%d",&b[i][j]);
      for(int i=0;i<m;i++){           //初始化c矩阵
            for(int j=0;j<q;j++){
                  c[i][j]=0;        
      for(int k=0;k<n;k++)            //c矩阵计算
            c[i][j]+=a[i][k]*b[k][j];  
            }
      }
      for(int i=0;i<m;i++) {        //逐个读出C矩阵
            for(int j=0;j<q;j++){
                  printf("%d  ",c[i][j]);
            }
      }
      printf("\n");
      return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值