printf( Enter insert address: " scanf("d",&n): printf("\n insert string result is: %s \n", s1): 7.1用指针方法完成冒泡排序函数 解:参考程序如下: #includestdio. h> define 20 void sort(int *a, int n) for(i=0;i<n-1; i++) if(*(a+j)》*(a+j+1)) (a+j)=*(a+j+1) 米(a+j+1)=t main a[N]; printf(" Enter number: scanf("d",&n): printf( Enter array element: scanf(%d", a+i) printf( After Sorted: \n") for(i=0; i<n; i++) printf(%d" *(ati)) printf(\n") 7.12用指针方法完成选择法排序函数。 解:参考程序如下:
gets(s2); printf("Enter insert address:"); scanf("%d",&n); insert(s1,s2,n); printf("\n insert string result is: %s \n",s1); } 7.11 用指针方法完成冒泡排序函数。 解:参考程序如下: #include<stdio.h> #define N 20 void sort(int *a,int n) { int i,j,t; for (i=0;i<n-1;i++) for (j=0;j<n-1-i;j++) if (*(a+j)>*(a+j+1)) { t=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=t; } } main() { int i,n,a[N]; printf("Enter number:"); scanf("%d",&n); printf("Enter array element:"); for (i=0;i<n;i++) scanf("%d",a+i); sort(a,n); printf("After Sorted: \n"); for (i=0;i<n;i++) printf("%d ",*(a+i)); printf("\n"); } 7.12 用指针方法完成选择法排序函数。 解:参考程序如下:
#include<stdio. h> define 20 void sort(int *x, int n) I int i, j,k, t: for(i=0;i<n-1;i++) [k=i for (j=i+l; j<n: j++) if(*(x+j)<*(x+k)) t=*(x+ *(x+i)=*(x+k) *(x+k)=t; i,a[N]={23,12,33,56,17,8,25} sort(a, 7) printf( After Sorted: \n") for(i=0;i<7;i++) printf(%d"*p++) printf(" \n 7.13用指针操作实现将整形数组元素循环右移m位的程序 解:关键是移动位置的计算,下标i的前一元素位置应为:(N+i-m)%N,其中,N是循 环右移的元素个数, count是移动元素的个数。如果N是m的倍数,外循环只有一次。参 考程序如下: #include<stdio. h #definen 20 void move (int *x, int n, int m) I int i, j,k for (j=0; j<m: j++) i k=lIl: t=j i=(n+t-m)%n while (il=j)
#include<stdio.h> #define N 20 void sort(int *x,int n) { int i,j,k,t; for (i=0;i<n-1;i++) { k=i; for (j=i+1;j<n;j++) if (*(x+j)<*(x+k)) k=j; if (k!=i) { t=*(x+i); *(x+i)=*(x+k); *(x+k)=t; } } } main() { int i,a[N]={23,12,33,56,17,8,25}; int *p=a; sort(a,7); printf("After Sorted: \n"); for (i=0;i<7;i++) printf("%d ",*p++); printf("\n"); } 7.13 用指针操作实现将整形数组元素循环右移 m 位的程序。 解:关键是移动位置的计算,下标 i 的前一元素位置应为:(N+i-m)%N,其中,N 是循 环右移的元素个数,count 是移动元素的个数。如果 N 是 m 的倍数,外循环只有一次。参 考程序如下: #include<stdio.h> #define N 20 void move(int *x,int n,int m) { int i,j,k,t,count=0; for (j=0;j<m;j++) { k=x[j]; t=j; i=(n+t-m)%n; while (i!=j)
f(count=n)return x[t]=k: count++ if (count==n)return inti,a[N={1,2,3,4,5,6,7,8,9,10,11,12}; printf(" Enter m: " scanf("d", &m) move(a, 12, m) printf (" After moved: \n) for(i=0;i<12;i+) printf("d",*p++) printf("\n") 7.14设计程序,输入星期号,输出对应的的英文星期名称。 解:用指针数组表示星期名称,参考程序如下: #include <stdio. h maino i char *weekname [7]=[Sunday", "Monday", "Tuesday", "Wednesday scanf(%d", &n) if(n<=7)&&(n>=1) printf("It is %. *(weekname+n)) printf("It is wrong. " 7.15编写程序,输入数组大小后,通过动态分配内存函数 malloc产生数组
{ x[t]=x[i]; count++; if (count==n) return; t=i; i=(n+t-m)%n; } x[t]=k; count++; if (count==n) return; } } main() { int i,a[N]={1,2,3,4,5,6,7,8,9,10,11,12}; int m,*p=a; printf("Enter m:"); scanf("%d",&m); move(a,12,m); printf("After moved: \n"); for (i=0;i<12;i++) printf("%d ",*p++); printf("\n"); } 7.14 设计程序,输入星期号,输出对应的的英文星期名称。 解:用指针数组表示星期名称,参考程序如下: #include <stdio.h> main() { char *weekname[7]={"Sunday","Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday"}; int n; printf("Enter week:"); scanf("%d",&n); if ((n<=7)&&(n>=1)) printf("It is %s.",*(weekname+n)); else printf("It is wrong."); } 7.15 编写程序,输入数组大小后,通过动态分配内存函数 malloc 产生数组
解:设数组元素类型为整型。参考程序如下: include <stdio. h> #include <stdlib. h> p=(int *)malloc(n*sizeof (int)) return p, main printf( Enter n: " i for (i=0; i<n; i++) printf( \n") 第八章结构及其他 81C语言的结构类型在构造复杂数据类型方面与数组有何不同?(略) 82C语言的结构和联合有何区别?(略) 83完成下面判断 (1)说明一个结构变量时,系统分配给它的内存是各成员所需内存量的总合。(错) (2)说明一个结构变量时,系统分配给它的内存是成员中占内存量最大者所需的内 存容量。(错) (3)说明一个联合变量时,系统分配给它的内存是各成员所需内存量的总合。(错) (4)说明一个联合变量时,系统分配给它的内存是成员中占内存量最大者所需的内 存容量。(对) (5)结构变量可以整体赋值。(对) (6)结构变量名可以作函数形参。(对) (7)一个联合变量中不能同时存放其所有成员。(对) (8)联合类型数据可以出现在结构类型定义中,结构类型数据也可以出现在联合类 型定义中。(对) (9) enum color (red, blue, yellow, green) a, b; (Xf)
解:设数组元素类型为整型。参考程序如下: #include <stdio.h> #include <stdlib.h> int *array(int n) { int *p; p=(int *)malloc(n*sizeof(int)); return p; } main() { int i,n,*p; printf("Enter n:"); scanf("%d",&n); p=array(n); if (p) { for (i=0;i<n;i++) *(p+i)=i; for (i=0;i<n;i++) printf("%d, ",*(p+i)); printf("\n"); } } 第八章 结构及其他 8.1 C 语言的结构类型在构造复杂数据类型方面与数组有何不同?(略) 8.2 C 语言的结构和联合有何区别?(略) 8.3 完成下面判断: (1)说明一个结构变量时,系统分配给它的内存是各成员所需内存量的总合。(错) (2)说明一个结构变量时,系统分配给它的内存是成员中占内存量最大者所需的内 存容量。(错) (3)说明一个联合变量时,系统分配给它的内存是各成员所需内存量的总合。(错) (4)说明一个联合变量时,系统分配给它的内存是成员中占内存量最大者所需的内 存容量。(对) (5)结构变量可以整体赋值。(对) (6)结构变量名可以作函数形参。(对) (7)一个联合变量中不能同时存放其所有成员。(对) (8)联合类型数据可以出现在结构类型定义中,结构类型数据也可以出现在联合类 型定义中。(对) (9)enum color {red,blue,yellow,green} a,b; (对)
(10) enum color{"red”,"blue, yellow,"gren'”}ab,(错) (11) typedef double real;的作用是定义了一个新的数据类型。(错) (12) typedef double real;的作用是定义了一个新的数据类型表示符real。(对) 84计算下面表达式 (1)intb=2;计算b< 解:8 (2)inta=10.b=5;计算(a&b)&&b (3)inta=3;计算~ ala l a a&l8 8.5设inta,写出用位操作将a变量清0、低4位置“1”的位运算表达式和判断a的 右边第3位是否为“1”的逻辑表达式 解:将a变量清0的表达式:a&0 低4位置“1”的表达式:a115 判断a的右边第3位是否为“1”的逻辑表达式:a&4 86阅读程序,给出程序的运行结果。 (1)#include<stdio i int nu char name[ 101: Int age void pinfo(struct stu *p) i printf("%5d"p->num); printf("%10s", p->name) printf("%4d\n,, p->age) f struct stu student[3]=( 19901, "LiHong", 19) 19903, Zhang Yang", 19)) info(student) pinfo(student+2) 解:901 LiHong 9903 Zhang Yang 19 (2)#include<stdio. h union
(10)enum color {“red”, “blue”, “yellow”, “green”} a,b; (错) (11)typedef double real; 的作用是定义了一个新的数据类型。(错) (12)typedef double real; 的作用是定义了一个新的数据类型表示符 real。(对) 8.4 计算下面表达式。 (1)int b=2; 计算 b<<2 解:8 (2)int a=10,b=5; 计算 (a&b)&&b 解:0 (3)int a=3; 计算 ~a|a !a a&18 解:-1,0 2 8.5 设 int a; 写出用位操作将 a 变量清 0、低 4 位置“1” 的位运算表达式和判断 a 的 右边第 3 位是否为“1”的逻辑表达式。 解: 将 a 变量清 0 的表达式:a&0 低 4 位置“1”的表达式:a|15 判断 a 的右边第 3 位是否为“1”的逻辑表达式: a&4 8.6 阅读程序,给出程序的运行结果。 (1) #include<stdio.h> struct stu { int num; char name[10]; int age; }; void pinfo(struct stu *p) { printf(“%5d “,p->num); printf(“%10s”,p->name); printf(“%4d\n”,p->age); } main() { struct stu student[3]={ {9901, "LiHong",19}, {9902, "Wangtao",18}, {9903, "ZhangYang",19} }; pinfo(student); pinfo(student+2); } 解:9901 LiHong 19 9903 ZhangYang 19 (2) #include<stdio.h> main() { union