Bootstrap

c++学习

        题目:多名学生成绩求平均值

#include<iostream>
using namespace std;
double a[51][6] = {0};//最大50个学生 最大5个课程
double sa[51] = {0};//学生平均分
double ca[6] = {0};//课程平均分
int main()
{
	int n, m,sum;
	//需要多次输入数据
	while (cin >> n >> m)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				cin >> a[i][j];
			}
		}
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				sa[i] += a[i][j];
			}
			sa[i] /= m;
		}
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				ca[i] += a[j][i];
			}
			ca[i] /= n;
		}
		int cnt = 0;
		for (int i = 0; i < n; i++)
		{
			sum = 0;
			for (int j = 0; j < m; j++)
			{
				sum += (ca[j] > a[i][j]);
			}
			if (sum == m)
			{
				cnt++;
			}
		}
		for (int i = 0; i < n; i++)
		{
			printf("%.2lf", sa[i]);
			printf(" ");
		}
		cout << endl;
		for (int i = 0; i < n; i++)
		{
			printf("%.2lf", ca[i]);
			printf(" ");
		}
		cout << endl;
		cout << cnt;
	}
}

8-1函数定义

#include<iostream>
using namespace std;
int add(int a, int b)
{
	return a + b;
}
int main()
{
	int a, b;
	cin >> a >> b;
	int c=add(a,b);
	cout << c;

}

        函数值传递,常见错误就是形参和实参,交换ab数值,原函数并没有改变,改变的是形参,实参不改变。

        函数的声明:int function(int a);在main前不需要加,main后需要。还有一种情况,例如有func1和func2。func1里调用func2,在func2里面调用func1,这时候需要先声明func2,让编译知道存在func2,func1同理。如不调用呢?

#include<iostream>
using namespace std;
int add(int a, int b)
{
	return a + b;
}
void func1(int);//可以省略int 后的命名
void func2(int);
void func1(int x)
{
	func2(x);//必须提前声明
}
void func2(int x)
{
	func1(x);//必须提前声明
}
int main()
{
	int a, b, c, d;
	cin >> a >> b;
	c = add(a, b);
	cout << c << endl;
	int cheng1(int a, int b);//函数的声明
	d = cheng1(a, b);
	cout << d;
}
int cheng1(int a, int b)
{
	return a * b;
}

        非安全函数,想在c++中使用scanf、strcpy等c中常见函数时可以在在函数中加入_s。例如scanf_s等等都可以解决。那如果要加_s的话每个函数都要添加,代码短实现比较简单,如果长怎么办呢?就需要在开头#define _CRT_SECURE_NO_WARNINGS定义出来。

        题目:HDOJ 2003 求绝对值


       难点就是x的精度控制,c++中的精度控制比较复杂,c比较简单可以直接使用。

#include<iostream>
using namespace std;
int main()
{
	double x;
	while (cin >> x)
	{
		x = fabs(x);
		printf("%.2lf\n", x);
	}
	return 0;
}

题目:计算两点之间的距离 HDOJ 2001

难点:c++想使用sqrt和pow必须引用cmath

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double x1, x2, y1, y2;
	double dis = 0;
	while (cin >> x1 >> y1 >> x2 >> y2)
	{
		dis = sqrt(pow((x2 - x1),2)+pow((y2 - y1),2));
		printf("%.2lf\n", dis);
	}
	return 0;
}

题目:ASCⅡ码排序 HDOJ 2000

难点:一开始选择了比较复杂的实现功能,出现一系列问题后,解决后发现一个调用即可^_^。实现需要引入#include<algorithm>还有#include<string>。使用sort函数 

sort(字符串.begin(),字符串.end());//开始指针和结束指针

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s;
	char t;
	while (cin >> s)
	{
		sort(s.begin(), s.end());
		cout << s[0] << ' ' << s[1] << ' ' << s[2] << endl;
	}

	return 0;
}

题目:HDOJ 三角形 2039

难点:不熟悉sort用法 ,导致一直报错,如果是字符串就s.begin(),s.end(),如果是数组的话,数组名就是首地址,直接用数组名就行 a,a+3。//三个元素刚好加三

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
double a[3];
int main()
{
	int n;
	cin >> n;
	while(n--)
	{
		cin >> a[0] >> a[1] >> a[2];
		sort(a, a+3);
		if (a[0] + a[1] > a[2])
		{
			cout << "YES" << endl;
		}
		else
		{
			cout << "NO" << endl;
		}
	}
	return 0;
}

题目:素数判定 HDOJ 2012

难点:素数判定的时候要把左右范围都包括进来,就是因为这个<=y没加等于一直通不过,首次使用bool flag 不太熟练还是要多多使用

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
bool isPrime(int x)
{	
	for (int i = 2; i*i <=x; i++)//错误点没加等号
	{
		if (x % i == 0)
			return false;
	}
	return true;
}
int main()
{
	int x, y,f=0;
	while (cin >> x >> y)
	{
		if (x == 0 && y == 0)
			break;
		bool flag=false;
		for (int i = x; i <= y; i++)//错误点没加等号
		{
			int z = i * i + i + 41;
			if (!isPrime(z))
			{
				flag = true;
				break;
			}
		}
		if (flag == false)
			cout << "OK" << endl;
		else
			cout << "Sorry" << endl;

	}
	return 0;
}

题目:发工资咯 HDOJ 2021

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
int calc(int n)
{
	int cnt = 0;
	int b[] = {100,50,10,5,2,1};
	for (int i = 0; i < 6; i++)
	{
		int x = n / b[i];
		cnt += x;
		n -= x * b[i];
	}
	return cnt;
}
int main()
{
	int n, x;
	while (cin >> n&&n)
	{
		int sum = 0;
		for (int i = 0; i < n; i++)
		{
			cin >> x;
			sum += calc(x);
		}
		cout << sum<<endl;
	}
	return 0;
}

到此完成c++基础编程上半段

;