北京大学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;
}  

发布了191 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42403069/article/details/105518706
今日推荐