0.1程式的結構
寫文章要考慮文章的結構,編寫程式也要考慮程式的結構.程式是處理特定問題的用程式語言書寫的語句序列.當要處理的問題複雜時,程式將會很長.因此,程式的結構就非常重要.
c語言程式的結構一般如下:
函式1
函式2
… 函式n
主函式函式分為庫函式和使用者自定義函式兩大類.庫函式也稱作系統函式,是包括在高階語言軟體中的提供基礎功能的函式.使用者自定義函式是軟體開發者根據所處理的特定問題設計的提供特定功能的函式.
0.2函式
c語言函式的一般形式為:
資料型別 函式名(資料型別 引數1,……,資料型別 引數n)
乙個函式由函式名,引數和函式體三部分組成.
0.2.1 返回值
乙個函式的函式名既是該函式的代表,同時也是乙個變數.系統為函式名變數分配有與定義的資料型別相一致的記憶體單元空間.由於函式名變數是像全域性變數一樣定義的,所以呼叫函式可以使用儲存在函式名變數中的資料.由於函式名變數通常用來把函式的處理結果資料帶回給呼叫函式,所以一般把函式名變數稱為返回值.
例:0-1設計乙個從兩個整數型別資料中得到較大數值的函式,並設計乙個主函式呼叫該函式.
#include
int max1(int x1, int x2)
void main(void)
//max = 8
0.2.2 輸入型引數輸入型引數是指呼叫函式只通過該引數傳送資料給被呼叫函式.由於呼叫函式只向被呼叫函式傳送資料所以稱為輸入型引數.輸入型引數也稱作值參.
0.2.3 輸出型引數
輸出型引數是指呼叫函式只通過該引數把被呼叫函式處理後得到的結果資料傳送給呼叫函式.由於這樣的引數資料是離開被呼叫函式的,所以稱為輸出型引數.輸出型引數也稱作變參.
例0-2 設計乙個從三個整數型別資料中得到最大數值和次大數值的函式.
#include
void max2(int x1, int x2, int x3, int
*y1, int
*y2)
if (x1 >= x2 && x1 < x3)
if (x1 < x2 && x2 >= x3)
if (x1 < x2 && x2 < x3)
}void main(void)
//f1 = 9 f2 = 7
0.3結構體高階程式語言中都只定義了如int,long,float,char等基本資料型別,在有些程式設計問題中,需要把若干個基本型別的資料作為乙個整體來考慮,在c語言中,這樣的問題是通過結構體定義語句來解決的.結構體定義語句的一般格式為:
struct 《結構體名》
;示例:
struct student
;//對結構體型別的變數,既可以整體處理,也可以按成員分量處理.
struct student x = ,y,*p;
0.4自定義語句自定義語句的功能是把乙個已定義的資料型別名換為乙個新的資料型別名.自定義語句的格式為:
typedef 《已定義的資料型別名》 《新的資料型別名》;
例0-3:設計乙個對任意基本型別的兩個資料,求其中較大的值.
#include
typedef
float datatype;
datatype max3(datatype x1, datatype x2)
void main(void)
//max = 8.800000
0.5 動態記憶體分配c語言支援動態內在分配.c語言的函式庫中包含了一組可以在程式執行時要求系統分配記憶體空間的函式.這些函式主要是malloc()函式,free()函式,calloc()函式和realloc()函式.這些函式一般存放在標頭檔案malloc.h中
malloc()函式的原型是:
void * malloc(unsigned size)
malloc()函式用於向系統動態申請size個位元組的記憶體單元空間,函式返回值為所申請的記憶體空間首位址.
free()函式的原型是:
void free(void*p)
free()函式用於釋放動態分配的記憶體空間.在程式中,用malloc()函式或用其他動態記憶體申請函式申請的記憶體空間要用乙個指標型別的變數指示其首位址,假設該首位址用指標變數p指示,若將p作為實參呼叫free()函式,則實現釋放指標變數p指示的動態申請函式所申請的記憶體空間.
示例0-4 設計乙個用動態陣列儲存字串」data structure」的程式
#define _crt_secure_no_warnings
#include
#include
#include
void main(void)
; int i, n;
str = (char*)malloc(sizeof(char)*length);
strcpy(str, s1);
n = strlen(str);
printf("str length %d\n",n);
printf("str = ");
for (i = 0; i < n; i++)
printf("%c",str[i]);
free(str);}/*
str length 14
str = data structure
*/
0.6 乙個程式例子例0-5:設計乙個可以在陣列中插入任意多個任意資料型別資料的函式,然後設計乙個主函式在該陣列中插入10個整數型別的資料.要求把主函式設計為乙個檔案,把其餘部分設計為另乙個檔案.
seqlist.h
typedef
struct seqlist; //命名該結構體為seqlist
//要能方便地操作和管理陣列中的資料,需要設計對陣列元素個數變數進行初始化操作的函式,
//求陣列當前個數的函式,在陣列的任意位置插入資料的函式以及取數 組的任意位置上資料的函式.
void listinitiate(seqlist*l)
int listlength(seqlist l)
int listinsert(seqlist*l, int i, datatype x)
else
if (i < 0 || i > l->size)
else
}int listget(seqlist l, int i, datatype *x)
else
}
seqlist.c
#include
#define maxsize 100
typedef
int datatype;
#include"seqlist.h"
void main(void)
; listinitiate(&mylist);
for (i = 0; i < n; i++)
}n = listlength(mylist);
for (i = 0; i < n; i++)
else
}printf("\n");
}// 1 2 3 4 5 6 7 8 9 10
C程式語言 第1章 1
練習1 1 在你自己的系統執行 hello,world 程式。再有意去掉程式中的部分內容,看看會得到什麼出錯資訊。1 void main 2練習1 2 做個實驗,當printf函式的引數字串中包括 c 其中c是上面的轉義字元序列中未曾列出的某乙個字元 是,觀察一下會出現什麼情況。1 void mai...
第1章 程式設計C語言
例1.1要求在螢幕上輸出以下一行資訊 include intmain 例1.2求兩個整數之和 include intmain 執行結果如下 例1.3求兩個整數中的較大者 include intmain intmax int x,int y 建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 k...
C語言程式設計 第6章
參考例6.4程式,程式設計計算並輸出1到n之間的所有數的平方和立方。其中,n值由使用者從鍵盤輸入。include include intmain return0 某人在國外留學,不熟悉當地天氣預報中的華氏溫度值,請程式設計按每隔10 輸出0 到300 之間的華氏溫度到攝氏溫度的對照表,以方便他對照查...