OpenGL學習程式,建立一個3D的三角椎體和正方體並旋轉
近日看了兩個OpenGL ES的程式,看的雲裡霧裡的,意識到OpenGL ES是OpenGL的一個方面,所以任務學習OpenGL還是很有必要的,發現一個非常不錯的學習網站,這裡推薦給大家:http://www.owlei.com/DancingWind/Course/Tutorial_01.htm還有一個視訊學習的網站,這兩個都是外國友人編寫和錄製的,覺得為什麼經過外國人描述出來的東西就會特別容易理解,這一點還是需要學習的。還有要多看原文,不要看中文翻譯後的技術書,很多都被翻譯的很難了。
#include <windows.h> // Windows的標頭檔案 #include <gl\gl.h> // 包含最新的gl.h,glu.h庫 #include <gl\glu.h> #include <stdio.h> // 標準輸入/輸出庫的標頭檔案 #include <glaux.h> // GLaux庫的標頭檔案 HGLRC hRC=NULL; // 視窗著色描述表控制代碼 HDC hDC=NULL; // OpenGL渲染描述表控制代碼 HWND hWnd=NULL; // 儲存我們的視窗控制代碼 HINSTANCE hInstance; // 儲存程式的例項 bool keys[256]; // 儲存鍵盤按鍵的陣列 bool active=TRUE; // 視窗的活動標誌,預設為TRUE bool fullscreen=TRUE; // 全屏標誌預設,預設設定成全屏模式 GLfloat rtri; // 用於三角形的角度 GLfloat rquad; // 用於四邊形的角度 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc的定義 AUX_RGBImageRec *LoadBMP(char *Filename) // 載入點陣圖圖象 { FILE *File=NULL; // 檔案控制代碼 if (!Filename) // 確保檔名已提供 { return NULL; // 如果沒提供,返回 NULL GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // 重置OpenGL視窗大小 { if (height==0) // 防止被零除 { height=1; // 將Height設為1 } glViewport(0, 0, width, height); // 重置當前的視口 glMatrixMode(GL_PROJECTION); // 選擇投影矩陣 glLoadIdentity(); // 重置投影矩陣 // 設定視口的大小 gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); // 選擇模型觀察矩陣 glLoadIdentity(); }// 重置模型觀察矩陣 int InitGL(GLvoid) // 此處開始對OpenGL進行所有設定 { glShadeModel(GL_SMOOTH); // 啟用陰影平滑 glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // 黑色背景 glClearDepth(1.0f); // 設定深度快取 glEnable(GL_DEPTH_TEST); // 啟用深度測試 glDepthFunc(GL_LEQUAL); // 所作深度測試的型別 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 告訴系統對透視進行修正 return TRUE; // 初始化 OK } int DrawGLScene(GLvoid) // 從這裡開始進行所有的繪製 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除螢幕和深度快取 glLoadIdentity(); // 重置當前的模型觀察矩陣 glTranslatef(-1.5f,0.0f,-6.0f); // 左移 1.5 單位,並移入螢幕 6.0 glRotatef(rtri,0.0f,1.0f,0.0f); // 繞Y軸旋轉三角形 glBegin(GL_TRIANGLES); // 繪製三角形 glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點 (前側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); // 三角形的左下頂點 (前側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); // 三角形的右下頂點 (前側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點 (右側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); // 三角形的左下頂點 (右側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); // 三角形的右下頂點 (右側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點 (後側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); // 三角形的左下頂點 (後側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f(-1.0f,-1.0f, -1.0f); // 三角形的右下頂點 (後側面) glColor3f(1.0f,0.0f,0.0f); // 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 三角形的上頂點 (左側面) glColor3f(0.0f,0.0f,1.0f); // 藍色 glVertex3f(-1.0f,-1.0f,-1.0f); // 三角形的左下頂點 (左側面) glColor3f(0.0f,1.0f,0.0f); // 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); // 三角形的右下頂點 (左側面) glEnd(); // 金字塔繪製結束 glLoadIdentity(); glTranslatef(1.5f,0.0f,-7.0f); // 先右移再移入螢幕 glRotatef(rquad,1.0f,1.0f,1.0f); // 在XYZ軸上旋轉立方體 glBegin(GL_QUADS); // 開始繪製立方體 glColor3f(0.0f,1.0f,0.0f); // 顏色改為藍色 glVertex3f( 1.0f, 1.0f,-1.0f); // 四邊形的右上頂點 (頂面) glVertex3f(-1.0f, 1.0f,-1.0f); // 四邊形的左上頂點 (頂面) glVertex3f(-1.0f, 1.0f, 1.0f); // 四邊形的左下頂點 (頂面) glVertex3f( 1.0f, 1.0f, 1.0f); // 四邊形的右下頂點 (頂面) glColor3f(1.0f,0.5f,0.0f); // 顏色改成橙色 glVertex3f( 1.0f,-1.0f, 1.0f); // 四邊形的右上頂點(底面) glVertex3f(-1.0f,-1.0f, 1.0f); // 四邊形的左上頂點(底面) glVertex3f(-1.0f,-1.0f,-1.0f); // 四邊形的左下頂點(底面) glVertex3f( 1.0f,-1.0f,-1.0f); // 四邊形的右下頂點(底面) glColor3f(1.0f,0.0f,0.0f); // 顏色改成紅色 glVertex3f( 1.0f, 1.0f, 1.0f); // 四邊形的右上頂點(前面) glVertex3f(-1.0f, 1.0f, 1.0f); // 四邊形的左上頂點(前面) glVertex3f(-1.0f,-1.0f, 1.0f); // 四邊形的左下頂點(前面) glVertex3f( 1.0f,-1.0f, 1.0f); // 四邊形的右下頂點(前面) glColor3f(1.0f,1.0f,0.0f); // 顏色改成黃色 glVertex3f( 1.0f,-1.0f,-1.0f); // 四邊形的右上頂點(後面) glVertex3f(-1.0f,-1.0f,-1.0f); // 四邊形的左上頂點(後面) glVertex3f(-1.0f, 1.0f,-1.0f); // 四邊形的左下頂點(後面) glVertex3f( 1.0f, 1.0f,-1.0f); // 四邊形的右下頂點(後面) glColor3f(0.0f,0.0f,1.0f); // 顏色改成藍色 glVertex3f(-1.0f, 1.0f, 1.0f); // 四邊形的右上頂點(左面) glVertex3f(-1.0f, 1.0f,-1.0f); // 四邊形的左上頂點(左面) glVertex3f(-1.0f,-1.0f,-1.0f); // 四邊形的左下頂點(左面) glVertex3f(-1.0f,-1.0f, 1.0f); // 四邊形的右下頂點(左面) glColor3f(1.0f,0.0f,1.0f); // 顏色改成紫羅蘭色 glVertex3f( 1.0f, 1.0f,-1.0f); // 四邊形的右上頂點(右面) glVertex3f( 1.0f, 1.0f, 1.0f); // 四邊形的左上頂點(右面) glVertex3f( 1.0f,-1.0f, 1.0f); // 四邊形的左下頂點(右面) glVertex3f( 1.0f,-1.0f,-1.0f); // 四邊形的右下頂點(右面) glEnd(); // 立方體繪製結束 rtri+=0.2f; // 增加三角形的旋轉變數 rquad-=0.15f; // 減少四邊形的旋轉變數 return TRUE; // 繼續執行 } GLvoid KillGLWindow(GLvoid) // 正常銷燬視窗 { if (fullscreen) // 我們處於全屏模式嗎? { ChangeDisplaySettings(NULL,0); // 是的話,切換回桌面 ShowCursor(TRUE); // 顯示滑鼠指標 } if (hRC) // 我們擁有OpenGL渲染描述表嗎? { if (!wglMakeCurrent(NULL,NULL)) // 我們能否釋放DC和RC描述表? { MessageBox(NULL,"釋放DC或RC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); } if (!wglDeleteContext(hRC)) // 我們能否刪除RC? { MessageBox(NULL,"釋放RC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); } hRC=NULL; // 將RC設為 NULL } if (hDC && !ReleaseDC(hWnd,hDC)) // 我們能否釋放 DC? { MessageBox(NULL,"釋放DC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); hDC=NULL; // 將 DC 設為 NULL } if (hWnd && !DestroyWindow(hWnd)) // 能否銷燬視窗? { MessageBox(NULL,"釋放視窗控制代碼失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); hWnd=NULL; // 將 hWnd 設為 NULL } if (!UnregisterClass("OpenG",hInstance)) // 能否登出類? { MessageBox(NULL,"不能登出視窗類。","關閉錯誤",MB_OK | MB_ICONINFORMATION); hInstance=NULL; // 將 hInstance 設為 NULL } } BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag) { GLuint PixelFormat; // 儲存查詢匹配的結果 WNDCLASS wc; // 視窗類結構 DWORD dwExStyle; // 擴充套件視窗風格 DWORD dwStyle; // 視窗風格 RECT WindowRect; // 取得矩形的左上角和右下角的座標值 WindowRect.left=(long)0; // 將Left 設為 0 WindowRect.right=(long)width; // 將Right 設為要求的寬度 WindowRect.top=(long)0; // 將Top 設為 0 WindowRect.bottom=(long)height; // 將Bottom 設為要求的高度 fullscreen=fullscreenflag; // 設定全域性全屏標誌 hInstance = GetModuleHandle(NULL); // 取得我們視窗的例項 wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // 移動時重畫,併為視窗取得DC wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc處理訊息 wc.cbClsExtra = 0; // 無額外視窗資料 wc.cbWndExtra = 0; // 無額外視窗資料 wc.hInstance = hInstance; // 設定例項 wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // 裝入預設圖示 wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 裝入滑鼠指標 wc.hbrBackground = NULL; // GL不需要背景 wc.lpszMenuName = NULL; // 不需要選單 wc.lpszClassName = "OpenG"; // 設定類名字 if (!RegisterClass(&wc)) // 嘗試註冊視窗類 { MessageBox(NULL,"註冊視窗失敗","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 退出並返回FALSE } if (fullscreen) // 要嘗試全屏模式嗎? { DEVMODE dmScreenSettings; // 裝置模式 memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // 確保記憶體清空為零 dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Devmode 結構的大小 dmScreenSettings.dmPelsWidth = width; // 所選螢幕寬度 dmScreenSettings.dmPelsHeight = height; // 所選螢幕高度 dmScreenSettings.dmBitsPerPel = bits; // 每象素所選的色彩深度 dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; // 嘗試設定顯示模式並返回結果。注: CDS_FULLSCREEN 移去了狀態條。 if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) { // 若模式失敗,提供兩個選項:退出或在視窗內執行。 if (MessageBox(NULL,"全屏模式在當前顯示卡上設定失敗!\n使用視窗模式?","NeHe G",MB_YESNO|MB_ICONEXCLAMATION)==IDYES) { fullscreen=FALSE; // 選擇視窗模式(Fullscreen=FALSE) } else { // 彈出一個對話方塊,告訴使用者程式結束 MessageBox(NULL,"程式將被關閉","錯誤",MB_OK|MB_ICONSTOP); return FALSE; // 退出並返回 FALSE } } } if (fullscreen) // 仍處於全屏模式嗎? { dwExStyle=WS_EX_APPWINDOW; // 擴充套件窗體風格 dwStyle=WS_POPUP; // 窗體風格 ShowCursor(FALSE); // 隱藏滑鼠指標 } else { dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // 擴充套件窗體風格 dwStyle=WS_OVERLAPPEDWINDOW; // 窗體風格 } AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); // 調整視窗達到真正要求的大小 if (!(hWnd=CreateWindowEx( dwExStyle, // 擴充套件窗體風格 "OpenG", // 類名字 title, // 視窗標題 WS_CLIPSIBLINGS | // 必須的窗體風格屬性 WS_CLIPCHILDREN | // 必須的窗體風格屬性 dwStyle, // 選擇的窗體屬性 0, 0, // 視窗位置 WindowRect.right-WindowRect.left, // 計算調整好的視窗寬度 WindowRect.bottom-WindowRect.top, // 計算調整好的視窗高度 NULL, // 無父視窗 NULL, // 無選單 hInstance, // 例項 NULL))) // 不向WM_CREATE傳遞任何東 { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能建立一個視窗裝置描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } static PIXELFORMATDESCRIPTOR pfd= // /pfd 告訴視窗我們所希望的東東,即視窗使用的畫素格式 { sizeof(PIXELFORMATDESCRIPTOR), // 上述格式描述符的大小 1, // 版本號 PFD_DRAW_TO_WINDOW | // 格式支援視窗 PFD_SUPPORT_OPENGL | // 格式必須支援OpenGL PFD_DOUBLEBUFFER, // 必須支援雙緩衝 PFD_TYPE_RGBA, // 申請 RGBA 格式 bits, // 選定色彩深度 0, 0, 0, 0, 0, 0, // 忽略的色彩位 0, // 無Alpha快取 0, // 忽略Shift Bit 0, // 無累加快取 0, 0, 0, 0, // 忽略聚集位 16, // 16位 Z-快取 (深度快取) 0, // 無蒙板快取 0, // 無輔助快取 PFD_MAIN_PLANE, // 主繪圖層 0, // Reserved 0, 0, 0 // 忽略層遮罩 }; if (!(hDC=GetDC(hWnd))) // 取得裝置描述表了麼? { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能建立一種相匹配的畫素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) // Windows 找到相應的象素格式了嗎? { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能設定畫素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } if(!SetPixelFormat(hDC,PixelFormat,&pfd)) // 能夠設定象素格式麼? { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能設定畫素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } if (!(hRC=wglCreateContext(hDC))) // 能否取得著色描述表? { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能建立OpenGL渲染描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } if(!wglMakeCurrent(hDC,hRC)) // 嘗試啟用著色描述表 { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"不能啟用當前的OpenGL渲然描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } ShowWindow(hWnd,SW_SHOW); // 顯示視窗 SetForegroundWindow(hWnd); // 略略提高優先順序 SetFocus(hWnd); // 設定鍵盤的焦點至此視窗 ReSizeGLScene(width, height); // 設定透視 GL 螢幕 if (!InitGL()) // 初始化新建的GL視窗 { KillGLWindow(); // 重置顯示區 MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION); return FALSE; // 返回 FALSE } return TRUE; // 成功 } LRESULT CALLBACK WndProc( HWND hWnd, // 視窗的控制代碼 UINT uMsg, // 視窗的訊息 WPARAM wParam, // 附加的訊息內容 LPARAM lParam) // 附加的訊息內容 { switch (uMsg) // 檢查Windows訊息 { case WM_ACTIVATE: // 監視視窗啟用訊息 { if (!HIWORD(wParam)) // 檢查最小化狀態 { active=TRUE; // 程式處於啟用狀態 } else { active=FALSE; // 程式不再啟用 } return 0; // 返回訊息迴圈 } case WM_SYSCOMMAND: // 系統中斷命令 { switch (wParam) // 檢查系統呼叫 { case SC_SCREENSAVE: // 屏保要執行? case SC_MONITORPOWER: // 顯示器要進入節電模式? return 0; // 阻止發生 } break; // 退出 } case WM_CLOSE: // 收到Close訊息? { PostQuitMessage(0); // 發出退出訊息 return 0; // 返回 } case WM_KEYDOWN: // 有鍵按下麼? { keys[wParam] = TRUE; // 如果是,設為TRUE return 0; // 返回 } case WM_KEYUP: // 有鍵放開麼? { keys[wParam] = FALSE; // 如果是,設為FALSE return 0; // 返回 } case WM_SIZE: // 調整OpenGL視窗大小 { ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height return 0; // 返回 } } // 向 DefWindowProc傳遞所有未處理的訊息。 return DefWindowProc(hWnd,uMsg,wParam,lParam); } int WINAPI WinMain( HINSTANCE hInstance, // 當前視窗例項 HINSTANCE hPrevInstance, // 前一個視窗例項 LPSTR lpCmdLine, // 命令列引數 int nCmdShow) // 視窗顯示狀態 { MSG msg; // Windowsx訊息結構 BOOL done=FALSE; // 用來退出迴圈的Bool 變數 // 提示使用者選擇執行模式 if (MessageBox(NULL,"你想在全屏模式下執行麼?", "設定全屏模式",MB_YESNO|MB_ICONQUESTION)==IDNO) { fullscreen=FALSE; // FALSE為視窗模式 } // 建立OpenGL視窗 if (!CreateGLWindow("NeHe's OpenGL程式框架",640,480,16,fullscreen)) { return 0; // 失敗退出 } while(!done) // 保持迴圈直到 done=TRUE { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // 有訊息在等待嗎? { if (msg.message==WM_QUIT) // 收到退出訊息? { done=TRUE; // 是,則done=TRUE } else // 不是,處理視窗訊息 { TranslateMessage(&msg); // 翻譯訊息 DispatchMessage(&msg); // 傳送訊息 } } else // 如果沒有訊息 { // 繪製場景。監視ESC鍵和來自DrawGLScene()的退出訊息 if (active) // 程式啟用的麼? { if (keys[VK_ESCAPE]) // ESC 按下了麼? { done=TRUE; // ESC 發出退出訊號 } else // 不是退出的時候,重新整理螢幕 { DrawGLScene(); // 繪製場景 SwapBuffers(hDC); // 交換快取 (雙快取) } } if (keys[VK_F1]) // F1鍵按下了麼? { keys[VK_F1]=FALSE; // 若是,使對應的Key陣列中的值為 FALSE KillGLWindow(); // 銷燬當前的視窗 fullscreen=!fullscreen; // 切換 全屏 / 視窗 模式 // 重建 OpenGL 視窗 if (!CreateGLWindow("NeHe's OpenGL 程式框架",640,480,16,fullscreen)) { return 0; // 如果視窗未能建立,程式退出 } } } } // 關閉程式 KillGLWindow(); // 銷燬視窗 return (msg.wParam); // 退出程式 }
相關推薦
OpenGL學習程式,建立一個3D的三角椎體和正方體並旋轉
近日看了兩個OpenGL ES的程式,看的雲裡霧裡的,意識到OpenGL ES是OpenGL的一個方面,所以任務學習OpenGL還是很有必要的,發現一個非常不錯的學習網站,這裡推薦給大家:http://www.owlei.com/DancingWind/Course/Tut
activiti工作流,建立一個簡單的工作流和審批
上一篇文章中,我們介紹了Activiti最簡單的流程,但是,我們知道,一般來講,審批一定有同意和不同意的區別,我們在這篇部落格中做一個簡單的Demo. 程式碼: 當然上一篇部落格中已經配置了基本的Activiti.cfg.xml和log4j.properties檔
程式執行時,建立一個額外的輸出臺,輸出程式內的Log以及除錯結果
需求描述:在做硬體除錯的時候,經常會需要用程式除錯具體問題處在哪裡,但是不斷重啟程式看日誌顯得繁瑣,想將日誌及除錯結果實時輸出。 解決方案:使用Kernel32.dll和user32.dll建立Console,使用控制檯實時輸出。在Main函式中新增實現程式碼
Python學習筆記,第一個 Python 程式。
1. odbchelper.py def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Ret
一個簡單的OpenGL程式,繪製一個白色正方形
最近在學習OpenGL,也不知道要怎麼學才能學號,就一邊貼程式碼一邊記錄知識點吧。。。 這是一個非常簡單的OpenGL函式,顯示是個白色正方形。 程式碼: // Win32Project1hell
編寫程式:建立一個學生資料鏈表,每個節點的資訊包括如下內容:學號,姓名,性別年齡專業。對連結串列做如下處理。輸入一個學號(專業),如果連結串列中的節點包含此學號(專業),則刪去該結點。
#include <iostream> using namespace std; struct student {char name[20];char s_number[10];char gender[3];int age;char major[10];stru
P68——編寫一個程式,讀取一個浮點數,先列印成再列印成如果系統......
#include <stdio.h> int main(void) { float a; printf("enter a floating-point value:"); scanf("%f",&a); printf("fixed-point notation:
在VSCode中,建立一個.vue檔案的模板
具體步驟 1、使用Ctrl + Shift + P召喚出控制檯,然後輸入snippets並回車。 2、接下來輸入vue並選擇,VSCode會自動生成一個vue.json的檔案。這裡就是我們要輸入模板的地方了。 { /* // Place your snippets for Vue
編寫程式,輸入一個年份,判斷該年是否是閏年。如果是閏年,輸出“yes”,否則輸出“no”。 將下面的程式填寫完整。
撰寫人——軟工二班——陳喜平 題目描述 編寫程式,輸入一個年份,判斷該年是否是閏年。如果是閏年,輸出“yes”,否則輸出“no”。 將下面的程式填寫完整。 #include <stdio.h> int main() { int y; while (sc
設計一個具有陣列越界的異常處理的程式,假設計算n個實數的和,用陣列存放。分別採用3種異常處理方式設計程式
Java三種不同的異常處理方法 第一種:不處理,交給jvm處理 package chuki; import java.util.*; public class one { public static void main(String[] args) { int n, sum = 0
使用最基礎的Node,建立一個簡單的node.js應用
對於初學者 , 在我們使用 node.js建立應用時, 首先注意的應該是node.js的組成部分; 1:首先引入 require模組 可以使用require指令來載入node自己帶的node.js模組 ,方便引入;2: 2:建立伺服器: 伺服器可以監聽客戶端請求,從而響應資料
編寫一個程式,指定一個資料夾,能自動計算出其總容量
package filetest;import java.io.File;import java.io.IOException; public class FileEdit { double size=0.0; //計算檔案或資料夾的大小,單位MB public double getSize(File fi
編一個程式,輸入一個字串,將組成字串的所有非英文字母的字元刪除後輸出
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String N=scanner.next
編寫一個程式,對一個整型陣列的元素求和,結果使用全域性變數sum儲存,另外對陣列元素中的奇數求和,結果使用區域性變數sum儲存,在主程式將兩個結果輸出。
#include<iostream> using namespace std; int sum_1(int a[]);//定義計算奇數的和; int main() { int a[]={1,2,3,4,5,6,7,8,9,10};//定義陣列並附初值; int i,sum=0,s
在學習中,有一個比掌握知識更重要的能力
我究竟該學什麼? 我一朋友的公司,專門給創業者提供創業培訓。有一天,他和我聊道, 現在創業者有一個普遍困擾,那就是不知道該學什麼好。 我說:為什麼? 他說:你想啊,創業者累成狗,本來時間就很少,結果創業方法今天出一個還沒弄明白,明天就又出來一個——根本學不過來啊! 我一聽,嘿嘿樂
編寫一段程式,為一個文字檔案的每一行前面新增行號,並以一個新的檔案儲存新增 了行號的文字
檔案使用了fileinput的模組對它進行修改 import fileinput c=fileinput.input('6-2(3).txt',backup='.bak',inplace=1) for line in c: d=fileinput.filelineno()
寫出一個程式,接受一個字串,然後輸出該字串反轉後的字串
輸入描述: 輸入N個字元 輸出描述:輸出該字串反轉後的字串 #include <iostream> #include <string> using namespace std; int main(){ string s ;
寫出一個程式,接受一個由字母和數字組成的字串,和一個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫。
輸入描述:輸入一個有字母和數字以及空格組成的字串,和一個字元。 輸出描述:輸出輸入字串中含有該字元的個數。 #include <string> #include <iostream> using namespace std; int main
根據使用者輸入的資料,建立一個有序連結串列
步驟分析 分析: 建立連結串列是一個從無到有的過程。 空連結串列是有序的 只有一個結點的連結串列是有序的 把一個結點,加入到一個有序連結串列中去,使其仍然有序. 那麼我們就需要一個插入操作 **找插入位置** 從小到大順序 在連結串列中去找到
不使用迴圈,建立一個長度為100的陣列,並使陣列的每個值等於它的下標(待更新)
這是我一道很早接觸的題目,整理過幾次都覺得不夠好。原出題人主要靠對es6語法的掌握,結果知乎大神們五花八門的答案真的重新整理我對JavaScript的認識。 這裡,先記錄長度較短的答案,以後再解釋難度較大的答案。 // 先建立一個長為100的稀疏陣列 let