题目:多名学生成绩求平均值
#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++基础编程上半段