c語言函數只能最多有一個返回值。我們以一個數據運算函數作為實例講解:
創新互聯專業為企業提供鐘山網站建設、鐘山做網站、鐘山網站設計、鐘山網站制作等企業網站建設、網頁設計與制作、鐘山企業網站模板建站服務,十年鐘山做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
使用指針返回額外數據:定義指針參數,將結果通過指針返回。
如果有很多類型相同的數據,如何返回數組呢?c語言也只能借助指針返回數組。
使用結構體返回:如果返回多個數據,并且各個數據類型都不相同。那么只能通過結構體返回。
使用結構體指針返回:直接返回結構體,程序執行效率會受到影響。因為需要復制結構體數據,如果結構體數據比較大,復制操作會損耗程序性能。
通過使用結構體指針,我們也可以返回多個數據結果。
在c++中,除了使用指針,通常使用引用返回多個數據。與指針相比,使用引用時不用擔心函數調用者傳入不符合預期的指針。
C語言中如何實現多組數據輸入輸出? c語言中有一個標準輸入函數,即:scanf函數,它可以讀取輸入的任意格式類型的數據。scanf函數也有返回值,返回類型為int類型,它返回成功讀入的項目的個數。如果它沒有讀取任何項目(當它期望一個數字而您卻鍵入了一個非數字字符串時就會發生這種情況,scanf()會返回0。當它檢測到“文件結尾”(end of file)時,它返回EOF(EOF是在文件stdio.h中定義的特殊值,一般#define指令把EOF的值定義為-1,我們可以理解為:#define EOF -1)。
c語言中,所有的輸入函數都共用同一個輸入緩沖區,我們從鍵盤鍵入數據時,其實是將輸入寫入緩沖區中,當我們按下回車鍵時,scanf()函數從緩沖區中讀取輸入,刷新緩沖區。
C語言中實現多組數據輸入輸出主要有兩種方式:
1.首先輸入一個n,表示將有n個輸入輸出,例如:
#include stdio.hint main(){ int n,a; scanf("%d",n); while(n--){ scanf("%d",a); printf("輸出:%d\n",a); } return 0;}/*運行結果:3255輸出:255156輸出:156125輸出:125 */
2.使用while(scanf("%d",n)!=EOF){}語句,直達輸入ctrl+z,結束輸入,例如:
#include stdio.hint main(){ int a; while(scanf("%d",a)!=EOF){ printf("輸出:%d\n",a); } return 0;}/*運行結果:54輸出:545156輸出:515621輸出:21^Z*/
你先要設置數組的大小,這個你必須要定義的。你要不確定你要多少你最好把你的數值設置大些。至于你要輸多個你可以用循環語句如:for(i=1;i=n;i++)
scanf("%d",a[n]);
輸出還是一樣之是把scanf改成printf不要取地址就行了。
希望能對你有幫助。
C語言多組數據輸入輸出
#includestdio.hint pow(int a,int n)計算a的n次方{ if(n==1) return a; return a*pow(a,n-1);}int main(){ int T; int n,k,sum,i; scanf("%d",T); while(T--) { sum=0; scanf("%d%d",n,k); for(i=1;i=k;i++) { sum+=pow(n,i);累加 } printf("%d\n",sum); } return 0;}
c語言,如何實現多組數據結果對應輸出
scanf 一個 for
printf另一個for ................
C語言如何實現輸入多組數據測試
#includestdio.h
void main()
{
int n;
while(scanf("%d",n)!=EOF,n)
或者寫成while(scanf("%d",n)!=EOF)然后在循環里加一句if(n==0)break;
{
if(n==0)break;
if((n/10000==n%10)(n/1000%10==n/10%10))
判斷回文
printf("Yes.\
");
else
printf("No.\
");
}
}
這個代碼應該是對的,在OJ上,多組數據都是這么處理的。
這個沒關系的,提交的時候,這樣也是對的,因為OJ系統在判斷答案的時候,輸入和輸出數據放在不同的文件夾下面的,只要它的輸入文件在你的程序下運行,對應的輸出文件和他的一致,你的程序就是正確的,所以,就不需要把結果存起來。
如果你真的想那樣,那就用一個數組把答案存起來,等循環結束的時候,再把結果printf就行了
在c語言中,輸入輸出數據可以用輸入輸出函數,匯編語言如何實現輸入輸出數據?
匯編語言中,根據不同的芯片,也是不同的語句實現輸入輸出,但思想都是一樣的:輸入——將值取入;輸出——將值送出。語句:
輸入:
有的用 in R0,INPORTADD ;INPORTADD 是端口地址
輸出:
有的用 out R0,OUTADD ;OUTADD 是端口地址
而且,數據與地址,哪個放前,哪個放后,不同編譯環境也不同,所以,你要根據具體的環境來定。
單片機中,除了你提到的輸入輸出辦法,還有:用I/O來進行,就是用輸入輸出點的信號狀態來表達;也可用存儲芯片,如FLASH來進行處理數據的輸入輸出。
什么叫數據的輸入輸出?在C語言中如何實現?
數據的輸入:在程序運行時,通過外部手段,發送數據給程序,供程序使用的過程,稱為數據的輸入。
數據的輸出:程序運行時,對外界的任何修改,都可以稱為輸出,包括但不限于,命令行的打印,圖形界面的顯示,存儲設備數據的修改等。
在C語言中,可以通過系統接口進行數據的輸入輸出,比較常用的有標準輸入輸出,文件輸入輸出,以及圖形界面輸入輸出等。
還可以通過硬件相關接口,實現特殊設備的輸入輸出,比如讀取串口設備的輸入輸出等。
在C語言中,一般情況下函數的返回值是通過函數中的return語句來實現的,每調用一次return語句只能從函數中返回一個值,下面我們就來看看C語言怎么讓一個函數返回多個值!
工具/材料
C語言的編輯器
01
全局變量傳遞
這種方式算是最不科學的規范,打破了軟件開發需要的閉環策略,但在基本語法上是支持的,C語言里面最好少涉獵全局變量,使用出錯的風險會提升很多,真要想使用建議還是用靜態全局變量直接在變量的前面加上static修飾符。
02
使用數組名或指針作為函數的形參
被調函數的行參是一個指針,然后在被調函數中返回第一個值,被調函數改變指針參數指向的值,這樣主調函數相應的值就改變了,也就相當于返回了第二個值了。這樣就可以實現返回多個值!
03
結構體指針返回
結構體是C語言涉及數據結構的最直接的容器,通常在編程過程中實現一個功能模塊在主函數里,我們可以定義一個結構體類型的變量,然后直接用函數返回值賦值就可以了。
在C語言中,一般情況下函數的返回值是通過函數中的return語句來實現的,每調用一次return語句只能從函數中返回一個值。但在實際很多應用中,我們需要從函數中返回多個值,那我們可以用什么方法實現呢?此時我們可以用三種方法來實現。
方法一:設置全局變量
全局變量是在函數外部定義的全局變量,它不屬于任何一個函數,其作用域是從變量的定義處開始,到本程序文件的結尾。在此作用域內,全局變量可為各個函數所引用。當我們需要函數返回多個值時,除了函數體中的return語句返回其中一個之外,其它的返回值我們可以通過定義全局變量來處理。因為根據全局變量的特點,在被調用函數中改變了多個全局變量和值,相當于其主調函數全局變量的值也發生了變化,也就相當于返回了多個值。
例如:利用一個函數求出正方形的周長和面積。
#include
double l=0;//定義全局變量l為正方形周長
void f(double a)//定義求面積和周長的函數
{ double s; s=a*a;//求面積
l=6*a;//求周長,并賦給全局變量l
return s;//僅返回面積的值
}
void main()
{ double a,area;
printf(“請輸入邊長:");
scanf("%f",a);
area=f(a);//面積的值通過調用f函數返回值
printf(“面積為:%5.2lf\n”,area);
printf(“周長為:%5.2lf\n”,l);//周長即為全局變量l在f函數中改變后的值
}
上面的例子即用全局變量實現了函數中返回多值的情況,這種方式易懂。但是全局變量用多了會破壞代碼的安全性,結構性,這主要是全局變量在所有函數中都可以使用,從而其值的變化不確定,所以我們要慎用。
方法二:使用數組名或指針作為函數的形參
數組名或者指針實際為地址,而數組一般都包括多個元素,指針也可以指向一組數據的著地址,把數組名或者指針作為函數形參,實際上相當于主調函數的實參與形參共用地址,所以在函數中的數組元素發生改變即是實參也隨之改變。也相當于在調用函數時多個值返回給主調函數。
實例2:編寫函數求一維整形數組的最大值與最小值,并把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然后把數組的最大值與數組的第一個元素交換,把數組的最小值與最后一個元素交換。函數被調用完畢后,實參數組中的第一元素為數組的最大值,實參數組中最后一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用于交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr*(ptr+i))/*最大值與第一個元素進行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)*(ptr+i))/*最小值與最后一個元素進行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調用最大最小值函數*/
main()
{
int A[6],i;
for(i=0;i6;i++)
scanf("%d",A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調試結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用于多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法。
方法三:使用結構體指針作為函數的形參
編寫返回多個值的C語言函數,可以考慮采用結構體的方式去實現。如果返回的數個數值的數據類型不一致,可以通過定義全局變量實現有多個返回值的C語言函數,也可以考慮把要求返回的數個值定義成一個結構體,然后同樣以傳遞結構體指針方式把結構體的指針傳遞給形參結構體指針,那么函數中對形參結構體的修改即是對實參結構體的修改,函數被調用后獲取的實參結構體成員即為函數的多個返回值,下面以實例演示該方法的應用。
實例3:編寫一個用戶自定義函數,允許用戶錄入學生的基本信息(包括學號、姓名、所屬班級、總評成績),并返回這些基本信息給主調函數。
方法:把學生基本信息定義成一個結構體,在用戶自定義函數中傳遞該結構體的指針,則自定義函數中對結構體成員的錄入操作即是對實參結構體成員的錄入操作,從而實現多個返回值。參考代碼如下:
#include "stdio.h"
#include "conio.h"
struct inf{/*定義學生結構體,分別包含成員學號、姓名、班別、總評成績*/
char xh[12];
char name[20];
char class[15];
int chj;
};
main(void)
{
struct inf a1; /*定義學生結構體類型變量*/
void xxxx(struct inf *ptr);
printf("請輸入學號,姓名,班別,總評成績,以空格隔開:\n") ;
xxxx(a1);/*調用函數,以學生結構體類型變量地址作為實參*/
printf("學號:%s,姓名: %s,班別:%s,總評成績:%d",a1.xh, a1.name,a1.class,a1.chj);
getch();
}
void xxxx(struct inf *ptr)/*該函數實現對結構體成員數據的錄入操作*/
{
char xh1[12],name1[20],class1[15];
int chj1;
scanf("%s%s%s%d",xh1,name1,class1,chj1);
strcpy(ptr-xh,xh1);
strcpy(ptr-name,name1);
strcpy(ptr-class,class1);
ptr-chj=chj1;
}
調試結果如下:
請輸入學號,姓名,班別,總評成績,以空格隔開:
200102LiLi200185
學號:200102,姓名: LiLi,班別:2001,總評成績:85
注意:當函數要求返回的多個值是相互聯系的或者返回的多個值數據類型不一致時可以采用該方法。
結束語
對于以上這三種方法,如果想要返回的數個值數據類型一致,可以考慮采用方法2;而對于不同數據類型的返回值,如果各個數值之間是相互聯系的,則方法3較為合適;方法1雖然在很多情況下都可以實現多個返回值的C語言函數,但畢竟全局變量應用過程中有很多危險,要慎重使用。
通過對以上幾種方法的分析講解,在教學過程中,學生再遇到這樣的問題時,就能根據返回值的情況選擇合適的途徑去實現多個返回值的C語言函數。另外,如果再遇到類似的無法用教材知識點去直接解決的問題時,他們基本都能舉一反三地嘗試采用間接方式去解決。
參考材料:
標題名稱:c語言用函數輸出多個值 c語言怎么輸出多個符號
標題網址:http://m.newbst.com/article48/doghdhp.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、企業網站制作、商城網站、App開發、虛擬主機、網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯