想用C语言写个开机自动最小化启动的脚本,请教源码。

想用C语言写个开机自动最小化启动的脚本,请教源码。,第1张

用C语言呀,

Private Sub Form_Load() 这是VB的语法呀.......

用C语言写的程序都带有一个类DOS窗口,所以要最小化启动只能调用系统功能,

这系统功能要用到windowsAPI,你应该是初学者吧,难为你了..

如果你只是想开机悄悄运行一个程序可以这样:

int main()

{

system(" start C:\\Program Files\\QQ.exe")

//注意\\这个转义,start可以让程序快速返回.

//不然QQ.exe不停止运行,system()这个函数就卡到死

}

用gcc编译器(MINGW)这样编译:

gcc -mwindows main.c

这样编译的程序没有哪个类DOS的窗口!!!

生成的a.exe放到

C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\

就行了.

#include&ltstdio.h&gt

#include&ltmath.h&gt

int max(int x,int y)

{

if(x&gty)

return x

else

return y

}

int min(int x,int y)

{

if(x&lty)

return x

else

return y

}

int main()

{

int x,y,a,b,c,d,e,f,g,h,i,t,o,p,lprintf("输入任意五个整数:\n")scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)

f=max(a,b)

g=max(f,c)

h=max(g,d)

i=max(h,e)

t=min(a,b)

o=min(t,c)

p=min(o,d)

l=min(p,e)

printf("max=%d,min=%d\n",i,l)

}

扩展资料:

return

C++的关键字,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值.

说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助.

很多人甚至市面上的一些书籍,都使用了void main(),其实这是错误的。C/C++中从来没有定义过void main()。

C++之父Bjarne Stroustrup在他的主页上的FAQ中明确地写着The definition void main(){/*...*/}is not and never has been C++,

nor has it even been C.(void main()从来就不存在于C++或者C)。下面我分别说一下C和C++标准中对main函数的定义。

1.C

在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的经典巨著The C programming Language 2e(《C程序设计语言第二版》)用的就是main()。不过在最新的C99标准中,只有以下两种定义方式是正确的:

int main(void)

int main(int argc,char*argv[])

(参考资料:ISO/IEC 9899:1999(E)Programming languages—C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char*argv[]可以写成char**argv;argv和argc可以改成别的变量名(如intval和charval),不过一定要符合变量的命名规则。

如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc,char*argv[])。

main函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如 *** 作系统)。

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。

注意,vc6不会在目标文件中加入return 0,大概是因为vc6是98年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return语句了吧!不过,gcc3.2(Linux下的C编译器)会在生成的目标文件中加入return 0。

参考资料:

百度百科——return(C语言语句)

Ubuntu下访问冲突(Access Violation,比如数组下标越界,指针非法访问等)是报告"段错误"。这里大多数人都是用windows,很少会用Ubuntu的,我也是最近才学会在终端里用gcc编程序,并且故意写了个非法访问指针的程序,才知道“段错误”和windows下的访问冲突意思差不多的。

楼主,你的程序中确实存在隐患,不过好在被你的测试数据给发现了。变量r和u定义后没有初始化,导致它们可能具有非常大的值,而循环体也不能保证一定对它们重新赋值,这样最后用它们来做数组的下标很可能要越界的。

你的第二组数据,第一个是5,我们可以断定它就是最大值了,这样循环体中的else if的字句始终不会执行,u一直没有赋值,后面a[u]=e直接用u的值作下标是不合适的。

其实楼主在循环开始前对max和min进行了初始化,建议你在这里先把u和r都赋为0,用它们当数组的下标,像min=a[r],以和你后面的风格一致。这样应该可以对所有合法数据通过了吧。

今天又看了一下,发觉这里面还有一个问题,楼主可以试试5,1,3,4,2,1就被覆盖掉了。我在你最后的两次交换之间加了个判断。这是改后的代码。

#include<stdio.h>

main()

{

int a[9],n,i,min,r,max,u,e//n表示输入数据的个数(小于10),r表示最小值的下标,u表示最大值的下标,e用于换值。

scanf("%d",&n)

scanf("%d",&a[0])

min=a[0]

r=0

max=a[0]

u=0

for(i=1i<ni++)

{

scanf("%d",&a[i])

if(min>a[i])

{

min=a[i]

r=i

}//挨个搜寻最小值,并记下下标

else if(max<a[i])

{

max=a[i]

u=i

} //挨个搜寻最大值,并记下下标

}//如果最后一个else什么也不做则不必带,C语言不要求if必须带else。

e=a[0]

a[0]=min

a[r]=e//最小值和第一个数交换

if(e==max)//如果原来的第一个数恰好是最大值,则更新前面循环所记录的最大值对应的下标u

u=r

e=a[n-1]

a[n-1]=max

a[u]=e//最大值和最后一个交换

for(i=0i<=n-1i++)

printf("%d ",a[i])//输出交换后

printf("\n")//最后加个换行,看着终端的新提示符被挤到一旁去了挺不爽的。

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11797064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存