C语言成长学习题(十六)
72.假設一維數組中存放互不相同的十個整數,要求根據輸入的下標值,即可直接刪除.
1 #include <stdio.h> 2 3 int mydel (int *a, int n, int k) 4 { 5 int i; 6 7 for (i = k; i < n - 1; i++) 8 *(a+i) = *(a+i+1); 9 n--; 10 11 return n; 12 } 13 14 void myout (int *a, int n) 15 { 16 while (n > 0) 17 { 18 printf("%4d", *a); 19 a++,n--; 20 } 21 printf("\n"); 22 } 23 24 void main (void) 25 { 26 int n, k, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 27 printf("Input data: "); 28 scanf("%d", &k); 29 printf("Before delete: "); 30 myout(a, 10); 31 n = mydel(a, 10, k); 32 printf("After delete: "); 33 myout(a, n); 34 } View Code結果:
Input data: 3
Before delete: ? ?1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ?10
After delete: ? ?1 ? 2 ? 3 ? 5 ? 6 ? 7 ? 8 ? 9 ?10
?
73.用選擇法將10個數按由小到大的順序進行排序.
1 #include <stdio.h> 2 3 void mysort (int *p, int n) 4 { 5 int i, j, k, t; 6 7 for (i = 0; i < n - 1; i++) 8 { 9 k = i; 10 for (j = k + 1; j < n; j++) 11 if (*(p+k) > *(p+j)) 12 k = j; 13 t = *(p+i); 14 *(p+i) = *(p+k); 15 *(p+k) = t; 16 } 17 } 18 19 void myout (int *p, int n) 20 { 21 while (n > 0) 22 { 23 printf("%4d", *p); 24 p++,n--; 25 } 26 printf("\n"); 27 } 28 29 void main (void) 30 { 31 int a[10] = {10, 9, 8, 2, 5, 1, 7, 3, 4, 6}; 32 33 printf("Before sort: "); 34 myout(a, 10); 35 mysort(a, 10); 36 printf("After sort: "); 37 myout(a, 10); 38 } View Code?
結果:
Before sort: ? 10 ? 9 ? 8 ? 2 ? 5 ? 1 ? 7 ? 3 ? 4 ? 6
After sort: ? ?1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ?10
?
74.輸入字符串,調用函數將字符倒置.
1 #include <stdio.h> 2 3 void myfun (char *p); 4 5 void main (void) 6 { 7 char a[50]; 8 printf("Input data: "); 9 gets(a); 10 myfun(a); 11 printf("After: "); 12 puts(a); 13 } 14 15 void myfun(char *p) 16 { 17 char *q = p, t; 18 while (*q != '\0') 19 q++; 20 q--; 21 while (p < q) 22 { 23 t = *p; 24 *p = *q; 25 *q = t; 26 p++; 27 q--; 28 } 29 } View Code?
結果:
Input data: qwertyuio
After: oiuytrewq
Mark:
如果程序的開頭加#include <string.h>,則可將程序段"while (*q != '\0') q++; q--;"簡化成"q = strlen(p) - 1;".
?
75.用遞歸的方法求斐波那契級數,n階斐波那契級數的公式為:
1 #include <stdio.h> 2 3 long int myf (int n); 4 5 void main (void) 6 { 7 int n; 8 long int x; 9 10 printf("Input data: "); 11 scanf("%d", &n); 12 if (n < 0) 13 printf("Wrong!\n"); 14 else 15 { 16 x = myf(n); 17 printf("%d階斐波那契級數的值為: %ld\n", n, x); 18 } 19 } 20 21 long int myf (int n) 22 { 23 long int x; 24 if (n == 1 || n == 2) 25 x = 1; 26 else 27 x = myf(n-1) + myf(n-2); 28 return x; 29 } View Code?
結果:
Input data: 6
6階斐波那契級數的值為: 8
?
76.假設有若干個字符串,它們分別由指針數組中的每一個元素(指針)指向.找出最小的字符串,并使指針數組的第一個元素指向它,而原來指向最小字符串的數組元素指向第一個字符串.
1 #include <stdio.h> 2 #include <string.h> 3 4 void main (void) 5 { 6 int i, k; 7 char *temp, *p[4]; 8 9 p[0] = "Zhang"; 10 p[1] = "Li"; 11 p[2] = "Chen"; 12 p[3] = "Wang"; 13 k = 0; 14 for (i = 1; i < 4; i++) 15 if (strcmp(p[i], p[k]) < 0) 16 k = i; 17 temp = p[0]; 18 p[0] = p[k]; 19 p[k] = temp; 20 printf("最小的字符串為: %s\n", p[0]); 21 } View Code?
結果:
最小的字符串為: Chen
?
77.假設有若干個字符串,并指針數組中的每一個元素分別指向它們,將字符串按由小到大的順序輸出.
1 #include <stdio.h> 2 #include <string.h> 3 4 void main (void) 5 { 6 int i, j; 7 char *temp, *p[4]; 8 9 p[0] = "Zhang"; 10 p[1] = "Li"; 11 p[2] = "Chen"; 12 p[3] = "Wang"; 13 for (i = 0; i < 3; i++) 14 for (j = 0; j < 3 - i; j++) 15 if (strcmp(p[j], p[j+1]) > 0) 16 { 17 temp = p[j]; 18 p[j] = p[j+1]; 19 p[j+1] = temp; 20 } 21 22 printf("按從小到大排序后的字符串順序為: \n"); 23 for (i = 0; i < 4; i++) 24 printf("%s\n", p[i]); 25 } View Code?
結果:
按從小到大排序后的字符串順序為:
Chen
Li
Wang
Zhang
?
78.用register說明整型變量只是向系統(tǒng)申請,將變量的值保留在CPU的寄存器中.由于寄存器有限,系統(tǒng)不一定把用戶申請的所有變量都保留在寄存器中,當CPU中沒有足夠的寄存器時,編譯程序把認為不適合存放在寄存器中的變量,自動按auto變量處理.
由于寄存器變量的值保留在CPU的寄存器中,其訪問速度比普通變量快,因此對頻繁使用的變量可用register進行說明.
?
79.假設學生基本情況包括學號和多門課的成績,計算某學生的平均成績.
1 #include <stdio.h> 2 3 #define N 6 4 5 struct ex 6 { 7 long num; 8 float s[N]; 9 }; 10 11 void main (void) 12 { 13 struct ex wang, *p; 14 float ave, sum = 0, x; 15 int i; 16 17 p = &wang; 18 printf("Input number: "); 19 scanf("%ld", &(p->num)); 20 printf("Input score: "); 21 for (i = 0; i < N; i++) 22 { 23 scanf("%f", &x); 24 p->s[i] = x; 25 } 26 printf("Number : %ld\n", p->num); 27 for (i = 0; i < N; i++) 28 { 29 sum = sum + p->s[i]; 30 printf("%8.1f", p->s[i]); 31 } 32 printf("\n"); 33 ave = sum / N; 34 printf("Average : %.1f\n", ave); 35 } View Code?
結果:
Input number: 1000101
Input score: 89.5 90.0 79.0
Number: 1000101
? ? ?89.5 ? ? 90.0 ? ? 79.0
Average: 86.2
?
80.malloc函數可以根據其實參的值分配若干字節(jié)的存儲區(qū),并返回該存儲區(qū)的地址,若系統(tǒng)不能提供足夠的內存單元,函數將返回(NULL).
在語句"p=(int *)malloc(2);"中,函數的參數表示向系統(tǒng)申請2個字節(jié)的內存空間,用來存放整型值.由于函數調用成功后將返回一個無類型的指針,因此在malloc函數名之前先通過強制轉換運算(int *)將指針的基類型轉換為int型,再講其值賦給基類型為int型的指針變量p.
sizeof(int)用來計算本系統(tǒng)int類型應占內存字節(jié)數.
free函數釋放的空間必須是經動態(tài)函數開辟的.
?
轉載于:https://www.cnblogs.com/zero-jh/p/5031290.html
總結
以上是生活随笔為你收集整理的C语言成长学习题(十六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell脚本 - 快速到达目录
- 下一篇: 开发环境配置--Ubuntu+Qt4+O