c语言 头文件可以定义的函数吗_C语言干货(2):main函数当中的void你真的理解吗

刚开始接触C语言的时候,会遇到很多语法、运算符、函数等等问题,可能对于刚刚上手的朋友来说不太能够理解。所以今天通过编写代码,来分析一下每行代码的作用,帮助大家理解。


首先,我们先来写一段简单的代码。代码要求也很简单:创建一个整形变量,并且给其赋值,最后显示这个变量的值。

#include int main (void){    int demo;    demo = 21;    printf("Is ");    printf("Lucy");    printf("I am %d years old  ",demo);  return 0;          }

看了这段代码之后,如果认为屏幕上能够打印东西,说明我们的理解是对的。所以运行一下程序,来看一看结果。

855138c8d4531b353e7289c1731da5e0.png

运行结果

运行之后可以看到程序输出了两行结果:

Is Lucy

I am 21 years old

虽然程序没有问题,但是不理解的朋友可能会有以下几点问题:

1: 和 %d 是什么意思

2:printf 打印了三个,为什么 Is 和 Lucy 合并到一起了

3:main 括号当中的 void 是干嘛用的


先不要着急,我们先来了解一下每行代码的作用。

#include 

告诉编译器,把 stdio.h 这个头文件包含到当前程序当中。头文件中包含了我们的代码所要支持的文件。

int main (void)

函数名main()是一个函数名,int表示main()函数返回一个整数,void表示main不带任何参数。

 int demo;

声明一个变量demo,该变量是一个整形变量。

demo = 21;

给demo赋值,把值21赋值给demo,这样demo就等于是21。

  printf("Is ");    printf("Lucy");

调用 printf() 函数

第一个printf()函数在我们的计算机屏幕上显示 Is ,(is后面我打了一个空格)光标停留在同一行。

第二个printf()函数显示的Lucy 紧跟在is后面,是告诉我们的计算机要另起一行,光标就移动到下一行。

    printf("I am %d years old  ",demo);

同样也是调用 printf() 函数。不同的是,它把 demo 的值 21 一起打印出来,%d就是告诉计算机是以那种形式输出demo的值的。

  return 0;

return 是给调用方返回一个值,这里可以看作是结束main函数所必须的要求

}

右花括号,表示函数体的结束


理解了每行代码之后,回想一下刚刚的几个问题:

1: 和 %d 是什么意思

2:printf 打印了三个,为什么 Is 和 Lucy 合并到一起了

3:main 括号当中的 void 是干嘛用的

第一个问题:

显然 是告诉我们的计算机要另外起一行;

%d 呢是告诉我们的计算机输出的值是以整形的方式输出,%d 呢只是众多的形式中的一种,还有很多像是%f、%a、%p....等等众多形式。这里呢先不说那么多,以后用到再给大家科普,当然网上的资源也很多,大家可以去网上提前科普一下。

第二个问题:

其实第二个问题在第一个问题的时候就已经给大家解答了。

执行第一个 printf 的时候,因为 Is 的后面没有加 那么光标默认在第一行;

到执行到第二个 printf 的时候 Lucy 就直接跟在 Is 后面了;

到执行到第三个 printf 的时候时,因为 Lucy 后面加了一个 ,所以光标到第二行,所以第三个 printf 的内容是在第二行打印出来的。

第三个问题 *

这里打个星号,是因为这个问题对刚刚开始学的朋友来说会有一些难理解。如果你能够理解,就忽略这个 * 号。

void 其实就是表示 main() 函数的参数是空的,就是没有的,如果你给 main() 函数传递参数的话,那么编译就会出错。

我们都知道 return 是一个返回函数,这里给我们的 return 返回的值是0,就是返回的是空的,所以这就是为什么在程序的最后面要加一个 return 0 ;的原因了。

当然,如果没有 void 的话,不管你传什么参数进去,都不会报错的。只不过就是不会处理这个参数而已。


那么本期的C语言干货就先分享到这里,欢迎大家一起来探讨。

我是Lucy,喜欢分享实用的干货。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
做如下两个模型的石子合并,如下模型石子都不能移动出列,且合并都仅发生在相邻两堆石子中: (1)第一个模型:一行排列且相邻合并 有n堆石子形成一行(a1,a2,…,an,ai为第i堆石子个数),相邻两堆可合并,合并的分值为新堆的石子数。求合并为一堆的最低得分和最高得分。 (2)第二个模型:一圈排列且相邻合并 有n堆石子形成首位相连的一个环形(a1,a2,…,an,ai为第i堆石子个数,an和a1相邻),相邻两堆可合并,合并的分值为新堆的石子数。求合并为一堆的最低得分和最高得分。 例如4堆石子,每堆石子个数:9 4 4 5 若排成一行,最小分值:(4+4)+(8+5)+(9+13)=43,最大分值:(9+4)+(13+4)+(17+5)=52。 若排成圈状,最小分值:(4+4)+(8+5)+(9+13)=43,最大分值:(9+5)+(14+4)+(18+4)=54。 此题以第一模型的最低得分为例,很多同学想着采用总是从最小的相邻两堆下手的思想,最后获得的也就是最低得分。但这个贪心策略是不对的。 如下反例: 石子:9 4 6 1 5 贪心策略: 9 4 6 6 6 9 10 6 10 9 16 16 25 25 得分共计:6+10+16+25=57 但9 4 6 1 5 若如下方式合并: 13 6 1 5 13 13 6 6 6 13 12 12 25 25 13+6+12+25=56 或 9 4 6 6 6 9 4 12 12 13 12 13 25 25 6+12+13+25=56 后两种方式合并出的56都比贪心策略的57来的更低,因为总选择最小的相邻两堆去合并,并不能保证后续每步都可以最小,也许这轮最小导致后续几轮分值较大。 Input 两行。第一行n,第二行a1 a2 … an,每个ai(1<=i<=n)表示第i堆石子的个数,n<=100 Output 两行。第一行是第一个模型的最低得分和最高得分,中间空格相连,第二行是第二个模型的最低得分和最高得分,中间空格相连。 Sample Input 4 9 4 4 5 Sample Output 43 52 43 54 Hint 第一个石子合并模型,和书上3.1节的矩阵连乘问题类似. 假设m[i,j]为合并石子ai…aj, 1≤i≤j≤n,所得到的最小得分,若没有“合并”这个动作,则为0。原问题所求的合并最小值即为m[1,n]。 递推公式如下,其中min表示求最小,sum表示求和. (1) m[i,j]=0, if i=j (2) m[i,j]=min{m[i,k]+m[k+1][j] | for i<=k<j} + sum{a(t) | for i<=t<=j}, if i<j 至于求最大值完全同理. 至于第二个石子合并的环行模型,完全可以转化为第一个模型来求解.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值