A. 编写程序设计一个类CStudent
|#include<iostream>
#include<fstream>
using namespace std;
class CStudent{
public:
int id,age;
char name[20];
char sex;
float score[3];
void operator <<(CStudent s){
cout<<s.id<<"-"<<s.name<<"-"<<s.sex;
cout<<"-"<<s.age<<"-"<<s.score[0]<<"-"<<s.score[1]<<"-"<<s.score[2]<<endl;
}
void input(char filename[]){
cout<<"请输入学生信息(id-name-sex-age-score[])"<<endl;
CStudent s;
cin>>s.id>>s.name>>s.sex>>s.age>>s.score[0]>>s.score[1]>>s.score[2];
ofstream outfile(filename,ios::out||ios::binary);
if(!outfile){
cout<<"open error!"<<endl;
exit(0);
}
outfile.write((char *)&s,sizeof(CStudent));
outfile.close();
cout<<endl;
}
void SearchById(char filename[],int sid){
cout<<"学号为"<<sid<<"的学生信息为:";
ifstream infile(filename,ios::in||ios::binary);
if(!infile){
cout<<"open error!"<<endl;
exit(0);
}
while(infile.peek()){
CStudent s;
infile.read((char *)&s,sizeof(CStudent));
if(s.id==sid){
*this<<s;
// cout<<s.id<<"-"<<s.name<<"-"<<s.sex<<"-"
// <<s.age<<"-"<<s.score[0]<<" "<<s.score[1]<<" "<<s.score[2];
break;
}
}
infile.close();
cout<<endl;
}
void SearchByName(char filename[],char sname[]){
cout<<"姓名为"<<sname<<"的学生信息为:";
fstream infile(filename,ios::in||ios::binary);
if(!infile){
cout<<"open error!"<<endl;
exit(0);
}
while(infile.peek()){
CStudent s;
infile.read((char *)&s,sizeof(CStudent));
if(!strcmp(s.name,sname)){
*this<<s;
// cout<<s.id<<"-"<<s.name<<"-"<<s.sex<<"-"
// <<s.age<<"-"<<s.score[0]<<" "<<s.score[1]<<" "<<s.score[2];
break;
}
}
infile.close();
cout<<endl;
}
void CalcById(char filename[],int sid){
CStudent s;
float total,average;
fstream infile(filename,ios::in||ios::binary);
if(!infile){
cout<<"open error!"<<endl;
exit(0);
}
while(infile.peek()){
infile.read((char *)&s,sizeof(CStudent));
if(s.id==sid){
total=s.score[0]+s.score[1]+s.score[2];
average=total/3;
//*this<<s;
cout<<"学号:"<<sid<<" 总成绩:"<<total<<" 平均成绩:"<<average<<endl;
break;
}
}
infile.close();
cout<<endl;
}
void List(char filename[]){ CStudent s;
float n,total;
char ssex;
cout<<"请输入要查询的最低成绩和性别"<<endl;
cin>>n>>ssex;
fstream infile(filename,ios::in||ios::binary);
if(!infile){
cout<<"open error!"<<endl;
exit(0);
}
while(infile.peek()){
s.score[0]=0;
s.score[1]=0;
s.score[2]=0;
infile.read((char *)&s,sizeof(CStudent));
total=s.score[0]+s.score[1]+s.score[2];
if(total>n && s.sex==ssex)
// *this<<s;
cout<<s.id<<"-"<<s.name<<"-"<<s.sex<<"-"<<s.age<<"-"<<s.score[0]<<" "<<s.score[1]<<" "<<s.score[2]<<endl;
}
infile.close();
cout<<endl;
}
};
int main(){
CStudent s0;
int n;
char filename[]="student.txt";
char sname[]="zhangsan";
char name[20]="zhangsan";
cout<<"strcmp"<<!strcmp(name,sname)<<endl;
cout<<"请输入学生人数"<<endl;
cin>>n;
for(int i=0;i<n;i++)
s0.input(filename);
s0.SearchById(filename,3);
s0.CalcById(filename,3);
s0.SearchByName(filename,sname);
s0.List(filename);
return 0;
}
B. 使用抓包软件分析抓包,怎样看广播帧哪些是广播帧我有wireshark和omnipeek软件。
广播是一台主机向网络中所有主机发送数据包,广播的目的地址不同于单播单一的地址。
广播有两类:定向广播和有限广播
1、定向广播是将数据包发送到向本网络之外的特定网络所有主机,定向广播的目的地址是定向网络的广播地址,如当前网络为192.168.0.0/24,要向192.168.1.0/24的网络发送定向广播,那么定向广播的目的地址是:192.168.1.255。可以配置路由器让其转发定向广播。
2、有限广播是将数据包发送到本地网络的所有主机,有限广播使用的目的地址是:255.255.255.255.路由器不转发此广播。
所以看看是不是最后是255的就可以了
C. java编程实现堆栈出栈操作!
数组实现的堆栈:ArrayStack.java
public class ArrayStack {
Object[] m_elements;
int m_size;
public ArrayStack(int len) {
m_elements = new Object[len];
m_size = 0;
}
public ArrayStack() {
this(50);
}
// insert onto stack
public void push(Object element) {
m_elements[m_size] = element;
m_size++;
}
// return and remove the top element
public Object pop() {
if (!this.isEmpty()) {
Object obj = m_elements[m_size - 1];
m_elements[m_size - 1] = null;
m_size--;
return obj;
} else {
return null;
}
}
// return the top element
public Object top() {
if (!this.isEmpty()) {
return m_elements[m_size - 1];
} else {
return null;
}
}
// return 1 --> is empty
// return 0 --> is not empty
public boolean isEmpty() {
return this.size() == 0;
}
public int size() {
return m_size;
}
}
使用链表实现(单链表) :
public class Stacklist {
Node m_header;
int m_size;
public ListStack() {
m_header = null;
m_size = 0;
}
public void push(Object value) {
m_header = new Node(value, m_header);
}
public Object pop() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}
Object obj = m_header.element;
m_header = m_header.next;
return obj;
}
// return reference to most recently added elemenet
public Object peek() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}
return m_header.element;
}
public boolean isEmpty() {
return this.size() == 0;
}
//return the number of the queue's elements;
public int size() {
return m_size;
}
}
链表的需要用到一个结点类 Node.java 代码如下
public class Node {
Object element;
Node next;
public Node(Object theElement) {
this(theElement, null);
}
public Node(Object theElement, Node n) {
element = theElement;
next = n;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
D. Android开发,如何编程实现开启电话的免提功能
JAVA编写,对应拨打电话只需要调用ACTION_CALL加对应电话号码可以如下编写:
viewplain
voidcallPhone(){
Intentintent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:110"));//不能调用呼叫
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
但是当拨打110,119,120等紧急电话时,无法自动呼出,还需要用户进行确认操作,那么就需要实现直接进行呼叫,但是前提app必须用系统级别权限,及system/app/目录下方可。
首先确保应用具有如下权限:
viewplain
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.CALL_PHONE"/>
<uses-permissionandroid:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permissionandroid:name="android.permission.CALL_PRIVILEGED"/>
同样调用intent来开启功能,不过内容有些变化
viewplain
voidcallPhone(Stringnum){
Intentintent=newIntent("android.intent.action.CALL_PRIVILEGED",Uri.parse("tel:"+num));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
然后在源码下编译,放到/system/app/即可使用。
开启拨通电话后设置开启扬声器功能:
首先,获取音频管理器:audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
设置电话监听:
viewplain
{
booleancomingPhone=false;
@Override
publicvoidonCallStateChanged(intstate,StringincomingNumber){
switch(state){
caseTelephonyManager.CALL_STATE_IDLE:/*无任何状态*/
Log.d(tag,"phoneidle");
if(this.comingPhone){
this.comingPhone=false;
backMyApp();
setSpeekModle(false);
}
break;
caseTelephonyManager.CALL_STATE_OFFHOOK:/*接起电话*/
Log.d(tag,"phoneanswer");
this.comingPhone=true;
setSpeekModle(true);
break;
caseTelephonyManager.CALL_STATE_RINGING:/*电话进来*/
Log.d(tag,"phonecoming");
this.comingPhone=true;
setSpeekModle(true);
break;
}
}
}
注册监听类:
viewplain
TelephonyManagertelManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
TelListnerlistener=newTelListner();
telManager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
开启或关闭免提功能:
viewplain
voidsetSpeekModle(booleanopen){
//audioManager.setMode(AudioManager.ROUTE_SPEAKER);
currVolume=audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
audioManager.setMode(AudioManager.MODE_IN_CALL);
if(!audioManager.isSpeakerphoneOn()&&true==open){
audioManager.setSpeakerphoneOn(true);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),
AudioManager.STREAM_VOICE_CALL);
}elseif(audioManager.isSpeakerphoneOn()&&false==open){
audioManager.setSpeakerphoneOn(false);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
AudioManager.STREAM_VOICE_CALL);
}
}
添加权限:
viewplain
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
E. java编程中,常提到的反射代码指的是什么
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法专;对于任意一属个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
所谓的反射代码,也就是实现java反射机制的代码。
F. vscode中vue文件下<style></style>样式不能注释怎么搞
语法使用错了。
css内应该使用如下的注释:
<style>
.container {
width: 100%;
/* background-color: red; */
/*
height: 100%;
font-size: 2rem;
*/
}
</style>
<!--注释-->这是HTML的注释,如:
<div>
<!--<div>内容</div>-->
</div>
G. 如何看待go语言泛型的最新设计
Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成为现实。Go 团队实施了一个看起来比较稳定的设计草案,并且正以源到源翻译器原型的形式获得关注。本文讲述的是泛型的最新设计,以及如何自己尝试泛型。
FIFO Stack
假设你要创建一个先进先出堆栈。没有泛型,你可能会这样实现:
type Stack []interface{}func (s Stack) Peek() interface{} {
return s[len(s)-1]
}
func (s *Stack) Pop() {
*s = (*s)[:
len(*s)-1]
}
func (s *Stack) Push(value interface{}) {
*s =
append(*s, value)
}
但是,这里存在一个问题:每当你 Peek 项时,都必须使用类型断言将其从 interface{} 转换为你需要的类型。如果你的堆栈是 *MyObject 的堆栈,则意味着很多 s.Peek().(*MyObject)这样的代码。这不仅让人眼花缭乱,而且还可能引发错误。比如忘记 * 怎么办?或者如果您输入错误的类型怎么办?s.Push(MyObject{})` 可以顺利编译,而且你可能不会发现到自己的错误,直到它影响到你的整个服务为止。
通常,使用 interface{} 是相对危险的。使用更多受限制的类型总是更安全,因为可以在编译时而不是运行时发现问题。
泛型通过允许类型具有类型参数来解决此问题:
type Stack(type T) []Tfunc (s Stack(T)) Peek() T {
return s[len(s)-1]
}
func (s *Stack(T)) Pop() {
*s = (*s)[:
len(*s)-1]
}
func (s *Stack(T)) Push(value T) {
*s =
append(*s, value)
}
这会向 Stack 添加一个类型参数,从而完全不需要 interface{}。现在,当你使用 Peek() 时,返回的值已经是原始类型,并且没有机会返回错误的值类型。这种方式更安全,更容易使用。(译注:就是看起来更丑陋,^-^)
此外,泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价)。如果我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:
type MyObject struct {
X
int
}
var sink MyObjectfunc BenchmarkGo1(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Stack
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink = s.Peek().(MyObject)
}
}
func BenchmarkGo2(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Stack(MyObject)
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink = s.Peek()
}
}
结果:
BenchmarkGo1BenchmarkGo1-16 12837528 87.0 ns/op 48 B/op 2 allocs/opBenchmarkGo2BenchmarkGo2-16 28406479 41.9 ns/op 24 B/op 2 allocs/op
在这种情况下,我们分配更少的内存,同时泛型的速度是非泛型的两倍。
上面的堆栈示例适用于任何类型。但是,在许多情况下,你需要编写仅适用于具有某些特征的类型的代码。例如,你可能希望堆栈要求类型实现 String() 函数