‘壹’ c语言函数问题
#include<stdio.h>
#include<string.h>
#defineMAXS10
voidShift(chars[]);
voidGetString(chars[]);/*实现细节在此不表*/
intmain()
{
chars[MAXS];
GetString(s);
Shift(s);
printf("%s ",s);
return0;
}
//下面是修改过的答案及原因
voidGetString(chars[])
{
scanf("%s",s);
return;//void也写上return比较好
}
voidShift(chars[])
{
inti,t,d=0,e;
chara[100],b[100],c[100];
memset(a,0,sizeof(a));//abc数组都没有初始化,里面的数据不能保证是正常的
memset(b,0,sizeof(b));//可能在你的电脑上数据正常,放在评测机上就错了
memset(c,0,sizeof(c));
e=strlen(s);
for(i=0;i<e;i++){
if(i<=2){
a[i]=s[i];
}
if(i>2){
b[d]=s[i];
d++;
}
}
d=0;
t=strlen(b);
for(i=0;i<e;i++){
if(i<t){
s[i]=b[i];
//c[i]=b[i];
}
if(i>=t){
s[i]=a[d];
//c[i]=a[d];
d++;
}
}
// puts(c);
return;//void也写上return比较好
}
‘贰’ c语言函数习题
1、 函数调用:strcat(strcpy(str1,str2),str3)的功能是________。
C) 将串str2复制到串str1中后再将串str3连接到串str1之后
2、 若有以下调用语句,则正确的fun函数首部是
main()
{ ∶
∶
int a;float x;
∶
∶
fun(x,a);
∶
∶
}
B) void fun(float a,int x)
3、 有如下程序
int func(int a,int b)
{ return(a+b); }
main()
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r); }
该程序的输出结果是__________。
D) 15
4、 函数pi的功能是根据以下近似公式求π值:
(π*π)/6=1+1/(2*2)+1/(3*3)+……+1/(n*n)
请你在下面程序中的划线部分填入________,完成求π的功能。
#include "math.h"
double pi(long n)
{ double s=0.0; long i;
for(i=1;i<=n;i++) s=s+________;
return (sqrt(6*s)); }
A) 1.0/i/i
5、 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递
方式是________。
B) 单向值传递
6、 对于C语言的函数,下列叙述中正确的是________。
A) 函数的定义不能嵌套,但函数调用可以嵌套 (这答案有待斟酌)
7、 函数f的功能是:测定字符串的长度,空白处应填入________。
int f(char s[ ])
{ int i=0;
while(s[i]!='\0') i++;
return (________); }
main( )
{ printf("%d\n",f("goodbye!")); }
B) i
8、 若主调用函数类型为double,被调用函数定义中没有进行函数类型
说明,而return语句中的表达式类型为float型,则被调函数返回
值的类型是________。
C) double 型
9、 以下叙述中,错误的是________。
D) 形参可以是常量、变量或表达式
10、 以下叙述中,不正确的是________。
B) 在main函数体内定义的变量是全局变量
‘叁’ 纠结很久的C语言函数题~~求好心高手详细点拨!!!追加悬赏!!
输出答案为8
此为求斐波那契数列第n项的程序
首先值得注意的是fun函数有一个形参为指针变量,也就是地址传递,这种情况下调用的程序如果对形参进行了修改,返回后相应变量的值也会被修改。这个函数就是利用了指针的这一特性。这个函数虽然是void型不返回数值,却用*s这个指针变量传递着运算结果。
注意*s为指针运算,表示对s所指的变量进行存取等运算操作。
if
(n==1||n==2)
*s=1;表示这个数列第一项
第二项均为1
接下来的else语句中fun(n-1,&f1);表示将数列第n-1项运算的结果保存在f1变量中,fun(n-2,&f2);表示将数列第n-2项运算的结果保存在f2变量中,也许你会疑惑:你怎么知道这个形参是用来传递运算结果的?接下来的一句话说明了一切:*s=f1+f2;也就是说,这里数列的第n项为前面两项的数值和。
综上,此为求斐波那契数列第n项的程序
‘肆’ C语言函数问题,选择题,答案及选择理由,求详细解释。
A return 'A';
这个是可以的,因为char 类型在c语言里是可以与int 计算的。
B return 3.14;
这个是不可以的,答案就选B.
3.14是浮点常量。不是int,类型不匹配。
C return 0
这个是可以的,0 符合int类型数据输出。
D return (int)3.14;
这个也是可以的,int对3.14 进行了强制类型转化,把浮点类型转为int类型
‘伍’ c语言关于函数的选择题,请详细解释一下吧
A、main函数是不能被任何函数调用的,所以a错了
B、函数可以单独编译,每个函数都能单独写成一个文件,所以B对的
C、函数都要通过main函数的调用才能正确的运行,main函数是一个程序的唯一入口
D、函数是不可以嵌套使用的
‘陆’ c语言的函数题目
函数参数值传递是单向的,如果你想通过函数改变参数值,可以使用C++里面的引用调用,相当于你给结构体变量a取了个小名,或者是用传递地址的方式来达到你想要的效果
(1)typedef struct{int b,p;}A;
void f(A &c) /* 注意:&为引用调用符号*/
{int j;
c.b+=1;c.p+=2;
}
main()
{ int i;
A a={1,2};
f(a);
printf("%d,%d\n",a.b,a.p); }
(2)typedef struct{int b,p;}A;
void f(A *c) /* 定义A类型的指针c,这时会把结构体a的地址传递给c*/
{int j;
(*c).b+=1;(*c).p+=2;
}
main()
{ int i;
A a={1,2};
f(&a); /*取结构体变量a的地址*/
printf("%d,%d\n",a.b,a.p); }
‘柒’ c语言函数的题
fun是函数名,
给的题有错误,return写错,分号又少了
float
fun(int
x,
int
y)
{return
(x+y);}
void
main()
{int
a=2,
b=5,
c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
float是函数返回值类型,fun函数意思是把两个整数相加转换成float类型返回
fun(a+c,b)=15.000000
(int)fun(a+c,b)=15
fun((int)fun(a+c,b),a-c)即
fun(15,-6)=9.000000
%3.0f是显示格式
3表示整数部分保留3位,超过3位按实际位数显示,少于3位补空格
0表示显示的小数部分,0即表示不显示小数
所以答案是
9
9前面有两个空格
如果%3.2的话就是
9.00
够详细了吧^_^
‘捌’ C语言函数填空题,最好能稍微讲讲为啥填,答案
您好,很高兴回答您的问题。
第一空应该是对Fib函数进行说明void Fib(long f[],int n )
第二空为主函数调用Fib函数
Fib(a,20)
第三空为f[i]=f[i-1]+f[i-2]
以上就是我的回答,希望能帮助到您。
‘玖’ c语言函数问题。高手指教
第一题的知识点是,逗号表达式,逗号表达式的值是最右边的那个值,这个要记住了。比如说,z=(2,3,4);z是被赋予4的。那又比如说,z=((2,3),4);z还是被赋予4的。顺便说一下,因为逗号运算符是C中优先级最低的一个,所以括号一定要写的。比如说z=2,3,4;这样的话z是被赋值为2,而3和4在编译的时候就会出现warnings,说它们没有no efforts。
所以说r=func ((x--,y++,x+y),z--);实际上是r=func ((6,7,13),8);即是r=func (13,8); 所以答案应该是21.
第二题的知识点是实参传递。我想说,如果这道题有正确的编译结果的话就是奇异的。因为,书上说得很明确,实参在进行函数调用的时候,必须有确定的值,这样才能把这些值传递给形参。所以这道题编译时不成功的,因为c的值不确定。并且,这里并没有return语句,所以就算c能够算出来也输出不了。(这是因为这里是传值,形参的改变时改变不了实参的。)如果要成功,我认为要这么写。#include <stdio.h>
int fun(int a,int b,int c)
{c=a*b;
return c;}
main()
{int c;
c=fun (2,3);printf("%d\n",c);
} 结果为6。
第三题,首先,主函数i=0时,i=0传递给子函数n,这时s=1.0不变;接着,主函数i=1时,i=1传递给子函数n,这时s=1.0+1.0+1.0/1=3.0;接着,主函数i=2时,i=2传递给子函数n,这时s=3.0+1.0+1.0/1+1.0/2=5.5,输出的时候输出%f,没有精度控制的话就默认保留6到7位数字。 结果是5.500000
第四题,嗯,我觉得你应该先自己想想,unsigned是无符号整数的意思,就是没有负数的。k*=num%10是k=k*(num%10),(num%10)是取余数的意思。do-while语句,while(num)num为0时候才跳出循环。首先,实参26传递过去,num为26,k=1*(26%10)=1*6=6;然后num=26/10=2.6,自动取2.(因为num为unsigned型);然后循环,继续,k=6*(2%10)=12;num=2/10=0.5,自动取0;这时候跳出循环,返回值为k=12,即是主函数显示12. 结果是12