c語言多函數
『壹』 c語言程序主函數可以有多個么
C語言程序主函數只能有1個。C程序中main()稱之為主函數,是所有程序運行的入口。程序執行總是從main函數開始,如果有有其他函數,則完成對其他函數的調用後再返回到主函數,最後由main函數結束整個程序。在執行程序時,由系統調用main函數。
(1)c語言多函數擴展閱讀:
主函數的兩個形參形式中的形參,允許從執行環境中傳遞任意的多位元組字元串,各個指針 argv[1] .. argv[argc-1] 指向每個這些字元串的第一個字元。argv[0] 是指向一個表示用於執行該程序自身的名字的空結尾多位元組字元串(或者當執行環境不支持時,為空字元串 "")的開頭字元的指針。
這些字元串是可以改動的,雖然對它們的改動並不會被傳回給執行環境:比如可以用 std::strtok 來使用它們。由 argv 所指向的數組的大小至少為 argc+1,其最後一個元素 argv[argc] 保證為一個空指針。
『貳』 C語言中那麼多 函數是不是都要背下來啊
怎麼可能全部背下來哦!但一般常用的函數還是要記住的,我想大概有100多個吧。記住也不難,只要經常實踐,用的多的函數就會記下來。實際上真正編程是離不開MSDN幫助文檔的,需要的時候查找自己需要的功能函數。所以學會使用MSDN,是每個程序員必須的。
『叄』 C語言為什麼要寫多個函數,有什麼好處
現在剛學練習寫程序是練習語法,看不出優越性。
主要體現在:
1、以後編寫相對大型的代碼或者課程設計作業,多次需要同一種功能(比如對數據的輸出或者計算某種數據結構的長度等),那麼你可以在需要的時候再main函數插入同樣的一段代碼也就是敲上同樣的或者僅有幾個參數差別的代碼。這樣,是好看了,但是代碼長度太長了,顯得比較冗雜又佔用空間。所以呢,對這種多次使用的功能單獨編寫成一個函數,那些可能僅僅一個或者幾個參數不一樣的情況就作為形參實參了。
2、代碼可讀性好。沒一個函數功能獨立,都是實現自己的一種預定的功能。方便編程者閱讀。
『肆』 c語言中能同時出現多個main函數嗎
一個C語言程序是由一個或多個函數組成的,其中必須包含一個main函數(且只能有一個main函數.)。
C語言是一種計算機程序設計語言,屬高級語言范疇既具有高級語言的特點,又具有匯編語言的特點,可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言。
如果main中調用函數,那麼這個函數必須在mani函數的前面。但是也可以在main函數的前面聲明。因為代碼是從main 函數開始,一條一條的順序執行的。
如果main中調用函數,那麼這個函數必須在mani函數的前面。但是也可以在main函數的前面聲明。因為代碼是從main 函數開始,一條一條的順序執行的。
(4)c語言多函數擴展閱讀:
在C語言當中,一個程序,無論復雜或簡單,總體上都是一個「函數」;這個函數就稱為「main() 函數」,也就是「主函數」。比如有個「做菜」程序,那麼「 做菜 」這個過程就是「主函數」。在主函數中,根據情況,你可能還需要調用「買菜,切菜,炒菜」等子函數。
main函數在程序中大多數是必須存在的,但是依然有例外情況,比如windows編程中可以編寫一個動態鏈接庫(dll)模塊,這是其他windows程序可以使用的代碼。由於DLL模塊不是獨立的程序,因此不需要main函數。再比如,用於專業環境的程序-----如機器人中的控制晶元--可能不需要main函數。
參考資料:main函數_網路
『伍』 c語言,關於多參數函數的問題
如下修改就完美了!
#include<stdio.h>
void SCN(int num[100],int *n,int *m);
void MOVE(int num[100],int n,int m);
void PR(int num[100],int n);
int num[100],n,m;
void main()
{
SCN(num,&n,&m);
MOVE(num,n,m);
PR(num,n);
}
void SCN(int num[100],int *n,int *m)
{
int i; scanf("%d",n);
for(i=0;i<*n;i++){
scanf("%d",&num[i]);
}
scanf("%d",m);
}
void MOVE(int num[100],int n,int m)
{
int i,tt;
while(m--){
tt=num[n-1];
for(i=n-1;i>0;i--){
num[i]=num[i-1];
}
num[0]=tt;
}
}
void PR(int num[100],int n)
{
int i;
for(i=0;i<n;i++){
printf("%d",num[i]);
}
}
『陸』 c語言 多文件多函數結構
C++編程入門系列之二十四(C++程序設計必知:多文件結構和編譯預處理命令)分類標簽: C++ 編程入門 -
雞啄米上一講給大家講了常引用、常對象和對象的常成員,今天給大家講下編程入門知識--多文件結構和編譯預處理命令。
一.C++程序的多文件結構
之前雞啄米給大家看了很多比較完整的C++程序的例子,大家可能發現了,它們的結構基本上可以分為三個部分:類的聲明、類的成員函數的實現和主函數。因為代碼比較少,所以可以把它們寫在一個文件中,但是我們實際進行軟體開發時,程序會比較復雜,代碼量比較大,
一個程序按結構至少可以劃分為三個文件:類的聲明文件(*.h文件)、類的實現文件(*.cpp文件)和主函數文件(使用到類的文件),如果程序更復雜,我們會為每個類單獨建一個聲明文件和一個實現文件。這樣我們要修改某個類時就直接找到它的文件修改即可,不需要其他的文件改動。
雞啄米在第十九講中講生存期時有個時鍾類的例子,現在雞啄米給大家看下將那個程序按照上面說的結構分到三個文件里:
// 文件1:Clock類的聲明,可以起名為Clock.h
#include <iostream>
using namespace std;
class Clock //時鍾類聲明
{
public: //外部介面
Clock();
void SetTime(int NewH, int NewM, int NewS); //三個形參均具有函數原型作用域
void ShowTime();
~Clock(){}
private: //私有數據成員
int Hour,Minute,Second;
};
// 文件2:Clock類的實現,可以起名為Clock.cpp
#include "Clock.h"
//時鍾類成員函數實現
Clock::Clock() //構造函數
{
Hour=0;
Minute=0;
Second=0;
}
void Clock::SetTime(int NewH,int NewM,int NewS)
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
void Clock::ShowTime()
{
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
// 文件3:主函數,可以起名為main.cpp
#include "Clock.h"
//聲明全局對象g_Clock,具有文件作用域,靜態生存期
Clock g_Clock;
int main() //主函數
{
cout<<"文件作用域的時鍾類對象:"<<endl;
//引用具有文件作用域的對象:
g_Clock.ShowTime();
g_Clock.SetTime(10,20,30);
Clock myClock(g_Clock); //聲明具有塊作用域的對象myClock,並通過默認拷貝構造函數用g_Clock初始化myClock
cout<<"塊作用域的時鍾類對象:"<<endl;
myClock.ShowTime(); //引用具有塊作用域的對象
}
在vs2010中如何生成這三個文件呢?我們可以點菜單中Project->Add Class,在彈出的對話框中選擇c++ class,然後由彈出個對話框,在class name處填上類名點finish就可以了,這樣.h文件和.cpp文件會自動生成,我們也可以點Project->Add New Item,在彈出的對話框中選擇Header File(.h)或C++ File(.cpp)來生成.h文件或.cpp文件。
Clock.cpp和main.cpp都使用#include "Clock.h"把類Clock的頭文件Clock.h包含進來。#include指令的作用就是將#include後面的文件嵌入到當前源文件該點處,被嵌入的文件可以是.h文件也可以是.cpp文件。如果不包含Clock.h,Clock.cpp和main.cpp就不知道Clock類的聲明形式,就無法使用此類,所以所有使用此類的文件都應該包含聲明它的頭文件。關於#include指令下面雞啄米會講。
上面的程序在編譯時,由Clock.cpp和Clock.h編譯生成Clock.obj,由main.cpp和Clock.h編譯生成main.obj,然後就是鏈接過程,Clock.obj和main.obj鏈接生成main.exe可執行文件。如果我們只修改了類的實現文件,那麼只需重新編譯Clock.cpp並鏈接就可以,別的文件不用管,這樣就提高了效率。在Windows系統中的C++程序用工程來管理多文件結構,而Unix系統一般用make工具管理,如果大家從事Unix系統軟體開發,就需要自己寫make文件。
二.編譯預處理程序
編譯器在編譯源程序以前,要由預處理程序對源程序文件進行預處理。預處理程序提供了一些編譯預處理指令和預處理操作符。預處理指令都要由「#」開頭,每個預處理指令必須單獨佔一行,而且不能用分號結束,可以出現在程序文件中的任何位置。
1.#include指令
#include指令也叫文件包含指令,用來將另一個源文件的內容嵌入到當前源文件該點處。其實我們一般就用此指令來包含頭文件。#include指令有兩種寫法:
#include <文件名>
使用這種寫法時,會在C++安裝目錄的include子目錄下尋找<>中標明的文件,通常叫做按標准方式搜索。
#include "文件名"
使用這種寫法時,會先在當前目錄也就是當前工程的目錄中尋找""中標明的文件,若沒有找到,則按標准方式搜索。
2.#define和#undef指令
如果你學過C語言,就會知道用#define可以定義符號常量,比如,#define PI 3.14 這條指令定義了一個符號常量PI,它的值是3.14。C++也可以這樣定義符號常量,但一般更常用的是在聲明時用const關鍵字修飾。C語言還用#define定義參數宏,來實現簡單的函數運算,比如,#define add(x,y) (x+y) 這條指令說明如果我們用到add(1,2)則預處理後就會用(1+2)代替,C++中一般用內聯函數來實現。
#undef用來刪除由#define定義的宏,使其不再起作用。
3.條件編譯指令
用條件編譯指令可以實現某些代碼在滿足一定條件時才會參與編譯,這樣我們可以利用條件編譯指令將同一個程序在不同的編譯條件下生成不同的目標代碼。例如,我們可以在調試程序時加入一些調試語句,用條件編譯指令控制只有在debug模式下這些調試語句才參與編譯,而在release模式下不參與編譯。
條件編譯指令有5中形式:
a.第一種形式:
#if 常量表達式
程序正文 //當「 常量表達式」非零時本程序段參與編譯
#endif
b.第二種形式:
#if 常量表達式
程序正文1 //當「 常量表達式」非零時本程序段參與編譯
#else
程序正文2 //當「 常量表達式」為零時本程序段參與編譯
#endif
c.第三種形式:
#if 常量表達式1
程序正文1 //當「 常量表達式1」非零時本程序段參與編譯
elif 常量表達式2
程序正文2 //當「常量表達式1」為零、「 常量表達式2」非零時本程序段參與編譯
...
elif 常量表達式n
程序正文n //當「常量表達式1」、...、「常量表達式n-1」均為零、「 常量表達式n」非零時本程序段參與編譯
#else
程序正文n+1 //其他情況下本程序段參與編譯
#endif
d.第四種形式:
#ifdef 標識符
程序段1
#else
程序段2
#endif
如果「標識符」經#defined定義過,且未經undef刪除,則編譯程序段1,否則編譯程序段2。
e.第五種形式:
#ifndef 標識符
程序段1
#else
程序段2
#endif
如果「標識符」未被定義過,則編譯程序段1,否則編譯程序段2。
4.define操作符
define是預處理操作符,不是指令,所以不能用#開頭。使用形式為:define(標識符)。如果括弧里的標識符用#define定義過,並且沒有用#undef刪除,則define(標識符)為非0,否則為0。可以這樣使用:
#if !define(HEAD_H)
#define HEAD_H
我們在包含頭文件時,有時多次重復包含同一個頭文件,比如下面這種情況:
// main.cpp文件
#include "file1.h"
#include "file2.h"
int main()
{
…
}
// file1.h文件
#include "head.h"
…
// file2.h文件
#include "head.h"
…
// head.h文件
...
class A
{
...
}
...
main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp還包含了file2.h文件,file2.h也包含了head.h文件,那麼main.cpp就包含了兩次head.h文件,在編譯時就會報錯,說head.h中的類A重復定義了。這時我們可以在被重復包含的文件head.h中使用條件編譯指令,用一個唯一的標識符來標識head.h文件是否已經編譯過,如果已經編譯過則不會重復編譯了。雞啄米給大家改寫下上面的head.h文件:
// head.h文件
#ifndef HEAD_H
#define HEAD_H
...
class A
{
...
}
...
#endif
在這個改好的head.h文件中,上來會先判斷HEAD_H是否被定義過,如果沒有被定義過,則head.h文件還沒參與過編譯,就編譯此文件中的源代碼,同時定義HEAD_H,標記head.h文件已經參與過編譯。如果HEAD_H已經被定義過,則說明此文件已經參與過編譯,編譯器會跳過本文件左右內容編譯其他部分,類A也不會有重復定義的錯誤了。
『柒』 如何用c語言實現多個函數執行
#include<stdio.h>
voidfun1(){}
voidfun2(){}
voidfun3(){}
voidfun4(){}
voidfun5(){}
voidfun6(){}
voidfun7(){}
voidfun8(){}
voidcall(charchoice)
{
switch(choice)
{
case'1':
fun1();
break;
case'2':
fun2();
break;
case'3':
fun3();
break;
case'4':
fun4();
break;
case'5':
fun5();
break;
case'6':
fun6();
break;
case'7':
fun7();
break;
case'8':
fun8();
break;
defult:
break;
}
}
intmain(void)
{
charchoice[8]={0};
charch;
inti=0;
printf("請輸入你選擇要運行的函數編號(1~8):");
ch=getchar();
while(ch!=' ')
{
if(ch>='1'&&ch<='8')
{
choice[i]=ch;
i++;
}
}
for(intj=0;j<i;j++)
{
call(choice[j]);
}
return0;
}
『捌』 c語言中怎樣弄多個函數
如果是用純C語言來寫,把所有函數聲明放在最前面,然後函數定義好,這樣的函數是公有的,可以隨意調用。然後主函數不能少,這樣子的話,所有函數包括主函數的前後順序可隨意。
void fun1();
void fun2();
//...
int main()
{
return 0;
}
void fun1()
{
//code...
}
void fun2()
{
//code...
}
//...
『玖』 c語言中有哪些函數
C語言輸入輸出函數有很多,標准I/O函數中包含了如下幾個常用的函數:
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
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將格式化數據寫入流式文件中.
數據塊讀寫函數
fread
(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
參數說明:
buffer:是一個指針。
對fread
來說,它是讀入數據的存放地址。
對fwrite來說,是要輸出數據的地址(均指起始地址)。
size:
要讀寫的位元組數。
count:
要進行讀寫多少個size位元組的數據項。
fp:
文件型指針。