
下面这个C语言程序怎么理解?
#include<stdio.h>#defineH(a,b)a*bvoidmain(){intc;c=H(20+6,8-4);printf("%d\n",c);}...
#include <stdio.h>
#define H(a,b) a*b
void main()
{
int c;
c=H(20+6,8-4);
printf("%d\n",c);
} 展开
#define H(a,b) a*b
void main()
{
int c;
c=H(20+6,8-4);
printf("%d\n",c);
} 展开
展开全部
请在此输入您的回答
#include <string.h>
#define N 100
int getline(char s[],int lim)
{
int c,i;
for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
/*i
为计数作用。当i小于数组容量上限-1(最后一个值用于存储空字符),且从键盘读入的字符c不是回车或者无资料可读时(EOF),执行循环,否则退出
*/
s[i] = c; // 将键盘读入的字符c赋值给数组s[i].
/*** 这一段作用为判断最后一个读入的值是什么****/
if(c == '\n') // 读到回车时将回车赋值给s[i];然后i进行一个自增操作
{
s[i] = c;
i++;
}
s[i] = '\0'; // 将空字符'\0'赋值给数组s[i]。这样是表明字符序列到这边已经结束了。
return i; // 返回i的数值,此时的i的数值便是数组中字符的个数。(注意这里的字符个数是算上回车键的)
}
int main()
{
char s[N]; // 定义一个字符数组,长度不超过100个元素。
printf("%d", getline(s,N));
return 0;
}
这边代码写的好蛋疼。。。这边帮你把整个程序注释好了,还帮你写了个完整的测试程序,你可以直接copy过去执行看一下。
本回答由提问者推荐
举报| 评论
0 0
其他回答
不知道你看不懂的程度是多少。。。。。
函数接收一个字符数组的起始地址s,和一个整型参数lim用来指出数组最大长度-1
for循环用于给这个字符数组逐一赋值,直到到达数组最大长度-1(因为数组最后一个位置要用于存储'\0'标记字符串结尾)或者得到的值为EOF(windows下应该为Ctrl+Z)或者得到一个换行
然后判断得到的最后一个值是什么,比如说你输入的字符串长度没到限定,然后输入了换行符使得for循环终止了,那么判断最后得到的c,就会发现是一个换行符,那么我们把换行符尾插入数组,否则,不论是得到EOF而结束还是达到最大长度-1结束,都尾插一个'\0'进数组。
return i返回值即此时已赋值过的数组下标(这个i下标之前的数组元素都在此函数中赋过值)
#include <string.h>
#define N 100
int getline(char s[],int lim)
{
int c,i;
for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
/*i
为计数作用。当i小于数组容量上限-1(最后一个值用于存储空字符),且从键盘读入的字符c不是回车或者无资料可读时(EOF),执行循环,否则退出
*/
s[i] = c; // 将键盘读入的字符c赋值给数组s[i].
/*** 这一段作用为判断最后一个读入的值是什么****/
if(c == '\n') // 读到回车时将回车赋值给s[i];然后i进行一个自增操作
{
s[i] = c;
i++;
}
s[i] = '\0'; // 将空字符'\0'赋值给数组s[i]。这样是表明字符序列到这边已经结束了。
return i; // 返回i的数值,此时的i的数值便是数组中字符的个数。(注意这里的字符个数是算上回车键的)
}
int main()
{
char s[N]; // 定义一个字符数组,长度不超过100个元素。
printf("%d", getline(s,N));
return 0;
}
这边代码写的好蛋疼。。。这边帮你把整个程序注释好了,还帮你写了个完整的测试程序,你可以直接copy过去执行看一下。
本回答由提问者推荐
举报| 评论
0 0
其他回答
不知道你看不懂的程度是多少。。。。。
函数接收一个字符数组的起始地址s,和一个整型参数lim用来指出数组最大长度-1
for循环用于给这个字符数组逐一赋值,直到到达数组最大长度-1(因为数组最后一个位置要用于存储'\0'标记字符串结尾)或者得到的值为EOF(windows下应该为Ctrl+Z)或者得到一个换行
然后判断得到的最后一个值是什么,比如说你输入的字符串长度没到限定,然后输入了换行符使得for循环终止了,那么判断最后得到的c,就会发现是一个换行符,那么我们把换行符尾插入数组,否则,不论是得到EOF而结束还是达到最大长度-1结束,都尾插一个'\0'进数组。
return i返回值即此时已赋值过的数组下标(这个i下标之前的数组元素都在此函数中赋过值)
展开全部
用20+6替换上面的a,用8-4替换上面的b,可得
H(20+6,8-4) 为 20+6*8-4 也就是64
最后打印出来的c就是64
H(20+6,8-4) 为 20+6*8-4 也就是64
最后打印出来的c就是64
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-12-29 · 知道合伙人教育行家

知道合伙人教育行家
采纳数:17564
获赞数:65177
爱电脑、爱数学、爱音乐; 熟悉VB、C/C++、JAVA; EXCEL与VBA有所研究…… 数学,一些会,一些被忘却……
向TA提问 私信TA
关注

展开全部
一般不建议用宏定义来模拟函数功能,因为容易出错,宏定义在执行时,会直接替换,不会加上括号:
H(20+6,8-4)=20+6*8-4=20+48-4=64
c的值是64
H(20+6,8-4)=20+6*8-4=20+48-4=64
c的值是64
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询