A. c語言編程調用函數問題
main函數不能嵌套調用,還有include .c文件可不是個好主意,static變數作用域會不恰當地亮櫻擴展倒是file2.c中的其他函數如f(),如果沒有聲明咐正為static,可以在file1.c中直接調用,不需要include。編譯的時候,創建一個.prj文件,內容為file1.cfile2.c在TC的菜單敬簡叢中有project的項,設為.prj文件名,最後編譯就可以了
B. C語言函數問題求解。
int a=fx;應該神臘辯是局茄int a=fx();
-----------
# include<stdio.h>游缺
int main()
{
int fx();
int a=fx();
printf("%d\n",a);
}
int fx()
{
int a=5;
return a;
}
C. c語言函數調用問題(一個語句)
(a++,b++,a+b)。這個語句的意思其實就是順序執行a++,b++,a+b,然後將最終的值作為第一個參數傳遞畝戚個fun.所以經蠢盯過a++,b++,a+b,可算出,最終a= 2,b=3,a+ b =5,因此(a++,b++,a+b) = 5.
c++,即是先將c的值傳個fun,然後自加帶耐和。因此fun((a++,b++,a+b),c++);即為fun(5,3),所以Sum = 8
D. C語言如何調用函數
C語言中,函數調用的一般形式為:
函數名(實際參數表)
對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變數或其它構造類型數據及表達式。各實參之間用逗號分隔。
#include<stdio.h>
intfun(intx,inty);//函數聲明,如果函數寫在被調用處之前,可以不用聲明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函數的調用,調用自定義函數fun,其中a,b為實際參數,傳遞給被調用函數的輸入值
}
//自定義函數fun
intfun(intx,inty)//函數首部
{//{}中的語言為函數體
returnx>y?x:y;//返回x和y中較大的一個數
}
(4)解決函數問題用什麼語句c語言擴展閱讀
C語言中不允許作嵌套的函數定義。因此各函數之間是平行的,不存在上一級函數和下一級函數的問題。但是C語言允許在一個函數的定義中出現對另一個函數的調用。
這樣就出現了函數的嵌套調用。即在被調函數中又調用其它函數。這與其它語言的子程序嵌套的情形是類似的。其關系可表示如圖。
圖表示了兩層嵌套的情形。其執行過程是:執行main函數中調用a函數的語句時,即轉去執行a函數,在a函數中調用b 函數時,又轉去執行b函數,b函數執行完畢返回a函數的斷點繼續執行,a函數執行完畢返回main函數的斷點繼續執行。
E. 幫忙用C語言解決下隨機函數的編程題
完整版純C程序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 20
void sel_sort(int [],int); //選擇排序
int search(int [],int,int); //查找
void insert(int [],int [],int,int); //插入
int num_by_mechine(void) //產生隨機數
main()
{
int a[N],x;
int i,index,b[N+1];
srand(time(NULL)); //為隨機數發生器rand()播種好橘念
for(i=0;i<N;i++)
a[i]=num_by_mechine();
printf("before sel_sort...\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
sel_sort(a,N);
printf("after sel_sort...\n");
for(i=0;i<N;i++)
printf("友困%4d",a[i]);
printf("\n");
printf("please input x:");
scanf("%d",&x);
index=search(a,x,N);
if(index!=-1)
{
printf("find x,x=a[%d]!\n",index);
printf("delete a[%d]...\n",index);
for(i=index+1;i<伍蘆N;i++)
a[i-1]=a[i];
for(i=0;i<N-1;i++)
printf("%4d",a[i]);
}
else
{
printf("no find!\n");
printf("after insert...\n");
insert(a,b,x,N);
for(i=0;i<N+1;i++)
printf("%4d",b[i]);
}
}
int num_by_mechine(void)
{
return(rand()%100+1); //產生一個分布在1~100之間的隨機整數
}
void sel_sort(int a[],int n)
{
int cur,i,t;
for(cur=0;cur<n-1;cur++)
for(i=cur;i<n;i++)
if(a[i]<a[cur])
t=a[cur],a[cur]=a[i],a[i]=t;
}
int search(int a[],int x,int n)
{
int front=0,back=n-1,middle;
while(front<=back)
{
middle=(front+back)/2;
if(x<a[middle])
back=middle-1;
else if(x>a[middle])
front=middle+1;
else
return(middle);
}
return -1;
}
void insert(int a[],int b[],int x,int n)
{
int i,j;
for(i=0;i<n;i++)
b[i]=a[i];
for(i=0;i<n;i++)
if(a[i]>x)
{ for(j=n;j>i;j--)
b[j]=b[j-1];
b[i]=x;
return;
}
b[n]=x;
}
F. 有關C語言上的函數問題想求助一下大俠, 我新手
int max(int x, int y); //是一個函數聲明,函數在調用之前必須聲明。括弧里邊是形參
c=max(a, b); //這句語句中的括弧裡面是實參,當函數被調飢余檔用時,程序進爛亂入調用函數
中,將實參的值賦給調用函數的形參, 參毀兄與運算。最後返回運算結果給c。
G. C語言求一元二次方程解的函數問題 新手題
#include"stdio.h"
voidhanshu(inta,intb,intc){
intx,y,z;
z=b*b-4*a*c;
if(a==0)
printf("該方程不是一元二次方程");
elseif(a!=0&&z<0) //這里不需要在設置a!=0這個條件
困轎printf("該一元二次方程無實數解");
elseif(a=!0&&z=0) //同樣不需要設置a!=0這個條件
{ //如果一個分支中有多條語句,一定要用{}
printf("該一元二次方程有兩個相同的實數解");
x=(z-b)/2a;
y=x;
}
else
printf("該一元二次方程有兩個不同的實數解");
x=(z-b)/2a;
y=(b*(-1)+z*(-1))/2a;
returnx,y; //return只能返回一個值,這個語句的結果是返回y的值,具體請看逗號表達式
} //缺少}
voidmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c); //在使用變數之前要先定義
printf("%d%d",hanshu(x),hanshu(y)); //你定義的hanshu(inta,intb,intc)有三個int類型的參數,()中放置的是向函數傳遞的參數!!!
}
你可以在函數hanshu()中直接列印出結果而不是返回出來,因為一個函嘩如數只能返回一個值!
如下:
#include<stdio.h>
voidhanshu(dobulea,doubleb,doublec)
{
doublex,y,z;
z=b*b-4*a*c;
if(a==0)
printf("該方程不是一元二次方程");
elseif(z<0)
printf("該一元二次方程無實數解");
elseif(z=0)
{
x=(z-b)/2a;
y=x;
printf("該一元二次方程有兩個相同的實數解:%lf%lf",x,y);
}
else
{
x=(z-b)/2a;
y=(b*(-1)+z*(-1))/2a;
printf("該一元二次方程有兩個不同的實數解:%lf%lf",x,y);
}
}
intmain(void)
{
doublea,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
hanshu(a,b,c);
return0;
汪蘆肆}
如果你想在主函數main()中使用計算結果,可以利用指針!
H. C語言:用分支結構或者循環結構解決一個實際問題,並通過函數調用實
5樓是正確的。第一題:A.正確就不說了。B.main函數一般含有參數,且是實參,這部分見函數的結構,B錯。C.見函數調用之遞歸調用是一種特殊的嵌套調用,是某個函數調用自己,而不是另外一個函數,C對。D.不解釋。E.函數參數傳遞裡面,上述帶回多個返回值,是由形參帶回來的,而形參得傳遞地址。另外,實參是傳遞數值,E對。故選ACDE。第慧尺二題:ACD。B.形式:do{循環體語句組;}while(循環繼續條件);。故而前睜高B錯。E。見實現S=1+2+······+n的例子,這個是循環次數不確定的。故而E錯。其他3個是常見知早粗識點。故選ACD。
I. c語言函數問題
一個函數的的聲明,要給出 四個信息,舉個例子
void printfMessage (void)
{
printf("Programming is fun. ");
}
誰可以調用它 who call call it (注意 static 的應用)
返回值的類型 The type of value it returns
函數名 its name
參數列表 the arguments it takes
很顯然 ,你說的例巧源激子中,get作為函數名
不同的是它們的返回類型,一個返回Int &, 一個返回int.前者是一個指向int 類的指針,後者是整型
下面截至 k & r
here is the function power and a main program to excuter it , so you can see the whole structure at once.
A function definition has this form: 函數定義具有如下格式
return-type function-name(parameter declarations, if any)
{
裂祥declarations
statements
}
返回類型 函數名(參數聲明,...)
{
聲明
孝襪語句
}
Returning Pointers
Although functions tht return pointers are handled just like any other type of function, it is review some key concepts and look at an example. Pointers are neither integers nor unsigned integers, They are the memory address of a certain type of data. One reason for this distinction is that pointer arithmetic is relative to the base type. For example, if an integer
pointer is incremented , it will contain a value that is four greater than its previous value
(assuming 4-byte integers), In general, each time a pointer is incremented(or decremented),
it points to the next(of previous) item of its type. Since the length of different data types may differ, the compiler must know what type of data the pointer is pointing to. For this reason that returns a pointer must declare explicitly what type of pointer it is returning. For example, you should not use a return type of int * to return a char * pointer! In a few case, a function will need to return a generic pointer. In this case, the function return type must be specified as void *.
To return a ponter, a function must be declared as having a pointer return type. For example, the following function returns a pointer to the first occurrence of the character c in string s; If no match is found, a pointer to the null terminator is returned.
/* Rerurn pointer of fisrt occurrence of c in s. */
char *match(char c, char *s)
{
while (c != *s, && *s) s++;
return (s);
}
Here is a short program that uses match();
#include <stdio.h>
char *match(char c, char *s); /* prototype */
int main(void)
{
char s[80], *p, ch;
gets(s);
ch = getchar();
p = match(ch, s);
if (*p) /* there is a match */
printf(" %s ", p);
else
printf("No match found.");
return 0;
}
簡單的翻譯一下:
雖然函數返回一個指針和函數返回其他類型的值並沒有什麼區別,但是通過它回顧一些關鍵概念還是很有用處的。指針無非就是整型和無符號整型,它們是某些數據類型的內存地址,指針的運算涉及到它的基本類型,比如說,一個指向整型的指針增加1.這個指針變數的的值將會比他的前一個值大4, 一般來講,指針每加1或者減1,它將指向下一項(這種類型)。由於不同數據類型有著不同的長度,編譯器必須知道指針指向了哪種類型,為了解決這個問題,如果一個函數返回一個指針,它必須明確的給出它將返回哪種類型的指針。 比如說,你不能使用 int * 來返回char *. 在某些情況下,一個函數需要返回一個泛型(generic pointer), 在這種情況下,函數必須聲明為 void *.
為了能夠返回一個指針,函數必須明確的指出,它將返回哪種指針類型。舉個例子,下列函數返回一個指針,指向字元串S中第一次出現的c,如果不能匹配上,返回一個指向NULL的指針
reference:
[1] Brian W. Kernighan& Dennis M. Ritchie the c programming language
[2] Stephen G.Kochan Pogramming in C Third Edition
[3] Herbert Schildt C The Complete Reference Fourth Edition
J. C語言函數問題
先舉個例子:
#include <stdio.h>
int max(int,int); //這是函數max的申明,最後要加分號
int main()
{
int a=1,b=2,c;
c = max(a,b); //這是函數max的使用
printf("%d",c);
return 0;
}
int max(int n,int m) //這是函數max的定義部分,最後不加分號
{
if (n>m)
return n;
else
return m;
}
不能在函數體內定義函數是什麼意思?
【就是說函數在程序中不能嵌套定義,這個和Pascal語言不同,例如上面程序中,max函數不能定義在main函數中間】
定義是聲明還是使用?
【定義既不是申明,也不是使用,函數具體功能的實現代碼叫做函數的定義,如上差前面程搜殲序最後7行就是定義】
函數不是應該先聲明在使用嗎?
【是的,但如果函數定義在函數使用之前,就可以不用申明(如下面程序)。函數定義在函數使用後的情況下(如上面程序),先聲明,能使編譯器在編譯在編譯過程中能夠識虛漏清別使用的函數】
#include <stdio.h>
int max(int n,int m) //這是函數max的定義部分,最後不加分號
{
if (n>m)
return n;
else
return m;
}
int main()
{
int a=1,b=2,c;
c = max(a,b); //這是函數max的使用
printf("%d",c);
return 0;
}
定義如何解釋?
【見第二個問題】