【用数组取代复杂分支结构】
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;
}