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() 函數