ciao~
我又来了惹
基于这周的学习情况
先开个坑
慢慢填(龇牙笑的表情我可太爱了)
今天刚学到一个新知识点
C/C++中从来没有定义过void main()。
C++之父Bjarne Stroustrup在他的主页上的FAQ中明确地写着The definition void main() {/…/} is not and never has been C++, nor has it even been C.(void main() 从来就不存在于C++或者C)。
数据类型 数组名[常量表达式]
方括号内的常量表达式用来定义数组大小,即数组中元素数量。
(1)C++中数组大小在编译时确定,编译系统按定义为数组分配一段连续的储存单元。
(2)这段单元的大小是不能改变的
(3)“大开小用”原则,为了避免使用时数组出界。
(4)对数组m的所有元素赋值并输出
int m[5],i;
for(i=0;i<5;i++)//i的初始值必须为0
m[i]=i*i;
↓m(输入)
m[0] |
---|
m[1] |
m[2] |
m[3] |
数据存放的方式决定了数据查找的方法
平均查找次数为数据量的一半
mid=(low+high)/2
当 x>mid, 没有找到,low=mid+1,结束本次查找;
当x当x=mid,找到,输出mid,全部查找结束。
当high
优点
(1)比较次数少(相对于顺序查找),查找速度快,平均性能好。
(2)每执行一次,都将查找空间减少,是计算机科学中分治思想的完美体现。
(3)做多所需的比较次数是第一个大于表中元素个数的2的幂次数。
缺点
(1)待查表的关键字为有序排列
//代码如下:
#include
using namespace std;
void main()//无返回值 不过据说用这个类型不好
{ const int N=10;
int r[N];
int Find,low,high,mid,key,i;
cout<<"请按照大小顺序输入整数"<<endl;
for(i=0;i<10;i++)
{
cin>>r[i];
}
cout<<"请输入您要查找的数字:";
cin>>key;
Find=0;//用来判断是否找到 可用布尔型来代替
low=0;high=N-1;//易错点:low从0开始 high为N-1.
while(low<=high)
{
mid=(low+high)/2;
if(key<r[mid]) {high=mid-1;}
if(key>r[mid]) {low=mid+1;}
if(key==r[mid]){Final=1;break;}
}
if(Final==0) {cout<<"没有找到相应的数字";}
if(Final==1) {cout<<"找到啦 是第"<<mid<<"个";}
先写到这吧 以后再补充
有大佬知道为什么用void main()不好呀? 求解答~
1.内排序:在排序过程中,全部数据存放在内存。
包括 冒泡排序、选择排序、插入排序。
2. 外排序:在排序过程中,需要使用外存。
1.时间 2.空间 3.复杂程度 4.执行次数(必须)
5.移动次数(可避免)
6.最坏情况和平均情况的开销
让大的数往下沉,小的数往上冒,
故称冒泡排序。
基本代码如下:
for(i=0;i<N-1;i++)//冒泡排序
{
if(a[j]<a[j-1])
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
最好时间复杂度 | O(n) |
---|---|
最坏时间复杂度 | O(n2) |
平均时间复杂度 | O(n2) |
增加的辅助空间temp | S(n)=O(1) |
冒泡排序是稳定的
下标的数据类型一般为整形,且从零开始。
法一
//将各个位数的数字分解
cin>>n;
i=0;
while(n!=0)
{ a[i]=n%10;
n=n/10;
i++;
}
//通过双层循环检测是否有重复数字
flag=0;
for(j=0;j<i;j++)
{for(k=j+1;k<i;k++)
{
if(a[j]==a[k])
{flag=1;break;}
]
}
if(flag=1){cout<<"有重复"<<endl;}
else {cout<<"无重复"<<endl;}
法二
cin>>n;
//int a[10]=0;
//a[k]用于统计数字i出现的次数,初始值为0;
//利用了各个位数的数字均从0-9变化,位数最多九位。
do{
int k=n%10;//提取数字
a[k]++; //对应数字计数器
n=n/10;
}while(n!=0);
for(i=0;i<10;i++)
{
if(a[i]>1)
{
cout<<"有重复的位数噢"<<endl;
return 0;}
}
cout<<"无重复"<<endl;
return 0;
int main()
{
int n,i=0,k;
int a[1000];
cout<<请输入一个十进制数<<endl;
cin>>n;
cout<<n<<的二进制数为;
while(n)
{a[i]=n%2;
n/=2;
i++;//i比实际多1
}
for(k=i-1;k>=0;k--)
{
cout<<a[k];
}
return 0
}
具有两个下标的数组称为二维数组
类型标识符 数组名[常量表达式][常量表达式]
eg:float a[3][4] 定义a为3行4列的单精度数组
//分行给二维数组赋初值
double
a[3][2]={{1,2},
{3,4},
{5,6}}
二维数组元素的表示形式:数组名[下标] [下标]
注意下标值应在已定义的数组大小的范围内。
a[2][3]=i*j;
C++中,二维数组中元素排列的顺序:按行优先顺序存放。
//用双循环给二维数组赋值
int a[3][2];
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
{
a[i][j]=i*j;
}
}
//用二维数组找最大值
int a[3][2],max=a[0][0];
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
//用双重循环给二维数组输出
int a[3][2];
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
{
cout<
#include < string >
预处理语句,再定义后使用;开头要包含#include < string >;可以有如下形式:string c1="then"; string c2; c2=c1;
;两个字符串变量可以连接:string c1="lo";string c2="ve";c1=c1+c2;
;同样可以使用=,!=,>,<等;多个字符串可以当数组使用 eg:string name[5]={"I","love","you"};
整体输入和输出:数组名
输入字符串中包含空格字符,使用cin.getline函数
(图片来源 中国大学Mooc 华中科技大学 C++程序设计基础 5.6字符数组与字符串)
注意:以数组名输出时,遇到’\0’,输出才结束。
//数值数组
int a[2]={1,2};
cout<
字符数组赋值形式:char 数组名[ 变量 ] ,数组名[ 变量 ];
字符数组之间赋值必须使用循环语句逐字符赋值
for(i=0 ; str1 [ i ] != '\0' ; i++)
{
str2[i]=str1[i];
}
或者 系统提供的库函数:strcpy(str1,str2);
特殊地,在VC2010中,应写为strcpy_s(字符数组名1,字符数组名2)
类似的函数:
#include
using namespace std;
int main()
{
int n=0,i;
char str[10];//声明数组
cout<<"请输入字符串"<<endl;
cin.getline(str,10);//输入字符串 注意不要大于n-1
for(i=0;str[i]!='\0';i++)//转换为整数
{
if(str[i]>='0' && str[i]<='9')//注意是&& 不是|| 要同时成立
{
n=n*10+(str[i]-'\0');//n*10是为还没算的数空出个位数来;(str[i]-'\0')是求出整数,然后变成个位数。
}
else break;
}
cout<<"整数为"<<n<<endl;
return 0;
}
在此之前,我们先学新函数:
cin、cin.get()、cin.getline()、getline()的区别
#include
using namespace std;
int main()
{
int num=0,word=0;//word判断是不是依然在同一个单词上。
char str[80];
char c; //用来接收空格,以便判断。
cout<<"请输入句子"<<endl;
cin.getline(str,80);//输入字符函数
for(int i=0;str[i]!=0;i++)
{
if(c==' ')//如果这样写“if(str[i]==' ')”,那么会把' '赋给str[i]。
{
word=0;
}
else if(word==0)
{
word=1;
num++;
}
}
cout<<"一共有"<<num<<"个单词"<<endl;
return 0;
}