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")//最后加个换行,看着终端的新提示符被挤到一旁去了挺不爽的。
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)