當前位置:首頁 » 編程語言 » c語言形參中添加函數輸出值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言形參中添加函數輸出值

發布時間: 2022-07-13 10:47:11

c語言的函數形式參數和函數的返回值

因為自定義函數在main函數的後面,所以第一行先聲明使用了一個名為hello的函數,函數在主函數的後面。
再看主函數,賦值應該會吧,把j=5的值通過hello函數賦給變數i,進行運算i=9。再返回主函數,將9賦給K,然後輸出k,值為9.

Ⅱ c語言 用指針做函數參數從10個數中找出最大值和最小值輸出。(求源代碼加部分解釋)

#include <iostream>

using namespace std;

int main()

{

int a[10],i,max,min,*p;

p=a;

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

cin>>*p++;

max=min=a[0];

for(p=a; p<a+10; p++)

{

if(*p>max)

max=*p;

if(*p<min)

min=*p;

}

cout<<"max="<<max<<endl;

cout<<"min="<<min<<endl;

return 0;

}

運行效果

(2)c語言形參中添加函數輸出值擴展閱讀:

include用法:

#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。

插入頭文件的內容

#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:

1、#include<文件名>

2、#include"文件名"

Ⅲ c語言中用函數做參數怎麼用

數組元素就是下標變數,它與普通變數並無區別。 因此它作為函數實參使用與普通變數是完全相同的,在發生函數調用時,把作為實參的數組元素的值傳送給形參,實現單向的值傳送。【例5-4】說明了這種情況。

【例8-7】判別一個整數數組中各元素的值,若大於0 則輸出該值,若小於等於0則輸出0值。編程如下:#include <stdio.h>void nzp(int v){ if(v>0) printf("%d ",v); else printf("%d ",0);}int main(void){ int a[5],i; printf("input 5 numbers\n"); for(i=0;i<5;i++){ scanf("%d",&a[i]); nzp(a[i]); } return 0;}
本程序中首先定義一個無返回值函數nzp,並說明其形參v為整型變數。在函數體中根據v值輸出相應的結果。在main函數中用一個for語句輸入數組各元素,每輸入一個就以該元素作實參調用一次nzp函數,即把a[i]的值傳送給形參v,供nzp函數使用。

數組名作為函數參數
用數組名作函數參數與用數組元素作實參有幾點不同。

1) 用數組元素作實參時,只要數組類型和函數的形參變數的類型一致,那麼作為下標變數的數組元素的類型也和函數形參變數的類型是一致的。因此,並不要求函數的形參也是下標變數。換句話說,對數組元素的處理是按普通變數對待的。用數組名作函數參數時,則要求形參和相對應的實參都必須是類型相同的數組,都必須有明確的數組說明。當形參和實參二者不一致時,即會發生錯誤。

2) 在普通變數或下標變數作函數參數時,形參變數和實參變數是由編譯系統分配的兩個不同的內存單元。在函數調用時發生的值傳送是把實參變數的值賦予形參變數。在用數組名作函數參數時,不是進行值的傳送,即不是把實參數組的每一個元素的值都賦予形參數組的各個元素。因為實際上形參數組並不存在,編譯系統不為形參數組分配內存。那麼,數據的傳送是如何實現的呢?在我們曾介紹過,數組名就是數組的首地址。因此在數組名作函數參數時所進行的傳送只是地址的傳送,也就是說把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之後,也就等於有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。

上圖說明了這種情形。圖中設a為實參數組,類型為整型。a佔有以2000為首地址的一塊內存區。b為形參數組名。當發生函數調用時,進行地址傳送,把實參數組a的首地址傳送給形參數組名b,於是b也取得該地址2000。於是a,b兩數組共同佔有以2000為首地址的一段連續內存單元。從圖中還可以看出a和b下標相同的元素實際上也占相同的兩個內存單元(整型數組每個元素佔二位元組)。例如a[0]和b[0]都佔用2000和2001單元,當然a[0]等於b[0]。類推則有a[i]等於b[i]。

【例8-8】數組a中存放了一個學生5門課程的成績,求平均成績。#include <stdio.h>float aver(float a[5]){ int i; float av,s=a[0]; for(i=1;i<5;i++) s=s+a[i]; av=s/5; return av;}int main(void){ float sco[5],av; int i; printf("\ninput 5 scores:\n"); for(i=0;i<5;i++) scanf("%f",&sco[i]); av=aver(sco); printf("average score is %5.2f",av); return 0;}
本程序首先定義了一個實型函數aver,有一個形參為實型數組a,長度為5。在函數aver中,把各元素值相加求出平均值,返回給主函數。主函數main 中首先完成數組sco的輸入,然後以sco作為實參調用aver函數,函數返回值送av,最後輸出av值。 從運行情況可以看出,程序實現了所要求的功能。

3) 前面已經討論過,在變數作函數參數時,所進行的值傳送是單向的。即只能從實參傳向形參,不能從形參傳回實參。形參的初值和實參相同,而形參的值發生改變後,實參並不變化,兩者的終值是不同的。而當用數組名作函數參數時,情況則不同。由於實際上形參和實參為同一數組,因此當形參數組發生變化時,實參數組也隨之變化。當然這種情況不能理解為發生了「雙向」的值傳遞。但從實際情況來看,調用函數之後實參數組的值將由於形參數組值的變化而變化。為了說明這種情況,把【例5.4】改為【例5.6】的形式。

【例8-9】題目同【例8.7】。改用數組名作函數參數。#include <stdio.h>void nzp(int a[5]){ int i; printf("\nvalues of array a are:\n"); for(i=0;i<5;i++){ if(a[i]<0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}
本程序中函數nzp的形參為整數組a,長度為5。主函數中實參數組b也為整型,長度也為5。在主函數中首先輸入數組b的值,然後輸出數組b的初始值。然後以數組名b為實參調用nzp函數。在nzp中,按要求把負值單元清0,並輸出形參數組a的值。 返回主函數之後,再次輸出數組b的值。從運行結果可以看出,數組b的初值和終值是不同的,數組b的終值和數組a是相同的。這說明實參形參為同一數組,它們的值同時得以改變。

用數組名作為函數參數時還應注意以下幾點:
①形參數組和實參數組的類型必須一致,否則將引起錯誤。

②形參數組和實參數組的長度可以不相同,因為在調用時,只傳送首地址而不檢查形參數組的長度。當形參數組的長度與實參數組不一致時,雖不至於出現語法錯誤(編譯能通過),但程序執行結果將與實際不符,這是應予以注意的。

【例8.10】如把例8.9修改如下:#include <stdio.h>void nzp(int a[8]){ int i; printf("\nvalues of array aare:\n"); for(i=0;i<8;i++){ if(a[i]<0)a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}
本程序與【例8.9】程序比,nzp函數的形參數組長度改為8,函數體中,for語句的循環條件也改為i<8。因此,形參數組a和實參數組b的長度不一致。編譯能夠通過,但從結果看,數組a的元素a[5]、a[6]、a[7]顯然是無意義的。

③在函數形參表中,允許不給出形參數組的長度,或用一個變數來表示數組元素的個數。例如,可以寫為:
void nzp(int a[])
或寫為
void nzp( int a[], int n )
其中形參數組a沒有給出長度,而由n值動態地表示數組的長度。n的值由主調函數的實參進行傳送。由此,【例8-10】又可改為【例8-11】的形式。

【例8-11】復制純文本新窗口
#include <stdio.h>void nzp(int a[],int n){ int i; printf("\nvalues of array a are:\n"); for(i=0;i<n;i++){ if(a[i]<0) a[i]=0; printf("%d ",a[i]); }}int main(void){ int b[5],i; printf("\ninput 5 numbers:\n"); for(i=0;i<5;i++) scanf("%d",&b[i]); printf("initial values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); nzp(b,5); printf("\nlast values of array b are:\n"); for(i=0;i<5;i++) printf("%d ",b[i]); return 0;}

Ⅳ c語言中調用函數如何返回多個值

1、通過使用指針,在函數調用時,傳遞帶有地址的參數,並使用指針更改其值;這樣,修改後的值就會變成原始參數。

Ⅳ C語言函數形參和函數返回值問題

1、
第一個和第二個都是值傳遞,不改變原值。
第三個是地址傳遞,改變地址里的值,實際的值就改變了。
2、
返回值在函數結束,也就消失了,和局部變數一樣。

Ⅵ C語言函數中什麼是輸出參數舉個簡單例子

C里沒有類似於C#的指定ref,out的輸入輸出參數
它是通過不同的傳遞參數類型決定其輸入輸出參數的
如果是傳值參數,只能用於輸入參數
如果是引用或指針類型,則即可用於輸入也可用於輸出
如 int fun( int a, int& b, int* c )
a 作為輸入參數
b和c 可輸入也可輸出

Ⅶ C語言中,輸出函數有哪些

C語言輸入輸出函數有很多,標准I/O函數中包含了如下幾個常用的函數:
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int
scanf(const
char
*format,
arg_list)
scanf主要從標准輸入流中獲取參數值,format為指定的參數格式及參數類型,如scanf("%s,%d",str,icount);
它要求在標准輸入流中輸入類似"son
of
bitch,1000"這樣的字元串,同時程序會將"son
of
bitch"給str,1000給icount.
scanf函數的返回值為int值,即成功賦值的個數,在上例中如果函數調用成功,則會返回2,所以我們在寫程序時,可以通過
語句if(scanf("%s,%d",str,icount)
!=
2){...}來判斷用戶輸入是否正確.
int
printf(const
char
*format,
arg_list)
printf主要是將格式化字元串輸出到標准輸出流中,在stdio.h頭文件中定義了標準的輸入和輸出,分別是stdin,stdout.
arg_list可以是變數名,也可以是表達式,但最終都會以值的形式填充進format中.
int
getc(FILE
*fp)
getc主要是從文件中讀出一個字元.常用的判斷文件是否讀取結束的語句為:(ch
=
getc(fp))
!=
EOF.EOF為文件結束標志,
定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當fp為stdin
時,getc(stdin)就等同於getchar()了.
int
putc(int
ch,FILE
*fp)
putc主要是把字元ch寫到文件fp中去.如果fp為stdout,則putc就等同於putchar()了.
int
getchar(void)
getchar主要是從標准輸入流讀取一個字元.默認的標准輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字元時又
涉及到緩沖的問題,所以並不是在屏幕中敲上一個字元程序就會運行,一般是通過在屏幕上敲上回車鍵,然後將回車前的字元
串放在緩沖區中,getchar就是在緩沖區中一個一個的讀字元.當然也可以在while循環中指定終止字元,如下面的語句:
while
((c
=
getchar())
!=
'#')這是以#來結束的.
int
putchar(int
ch)
putchar(ch)主要是把字元ch寫到標准流stdout中去.
char
*
gets(char
*str)
gets主要是從標准輸入流讀取字元串並回顯,讀到換行符時退出,並會將換行符省去.
int
puts(char
*str)
puts主要是把字元串str寫到標准流stdout中去,並會在輸出到最後時添加一個換行符.
char
*fgets(char
*str,
int
num,
FILE
*fp)
str是存放讀入的字元數組指針,num是最大允許的讀入字元數,fp是文件指針.fgets的功能是讀一行字元,該行的字元數
不大於num-1.因為fgets函數會在末尾加上一個空字元以構成一個字元串.另外fgets在讀取到換行符後不會將其省略.
int
fputs(char
*str,
file
*fp)
fputs將str寫入fp.fputs與puts的不同之處是fputs在列印時並不添加換行符.
int
fgetc(FILE
*fp)
fgetc從fp的當前位置讀取一個字元.
int
fputc(int
ch,
file
*fp)
fputc是將ch寫入fp當前指定位置.
int
fscanf(FILE
*fp,
char
*format,...)
fscanf按照指定格式從文件中出讀出數據,並賦值到參數列表中.
int
fprintf(FILE
*fp,
char
*format,...)
fprintf將格式化數據寫入流式文件中.

Ⅷ C語言的輸出參數是什麼跟返回值有什麼關系

1、C語言中,所謂傳參一般調用一個函數時,傳遞過來的參數,否則被調用函數是無法使用調用函數裡面的參數的,除了全局參數等。
2、C語言中的返回值一般一return 的形式出現,就是這個函數結束時,會拋出需要返回的一個值。在調用的函數中可以接收。下面我舉一個完整的例子來說明這幾者的關系。
3、常式:

#include <stdio.h>
int counter(int i);
void main(void)
{
int j,m;
m = 5;
j = counter(m); //此處調用函數counter();並且傳入參數,一個int型的m,
//次函數在結束時將返回一個int型,這里用j來接收
printf("返回值為:%d\n",j);
}

int counter(int i) //這里是函數定義,int counter();說明此函數將會返回一個
{ //int型
//counter(int i);表示在調用此函數時需要傳入一個int型參數
return i + 1; //此處是函數將要返回的值,傳進來的是5,那返回 5 + 1,返回6
}

Ⅸ C語言函數中實參形參的問題,輸出形參值還實參值 如我主函數定義C=5,FUN(C),調用函數中得3,輸出C則是

fun(int c)的話輸出c為5,就是c不會改變,這個是實參
fun(int& c)或者fun(int* c)的話輸出為3,就是c的值也改變了,這個是形參