北京大學C語言學習第一天

1.篩法求素數

#include<iostream>
using namespace std;
#define MAX_NUM  100
char isPrime[MAX_NUM+10];
 //篩法求n以內素數 
int main(){
for(int i=2;i<=MAX_NUM;++i)
	isPrime[i]=1;
for(int i=2;i<=MAX_NUM;++i){
	if(isPrime[i])//將MAX_NUM以內每一個數的所有倍數標記 
		for(int j=2*i;j<=MAX_NUM;j+=i)
		isPrime[j]=0;
	
}
for(int i=2;i<=MAX_NUM;++i)
	if(isPrime[i])
		cout<<i<<endl;	
	return 0;
}

2.數組初始化
用數組取代複雜分支結構:

#include<iostream>
#include<string>
using namespace std;
string week[]={"Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday","Sunday"};
int main(){
	int n;
	cin>>n;
	if(n>7||n<1)
	cout<<"Illegal";
	else 
	cout<<week[n-1];
	
	
	return 0;
}

3.例題
已知2012年1月25日是星期三,編寫一個程序,輸入用“年月日” 表示的一個2012年1月25日以後的日期,輸出該日期是星期幾(星期天輸出0)?
sample Input
2015 11 02
sample Output
1
思路:由題目知道2012年1月22是星期天,算出給定日期從該天起過了x天,然後輸出x%7.

#include<iostream>
using namespace std;
int monthDays[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
	int year,month,date;
	int days=0;//2012-01-22開始到輸入日期過了多少天 
	cin>>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) 
		monthDays[2]=29;
	for(int m=1;m<month;m++)
	days+=monthDays[m];
	days+=date;
	days-=22;
	cout<<days%7<<endl;
	return 0;
}

4.數組越界
int a[10];
a[-2]=5;
a[200]=10;
a[10]=20;
int m=a[30];
以上可通過編譯,但是可能導致程序運行出錯。因爲可能寫入了別的變量的內存空間,或者寫入指令的內存空間。

5.矩陣乘法
a b c x ax+by+cz
X y =
d e f z dx+dy+fz

   a  b  c               x     w        ax+by+cz  aw+bu+cv
                X          y     u     =    
   d  e  f                z     v        dx+dy+fz  dw+eu+fv

  以上就是矩陣的乘法           

例題:編程輸入矩陣,輸出它們的乘積。
輸入:
2 3
2 4 5
2 1 3
3 3
1 1 1
2 3 2
0 1 4
輸出:
10 19 30
4 8 16

code:

#include<iostream>
using namespace std;
int a[8][8],b[8][8],c[8][8];
 int main(){
 	int m,n,m1,n1;
 	cin>>m>>n;
 	for(int i=0;i<m;i++)
 	for(int j=0;j<n;j++)
 	cin>>a[i][j];
 	
 	cin>>m1>>n1;
 	for(int i=0;i<m1;i++)
 	for(int j=0;j<n1;j++)
 	cin>>b[i][j];

 	
 	//矩陣相乘 行列相乘
	  for(int i=0;i<m;i++){
	  		  for(int j=0;j<n1;j++) {
	  		  		  c[i][j]=0;
	  		  for(int k=0;k<n;k++)
	  		  c[i][j]+=a[i][k]*b[k][j];
				}
	  	
	  }
for(int i=0;i<m;i++){
	for(int j=0;j<n1;j++){
		cout<<c[i][j]<<" ";
	}
	cout<<endl;
}
 	return 0;
 }

6.素數相關

判斷一個數是否是素數
code:

#include <stdio.h>
int main(){
    int a = 0;
    int num = 0;
    scanf("%d", &num);
    for (int i=2; i <= num-1;i++){
        if (num % i == 0){
            a++;
        }
    }
    if (a==0){
        printf("YES\n");
    }else{
        printf("NO\n");
    }
}

當然也可以不打表通過篩選法來判斷一個數是不是素數,思想和上面是一樣的
code:

bool isprime(int n)
{
    if(n==1)return false;
    if(n==2)return true;
    if((n&1)==0)return false;
    for(int i=3; i*i<=n; i+=2)
        if(n%i==0)
        {
            return false;
            break;
        }
    return true;
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章