測試代碼:
?
學號:14020491.請實現一個函數,功能為使用循環輸出以下的圖案void print_alpha(int n)
{int i, j;for(i=0;i<n;++i){for(j=0;j<=i;++j)printf("%c", 'A'+ j);printf("\n");}
}2.請實現一個函數,功能為刪除數組指定位置的元素void delete(int *arr, int index, int len){int i;for(i=index;i<len;++i)arr[i] = arr[i+1];arr[len-1] = 0;--len;
}3.請實現一個函數,功能為使用選擇排序對數組進行排序void sortarr(int *arr, int len){int i, j, min, tmp;for(i=0;i<len-1;++i){min = i;for(j=i+1;j<len;++j)if(arr[min] > arr[j]){int tmp;tmp = arr[min];arr[min] = arr[j];arr[j] = tmp;}}
}4.請實現一個函數,功能為將一個數插入到一個有序的數組中void insert(int *arr, int n, int len){int i, key;++len;for(i=0;i<len;++i)if(n > arr[i])continue;else{key = i;break;}for(i=len-1;i>=key;--i)arr[i+1] = arr[i];arr[key] = n;
}5. 請實現一個函數,功能和系統的strcpy函數相似void mystrcpy(char *dst, const char* src){int i;for(i=0;(dst[i] = src[i])!='\0'; ++i);
}6. 請實現一個函數,功能為輸入一個字符串,找出其中長度最大的單詞。要求從鍵盤輸入一行字符,最后打印出長度最大的字符串
輸入:when i was young i'd listen to the radio waiting for my favorite songs
輸出:favorite
'
void show_string(char a[]){int i,j;int tmp, max, tmax, mmp;i = j = mmp = tmp = max = tmax = 0;while(a[i]!='\0'){if(isalpha(a[i])){tmp = i;for(;isalpha(a[i]);++i){tmax = i-tmp;if(tmax > max){max = tmax;mmp = tmp;}}}else{tmp = tmax = 0;++i;}}max++;for(i=mmp;max--;++i)printf("%c", a[i]);printf("\n");
}7.請實現一個函數,功能為顯示一個整數的二進制void binshow(int num, int len)
{int i = 0;int dd = 0;for (i=len-1; i>=0; --i){dd = num >> i & 1; printf("%d", dd);}printf("\n");
}8.請實現一個函數,功能為統計字符串中的單詞個數int countword(char *str){int i, cnt;i = cnt = 0;while(str[i] != '\0'){if(isalpha(str[i]) && (!isalpha(str[i+1])) )++cnt;++i;}return cnt;
}9.請實現一個函數,功能和系統的strrchr函數相同char *mystrrchr(char *str, int c){char *pre = 0;for(;*str!='\0';str++)if(*str == c) pre = str;return pre;
}10.請實現一個函數:根據用戶指定的行數打印出對應行數的楊輝三角void yangHuiSanJiao(int n){int a[100][100];int i, j;a[0][1] = 1;for(i=1;i<=n;++i){for(j=1;j<=i;++j){a[i][j] = a[i-1][j-1] + a[i-1][j];if(j == 1)printf("%d", a[i][j]);else printf(" %d", a[i][j]);}printf("\n");}
}11.請實現一個函數,功能為將一個新節點添加到鏈表的末尾typedef struct node *link;
typedef struct node{int id;int data;struct node *next;
}Node;void append(struct node *head, int id, int data){link p = head;link y = malloc(sizeof(Node));y->id = id;y->data = data;while(p->next) p = p->next;y->next = p->next;p->next = y;
}12.請實現一個函數,功能為求一個由10個整數組成的數組中的所有遞增和遞減序列的個數,
并且輸出所有的遞增和遞減序列
例如:
輸入:1 10 8 5 9 3 2 6 7 4
輸出:6
對應的遞增或遞減子序列為: 1 10 10 8 5 5 9 9 3 2 2 6 7void xulie(int s[]){int i, j, mark;mark = 0;i = 0;int cnt = 0;int m = 0;int n = 0;for(j=0;s[j]!='\0';++j){while(s[j] > s[j+1]){n = 1;++j;}if(n){cnt++;n = 0;}while(s[j] < s[j+1]){m = 1;++j;}if(m){cnt++;m = 0;}}printf("%d\n", cnt);cnt = 0;while(i<10){while(s[i] < s[i+1] && i<10){mark = 0;printf("%d ", s[i]);++i;}if(i==10) --i;if(mark == 0 ){if(i<10)printf("%d\n", s[i]);else printf("\n");mark = 1;++i;}--i;if(i==10) break;while(s[i] > s[i+1] && i<10){mark = 0;printf("%d ", s[i]);++i;}if(mark == 0){if(i<10)printf("%d\n", s[i]);else printf("\n");mark = 1;++i;}if(i==10) break;--i;}
}二.問答題(2分/題,共10分)
1.請簡述你所了解的C語言的特點答:簡潔,運行速度快,是用匯編來構造的語言,夠穩定,Linux系統內核大多數都是用C語言來構造,內存需要自己回收,可以直接控制內存,因為有指針,可能會導致程序的不安全,畢竟程序員不是神,但是自由,可以隨意操控內存變量,雖說沒有JAVA安全,但那是對于菜鳥而言,C語言的安全程度是針對程序員的變成能力而言,鍛煉我們縝密的思維,C語言是面向過程語言。
2.談談你對C語言內存管理的認識答: C語言內存管理分為堆、棧、代碼段、擴展段、全局變量區、靜態池,堆申請過的內存要及時回收,系統沒有自動幫你回收的機制,因為可回收,所以可以大量申請堆內存空間,而棧不會及時回收,所以不會申請很多空間。
3.談談你對C語言中數據(各種常量,變量,函數參數,字符串)的存儲認識答: 常亮存取在全局變量區,變量存取在棧中,函數參數存取在棧中,用完直接釋放不需要手動釋放,字符串看如果存取,如果是動態分配就存取在堆中,如果直接聲明,就存取在棧中。
4.談談你再解決一個編程問題時使用的方法和技巧答:編程的時候,經常遇到一些bug,很難去調試,所以就利用gdb 這個強大的調試工具,去調試我們很難找出bug的C程序,利用好調試軟件會讓我們更輕松的去編程。
5.列舉你學過的編程語言,談談你對這些語言的認識答:
JAVA 雖然足夠安全,那是因為指針被封裝了,導致內存不會輕易被修改,但是不夠自由,不如C靈活,而且代碼足夠長,不簡潔。只是應用層開發語言。
C++ 雖然足夠強大,面向對象語言,但是由于C++的可操控性太強,不是我們一般程序員能駕馭的。很多bug十分難調,沒有幾年編程經驗,很難靈活的使用C++ 去搞大工程的項目,如果只是會語法,那只是表面,真正的C++強大之處沒有幾十年的經驗,無法深深體會這門語言的精華所在
PYTHON 雖然足夠簡潔,但是由于是用C來開發的腳本語言,不可改變的速度慢,做大型項目,會受到腳本語言的限制,速度太慢,無法讓客戶體驗其安全性,但是最大的優點是語言簡潔,功能強大,開發效率極其高,語法比C簡潔,開發和lips速度相提并論,如果在Linux下寫一些不要求速度的腳本,那python是不二人選
?