C语言函数作业! 重赏!! 按要求啊!! 50分!

C语言函数作业! 重赏!! 按要求啊!! 50分!,第1张

#include<stdioh>

int work(int p,int n)

{int i,j,s=0;

 for(i=0;i<n;i++)

   for(j=0;j<n;j++)

     if(i==j||i+j==n-1)(p+in+j)=0;

       else s+=(p+in+j);

 return s;      

}

int main()

{int n=4,i,j,s;

 int a[n][n];

 for(i=0;i<n;i++)

   for(j=0;j<n;j++)

     scanf("%d",&a[i][j]);

 s=work(a[0],n);

 printf("处理后的a数组:\n");

 for(i=0;i<n;i++)

 { for(j=0;j<n;j++)

     printf("%4d",a[i][j]);

   printf("\n");

 }

 printf("处理后的数组元素之和=%d\n",s); 

return 0;

}

递归调用。

在两个putchar之间有个递归调用receiv();

这里以输入A!为例。ABC!同理。

调用receiv,输入A,先输出一个A,在输出第二个A之前,先调用了receiv

输入!,输出!,判断为!,不调用receiv,再输出一个!。

receiv执行结束。返回上一个receiv,输出A。

所以最后结果才会是这样。

请仔细看:

首先看一下程序的逻辑(虽然貌似题主应该不是在这一块有问题:

关于ascii码的解释:

首先得知道每个字符和数值的对应关系(图不清晰可看戳这里:ascii编码对应表

好了,现在看程序中的第一个if语句,在用大于、小于这些镇绝悔运算比较符比较char的时候,会自动转换为整数比较,也就是说‘0’会转换成48,‘1’转换成49……以此类推,最后是‘9’转换成57,你会发现把这些char减去48就会得到它们各自相对应的整数数值,这就是第一个if里面减去48的目的。同理,接下来的else-if语句,‘A’到‘F’也会转换成整数数值,具体对应的数值可以参看ascii表,一样的道理减去‘A’然后加10的目的也是转换成数值,因为在大于10的进制下,A代表10,B代表11……以此类推,因为这个程序最高就16进制了,所以判断到F就可以了。

然后我们来看进制的解释:

所谓进制,其实就是组合数字的方式,理解了这一点就很好说了。比如说10进制,为什么198等于198(好像很傻一问题)?其实是因宏并为在十进制下,198 (10) = 1 10^2 9 10^1 8 10^0 = 198(好像是这么回事,(。ì _ í。)),同一个数字,放在不同的位置,它所代表的分量也不一样,即组合数字的方式会影响数字的值,1后面还有2个数字,所以这个1实际上是1 10^2 = 100,而不是1,其它位置的数字同理,然后把这些值加起来,就得到了整个数字所代表的最终的值,因此我们才有了 198 = 198(好像很有道理)。

但是,198也可能不等于198,什么时候不等于呢?在不同的进制下。比如说假如我们的这个198是在16进制下的198,那么 198 (16) = 1 16^2 9 16^1 8 16^0 = 408 (10) = 408。

为什么会产生这种差别呢?因为16进制下的那个1代表的分量是1 16^2了,而不是1 10^2了,同理,在其它进制下只需要把乘的数字换成对应的进制的数就好了,比如在9进制下那个1就是1 9^2等等。

这样一来上面程序里面的for语句就好理解了,之所以用for是因为要算出次方(这个应该不用解释),一个数要乘的次方是它后面跟着的数字的个数,所以是“j = 0; j < len - 1”。

然后把这些值加起来,就得到这个数字对应的十进制下的数值,也就完成了最终的转换。

题主可以随便写些不同进制下的数字,然后自己算出十进制下对应的数值,和网站上得出的结果比较比较,这样也可以加深对进制的理解,同时提高计算能力。

戳这里:在线进制转换

这里给出了一御正个链接,这种网页到处都是,随便搜一下就可以找到。

如果我的回答可以帮到您,请采纳哦!

#include <stdioh>

#include <stringh>

char InsertSpace(char str)

{

int count, index;

char letter;

char buffer;

count = strlen(str);

buffer = new char(2count);

for (index = 0; index < count; index++)

{

buffer[2index] = str[index];

buffer[2index + 1] = ' ';

}

buffer[2count-1] = '\0';

return buffer;

}

void main()

{

char str[50];

printf("请输入一个字符串:");

scanf("%s", str);

getchar();

printf("插入空格的结果为:%s", InsertSpace(str));

getchar();

}

43 函数的调用与参数

如果一个函数要使用参数,它就必须定义接受参数值的变量。

431 形式参数与实际参数

函数定义时填入的参数我们称之为形式参数,简称形参,它们同函数内部的局部变量作用相同。形参的定义是在函数名之后和函数开始的花括号之前。

调用时填入的参数,我们称之为实际参数,简称实参。

必须确认所定义的形参与调用函数的实际参数类型一致,同时还要保证在调用时形参与实参的个数出现的次序也要一一对应。如果不一致,将产生意料不到的结果。与许多其它高级语言不同,(是健壮的,它总要做一些甚至你不希望的事情,几乎没有运行时错误检查,完全没有范围检测。作为程序员,必须小心行事以保证不发生错误,安全运行。

432 赋值调用与引用调用

一般说来,有两种方法可以把参数传递给函数。第一种叫做“赋值调用”(call by value),这种方法是把参数的值复制到函数的形式参数中。这样,函数中的形式参数的任何变化不会影响到调用时所使用的变量。

把参数传递给函数的第二种方法是“引用调用”(call by reference)。这种方法是把参数的地址复制给形式参数,在函数中,这个地址用来访问调用中所使用的实际参数。这意味着,形式参数的变化会影响调用时所使用的那个变量(详细内容请参见后续章节)。

除少数情况外,C语言使用赋值调用来传递参数。这意味着,一般不能改变调用时所用变量的值。请看例4 - 9。

[例4 - 9]

main ( )

{

int t =10;

printf("%d %d ",sqr(t),t); / sqr(t)是函数调用,t是实参 /

}

int sqr(x) / 函数定义,x是形式参数 /

int x;

{

x = x x;

return (x);

}

在这个例子里,传递给函数sqr( )的参数值是复制给形式参数x的,当赋值语句x = x x执行时,仅修改局部变量x。用于调用sqr( )的变量t,仍然保持着值10。

执行程序:

100 10

切记,传给函数的只是参数值的复制品。所有发生在函数内部的变化均无法影响调用时使用的变量。

44 递归

C语言函数可以自我调用。如果函数内部一个语句调用了函数自己,则称这个函数是“递归”。递归是以自身定义的过程。也可称为“循环定义”。

递归的例子很多。例如定义整数的递归方法是用数字1,2,3,4,5,6,7,8,9加上或减去一个整数。例如,数字1 5是7 + 8;数字2 1是9 + 1 2; 数字1 2是9 + 3。

一种可递归的计算机语言,它的函数能够自己调用自己。一个简单的例子就是计算整数阶乘的函数factor( )数N的阶乘是1到N之间所有数字的乘积。例如3的阶乘是1×2×3,即是6。

factor( )和其等效函数fact( )如例4 - 1 0所示。

[例4 - 1 0 ]

factor(n) / 递归调用方法 /

int n;

{

int answer;

if (n==1)

return (1);

answer=factor(n-1) n; / 函数自身调用 /

return(answer);

}

[例4 - 11 ]

fact(n) / 非递归方法 /

int n;

{

int t,a n s w e r;

answer = 1;

for (t=1; t < = n; t ++)

answer = answer t;

return(answer);

}

非递归函数fact( )的执行应该是易于理解的。它应用一个从1开始到指定数值结束的循环。

在循环中,用“变化”的乘积依次去乘每个数。

factor( )的递归执行比fact( )稍复杂。当用参数1调用factor( )时,函数返回1;除此之外的其它值调用将返回factor(n-1) n这个乘积。为了求出这个表达式的值,用( n - 1)调用factor( )一直到n等于1,调用开始返回。

计算2的阶乘时对factor( )的首次调用引起了以参数1对factor( )的第二次调用。这次调用返回1,然后被2乘(n的初始值),答案是2(把printf( )语句插入到factor ( )中,察看各级调用及其中间答案,是很有趣的)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12186208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存