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 }
结果:
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 }
结果:
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 }
结果:
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 }
结果:
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 }
结果:
最小的字符串为: 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 }
结果:
按从小到大排序后的字符串顺序为:
Chen
Li
Wang
Zhang
78.用register说明整型变量只是向系统申请,将变量的值保留在CPU的寄存器中.由于寄存器有限,系统不一定把用户申请的所有变量都保留在寄存器中,当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 }
结果:
Input number: 1000101
Input score: 89.5 90.0 79.0
Number: 1000101
89.5 90.0 79.0
Average: 86.2
80.malloc函数可以根据其实参的值分配若干字节的存储区,并返回该存储区的地址,若系统不能提供足够的内存单元,函数将返回(NULL).
在语句"p=(int *)malloc(2);"中,函数的参数表示向系统申请2个字节的内存空间,用来存放整型值.由于函数调用成功后将返回一个无类型的指针,因此在malloc函数名之前先通过强制转换运算(int *)将指针的基类型转换为int型,再讲其值赋给基类型为int型的指针变量p.
sizeof(int)用来计算本系统int类型应占内存字节数.
free函数释放的空间必须是经动态函数开辟的.