这个C程序是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个C程序是啥意思相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
main(int argc,char *argv[])

char S[100];
gets(S);
printf("\nInput S=%s",S);
printf("\n0 para=%s",argv[0]);
printf("\n1 para=%s",argv[1]);
printf("\n2 para=%s",argv[2]);
printf("\n3 para=%s",argv[3]);

请讲具体一些 新手 不太明白 谢谢了
各个符号的意义也麻烦说下 向para %s等

char S[100]; //向内存申请大小为一个字节的连续空间100个!
gets(S); //由用户向S中输入字符串。长度不能大于100,否则溢出//
printf("\nInput S=%s",S);
//输出你刚刚输入的字符串。其中 \n 是转义字符在屏幕上回车换行,Input S= 这里原样输出,其中%s是输出格式控制,以字符串的形式输出S..
printf("\n0 para=%s",argv[0]);
//其中 \n 是转义字符在屏幕上回车换行,0 para= 这里原样输出,其中%s是输出格式控制,以字符串的形式输出argv[0] ,
这个涉及到main函数的参数,你可以直接翻下main函数的资料,这里在没有除开S没有的输入的话argv[0] 这个字符串将显示当前生成的.exe文件所在的路径。。。
说实话,这个程序好像没有写完,没有返回值,也没有什么实在的意义。。。。。。后面两句跟前面类似。。就不解释了。。

这里面的知识点有:
数组的定义,gets()字符串输入函数,printf()这个函数的格式。以及转义字符的含义。。。main函数的类型和参数的意义。。。
.建议楼主多看看基础......
参考技术A main 是入口函数 既然是函数就需要表明 返回类型 你没写
程序是 定义个 字符数组 大小 100
获取输入流中的字符
打印字符串
参考技术B main() /*主函数*/

SP=0x30;
while(1) LedDisplay(); /*调用显示函数循环读取并显示测得的内容*/


uchar ReadADC(void) /*读取ADC单次转换结果*/

uchar x;

ADCPORT=ACC; /*启动ADC*/
ADCEOC=1; /*读取前先写1*/
while(ADCEOC==0); /*等待ADC转换结束*/
x=ADCPORT; /*读取ADC转换结果*/

return(x);


uint ADC_DP(void) /*ADC采集数据处理*/

uchar m1,m2,m3,m4,m5,m6,m7,max,min;
float n;
uint y;

m1=ReadADC(); /*读取ADC转换结果7次*/
m2=ReadADC();
m3=ReadADC();
m4=ReadADC();
m5=ReadADC();
m6=ReadADC();
m7=ReadADC();

max=m1>m2 ? m1:m2; /*准备去掉一个最大值*/
max=max>m3 ? max:m3;
max=max>m4 ? max:m4;
max=max>m5 ? max:m5;
max=max>m6 ? max:m6;
max=max>m7 ? max:m7;

min=m1<m2 ? m1:m2; /*准备去掉一个最小值*/
min=min<m3 ? min:m3;
min=min<m4 ? min:m4;
min=min<m5 ? min:m5;
min=min<m6 ? min:m6;
min=min<m7 ? min:m7;

n=(m1+m2+m3+m4+m5+m6+m7-max-min)/5; /*去掉最值,再取平均值*/
AC_DC=1; /*读取前先写1,判断交直流*/
if(AC_DC==1) n=(5*n_trans*n)/(255*mod_rms); /*交流换算公式,浮点计算*/
else n=(5*n_trans*n)/255; /*直流换算公式,浮点计算*/
y=n; /*浮点结果取整*/

/*这个函数主要是实现数字滤波算法,滤去干扰得到较为准确稳定的测量结果,并使用变量y返回*/
return(y);


void LedDisplay(void) /*LED显示*/

/*这个是主要函数*/
uint m;
uchar i;
m=ADC_DP; /*取ADC采集数据*/
m=m%1000; /*防止千位以上错误数据*/
i=(m-m%100)/100; /*取百位转换成LED代码*/
LedBuf[0]=i; /*填写led显示缓冲区*/
m=m%100;
i=(m-m%10)/10; /*取十位转换成LED代码*/
LedBuf[1]=i;
i=m%10; /*取个位转换成LED代码*/
LedBuf[2]=i;

if(LedBuf[0]==0) P1=0x1f; /*最高位为0不显示*/
else P1=0x10|LedBuf[0]; /*P1.4=1,百位LED控制线*/

if(LedBuf[0]==0&&LedBuf[1]==0) P1=0x2f; /*前2位全为0不显示*/
else P1=0x20|LedBuf[1]; /*P1.5=1,十位LED控制线*/

P1=0x40|LedBuf[2]; /*P1.6=1,个位LED控制线*/

/*这个函数好像不完整,只是置了几个控制位,并没有7段编码转换和显示数字部分,如果全部程序就是这样的话好像不能正确工作*/
/*LedBuf好像没有定义,原文中标为LED代码转换的语句也仅仅是取余操作没有实际转,实际转换应该是查LED7段码表*/
/*实现显示至少应该有显示数据输出,这些语句程序中根本没有*/

JAVA里面方法回调是啥意思

所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。

下面举个通俗的例子:
某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

通过上面个人感觉到回调更多的应用就是结合异步。比如:Ajax中js通过组件和服务器的异步通信。
参考技术A

回调只是个概念,就是把你的接口对应的实现类的一个实例当成一个参数传递给一个函数调用,那个函数处理过程中会调用你的这个接口中的方法。


在下面这个方法中,formatter 是一个回调,因为 receiveMessage  本来是被你调用的,但它回过头来调用你提供的 MsgFormatter 方法,这就是概念。


byte[] buffer = ...;

Msg receiveMessage(SocketChannel channel, MsgFormatter formatter) 
       // 读取网络数据,并请求 formatter 来识别它是什么格式,如果是某种消息格式的一个完整的报文条目(比如一个完整的QQ消息)就返回它,否则返回 null 并缓存部分不完整的内容并在下一次得到一条完整消息时再返回它。
       
       buffer = getBytes(channel);
       // 读取到部分字节后询问 formatter 来猜测一下它的格式,这是否一条完整消息以及消息类型。
       boolean fullyReceived = formatter.guessFormat(buffer);
       if (fullyReceived) 
          Msg msg = formatter.decode(buffer);
          // 消息已经处理了,清空缓存的部分内容,下次重新接收。
          buffer = ... ;
          return msg;
        else 
           return null;
      

参考技术B

注明:此答案为转载,出处:百度知道

====================================

比如你写了两个类A和B,并且各生成一个对应的实例a 和b ,在a 中有一个方法fa( 此方法只负责生成两个随机数)要调用b中的一个方法fb(此方法对两个数进行求各) 来进行求和,fb求得结果后要调用a的另一个方法ffa(此方法用于显示求得的结果),这时ffa就叫作回调函数,(反回来调用一下的意思)
为什么要这么麻烦呢,如果fb直接返回结果不好吗,试想如果fb执行时间较长,那么fa就会一直等结果而导致fa不往下执行了,此时如果用回调这个功能实现,由于 回调函数一般是由系统异步调用的,方法fa调用fb后就不用等而直接往下执行,比如可以再生成两随机数给fb,fb会依次得到结果后通过回调机制来调用ffa显示出来,其实就是为实现生成随机数和计算随机数的异步执行。好象fa和fb是两个独立执行的线程,提高程序效率。

异步调用是回调函数的一种典型应用

正是因为回调函数大多数情况下(98%的比例)最常用于异步的多线程程序中,所以大家经常认为只要用到回调函数了则程序就是异步的.这个理解不对

fa ,fb方法分别运行于两个线程中才能实现异步工作,因为回调函数只是实现异步调用的手段, 线程间通信(比如要进行线程间同步)时程序员常通过在一个线程中引发事件来通知另一线程响应,而引发事件其实就是一种调用回调函数的过程.由此可以理解VB的事件编程模式下我们写的那些按钮点击事件中的代码其实就是回调函数的实现代码

参考技术C 有一天小王遇到一个很难的问题,问题是“1 + 1 =
?”,就打电话问小李,小李一下子也不知道,就跟小王说,等我办完手上的事情,就去想想答案,小王也不会傻傻的拿着电话去等小李的答案吧,于是小王就对小李说,我还要去逛街,你知道了答案就打我电话告诉我,于是挂了电话,自己办自己的事情,过了一个小时,小李打了小王的电话,告诉他答案是2
参考技术D '

以上是关于这个C程序是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

c语言中宏定义是啥意思?

c语言sleep用法是啥?

Web前端c++是啥意思?

如下c程序 while(*p)是啥意思?

C语言程序设计中的#include<stdio.h>是啥意思?

JAVA里面方法回调是啥意思