新概念C语言能力教程练习05答案
c c++语言程序设计教程 实验指导与习题解答 第五章答案

第六次实验实验1#include"stdlib.h"#include"stdio.h"int main(int argc,char *argv[]){FILE *fp;char string[81],*filename=string;if(argc!=2||(fp=fopen(argv[1],"r"))==NULL){printf("can't open file");exit(0);}while(fgets(string,81,fp)!=NULL)fp=fopen(filename,"r");fclose(fp);}#include<stdio.h>#include<stdlib.h>main(){FILE *fp;char str[100];int i;if((fp=fopen("test.dat","w"))==NULL){printf("Cannot open the file!");exit(0);}printf("Input a string:");gets(str);for(i=0;str[i]&&i<100;i++){if(str[i]>='a'&&str[i]<='z') str[i]=str[i]-32;fputc(str[i],fp);}fclose(fp);fp=fopen("test.dat","r");fgets(str,100,fp);printf("%s\n",str);fclose(fp);}#include<stdio.h>#include<stdlib.h>#define SIZE 3struct student{long num;char name[10];int age;char address[10];} stu[3],out;void fsave(){FILE *fp;int i;if((fp=fopen("student.dat","wb"))==NULL){printf("Cannot open file!");exit(1);}for(i=0;i<3;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("File write error.\n");fclose(fp);}void main(){FILE *fp;int i;for(i=0;i<3;i++){printf("Input student%d:",i+1);scanf("%ld%s%d %s",&stu[i].num,&stu[i].name,&stu[i].age,&stu[i].address);}fsave();fp=fopen("student.dat","rb");printf(" No. Name Age Address\n");while(fread(&out,sizeof(struct student),1,fp))printf("%4ld%-10s%4d %-15s\n",out.num,,out.age,out.address);fclose(fp);}。
新概念C语言能力教程练习10答案

结构型是一种数据类型,与int,float类似,用于规定相关存储单元的类型,但结构型是用户自己定义的数据类型。
结构型变量与整型变量类似是相关存储单元的标识。
结构型用于定义结构型变量。
10.2答案:结构型中成员的类型可以是其它结构型。
测试程序代码:#include <stdio.h>#include <string.h>struct date{int year,month,day;};struct student{int no;char name[10];struct date birthday;float fm,fe;};int main(){struct student stu1;stu1.no=8;strcpy(,"张三");stu1.fm=stu1.fe=90.0;stu1.birthday.day=1;stu1.birthday.month=1;stu1.birthday.year=2012;printf("学号:%d\n", stu1.no);printf("姓名:%s\n", );printf("生日:%d年%d月%d日\n", stu1.birthday.year, stu1.birthday.month, stu1.birthday.day);printf("数学成绩:%.1f\n",stu1.fm);printf("英语成绩:%.1f\n", stu1.fe);return 0;}10.3答案:#include <stdio.h>#include <string.h>struct student{int no;char name[10];float fm,fe;};{struct student stu1,stu2;printf("请输入两个学生的学号,姓名,数学和英语成绩\n");scanf("%d%s%f%f",&stu1.no,&,&stu1.fm,&stu1.fe);scanf("%d%s%f%f",&stu2.no,&,&stu2.fm,&stu2.fe);if(strcmp(,)<0){printf("学号:%d 姓名:%s 数学成绩:%.1f 英语成绩:%.1f\n",stu1.no,,stu1.fm,stu1.fe);printf("学号:%d 姓名:%s 数学成绩:%.1f 英语成绩:%.1f\n",stu2.no,,stu2.fm,stu2.fe);}else{printf("学号:%d 姓名:%s 数学成绩:%.1f 英语成绩:%.1f\n",stu2.no,,stu2.fm,stu2.fe);printf("学号:%d 姓名:%s 数学成绩:%.1f 英语成绩:%.1f\n",stu1.no,,stu1.fm,stu1.fe);}return 0;}10.4答案:#include <stdio.h>struct student{int no;char name[10];float fm,fe;};int main(){struct student stu[5],temp;int i=0,j=0;printf("请输入5个学生的学号,姓名,数学和英语成绩\n");for(i=0;i<5;i++)scanf("%d%s%f%f",&stu[i].no,&stu[i].name,&stu[i].fm,&stu[i].fe);for(i=0;i<5;++i){for(j=i+1;j<5;++j){if(stu[i].fm>stu[j].fm){temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}}printf("按照数学成绩升序排列:\n");for(i=0;i<5;++i)printf("学号:%d 姓名:%s 数学成绩:%.1f 英语成绩:%.1f\n",stu[i].no,stu[i].name,stu[i].fm,stu[i].fe);return 0;}10.5答案:如有struct student stu1, stu2;,赋值时stu1=stu2可转换成函数调用assign(&stu1, &stu2, sizeof(struct student))。
(完整版)【推荐】C语言各章节练习题(含答案)

—、C 语言概述练习题选择1 . 一个C 程序的执行是从A 。
A) 本程序的main 函数开始,至U main 函数结束B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C) 本程序文件的第一个函数开始,到本程序 main 函数结束 D) 本程序的main 函数开始,到本程序文件的最后一个函数结束 2. 以下叙述不正确的是_D ____________ 。
A) 一个C 源程序必须包含一个 main 函数 B) 一个C 源程序可由一个或多个函数组成 C) C 程序的基本组成单位是函数D) □在C 程序中,注释说明只能位于一条语句的后面3. 以下叙述正确的是 __C ___________ 。
A) 在对一个C 程序进行编译的过程中,可发现注释中的拼写错误 B) 在C 程序中,main 函数必须位于程序的最前面 C) C 语言本身没有输入输岀语句D) C程序的每行中只能写一条语句4. 一个 C 语言程序是由 _B __________ 。
A) 一个主程序和若干个子程序组成B) 函数组成 C)若干过程组成D)若干子程序组成二、数据类型、运算符与表达式选择.1 .若x 、i 、j 、k 都是int 型变量,则计算下面表达式后, x 的值为 C. x=(i=4,j=16,k=32)A) 4B) 16帖2D) 522. ________________________________________________________ 下列四组选项中,均不是 C 语言关键字的选项是 __A _______________________________________________ 。
A) define IF type B) getc char printf C) include case scanf D) while gopow3.下列四组选项中,均是不合法的用户标识符的选项是BA) W P_0 do B) b-a [g^to int C) float laO _A D) -123 abc TEMP若a 是实型变量,C 程序中允许赋值a=10,因此实型变量中允许存放整型数C) 在C 程序中,%是只能用于整数运算的运算符 (字符型也可以) D) 在C 程序中,无论是整数还是实数,都能被准确无误地表示4. 下列四组选项中,均是合法转义字符的选项是\n ' B) ‘ '' \017”'C) ‘ \018\f '' xab ' D) ‘ \\0 '' \101 '' xlf5. 下面不正确的字符常量是 AB)C)D) ‘ K '6. 以下叙述不正确的是D7. A) 在C 程序中,MAX 和max 是两个不同的变量b 中的值将放入a 中,而b 中的值不变A)在C 程序中,逗号运算符的优先级最低 C) 若a 和b 类型相同,在计算了赋值表达式D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值 B)a=b 后, 以下叙述正确的是 在C 程序中,每行只能写一条语句8已知字母A 的ASCII 码为十进制数65,且c2为字符型,则执行语句c2=' A'+'6‘‘ 3'后,c2中的值为A9. sizeof(float) 是 B12 •设以下变量均为int 类型,则值不等于7的表达式是 CC~(x=6,x+1,y=6,x+y) D) (y=6,y+1,x=y,x+1) 填空1 .若有以下定义,则计算表达式 y+=y-=m*=y 后的y 值是【1】。
新概念二册子Lesson5 习题教学提纲

新概念二册子L e s s o n5习题跟我学新概念第二册Lesson 5 同步测试Class_________ Name ____________ 1.句意填空用括号内所给的词的适当形式填空,使句意完整(10%)1. I _________ never _________( be) to Paris.2. She __________ already ____________ (shut ) the door.3. Mary has ____________ (have ) this book for 7 years.4. Up to now, he _________________ (send ) 5 letters to me.5. They _________ ( get) up early yesterday.II翻译短语(20%)6.五英里____________________________7.在去…大路上___________________8.越过这段距离__________________________9.用了三分钟_________________________10.到目前为止____________________________11.许多______________________________12.配件________________________________13.紧急信息____________________________14.用这种办法____________________________15.在某种意义上_________________________III、单项选择从每小题所给的四个选项中,选出一个正确答案(10%)16. ______the way to the station, I bought some flowers .A. OnB. InC. ByD. At收集于网络,如有侵权请联系管理员删除17. Jane has two brothers, one is John,______ is Herry.A. anotherB. the othersC.the otherD.other18. The trouble with owning a foreign car is that ____ parts are so expensibe.A. looseB. extraC. spareD.separate19. Up till now I ____ more than one hundred famous worksA. have readB. has readC.readD. am reading20. During the night, they _____ a distance of 80 miles in the forest.A.getB. tookC.coveredD. RanIV、完成对话。
最新最全标准C语言程序设计第五版课后基础练习题复习答案完整版.doc

课后练习题答案Chapter 11.1×√×√√×√××√1.2b c1.3ad1.4semicolon printf math.h \nChapter 22.1 ×√××√√×√××√×2.2 typedef 255 external constChapter 33.1 ×√××√√×××√√√3.2 integer modula 6 logical sizeof paratheses typeconversion precedence3.3 F F T F F F3.4 F T T T F3.5 (b) (c)3.6 0 -2 7 10.25 false 3 3 13.10 0 1 1 1 13.11d}1003.121101113.13 13.14 2003.15 x<=y3.16 TRUE3.192143.20-4040Chapter 44.1 ×√√√√√××√√√×4.2 %hd %x ctype.h %l %*d [^] blank 6 - %e4.4 (a) scanf(“%d %c %d”, &a, &b, &c); (b)scanf(“%d %f %s”, &a, &b, &c);(c) scanf(“%d-%d-%d”, &a, &b, &c); (d) scanf(“%d %s %d”, &a, &b, &c);4.5 (a)10x1.230000 (b)1234x 1.23 (c)1234 456.000000 (d) “123.40 ”(e) 1020 1222(乱码)4.7 (a)1988 x (b)乱码(c)120 乱码(d)乱码 x4.8 (a)1275 -235.740000(b) 1275-235.740000(c) 0 0.000000(d) 1275xxxx-235.74(e)Cambridge(f)1275 Cambridge4.10 1988 无无Chapter 55.1 √×√××××××√5.2 && switch break if-else x=y5.4 (a)x = 2; y = 0; (b) x = 1; y = 0;5.5 (a) if (grade <= 59)if (grade >= 50)second = second + 1;(b) if (number > 100) printf(“out of range”);else if (number < 0) printf(“out of range”);else sum = sum + number;(c)if (T > 200) printf(“admitted”);else if (M > 60){if (M > 60) printf(“admitted”);}else printf(“not admitted”);5.6 F T F T5.8 (a) x > 10 (b) (x != 10)||(y ! = 5) || (z >= 0)(c) (x + y != z) || (z > 5) (d) (x > 5) || (y != 10) || (z >= 5)5.9 (a) x = 5; y = 10; z = 1 (b) x = 5; y = 10; z = 1(c) x = 5; y = 0; z =0 (d) 无变化5.10 (a) x= 0; y = 2; z = 0; (b) x = 1; y = 2; z = 0;5.12 85.13 Delhi Bangalore END5.1424485.15 0 0 25.16 255.17 Number is negative5.18 ABC5.19 105.20 无输出Chapter 66.1 √√√××√×√√×6.2 n continue infinite indefinite-repetition-loop counter-variable 6.9 (a) 43210 (b)4321 (c)55555…55555(d)10 86.11 (a)无数次 x = 10; x = 5; x = 10; x = 5; x = 10;…(b)5次 m = 3, m = 5, m = 7, m = 9, m = 11(c)无数次, i 恒为0(d)4次 m = 11 n = 9; m = 12 n = 11; m = 13, n = 13; m = 14, n = 15;6.13(a)for (n = 1; n <= 32; n = n * 2) printf("%d ", n);(b)for (n = 1; n <= 243; n = n * 3) printf("%d ", n);(c)for (n = -4; n <= 4; n = n + 2) printf("%d ", n);(d)sum = 0;for (i = 2; i <= 16; i = sum){sum = sum + i;n = n - i;printf("%d %d %d \n", i, sum, n);}6.16 100 90 80 70 60 50 40 30 20 10 06.17 m = 20时陷入死循环,程序无输出6.18 16.19 16.20 死循环,延长时间用Chapter 77.1 √×√××√√√√××√7.2 index/subscript run-time dynamic multi-dimensional sorting7.14 157.15 HLOWRDChapter 88.1 ×√√√×√××√×××√×√8.2 %[ a-z,A-Z] strcpy 3 stdlib gets strlen strstr strcmp s1-s2 puts8.6 (a) The sky is the limit.(b) The sky is(c) T(d) The sky is the limit(e)8410410132115107121321051153211610410132108105109105116(f)输出1 2 3 4 5 6 7 8 9…21这些ASCII码对应的字符,无显示符号(g)%(h)U8.7 (d)8.8 78.9 (a)he(b)heorshe(c)5 78.11 puneChapter 99.1 √×××√×××√√√×××√×√√××9.2 actual-parameter local-variable int data-type variable-name scope recursive static type auto9.8 abceg9.9 abcdeg9.12 (a) 5 (b) 4 (c)3 (d)09.13 (a) 5 4 4 0 (b) 5.0 4.0 3.0 0.679.14 题目错,设z = 5;结果为:200 10009.15 1009.16 x = 3; y = 0Chapter 1010.1 ×√√√√×√√×√√√××√10.2 typedef union tag_name pointer memberChapter 1111.1 √×√√√√×√××11.2 address * * 0 null赠送以下资料5以内的加减法口算练习题姓名得分2+2= 3+2= 0+2= 0+1= 3-1= 2+1= 2+3= 1+4= 1-0= 2+2= 0-0= 3+2= 3-1= 2-1= 2+2= 4-3= 3+2= 2+2= 5-4= 3-1= 0+4= 4+1= 1+0= 0+0= 5-2= 3+2= 4-3= 2+2= 1+2= 5-2= 1+2= 2-0= 1+2= 4+1= 2+2= 2-0= 1-1= 2+2= 2-0= 1-0= 3+0= 4-2= 2-0= 3-0= 0+1= 4-1= 4+1= 3-1= 4-3= 2-0= 3-1= 1+3= 2-0= 1-0= 3+0= 1+2= 5-4= 1-1= 2+0= 3-1= 2-0= 0+1= 1+4= 2+3= 2-1= 3-1= 0+0= 2+2= 2-0= 3-1= 1+0= 1+2= 2+2= 1+3= 5-4= 0+2= 2+3= 1-0=5-2= 3-3= 1+2= 2-1= 3-3= 3-0= 4-4= 5-4= 2+2= 3-2= 3-0= 3+1= 2+1= 3-3= 4-4= 2-0= 4-0= 3-2= 3-0= 4-3= 5-2= 5+0=家长签名。
二级C语言5练习(循环含答案)

(1)有以下程序段int n,t=1,s=0;scanf("%d",&n);do{ s=s+t; t=t-2; }while (t!=n); t==n t=-1,-3,-5为使此程序段不陷入死循环,从键盘输入的数据应该是A)任意正奇数B)任意负偶数C)任意正偶数D)任意负奇数(2)设变量已正确定义,则以下能正确计算f = n!的程序段是A) f=0; B) f=1;for(i=1;i<=n;i++) f*=i; for(i=1;i<n;i++) f*=i; (n-1)!C) f=1; D) f=1;for(i=n;i>1;i++) f*=i; 死循环for(i=n;i>=2;i--) f*=i;(3)以下程序的功能是计算:s=1+12+123+1234+12345。
请填空。
main(){ int t=0,s=0,i;; i=1 t=1 i=2 t=12 i=3 t=123 t=i+10*ts=s+t; }printf("s=%d\n",s);}4) 要求通过while循环不断读入字符,当读入字母N时结束循环。
若变量已正确定义,以下正确的程序段是ch=getchar()!='N' ch=('a'!='N')ch=1 while( 1 )(ch=getchar()) != 'N' ch=getchar() ch='a' 'a'!='N' while(1)A)while((ch=getchar())!='N') printf("%c",ch); B)while(ch=getchar()!='N')printf("%c",ch);C)while(ch=getchar()=='N') printf{"%c",ch); D)while((ch=getchar())=='N')printf("%c",ch);5) 以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。
新概念C语言能力教程练习08答案
练习88.1 预处理的作用是把源文件中不是纯粹的C语言语句转换成C语言语句,转换通常是通过简单的查找替换实现的。
预处理器和C语言编译器是程序编译的两个阶段。
预处理器先于C语言编译器对C语言源文件进行处理,经过处理后的源文件通常就只有单纯的C语言语句了,被C语言编译器处理后就能变成“可执行程序了”。
8.2 程序中宏和整型变量的标识符都为A在语法上没有问题,因为程序编译分阶段进行。
预处理时,程序中以标识符形式出现的宏会被展开,当编译时,源文件实际为:#include<stdio.h>void main(){int n = 5;printf("A = %d\n", n);}8.3(1)宏名为:LSTR 宏体为:"This is a long string!"(2)宏名为:AREA 宏体为:(r) 3.1415926 * r * r //注意AREA和(r)之间有空格。
(3)宏名为:N 宏体为:100;8.4宏引用N第一次展开为3 * 2 + M 第二次展开为3 * 2 + 5宏引用N * 2第一次展开为3 * 2 + M * 2 第二次展开为3 * 2 + 5 * 2宏引用(N) * 3第一次展开为(3 * 2 + M) * 3 第二次展开为(3 * 2 + 5) * 38.5 测试程序如下:#include<stdio.h>const double PI = 3.1415926;void main(){double r;printf("请输入圆的半径:");scanf("%lf", &r);printf("它的周长为:%f\n", 2 * PI * r);printf("它的面积为:%f\n", PI * r * r);}const常量是属于C语言的核心部分,而符号常量为预处理部分。
c程序语言第五版习题答案
c程序语言第五版习题答案C程序语言第五版习题答案在学习编程语言的过程中,练习和理解习题是非常重要的一部分。
对于C程序语言第五版的学习者来说,习题的解答不仅可以帮助巩固所学的知识,还能够提升编程能力。
在本文中,我将为大家提供C程序语言第五版习题的一些答案和解析,希望能够对学习者有所帮助。
1. 习题1-1题目:编写一个程序,在屏幕上输出"Hello, World!"。
解答:```c#include <stdio.h>int main(){printf("Hello, World!\n");return 0;}```解析:这是一个非常简单的程序,使用了C语言中的标准输入输出库函数`printf`来输出字符串"Hello, World!"。
`\n`表示换行符。
2. 习题2-1题目:编写一个程序,计算并输出华氏温度转换为摄氏温度的结果。
解答:```c#include <stdio.h>int main(){float fahrenheit, celsius;printf("请输入华氏温度:");scanf("%f", &fahrenheit);celsius = (fahrenheit - 32) * 5 / 9;printf("摄氏温度为:%.2f\n", celsius);return 0;}```解析:这个程序通过用户输入的华氏温度,使用公式`(华氏温度 - 32) * 5 / 9`来计算摄氏温度,并输出结果。
3. 习题3-2题目:编写一个程序,输入一个浮点数,输出该浮点数的立方值。
解答:```c#include <stdio.h>int main(){float num, cube;printf("请输入一个浮点数:");scanf("%f", &num);cube = num * num * num;printf("立方值为:%.2f\n", cube);return 0;}```解析:这个程序通过用户输入的浮点数,使用乘法运算符`*`计算该浮点数的立方值,并输出结果。
c语言前五章基础知识练习题答案(C程序设计第五版)
一、单选题1. C语言中的三大基本数据类型包括( B )A.整型、实型、逻辑型B.整型、实型、字符型C.整型、逻辑型、字符型D.整型、实型、逻辑型、数组型2. 在C语言中,以下合法的字符常量是( C )A. '\048'B. 'ab'C. '\43'D. "\0"3.设x 为 int 型变量,执行下列语句: x=10; x+=x-=x-x; 则x的值为 ( B )A. 15B. 20C. 25D. 304.逗号表达式(a=3*5,a*4),a+15的值是( B )A.15B. 30C. 60D. 755. .以下程序的输出结果是( C )。
main( ){ int x=10,y=11;printf("%d,%d\n",x--,--y);}A. 11,11B. 10,11C. 10, 10D.11,106.设有变量说明:int a=7,b=8;那么语句:printf("%d,%d\n",(a+b,a),(b,a+b));的输出应该是( A )A. 7,15B. 8,15C. 15,7D.15,87. C语言变量名中不能使用的字符是( D )A. 数字B. 字母C. 下划线D. 关键字8.以下变量定义中合法的是( A )A.short a=2.1e-1;B. double b=1+5e0.5;C. long do=0xffe ;D. float 3_end=1-e3;9.若有说明语句char ch1=′\x79′;则ch1(D )A.包含4个字符B.包含3个字符C. 包含2个字符D.包含1个字符10. 设整形变量a=12;则执行完语句a+=a-=a*a后a的值为()A. 552B. 264C. -264D. 14411.设a=1,b=2,c=3,d=4,则表达式:a>b?a:c<d?a:d的结果是(A )A.1 B.2 C.3 D.412. 下面程序段执行结果是( B )int i=5,k; k=(++i)+(++i)+(i++); printf("%d,%d",k,i);A. 24,8B. 21,8C. 21,7D. 24,713.以下选项中属于C语言的数据类型是( B )。
《新概念C语言能力教程》第12章位运算
• 分析:用异或操作改变某位的状态以控制相关灯的明灭,使用左移操作构造 操作数。
例12-3 把一个整数32位中的高16位和低16位互换。
12.3 位段
• C语言允许在一个结构型中以位为单位指定其成员实际存储空间的长度,结 构型中指定了存储长度的成员就是所谓的位段。
• 结构型struct bitfield虽然有三个内部成员a,b,c,但它们存储空间的长度只有 2位、4位和2位。内部成员a、b、c虽然位数不多,但仍为int型,有符号数 ,即a和c的取值范围为-2至1,b的取值范围为-8至7。
• 位段的类型只能为整型(有符号,无符号及字符型)
12.1.3 异或操作符^
• 异或操作符^也称xor操作符。异或操作符^将参与运算的两个操作数以二进制 位为单位进行“异或”运算。
• “异或”运算可理解为“判断是否不同(为异)”的运算。异或运算时,如 果两个二进制位上的数相同,则运算结果的此位为0(表示否,不为异); 如果两个二进制位上的数不同,则运算结果的此位为1(表示是,为异)。
12.1.6 右移操作符>>
• 右移操作符与左移操作符类似,表达式a >> n求值时,会将a的二进制位全 部右移n位,右端移出的n位被舍弃。根据左端移入数的不同,右移操作分为 “逻辑右移”和“算术右移”两种。
• 逻辑右移时,无论a为何类型,左端均移入n个0; • 算术右移时,如果a为非负数,则左端移入n个0;如果a为负数,则左端移入
• 左移操作符<<的常用形式为:a << n • 其中,a和n均为整数,求值时a的二进制位全部左移n位,右端补n个0,舍
弃左端移出的n位。显然n的取值范围通常为1至sizeof(a) * 8。 • 在位运算中,左移操作符常用于构造操作数。 • 无符号字符型变量c的值为165,需点亮第6号灯,可以用如下表达式c |= 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习5 5.1 计算循环体的执行次数并上机验证。 1. int i = 0; 2. short i = 1;
while(1) while(i > 0) { { ++i; ++i; printf("%d\n", i); printf("%d\n", i); } } 3. short i = 1; 4. char c = 'a'; while(i * i >= 0) while(c >= 0) { { ++i; --c; printf("d\n", i); printf("%c\n", c) } } 答: 1.表达式1恒真,因此循环体会执行无数次,具体分析为: 循环体 循环控制 ++i; printf("%d\n", i);
1 变量i的值由1变为2 输出2↙
1 变量i的值由2变为3 输出3↙
1 „„ „„
1 „„ „„
2.在数学上,变量i的初值为1,每次自增1后会一直大于0,也就是说表达式i > 0恒真,但是,计算机中整型构成一个环,short型变量的取值范围为-32768~32767,当变量i的值自增到32767后再加1就变成了-32768,表达式i 〉0为假,循环退出,因此循环体执行了32767次。 循环体 循环控制 ++i; printf("%d\n", i); 循环变量i i > 0 1 1(真) 变量i的值由1变为2 输出2↙
2 1(真) 变量i的值由2变为3 输出3↙
„„ 1(真) „„ „„ 32767 1(真) 变量i的值由32767变为
-32768 输出-32768↙
-32768 0(假) 循环退出不再执行 循环退出不再执行
3.表达式i * i >= 0恒真,因此循环体会执行无数次。 循环体 循环控制 ++i; printf("%d\n", i); 循环变量i i * i >= 0 1 1(真) 变量i的值由1变为2 输出2↙ 2 1(真) 变量i的值由2变为3 输出3↙
„„ 1(真) „„ „„ 32767 1(真) 变量i的值由32767变为
-32768 输出-32768↙
-32768 1(真) 变量i的值由-32768变为
-32767 输出-32767↙
„„ 1(真) „„ „„ 4.字符型变量c的值是字符‟a‟查表可知为97号字符,在比较操作中字符型表现为整型,因此,因此从97至0,循环体共执行了98次。查表可知具体的执行过程如下。 循环体 循环控制 --c; printf("%c\n", c); 循环变量c c >= 0 „a'(97) 1(真) 变量c的值由97变为96 输出`↙ „`'(96) 1(真) 变量c的值由96变为95 输出_↙ „„ 1(真) „„ „„ „\0'(0) 1(真) 变量c的值由0变为-1 输出 ↙(0号字符没有形状) (-1) 0(假) 循环退出不再执行 循环退出不再执行
5.2 画出例5-4的程序流程图。 开始
结束i <= 100++i输出sum的值
i=2,sum=1Sum += iTF
5.3对折一张厚1毫米的纸,每折一次,纸的厚度就翻一倍,理论上折多少次后厚度可以达到珠穆朗玛峰的高度(按8848米计算)。(实际上一张纸最多只能对折七次左右) 答: 分析: 循环体 循环控制 i+=i; ++sum; 循环变量i i<8848000 1 1(真) 变量i的值由1变为2 变量sum的值由0变为1
2 1(真) 变量i的值由2变为4 变量sum的值由1变为2
4 1(真) 变量i的值由4变为8 变量sum的值由2变为3
„„ 1(真) „„ „„ ? 0(假) 循环退出不再执行 循环退出不再执行
5.4 编程输出整数n的阶乘。(n! = n * (n-1) * „ * 2 * 1)
答:与例5-4类似的:
循环结构执行过程分析如下: 循环体 循环控制 fac *= i; ++i; 变量i 变量n i<=n 1 5 1(真) 变量fac的值由1变为1 变量i的值由1变为2
2 5 1(真) 变量fac的值由1变为2 变量i的值由2变为3
3 5 1(真) 变量fac的值由2变为6 变量i的值由3变为4
4 5 1(真) 变量fac的值由6变为24 变量i的值由4变为5
5 5 1(真) 变量fac的值由24变为120 变量i的值由5变为6 6 5 0(假) 循环退出不再执行 循环退出不再执行
0的阶乘等于1,此程序能正确输出吗? for循环结构的程序。
用户输入5时循环结构执行过程分析如下: 循环体 循环控制 fac *= i; ++i; 变量i 变量n i<=n 2 5 1(真) 变量fac的值由1变为2 变量i的值由2变为3
3 5 1(真) 变量fac的值由2变为6 变量i的值由3变为4
4 5 1(真) 变量fac的值由6变为24 变量i的值由4变为5
5 5 1(真) 变量fac的值由24变为120 变量i的值由5变为6
6 5 0(假) 循环退出不再执行 循环退出不再执行
还可以用:
与前面两个程序相比,少用了一个变量。 用户输入5时循环结构具体执行过程如下: 循环体 循环控制 fac*=n; --n; 循环变量n n>1 5 1(真) 变量fac的值由1变为5 变量n的值由5变为4
4 1(真) 变量fac的值由5变为20 变量n的值由4变为3
3 1(真) 变量fac的值由20变为60 变量n的值由3变为2
2 1(真) 变量fac的值由60变为120 变量n的值由2变为1
1 0(假) 循环退出不再执行 循环退出不再执行
5.5 编程输出一个正整数各位上数字中零的个数。
当用户输入30030,循环结构具体的执行过程分析如下。 循环体 循环控制 m = n % 10; if(m == 0) ++sum;
n /= 10; 循环变量n n>0
30030 1(真) m由?变为0 真sum由0变为1 n由30030变为3003
3003 1(真) m由0变为3 假不执行选择语句 n由3003变为300
300 1(真) m由3变为0 真sum由1变为2 n由300变为30
30 1(真) m由0变为0 真sum由2变为3 n由30变为3
3 1(真) m由0变为3 假不执行选择语句 n由3变为0
0 0(假) 循环退出不再执行 循环退出不再执行 循环退出不再执行
表中?的意思表示:变量m之前没有赋值,它的值不确定。
5.6 编程输出正整数各位上数字中的最大数。 当用户输入69563时循环结构具体的执行过程分析如下。请自行补充完整。 循环体 循环控制 m = n % 10; if(m>sum) sum=m;
n /= 10; 循环变量n n>0
69563 1(真) m由?变为3 真sum由0变为3 n由69563变为6956
6956 1(真) m由3变为6 真sum由3变为6 n由6956变为695
„„ „„ „„ „„ „„
或者(注意体会两者的区别)
用户输入69563时循环结构具体的执行过程分析如下。请自行补充完整。 循环体 循环控制 m = n % 10; if(m>sum) sum=m;
n /= 10; 循环变量n n>0
6956 1(真) m由?变为6 真sum由3变为6 n由6956变为695
695 1(真) m由6变为5 假不执行选择语句 n由695变为69
„„ „„ „„ „„ „„
两者的主要区别在于:
变量sum用于保存各位上数字中的最大数,第一个程序中sum初始化为0,意味着先假设最大的数为0,而第二个程序中sum先被赋值为n个位上的数,意味着先假设用户输入数的个位上的数最大。 5.7 以小僧的人数为循环变量求解例5-6,要求程序不仅没有逻辑错误而且无解时可以输出“问题没有解!”。 答:
注意: 在用穷举法解决此类问题时要防止因四舍五入而出错的情况。如此题中设大僧每人2个馍,小僧4人一个馍,则问题应该无解,但用例5-6的算法求解时程序却会给出错误的结果。
当然了也可以加一个(100-i) % 3 == 0的条件来防止类似的错误。 5.8 鸡兔同在一个笼子里,从上面数有35个头,从下面数有94只脚。求笼中各有几只鸡和兔。