『壹』 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