这是915编程学习笔记,仅供自己复习使用,如果你有别的实现方式,欢迎留言。本人是菜鸡一枚,不喜轻喷。考研加油!
持续更新中…【完结,不再更新2019/12/5】
因为比较久没有写C++了,忘得差不多,所以写了点笔记回顾一下
1.向函数传入结构体数组的方式有两种:
利用struct info book[]
利用typedef给结构体再取一个名字book1,之后在用book1去定义数组
2.数组传值的时候直接写函数名即可
3.比较大小后作交换的是结构体整体book[i]
4.字符匹配 strcmp(bookname, book[i].name)==0
时表示匹配成功
注意应该i#nclude
5.回车结束字符输入
法一、
char str[100];
cin.getline(str,99); //添加库函数#include
法二、
char str[100];
gets(str); //添加库函数 #include
6.判断字符长度
int len=strlen(str);
//调用库函数#include
7.int k=ch[i]-'0';
//强制类型char型字符转换成int类型,并赋值给整型变量k
8.str[i]-'A'
//str[i]是char型数组,转换成数组下标,用来统计大写字母的个数
9.(char)(max+'A')
//max为出现字母次数最大的下标,加上’A’后转换成ASSIC码,再强制转换成char型字符,用来输出出现次数最多的字符是什么
下面才是正文!
#include
#include
#include //c方式调用的头文件
using namespace std;
int main()
{
char str[100];
//cin.getline(str,99); //c++输入方式
gets(str);
int len=strlen(str);
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-i-1])
{
cout<<"F"<<endl;
return 0;
}
}
cout<<"T"<<endl;
return 0;
}
#include
#define N 1
using namespace std;
typedef struct student
{
char name[20];
long num;
int zc; //正常
int cd; //迟到
int qj; //请假
int kk; //旷课
float skl; //上课率
float kkl; //旷课率
}stu;
void intit_student(stu student[])
{
int sum;
cout<<"请依次输入学生的姓名、学号、正常上课次数、迟到次数、请假次数、旷课次数"<<endl;
for(int i=0; i<N; i++)
{
cin>>student[i].name;
cin>>student[i].num;
cin>>student[i].zc;
cin>>student[i].cd;
cin>>student[i].qj;
cin>>student[i].kk;
sum=student[i].zc+student[i].cd+student[i].qj+student[i].kk; //课程总数
cout<<sum<<endl;
student[i].skl=(float)(student[i].zc+student[i].cd+student[i].qj)/sum; //上课率
student[i].kkl=(float)student[i].kk/sum; //旷课绿
cout<<student[i].name<<"的上课率为:"<<student[i].skl<<endl;
cout<<student[i].name<<"的旷课率为:"<<student[i].kkl<<endl;
}
}
void total_info(stu student[])
{
int sum=0,sum_sk=0,sum_kk=0; //sum为课程总数,sum_sk为总的上课次数,sum_kk为总的旷课次数
float sum_skl,sum_kkl; //分别是总的上课率、旷课率
for(int i=0; i<N; i++)
{
sum+=student[i].zc+student[i].cd+student[i].qj+student[i].kk;
sum_sk+=student[i].zc+student[i].cd+student[i].qj;
sum_kk+=student[i].kk;
}
sum_skl=(float)sum_sk/sum;
sum_kkl=(float)sum_kk/sum;
cout<<"上课率为:"<<sum_skl<<endl;
cout<<"旷课率为:"<<sum_kkl<<endl;
}
int main()
{
stu student[N];
intit_student(student);
total_info(student);
return 0;
}
#include
#include
#define N 3
using namespace std;
struct info{
char name[20];
int num;
float price;
int sale;
};
void CreatBook(struct info book[])
{
for(int i=1; i<=N; i++)
{
cout<<"请输入第"<<i<<"本书的书名:";
cin>>book[i].name;
cout<<endl;
cout<<"请输入第"<<i<<"本书的库存量:";
cin>>book[i].num;
cout<<endl;
cout<<"请输入第"<<i<<"本书的单价:";
cin>>book[i].price;
cout<<endl;
book[i].sale=0;
cout<<endl;
}
}
void Compare(struct info book[])
{
char bookname[20];
cout<<"请输入需要查询的书名:";
cin>>bookname;
for(int i=1; i<=N; i++)
{
if(strcmp(bookname, book[i].name)==0)
{
book[i].num--;
book[i].sale++;
}
}
}
void Output(struct info book[])
{
int maxsale;
for(int i=1; i<=N-1; i++)
{
maxsale=i;
for(int j=i+1; j<=N; j++)
{
if(book[j].sale > book[maxsale].sale)
maxsale=j;
if(maxsale!=i)
{
info temp=book[j];
book[j]=book[maxsale];
book[maxsale]=temp;
}
}
}
for(int i=1; i<=N; i++)
{
cout<<book[i].name<<":库存为"<<book[i].num<<" 售价为:"<<book[i].price<<" 销量为:"<<book[i].sale<<endl;
}
}
int main()
{
info book[N];
CreatBook(book);
cout<<endl;
cout<<"售书"<<endl;
Compare(book);
cout<<"售书量从大到小排序"<<endl;
Output(book);
return 0;
}
#include
#define N 3
using namespace std;
typedef struct student
{
char name[20];
int score;
}stu;
void info_student(stu student[], int flag)
{
for(int i=0; i<N; i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>student[i].name;
cout<<"请输入第"<<i+1<<"个学生的成绩:";
cin>>student[i].score;
cout<<endl;
}
for(int i=0; i<N-1; i++)
{
int min=i;
for(int j=i+1; j<N; j++)
{
if(student[j].score<student[min].score)
min=j;
}
stu temp=student[i];
student[i]=student[min];
student[min]=temp;
}
if(flag==1) //从小到大排序
{
for(int i=0; i<N; i++)
cout<<student[i].name<<"的成绩为:"<<student[i].score<<endl;
}
else
{
for(int i=N-1; i>=0; i--)
cout<<student[i].name<<"的成绩为:"<<student[i].score<<endl;
}
}
int main()
{
int flag;
cout<<"按照从小到大排序输入1,否则输入0:";
cin>>flag;
stu student[N];
info_student(student, flag);
return 0;
}
#include
#include
#define N 3
#define M 2
using namespace std;
typedef struct candidate{
char name[20];
int vote;
}people;
void intit_candidate(people man[])
{
cout<<"请依次输入"<<N<<"个候选人姓名:";
for(int i=0; i<N; i++)
{
cin>>man[i].name;
man[i].vote=0;
}
}
void StarVote(people man[])
{
char Vname[20];
for(int i=0; i<N; i++)
cout<< man[i].name<<" ";
cout<<endl;
cout<<"请根据以上候选人投票"<<endl;
for(int i=0; i<M; i++)
{
cin>>Vname;
for(int j=0; j<N; j++)
{
if(strcmp(Vname, man[j].name)==0)
man[j].vote++;
}
}
for(int i=0; i<N; i++)
cout<<man[i].name<<"的得票为:"<<man[i].vote<<endl;
}
int main()
{
people man[N];
intit_candidate(man);
StarVote(man);
return 0;
}
#include
#include
using namespace std;
int main()
{
int x,y,temp,m=0,s[100]; //x为十进制数字、y为需要转换的进制
//temp是中间变量、m用来记数组下标、s[100]用来存结果
cout<<"请输入一个十进制数字:";
cin>>x;
cout<<"请输入需要转换的进制:";
cin>>y;
cout<<"十进制x的"<<y<<"进制为:";
while(x!=0)
{
temp=x%y;
x=x/y;
s[++m]=temp; //将余数存入数组,0号位置不使用
}
for(int i=m; i>=1; i--) //输出转换后的进制
{
if(s[i]>=10) //将十六进制转换为对应的字母
cout<<(char)(s[i]+55); //A的ASCII为65,所以加上55
else
cout<<s[i];
}
cout<<endl;
return 0;
}
#include
//#define row 3
//#define column 3
using namespace std;
int main()
{
int row;
int column;
int sum=0; //统计总和
cout<<"请依次输入行、列:";
cin>>row;
cin>>column;
cout<<"输入数组:";
int a[row][column]; //建立二维数组
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cin>>a[i][j];
}
//这里是测试程序用的,方便自己看写的是什么二维数组
for(int i=0; i<row; i++)
{
for(int j=0; j<column; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
if(row!=column)
{
cout<<"error"<<endl;
return 0;
}
for(int k=0; k<row; k++)
{
sum+=a[k][k]+a[k][column-k-1]; //自己手动画一个四维数组验算,有规律
}
cout<<sum<<endl;
return 0;
}
#include
using namespace std;
void Judge_String(char str[])
{
int num=0,letter=0,other=0;
for(int i=0; str[i]!='\0'; i++)
{
if(str[i]>='0'&&str[i]<='9')
num++;
else if((str[i]>='A'&&str[i]<='Z') || (str[i]>='a'&&str[i]<='z'))
letter++;
else
other++;
}
cout<<"数字:"<<num<<endl;
cout<<"字母:"<<letter<<endl;
cout<<"其他:"<<other<<endl;
}
int main()
{
char str[100];
cout<<"请输入字符数组:";
cin>>str;
Judge_String(str);
return 0;
}
#include
using namespace std;
void Delete_Digital(char str[])
{
int i=0,j=0; //设置两个指证=针遍历,i在前面,j在后面
while (str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
i++; //遇到数字只需要i前进
else
{
str[j]=str[i];
i++;
j++;
}
}
str[j]='\0';
cout<<str<<endl;
}
int main()
{
char str[100];
cin>>str;
Delete_Digital(str);
return 0;
}
#include
using namespace std;
int main()
{
int m,n,temp,counter=0; //temp用来存储余数,counter是计数器
cout<<"青依次输入m、n:";
cin>>m;
cin>>n;
if(n<0 || n>9)
{
cout<<"n越界"<<endl;
return -1;
}
while(m!=0)
{
temp=m%10;
if(temp==n)
counter++;
m=m/10;
}
cout<<"等于n的位数有"<<counter<<"个"<<endl;
return 0;
}
不会做,贴一份博客上来
活动安排,贪心算法
#include
using namespace std;
void Counter(char ch[],int a[],int n)
{
int i=0;
while(ch[i]!='\0')
{
if(ch[i]=='*' && ch[i+1]=='#' && ch[i+2]=='*')
break;
if(ch[i]>='0'&&ch[i]<='9')
{
int k=ch[i]-'0'; //强制类型转换成int类型的方式
a[k]++;
}
i++;
}
}
int main()
{
int a[10]; //用来计数
char ch[100];
for(int i=0; i<10; i++)
a[i]=0;
cout<<"请输入字符串数组:";
cin>>ch;
Counter(ch,a,10);
for(int i=0; i<10; i++)
cout<<"数字"<<i<<":"<<a[i]<<"个"<<endl;
return 0;
}
#include
using namespace std;
int main()
{
int day,month,year,sum,leap;
cout<<"请依次输入年、月、日:";
cin>>year>>month>>day;
switch(month)
{
case 1:sum=0; break;
case 2:sum=31; break;
case 3:sum=59; break;
case 4:sum=90; break;
case 5:sum=120; break;
case 6:sum=151; break;
case 7:sum=181; break;
case 8:sum=212; break;
case 9:sum=243; break;
case 10:sum=273; break;
case 11:sum=304; break;
case 12:sum=334; break;
default:cout<<"error,please input again!"<<endl; break;
}
sum+=day;
if(year%400==0 || (year%4==0)&&(year%100!=0)) //400年肯定是闰年;
leap=1; //每4四年是一个闰年,并且这年不能是100的整数倍
else //也就是四年一闰,百年不闰;四百年再闰
leap=0;
if(leap==1&&month>2)
{
sum++;
}
cout<<"第"<<sum<<"天";
return 0;
}
你也可以是数组存起来,用数组下标表示月份。
考试肯定不会,看宝典吧,估计不会再考这种了吧。。。。
我的想法比较粗糙,直接放进一个数组里面去,下标为奇数的存列,下标为偶数的存行,再遍历一遍,分别找出奇数和偶数序列中最大和最小的四个点,那这就是我们想要的。
#include
#define maxsize 100
using namespace std;
int main()
{
int x,y,len=0; //(0,0)表示退出
int a[maxsize];
int i=0,j=1;
int left,right,bottom,top;
cout<<"依次输入(x,y)"<<endl;
while(1)
{
cin>>x;
cin>>y;
if(x==0 && y==0)
break;
if(j>=maxsize)
{
cout<<"溢出"<<endl;
return -1;
}
a[i]=x;
a[j]=y;
cout<<a[i]<<","<<a[j]<<endl;
i=i+2;
j=j+2;
len=len+2;
cout<<len<<endl;
}
left=right=a[1]; //left,right左边最低列和右边最高列
bottom=top=a[0]; //bottom、top 最低的行和最高的行
for(int m=0,n=1; n<=len-1; m=m+2,n=n+2) //m扫描行,n扫描列
{
if(a[m]<bottom)
bottom=a[m];
if(a[m]>top)
top=a[m];
if(a[n]<left)
left=a[n];
if(a[n]>right)
right=a[n];
cout<<bottom<<" ";
cout<<top<<" ";
cout<<left<<" ";
cout<<right<<" "<<endl;
}
//查看上下左右顶点怎么变化
cout<<"第一个顶点为:("<<bottom<<","<<left<<")"<<endl;
cout<<"第二个顶点为:("<<bottom<<","<<right<<")"<<endl;
cout<<"第三个顶点为:("<<top<<","<<left<<")"<<endl;
cout<<"第四个顶点为:("<<top<<","<<right<<")"<<endl;
return 0;
}
上面的都是考过的,下面的是宝典后面未考过的几道重点题。实在太简单的就没写了。
包括递归和非递归两种方式
#include
#include
#include
using namespace std;
void DeleteSpace(char str[]) //空格去除
{
int j=0;
for(int i=0; str[i]!='\0';)
{
while(str[i]==' ')
i++;
str[j++]=str[i++];
}
str[j]='\0';
cout<<"字符串为:"<<str<<endl;
}
bool JudgeString_1(char str[],int low,int high) //利用高低指针递归方式判断是否是回文串
{
if(low>high)
return true;
if(str[low]==str[high])
return JudgeString_1(str,low+1,high-1);
else
return false;
}
bool JudgeString_2(char str[]) //利用栈实现
{
stack<char> stk;
int i=0,j=0;
while(str[i]!='\0')
{
stk.push(str[i]);
i++;
}
while(str[j]!='\0')
{
if(stk.top()!=str[j])
{
cout<<"F"<<endl;
return false;
}
j++;
stk.pop();
}
cout<<"T"<<endl;
cout<<"输出栈的长度"<<stk.size()<<endl;
while(!stk.empty())
{
cout<<stk.top()<<" "<<endl;
}
return true;
}
int main()
{
char str[100];
cout<<"输入字符串:";
cin.getline(str,99);
DeleteSpace(str);
int len=strlen(str);
cout<<len;
cout<<"第一种方式:";
if(JudgeString_1(str,0,len-1))
cout<<"T"<<endl;
else
cout<<"F"<<endl;
cout<<"第二种方式:";
JudgeString_2(str);
return 0;
}
//统计逆序对
#include
#define N 3
using namespace std;
int main()
{
int a[N];
int count=0;
cout<<"输入"<<N<<"个数:";
for(int i=0; i<N; i++)
cin>>a[i];
for(int i=0; i<N-1; i++)
{
for(int j=1; j<N; j++)
{
if(a[i]>a[j])
count++;
}
}
cout<<"逆序对有:"<<count<<"个"<<endl;
return 0;
}
//计算字符串中子串出现的次数
#include
using namespace std;
int main()
{
char *p1,*p2,s1[20],s2[20];
int counter=0;
cin.getline(s1,19);
cin.getline(s2,19);
p1=s1;
p2=s2;
while(*p1!='\0')
{
if(*p1==*p2 && *p2!='\0')
{
p1++;
p2++;
}
else
p1++;
if(*p2=='\0')
{
counter++;
p2=s2;
}
}
cout<<"匹配的字符有:"<<counter<<endl;
return 0;
}
#include
#define N 5
#define M 5
using namespace std;
typedef struct student
{
char name[20];
char num[20];
float score[M];
}stu;
void input(stu student[])
{
for(int i=0; i<N; i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>student[i].name;
cout<<"请输入第"<<i+1<<"个学生的学号:";
cin>>student[i].num;
for(int j=0; j<M; j++)
{
cout<<"请输入第"<<i+1<<"个学生的第"<<j+1<<"门成绩:";
cin>>student[i].score[j];
}
cout<<endl;
}
}
void output(stu student[])
{
for(int i=0; i<N; i++)
{
cout<<student[i].name<<"的学号为:"<<student[i].num<<endl;;
for(int j=0; j<M; j++)
{
cout<<"第"<<j+1<<"门成绩为:"<<student[i].score[j];
cout<<endl;
}
cout<<endl;
}
}
int main()
{
stu student[N];
input(student);
output(student);
return 0;
}
//八进制转十进制
#include
#define N 20
using namespace std;
int main()
{
char *p, s[N];
p=s;
cout<<"请输入要转换的八进制数字:";
cin.getline(p,10);
int n=0;
while(*(p)!= '\0')
{
n=n*8+(*p-'0');
p++;
}
cout<<"十进制为:"<<n;
return 0;
}
//求一个数字是几位数,并将其逆序打印(不多于5位数)
//判断这个数字是不是回文数
#include
using namespace std;
int main()
{
int a,b,c,d,e,f;//分别代表个、十、百、千、万
long x; //未知数
cin>>x;
a=x%10; //个
b=(x/10)%10; //十
c=(x/100)%10; //百
d=(x/1000)%10; //千
e=(x/10000)%10; //万
f=(x/100000)%10; //十万
if(f!=0)
cout<<"error"<<endl;
else if(e!=0)
{
cout<<"5位数,逆序为:"<<a<<b<<c<<d<<e<<" ";
if(a==e&&b==d)
cout<<"是回文数"<<endl;
else
cout<<"不是回文数"<<endl;
}
else if(d!=0)
{
cout<<"4位数,逆序为:"<<a<<b<<c<<d<<" ";
if(a==d&&b==c)
cout<<"是回文数"<<endl;
else
cout<<"不是回文数"<<endl;
}
else if(c!=0)
{
cout<<"3位数,逆序为:"<<a<<b<<c<<" ";
if(a==c)
cout<<"是回文数"<<endl;
else
cout<<"不是回文数"<<endl;
}
else if(b!=0)
{
cout<<"2位数,逆序为:"<<a<<b<<" ";
if(a==b)
cout<<"是回文数"<<endl;
else
cout<<"不是回文数"<<endl;
}
else if(a!=0)
{
cout<<"1位数,逆序为:"<<a<<" ";
cout<<"是回文数"<<endl;
}
return 0;
}
//用递归的方式逆序输出字符数组
#include
using namespace std;
void fun(char *ch, int k)
{
if(ch[k]!='\0')
fun(ch, k+1);
cout<<ch[k-1]; //因为多递归了一次,所以k是指向结束字符的
}
int main()
{
char ch[20];
cin.getline(ch, 19);
fun(ch, 0);
return 0;
}
//递归求5!
#include
using namespace std;
int fun(int n)
{
if(n==1)
return 1;
return n*fun(n-1);
}
int main()
{
int n=5;
int value=fun(n);
cout<<value<<endl;
return 0;
}
//求字符串长度
#include
#include
using namespace std;
int length(char *str);
int main()
{
char str[100];
cin.getline(str,99);
// int j=strlen(str);
// cout<
int len=length(str);
cout<<"字符串长度为:"<<len<<endl;
return 0;
}
int length(char *str)
{
char *p=str;
int len=0;
while(*p!='\0')
{
p++;
len++;
}
return len;
}
//将字符串从小到大排序
#include
#include
using namespace std;
void SwapString(char *s1,char *s2)
{
char temp[20];
strcpy(temp, s1); //strcpy()用来复制字符串
strcpy(s1, s2);
strcpy(s2, temp);
}
int main()
{
char s1[20], s2[20], s3[20];
cin.getline(s1, 19);
cin.getline(s2, 19);
cin.getline(s3, 19);
//从小到大排序
if(strcmp(s1, s2)>0) SwapString(s1,s2);
if(strcmp(s1, s3)>0) SwapString(s1,s3);
if(strcmp(s2, s3)>0) SwapString(s2,s3);
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
return 0;
}
下面的是梁力程序设计里的几道自己总结的重点题
//找出1~99中能被3整除并且至少有一位数字是5的所有整数
//水仙花数
#include
using namespace std;
int main()
{
int counter1=0;
int a,b,c;
for(int i=1; i<1000; i++)
{
if(i%3==0)
{
a=i%10; //个位
b=(i/10)%10; //十位
c=i/100; //百位
if(a==5 || b==5 || c==5)
{
cout<<i<<" ";
counter1++;
if(counter1%5==0)
cout<<endl;
}
}
}
cout<<endl;
cout<<"水仙花数"<<endl;
for(int i=100; i<1000; i++)
{
int d=i%10; //个位
int e=(i/10)%10; //十位
int f=i/100; //百位
if((d*d*d+e*e*e+f*f*f)==i)
cout<<i<<" ";
}
return 0;
}
//任给一个自然数将其因式分解
#include
using namespace std;
int main()
{
int x;
int temp=2;
cin>>x;
if(x<1)
cout<<"error"<<endl;
cout<<x<<"=1";
while(1)
{
if(x%temp==0)
{
cout<<"*"<<temp;
x=x/temp;
}
else
temp++;
if(x==1)
break;
}
return 0;
}
//输入一串字符串,以$结束。分别统计数字字符、大写字母出现的次数,并按照大写字母出现的
//次数从多到少依次输出,不出现的字母不输出
#include
#include
using namespace std;
int main()
{
char str[100];
int c1[10],c2[26]; //c1统计数字出现的次数c2统计大写字母出现的次数
int num=10,letter=0;
// 初始化两个数组
for(int i=0;i<10;i++)
c1[i]=0;
for(int i=0;i<26;i++)
c2[i]=0;
// 字符输入
cout<<"输入字符并且以$结束:";
cin.getline(str,99);
// 数字和字母统计
for(int i=0;str[i]!='$';i++)
{
//统计数字个数
if(str[i]>='0'&&str[i]<='9')
{
num++;
c1[str[i]-'0']++; //强制类型转换成int型一定要会
}
//统计字母个数
if(str[i]>='A'&&str[i]<='Z')
{
letter++;
c2[str[i]-'A']++; //转换成数组下标
}
}
// 数字出现个数
for(int i=0;i<10;i++)
cout<<i<<"出现:"<<c1[i]<<endl;
cout<<endl;
// 字母出现个数
for(int i=1;i<26;i++)
{
int max=0;
for(int j=1;j<26;j++)
{
if(c2[j]>c2[max])
max=j;
}
if(c2[max]!=0)
{
cout<<(char)(max+'A')<<"出现:"<<c2[max]<<endl; //注意强制类型转换方式
c2[max]=0;
}
else
break;
}
return 0;
}
//数组A和B相同元素存储在数组C中
//思想:分别对数组A和数组B进行快速排序,在对其进行遍历
//时间复杂度为O(nlogn)
#include
using namespace std;
//对区间[left,right]进行划分
int Partition(int A[],int left, int right)
{
int temp =A[left]; //存放到临时变量temp
while(left < right) //只要left与right不相遇
{
while(left < right && A[right] > temp)
right--;//反复左移
A[left] = A[right];
while(left < right && A[left] <= temp)
left++;//反复右移
A[right] = A[left];
}
A[left] = temp; //把temp放到right与left相遇的地方
return left; //返回相遇下标
}
//快速排序,left与right初值为序列下标(例如 1 与 n)
void quicksort(int A[], int left, int right)
{
if(left < right) // 当前区间的长度超过1
{
int pos = Partition(A,left,right);
quicksort(A, left, pos-1); //对左子区间递归进行快速排序
quicksort(A, pos+1, right); //对右子区间递归进行快速排序
}
}
int main()
{
int A[100],B[100],C[200];
// 相同元素存储在C
int len_A,len_B,len_C=0;
int m=0,n=0;
// 初始化
cout<<"依次输入数组A、B的长度:";
cin>>len_A>>len_B;
cout<<len_A<<"个元素:";
for(int i=0;i<len_A;i++)
cin>>A[i];
cout<<len_B<<"个元素:";
for(int i=0;i<len_B;i++)
cin>>B[i];
// 快速排序
quicksort(A,0,len_A-1);
quicksort(B,0,len_B-1);
// 求相同元素
while(m<len_A&&n<len_B)
{
if(A[m]==B[n])
{
C[len_C]=A[m];
len_C++;
m++;
n++;
}
else if(A[m]>B[n])
n++;
else
m++;
}
if(len_C>0)
{
cout<<"数组C的元素:";
for(int i=0;i<len_C;i++)
cout<<C[i]<<" ";
cout<<endl;
}
else
cout<<"两个数组无公共元素"<<endl;
return 0;
}
//数组A与数组B相同元素存到数组C
//数组A特有元素存到数组D
//数组B特有元素存到数组E
#include
using namespace std;
int main()
{
int A[100],B[100],C[100],D[100],E[100];
int len_A,len_B,len_C=0,len_D=0,len_E=0;
// 初始化
cout<<"依次输入数组A、B的长度:";
cin>>len_A>>len_B;
cout<<len_A<<"个元素:";
for(int i=0;i<len_A;i++)
cin>>A[i];
cout<<len_B<<"个元素:";
for(int i=0;i<len_B;i++)
cin>>B[i];
for(int i=0; i<len_A;i++)
{
int flag=0;
for(int j=0; j<len_B; j++)
{
if(A[i]==B[j])
{
flag=1;
C[len_C++]=A[i];
break;
}
}
//A跟B不同的元素存到D中
if(!flag)
D[len_D++]=A[i];
}
for(int i=0; i<len_B;i++)
{
int flag=0;
for(int j=0; j<len_C; j++)
{
if(B[i]==C[j])
{
flag=1;
break;
}
}
//A跟B不同的元素存到D中
if(!flag)
E[len_E++]=B[i];
}
if(len_C>0)
{
cout<<"数组C中元素有:";
for(int i=0; i<len_C; i++)
cout<<C[i]<<" ";
cout<<endl;
}
else
cout<<"数组C长度为0"<<endl;
if(len_D>0)
{
cout<<"数组D中元素有:";
for(int i=0; i<len_D; i++)
cout<<D[i]<<" ";
cout<<endl;
}
else
cout<<"数组D长度为0"<<endl;
if(len_E>0)
{
cout<<"数组E中元素有:";
for(int i=0; i<len_E; i++)
cout<<E[i]<<" ";
cout<<endl;
}
else
cout<<"数组E长度为0"<<endl;
return 0;
}
//约瑟夫环,M个人围成一圈,数到第n个人的时候除圈
#include
#define M 8
using namespace std;
int main()
{
int a[M],i,j,k;
int n;
cout<<"输入n的值:";
cin>>n;
for(i=0; i<M; i++)
a[i]=i+1;
i=0;
for(j=M; j>0; j--)
{
i=(i+n-1)%j; //出圈的编号
cout<<"出圈的编号为:"<<a[i]<<endl;
for(k=i; k<j-1; k++)
a[k]=a[k+1];
}
cout<<endl;
return 0;
}
//写一个squeeze(s1,s2)函数,它删除字符串s1中与s2中的任意字符相匹配的字符
#include
#include
using namespace std;
int squeeze(char s1[], char s2[])
{
char *p1=s1, *p2=s2;
int len=0;
for(int i=0; s1[i]!='\0'; i++)
{
int j=0;
while(p2[j]!='\0')
{
if(p1[i]!=p2[j])
j++;
else
break;
}
if(p2[j]=='\0')
p1[len++]=p1[i];
}
p1[len]='\0';
return len;
}
int main()
{
char s1[100],s2[100];
cout<<"依次输入字符串数组s1、s2"<<endl;
cin>>s1;
cin>>s2;
int len=squeeze(s1,s2);
if(len>0)
cout<<s1<<endl;
return 0;
}
//函数seekint(s)是实现在字符串中寻找整数的功能,s是由数字字符和非数字字符组成的字符串...
#include
using namespace std;
void SeekInt(char *s)
{
char *p=s;
int num[100],len=0;
for(int i=0;i<100;i++)
num[i]=0;
while(*p!='\0')
{
if(*p>='0' && *p<='9')
{
char *q=p+1;
while(1)
{
if(*q>='0' && *q<='9')
q++;
else
break;
}
int sum=0;
while(p!=q)
{
sum=sum*10+(int)((*p)-48); //数字字符0的assic码为48
p++;
}
num[len++]=sum;
p++;
}
else
p++;
}
cout<<"数字字符是:";
for(int i=0;i<len;i++)
cout<<num[i]<<" ";
cout<<endl;
}
int main()
{
char str[100];
cout<<"输入字符串:";
cin.getline(str,99);
SeekInt(str);
return 0;
}
#include
#define N 2
#define M 2
using namespace std;
typedef struct student
{
long stu_no;
char name[20];
char sex;
float score[M];
}stu;
int main()
{
stu student[N];
// 初始化
cout<<"输入学生的信息:"<<endl;
for(int i=0; i<N; i++)
{
cout<<"输入第"<<i+1<<"个学生的学号:";
cin>>student[i].stu_no;
cout<<"输入第"<<i+1<<"个学生的姓名:";
cin>>student[i].name;
cout<<"输入第"<<i+1<<"个学生的性别:";
cin>>student[i].sex;
for(int j=0;j<M;j++)
{
cout<<"输入第"<<i+1<<"个学生的第"<<j+1<<"门成绩:";
cin>>student[i].score[j];
}
}
int maxscore=0,maxnum,failnum[N]; //maxnum,failnum[N]分别为最高分和不及格学生的学号
int k=0;
for(int i=0;i<N;i++)
{
int sum=0;
for(int j=0;j<M;j++)
{
sum+=student[i].score[j];
if(student[i].score[j]<60)
failnum[k++]=i;
}
if(maxscore<sum)
{
maxscore=sum; //总分最高的学生成绩
maxnum=i; //总分最高的学生学号
}
}
cout<<"总分最高的学生为:"<<student[maxnum].name<<endl;
for(int i=0; i<k; i++)
cout<< "不及格的学生为:" << student[failnum[i]].name <<" "<<endl;
return 0;
}
完结!大家考研加油!