当前位置:文档之家› C语言第六章

C语言第六章

C语言第六章

C语言第六章

C语言程序设计第四版第六章答案-谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++)

{printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

C语言程序设计 第六章 函数 试题及答案

C语言程序设计第六章函数试题及答案 1 选择题 *6.1建立函数的目的之一,以下正确的说法是。 A)提高程序的执行效率B)提高程序的可读性 C)减少程序的篇幅D)减少程序文件所占内存 参考答案:B *6.2 以下正确的说法是。 A)用户若需要调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义 C)用户系统根本不允许用户重新定义标准库函数 D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。 参考答案:B 6.3 以下正确的函数定义形式是。 A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)doubel fun(int x;int y); 参考答案:A *6.4 以下正确的函数形式是。 A)double fun(int x,int y){z=x+y;return z;} B)double fun(int x,y){int z;return z;} C)fun(x,y){int x,y;double z; z=x+y; return z;} D)double fun(int x,int y){double z;z=x+y;return z;} 参考答案:D *6.5以下正确的说法是。 A)实参和与其对应的形参占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用一个存储单元 D)形参是虚拟的,不占用存储单元 参考答案:A 参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。 6.6 若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。 A)没有返回值B)返回若干个系统默认值 C)返回一个用户所希望的函数值D)返回一个不确定的值 参考答案:D 参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。 6.7 以下不正确的说法是,C语言规定。 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)实参应与其对应的形参类型一致

C语言第六章答案及详解

第六章指针 一、选择题 1答案:A 分析:本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。 2答案:B 分析:本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。 3答案:C 分析:本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。 4答案:C 分析:本题主要考指针的定义及赋值,开始时使p指向a,q指向b,把它们的值交换,然后再显示。故得正确答案C。 5答案:C 分析:本题主要考函数指针的定义,函数前面的*号表求返回值是指针类型,void表示返回无值弄的。故选C。 6答案:A 分析:本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A 7答案:D 分析:本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。 B的正确形式是**q=2;C的正确形式应该是q=&p。 8答案:C 分析:本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2。 9答案:A 分析:本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象’a’,由于(*a)++;是实现a所指对象的自加,故由’a’变成’b’,故最终选A。 10答案:A 分析:本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0。

11答案:C 分析:本题考的是指针变量的赋值,虽然p没有赋值,表示没有指向某个具体的对象,但事实上系统会让它随机的指向存储单元里的一个对象,那么它的返回值应该是所指存储单元中的值。 12答案:B 分析:本题主要考函数中参数变量的定义,在B中连续定义两个变量,这在函数中是不可以的。 13答案:C 分析:本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值。 14答案:A 分析:本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。 B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p 所指对象。 15答案:B 分析:本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。 16答案:D 分析:在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a。 17答案:D 分析:本题主要考调用函数时指针传值和一般的变量的传值区别。指针通过地址传值,而变量是直接传值。c指针指向b,故对c指针里面的值的修改等于直接修改b中的值。 18答案:D 分析:本题主要考指针的定义及指针变量的值的输出方式,指针b指向a,故输出其值是511。 19答案:C 分析:本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是3。 20答案:C 分析:本题主考函数的嵌套调用和数据的类型转换,注意的是(int)(a+b),所以得到5.0。 21答案:A

C语言程序设计教程 第六章 课后习题参考答案

P158 1求三个实数最大值 #include float max(float,float,float); int main() { float a,b,c,m; printf("请输入三个实数:"); scanf("%f %f %f",&a,&b,&c); printf("最大数为%f\n",max(a,b,c)); return 0; } float max(float a,float b,float c) { float t; if(a>b&&a>c) t=a; else if(b>a&&b>c) t=b; else t=c; return t; } P158 2求最大公约数最小公倍数 #include int fun1(int a,int b); int fun2(int a,int b); int main() { int a,b; printf("请输入两个整数:"); scanf("%d %d",&a,&b); printf("最大公约数为:%d\n",fun1(a,b)); printf("最小公倍数为:%d\n",fun2(a,b)); } int fun1(int a,int b) { int t,r; if(a

} while((r=(a%b))!=0) { a=b; b=r; } return b; } int fun2(int a,int b) { int n; n=(a*b)/fun1(a,b); return n; } P158 3求完全数 #include void wan(int n); void main() { int n; for(n=1;n<1000;n++) wan(n); printf("\n"); } void wan(int n) { int i,s=0; for(i=1;i<=n/2;i++) { if(n%i==0) s=s+i; } if(n==s) printf("%d\t",n); } P158 4无暇素数 #include #include

C语言第六章课后答案

xt6-1 #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int main() {int i,j,min,temp,a[11]; printf("enter data:\n"); for (i=1;i<=10;i++) {printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++)

printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } xt6-3 #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum); return 0; }

数据结构(C语言版)第6章练习 清华大学出版社

第六章数据结构作业 第六章树 选择题 1.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( ) A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE 2.算术表达式a+b*(c+d/e)转为后缀表达式后为() A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++ 3. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为() A.5 B.6 C.7 D.8 4. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是() A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是() A.9 B.11 C.15 D.不确定 6.具有10个叶结点的二叉树中有()个度为2的结点, A.8 B.9 C.10 D.ll 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数为() A. 250 B. 500 C.254 D.505 E.以上答案都不对 8. 有n个叶子的哈夫曼树的结点总数为()。 A.不确定 B.2n C.2n+1 D.2n-1 9. 一棵具有 n个结点的完全二叉树的树高度(深度)是() A.?logn?+1 B.logn+1 C.?logn? D.logn-1 10.深度为h的满m叉树的第k层有()个结点。(1=

C语言编程第六章作业答案

1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 辗除法——辗转相除法,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至3000年前。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。 证明:设两数为a、b(a>b),求它们最大公约数(a、b)的步骤如下:用a除以b,余数为r 1。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得r2 . 若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。 例如,和7890 的最大公因子是6, 这可由下列步骤看出: a b a mod b 7890 5106 7890 5106 2784 5106 2784 2322 2784 2322 462 2322 462 12 462 12 6 12 6 0 #include #include main() { int a,b,num1,num2,temp;/*temp主要用来转换大小*/ printf("please input two numbers:\n"); scanf("%d,%d",num1,&num2);

if(num1 #include main() { char c; int letter=0,space=0,digit=0,others=0; printf("please input some characters\n"); while((c=getchar())!='\n') /*终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于’\n’,如果不等于,就执行循环体*/ { if(c>='a'&&c<='z'||c>='A'&&c<='Z') /*如果满足字符那么就在此条件范围内*/ letter++; /*字符累加*/ else if(c==' ') space++; /*空格的累加*/ else if(c>='0'&&c<='9') digit++;/*数字累加*/ else others++;/*其他字符累加*/ } printf("all in all:letter=%d,space=%d,digit=%d,others=%d",letter,space,digit,others); getch(); 评析:此程序最主要是用while,if复合语句 (利用while语句,条件为输入的字符不为'\n'.)

《C语言程序设计》第6章习题答案

1、选择题 (1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B 2、填空题 (1)a=10,b=20 a=20,b=10 (2)**pp=60 3、程序设计题 (1) #include char *month_name(int n); void main() { int n; printf("\nPlease enter 1 integer:"); scanf("%d",&n); printf("%d month :%s\n",n,month_name(n)); } char *month_name(int n) { static char*name[]={"illegal month", "Jan","Feb","Mar","Apr","May","Jun", "July","Aug","Sept","Oct","Nov","Dec"}; return ((n<1||n>12)?name[0]:name[n]); } (2) #include #define N 10 sort(int data[]) { int i,j,min_a,temp;

for(i=0;i void reverse(char *c); void main()

《C语言程序设计》课后习题答案第6章

6.1 输入两个正整数m,n,求其最大公约数和最小公倍数。 int m,n,temp,b,y; printf("请输入两个正整数m,n:\n"); scanf("%d,%d",&m,&n); if(m='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else other++; } printf("共有字母%d个,共有空格%d个,共有数字%d个,共有其他字符%d个",letters,space,digit,other); 6.3 求s=a+aa+aaa+...+aa...a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5),n有键盘输入 int i=1,a,n,sum=0,temp=0; printf("请输入a、n的值:\n"); scanf("%d,%d",&a,&n);/*一定不要忘记加&&*/ while(i<=n) { temp=temp+a; sum=sum+temp; a=a*10; ++i; } printf("s=a+aa+aaa+...+aa...a的值为%d\n",sum);

(完整版)c语言第六章循环结构程序设计(习题册答案)

第六章循环结构程序设计 基础练习(A) 一、选择题 1、C语言中while和do-while循环的主要区别是(A)。 A) do-while的循环体至少无条件执行一次 B) while的循环控制条件比do-while的循环控制条件严格 C) C)do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句 2、以下描述中正确的是(C)。 A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用 复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操 作 D)do-while循环中,根据情况可以省略while 3、设有程序段 int k=10; while(k) k=k-1; 则下面描述中正确的是(A)。 A)while循环执行10次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 4、下列循环语句中有语法错误的是( D )。 A) while(x=y) 5;B) while(0) ; C) do 2;while(x==b);D) do x++ while(x==10); 5、已知int i=1;执行语句while (i++<4) ;后,变量i的值为(C)。 A) 3 B) 4 C) 5 D) 6 6、语句while(!E);中的表达式!E等价于(A)。 A)E==0 B)E!=1 C)E!=0 D)E==1 7、下面程序段的运行结果是(A)。 a=1; b=2; c=2; while(a main() { int num=0; while(num<=2) { num++; printf(“%d\n”,nu m); } } A)1 B)1 C)1 D)1 2 2 2 3 3 9、以下能正确计算1×2×3×…×10的程序段是(C)。

C语言入门第六章知识点总结

传智播客C/C++课堂笔记C语言入门6 6.1如何节约内存-位运算 内存单元,即1B,我们说char型占1个内存单元(1B),而short型占2个内存单元(2B)。1B被当成整体来看。但同时1 B = 8 bits1个字节有8个位,每个位有0、1两个取值。 总体来说,C语言中的位运算符有以下两类: 位逻辑运算符:(位逻辑运算以位(bit)为单位) &(位“与”)、^(位“异或”)、|(位“或”)、~(位“取反”)。 移位运算符:<<(左移)、>>(右移) 位“取反”:操作符为“~”,如果A为10101010,那么~A返回的结果为01010101,即每位都取反,0变成1,1变成0,需要注意的是,位取反运算并不改变操作数的值位“与”:操作符为&,将对两个操作数的每一位进行与运算,位“与”运算的准则如下:1 & 1=1 1 & 0=0 0 & 1=0 0 & 0=0 位“或”:操作符为|,将对两个操作数的每一位进行或运算,位“或”运算的准则如下:1 | 1=1 1 | 0=1 0 | 1=1 0 | 0=0 位“异或”:操作符为^,将对两个操作数的每一位进行异或运算。通俗地讲,如果两个位相同(同为0或同为1),结果为0,若两个位不同(一个为0,另一个为1),结果为1,对应的准则为:1 ^ 1=0 1 ^ 0=1 0 ^ 1=1 0 ^ 0=0 移位运算表达式的基本形式为: A << n; /*左移*/ 或 A >> n; /*右移*/ A称为操作数,其必须为数字型变量或数字型常量,此处的数字型包括整型、浮点型和char型,A中存储的0、1序列向左或右移动n位,移动后的值作为整个表达式的输出,执行移位运算并不改变操作数A的值。 小结: 位运算主要分为位逻辑运算和移位运算两大类,位逻辑运算主要有位取反运算、位或运算、位与运算和位异或运算,使用时应注意和普通变量的逻辑运算区分。移位运算分为向左移动和向右移动两类,对无符号数或有符号正数来说,编译器会自动为空白位补0,对有符号负数来说,当填充的空白位牵扯到符号位时,编译器会对符号位进行特殊处理。 6.2不局限内存-文件 输入输出都是由printf函数和scanf函数来完成,完成的也只是极其简单的任务,所有的变量和数字什么的都是放在内存中,一旦断电,所有的数据都会丢失,有时,希望能将结果保存起来,下次开机时再使用,这就要用到文件。 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等)

C语言程序设计现代方法第六章答案

Chapter 6 Answers to Selected Exercises 4. [was #10] (c) is not equivalent to (a) and (b), because i is incremented before the loop body is executed. 10. [was #12] Consider the following while loop: while (…) { … continue; … } The equivalent code using goto would have the following appearance: while (…) { … goto loop_end; … loop_end: ; /* null statement */ } 12. [was #14] for (d = 2; d * d <= n; d++) if (n % d == 0) break; The if statement that follows the loop will need to be modified as well: if (d * d <= n) printf("%d is divisible by %d\n", n, d); else printf("%d is prime\n", n); 14. [was #16] The problem is the semicolon at the end of the first line. If we remove it, the statement is now correct: if (n % 2 == 0)

C语言程序设计第6章部分习题

(1)A (2)A (3)B、C (4)D (1)5 (2)8 #include void swap(int *p1,int *p2) { int *p; int i; p=p1;p1=p2;p2=p; i=*p1;*p1=*p2,*p2=i; } int main(void) { int a,b,*pt1,*pt2; scanf(“%d, %d”,&a,&b); pt1=&a;pt2=&b; if(a int main(void) { int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; printf("%d,%d\n",*p+2,*(p+2)); return 0; } 结果:2,2 (2) #include int main(void) { int i; int a[10],*p=a; for(i=0;i<10;i++)*p++=2*i; for(i=0;i<10;i++)printf("%d ",a[i]); printf("\n");

return 0; } 结果:024681012141618 (3) #include int main(void) { int a[5]={0,1,2,3,4},*p; p=&a[3]; printf("%d\n",*--p); return 0; } 结果:2 (4) #include int main(void) { int a[5]={1,3,5,7,9},*p,**k; p=a;k=&p; printf("%d,",*(p++)); printf("%d,",**k); return 0; } 结果:1,3, (5) #include int main(void) { static int a[]={1,3,5}; int s,i,*p=NULL; s=1;p=a; for(i=0;i<3;i++) s*=*(p+i); printf("%d\n",s); return 0; } 结果:15 (6) #include int main(void) { static int a[]={1,2,3,4,5}; int *p=NULL; p=a; printf("%d,",*p);

C语言第六章循环结构复习题

循环结构程序设计复习题 一.选择题 1.以下while循环中,循环体执行的次数是:() k=1; while (--k) k=10; a) 10次b) 无限次c) 一次也不执行d) 1次 2.有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=0; while (!x!=0) x++; a) 退出while循环后,x的值为0 b) 退出while循环后,x的值为1 c) while的控制表达式是非法的 d) while循环执行无限次 3. 有以下程序段,其中n为整型变量,执行后输出结果是:() n=20 ; while(n--) ; printf(“%d”,n) ; a) 2 b) 10 c) -1 d) 0 4. 有以下程序段,其中t为整型变量,以下选项中叙述正确的是:() t=1; while (-1)

{ t--; if(t) break;} a) 循环一次也不执行 b) 循环执行一次 c) 循环控制表达式(-1)不合法 d) 循环执行2次 5. 有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=-1; do {;} while (x++); printf(“x=%d”,x); a) 该循环没有循环体,程序错误 b) 输出x=1 c) 输出x=0 d) 输出x=-1 6. 有以下程序段,其中x,y为整型变量,程序输出结果是:() for(x=0,y=0;(x<=1)&&(y=1);x++,y--) ; printf(“x=%d,y=%d”,x,y); a) x=2,y=0 b) x=1,y=0 c) x=1,y=1 d) x=0,y=0

相关主题
文本预览
相关文档 最新文档