1.数组
1)数组的声明,不要把 声明 和 首个编号 混淆
#include <iostream>
using namespace std;
int main (){
int n,m;
cin>>n>>m;
int A[n][m];
int B[m][0];//错误 这里定义了一个列向量,但是声明很机械导致错误,应该为 int B[m][1];
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
cin>>A[i][j];
}
}
for (int k=0;k<m;k++){
cin>>B[k][0];//这里执行输入一个列向量,但是注意不能写成 cin>>B[k][1];
}
int C[n][1];
for (int x=0;x<n;x++){
int sum=0;
for (int y=0;y<m;y++){
sum+=A[x][y]*B[y][0];
}C[x][0]=sum;
}
for (int v=0;v<n;v++){
cout <<C[v][0]<<endl;
}
return 0;
}
2.tolower()函数的用法
(1)可以将大写字母转换成小写字母,并且转换后的字符为char类型,可以进行和数字与字符进行加减计算,此时都转换成ASCII码进行计算,
(2)两个字符的加减法结果是int类型;‘a'-'A'=32;
#include <iostream>
#include <string>
using namespace std;
int main (){
string str;
int count [26]={0};//数组一次性赋值
getline(cin,str);
int n = str.length();
for (int i=0;i<n;i++){
if (str.at(i)>='A'){
count [tolower (str.at(i))-'a']++;//char字符之间可以进行计算
}
}
for (int j=0;j<26;j++){
cout<< char(j+'a')<<" : "<<count[j] <<endl;//char类型转换
}
return 0;
}
这里有点算法的意味,避免了笨方法一个一个去和26个字母比较
3.调用函数需要注意的地方
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <iomanip>
using namespace std;
int suma(int n,int* x,int p){//求x的P次方函数
int sum =0;
int x1[n];//这里调用一个x1[]数组就很有必要,可以避免x[]数组的改变,导致二次调用函数会改变x[]
for (int i= 0;i<n;i++){
x1[i]=pow(x[i],p);
sum+=x1[i];
}int result =sum;
return result;
}
int max(int n,int* x){
int max=-1000000;
for (int i=0;i<n;i++){
if(x[i]>max){
max=x[i];
}
}
int result =max;
return result ;
}
int main (){
int n;
cin>>n;
int x[n];
int y[n];
for (int i=0;i<n;i++){
cin>> x[i];
}
for (int i=0;i<n;i++){
cin>>y[i];
}
for (int i= 0;i<n;i++){
x[i]=sqrt(pow((x[i]-y[i]),2));//求绝对值的方法
}
cout <<fixed<<setprecision(6)<<pow((suma(n,x,1)),1)<<endl;//注意pow函数会自动转换成double
cout <<fixed<<setprecision(6)<<pow((suma(n,x,2)),1.0/2)<<endl;
cout <<fixed<<setprecision(6)<<pow((suma(n,x,3)),1.0/3)<<endl;
cout <<fixed<<setprecision(6)<<(double)max(n,x)<<endl; /*这里需要一个double强制类型转换,否则不会理会setprecision()的小数点转换命令*/
return 0;
}
注意:这里的第一个cout中使用了我的调用函数suma(),如果我不使用x1[]数组来保持x[]数组的不变性的话后面使用的将会是 计算后的x[]数组导致错误!!!!
4.getline 函数的一些注意点
怎样连续输入getilne
#include <iostream>
#include <string>
using namespace std;
int main (){
int n,m;
cin >>n;
string str;
cin.get();//可以进行连续输入getline(),但是不要加到循环里面,会吃掉一个字符
while (n!=0){
m=0;
char max ='A';
getline(cin,str);
m=str.length();
for (int j=0;j<m;j++){
if (str.at(j)>=max){
max = str.at(j);
}
}
for (int j=0;j<m;j++){//这个加长字符串的方法自创,很骄傲哈哈哈哈哈
if (str.at(j)==max){
str.insert(j+1,"(max)");
m+=5;
j+=5;
}
}
cout <<str;
if (n>1){
cout <<endl;
}
n--;
}
return 0;
}
如果加载循环里面输出结果为:
少了一个x; 很难发现啊啊啊啊