基本函数问题以及变量定义问题

第一题:
我写在注释里了,那个n和m的含义我不理解,为什么要有n?n++要干嘛?返回n干嘛?
main函数里的n和Sub函数里的n有关系吗?还是只是同名而已,两者并没有关系。
m又是干啥用的?

#include <stdio.h>
int Sub(int k,int n)    //这个函数为什么要有n?
{
    int a1,a2;
    a2=k/10;   
    a1=k-a2*10; 
    if((k%3==0&&a2==5)||(k%3==0&&a1==5)) 
    {
        printf("%4d",k);   
        n++;                 //这里n++是要干嘛?
        return n;           //返回n又是干嘛?
    }
    else
        return -1;
}
 
int main()
{
    int n=0,k,m;               
    for(k=10;k<100;k++)
    {
        m=Sub(k,n);
       
        if(m!=-1)
            {
                n=m;         //这个n又是什么?他和函数里的n有关系吗?
            }
    }
  
    printf("\nn=%d\n",n);
    return 0;
}

第二题:
下列变量定义合法的是:

img


答案为C,那么A,B,D哪里不合法呢?
而且问下C真的是对的吗?十六进制不是没有L吗?

谢谢!

第一题,其实你把n写成全局变量的话,就没这个问题了。
目的其实就是sub函数每找到一个符合条件的输入,全局变量+1.
但是全局变量用多了会造成混乱,所以用了这么个办法,把当前的n先传入函数,加1之后再return回来
其实有个更好的办法,不要直接在sub里累加,返回一个bool值,在调用的地方判断,如果返回true就让n++,这样更好,高内聚,低耦合
第二题,答案C
A:变量不可以以数字开头
B:e的指数必须是整数,不可以是2.5
D:底数必须是1-10之间的数,不可以写.1