版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、习题11-1 简述什么是一般意义上的程序?什么是计算机程序?答:通常指完成某项工作的一整套活动过程及活动方式。计算机程序就是为使 HYPERLINK /s?wd=%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao t _blank 计算机执行一个或多个操作,或执行某一任务,按序设计的 HYPERLINK /s?wd=%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8C%87%E4%BB%A4&tn=SE_PcZhidaonwhc_ngpagmjz
2、&rsv_dl=gh_pc_zhidao t _blank 计算机指令的集合。1-2 简述程序设计的步骤与方法。答:(1)问题分析:一般来说程序要解决的是一个具体的问题,所以程序设计人员需要具体问题具体分析,在把任务交给计算机处理之前必须对问题做出明确的分析与定义,确定问题的条件及期望的结果,找出解决问题的规律。(2)算法设计:算法是解决问题的步骤及其描述,是程序设计的核心内容。算法是根据问题分析中的具体要求而设计的,是对问题处理过程的进一步细化。(3)程序编码:编码就是使用计算机编程语言编写源程序代码的过程。(4)调试运行:指在计算机上调试程序。调试运行程序有两个目的:一是消除由于疏忽而引起
3、的语法错误或逻辑错误等;二是用各种可能的输入数据对程序进行测试,验证程序是否对各种合理的数据都能得到正确的结果,而对不合理的数据也能做适当的处理。(5)文档编制:指整理并写出文字材料。文档包括程序说明文件和用户操作手册。 1-3 简述结构化程序的主要特点。答:只有一个入口;只有一个出口;不包含死循环(永远都执行不完的循环);不包含死语句(永远也执行不到的语句)。自顶向下,逐步求精,模块化设计,结构化编码。1-4 简述结构化程序设计思想。答:(1)结构化编码为了使程序具有良好的设计风格,编程时应使用以下三种控制结构进行编程:顺序结构:顺序结构用来控制一个操作序列,从开始到结束顺序执行;选择结构:
4、根据条件判定的结果去执行不同分支中的语句。选择结构也称为分支结构,其为程序按不同情况自动选择步骤提供控制手段;循环结构:根据条件判定的结果决定是否重复多次执行或者一次也不执行同一组步骤。循环结构也被称为重复结构,其为程序描述重复操作提供了控制手段。(2)结构化程序的特点只有一个入口;只有一个出口;不包含死循环(永远都执行不完的循环);不包含死语句(永远也执行不到的语句)。(3)结构化程序的分析方法 结构化程序设计对问题采取所谓的“自顶向下,逐步求精”的方法进行分析。(4)模块化设计模块化设计采取分治策略,将一个复杂的任务划分成若干基本模块,然后再对每一个模块进行具体化,逐步细化出一个个功能独立
5、的模块。最下层模块完成最具体的功能。每一个模块都遵循高聚合性、低耦合性的分解原则。1-5 简述算法的概念以及特点。答:算法是指为解决某个特定问题而采取的方法和步骤。这里所说的算法一般是指用计算机解决问题的方法和步骤,即计算机算法。一个算法的设计具备如下特点:(1)有穷性。它包含两个方面:一方面是指一个算法应在有限的操作步骤内完成;另一方面是指算法操作应在有限的时间范围内完成;(2)确定性。算法中的每一个步骤都是确定的,即不能有二义性,这样才能确保对于同一个算法,相同的输入必然得出相同的执行结果;(3)有零个或多个输入。输入是指算法所需要的外部信息。在计算机上实现的算法,是用来处理数据对象的,在
6、大多数情况下这些数据对象需要通过输入来得到;(4)有一个或多个输出。算法是有目的的操作,算法的目的是为了求解,这些解只有通过输出才能得到。没有输出的算法是没有意义的;(5)有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。1-6 算法的描述方法有哪些?答:对算法的描述有自然语言、流程图、N-S图、伪代码等表示方法。(1)自然语言自然语言即人们日常生活中使用的语言。使用自然语言描述算法,通俗易懂,初学者容易掌握。(2)流程图流程图是一种被广泛使用的算法描述方法,它用一些图框和流程线来表示各种类型的操作。(3)N-S图这种流程图中完全去掉了流程线,算法的每一步都用一个矩形框来描述,把
7、一个个矩形框按执行的次序连接起来就是一个完整的算法描述。(4)伪代码伪代码是一种近似高级语言但又不受语法约束的一种语言描述方式,它用一种介于自然语言和程序设计语言之间的文字和符号来描述算法,用一行或几行表示一个基本操作。它书写方便,格式紧凑,便于编码实现。1-7 用流程图表示求解n!。开始始答:输入ni=1,p=1i=n Np=p*ii=i+1 y输出p结 束1-8 用N-S图表示求解1100的累加和。答:i=1 sum=0i100sum=sum+ii=i+1输出sum1-9 一个C语言程序的基本结构是什么?答:(1)函数是C语言程序的基本单位C程序是由函数构成的,一个C语言程序必须有且仅有一
8、个用main作为名字的函数,这个函数通常被称为主函数。(2)函数由函数首部和函数体两部分组成1) 函数首部就是每个函数在定义或声明时的第一行,它包括函数名、函数类型、形参名、形参类型的说明。 2) 函数体由函数首部下面最外层的一对大花括号中的内容组成,它可以包括变量声明和所调用函数的声明,还可以包括若干执行语句,声明部分可以看作是对函数中“对象”的描述,执行语句是对函数所要实现的“动作”的描述。1-10 C语言程序的执行过程是什么?答:(1) 编辑:编辑是用户把编写好的C语言源程序输入计算机,并以文本文件的形式存放在磁盘上。其标识为:“文件名.c”。(2) 编译:编译是把C语言源程序翻译成用机
9、器语言表示的目标文件。目标程序的文件标识是:“文件名.obj”。(3)连接:程序连接过程是用系统提供的连接程序(也称链接程序或装配程序)将目标程序、库函数或其他目标程序连接装配成可执行的目标程序。可执行程序的文件名为:“文件名.exe”,扩展名“exe”是可执行程序的文件类型标识。(4)执行:执行程序是指将可执行的目标程序投入运行,以获取程序处理的结果。如果程序运行结果不正确,可重新回到第一步,重新对程序进行编辑修改、编译和运行。1-11 编写一个程序,在屏幕上输出以下图形。 * * *答:int main() printf(“*”);printf(“*”);printf(“*”);print
10、f(“*”); return 0;1-12 编程在屏幕上输出以下信息。 * * A wonderful C program! * * 答:int main() printf(“*”);printf(“* A wonderful C program! *”);printf(“*”); return 0;1-13上机运行本章的例1-6、例1-7,熟悉所用系统的上机方法和步骤。答:答案略2-1为什么C语言的字符型数据可以进行数值运算?答:在C语言中,字符型数据在内存中是以 HYPERLINK /s?q=%E4%BA%8C%E8%BF%9B%E5%88%B6&ie=utf-8&src=internal
11、_wenda_recommend_textn t _blank 二进制形式存放的,并不是真正的把一个 HYPERLINK /s?q=%E5%AD%97%E7%AC%A6&ie=utf-8&src=internal_wenda_recommend_textn t _blank 字符存进内存里。在对字符型数据进行相加减运算的时候,系统首先将char型数据转化成int型数据再进行相加减运算。由字符型数据在内存的存储方式来看,字符型数据是可以进行数值运算的,对字符型数据做数值运算实际上就是对字符本身对应的ASSIC码进行相应的数值运算。2-2简述字符a的特点。答:a是字符常量。(1)字符常量由单引号括
12、起来。(2)字符常量只能是单个字符。(3) 可以把一个字符常量赋予一个字符变量。(4)字符常量占一个字节的内存空间。2-3标识符在命名时,应注意哪几个方面?答:(1)在标识符中,大小写字母是有区别的。(2)ANSI C 标准没有规定标示符的长度,,但是各个版本的C语言编译系统都有自己的规定。(3)标识符虽然可以由程序员随意定义,但标识符是用于标识某个量的符号。(4)C语言规定,用户选取的标识符不能是C语言规定的保留字。2-4 程序中int m=12; m=15;为什么整型变量m的值在运算后不是当初的12,而是15?答:语句int m=12;在 HYPERLINK /s?q=%E7%A8%8B%
13、E5%BA%8F&ie=utf-8&src=internal_wenda_recommend_textn t _blank 程序编译后,m的值是12。 HYPERLINK /s?q=%E8%AF%AD%E5%8F%A5&ie=utf-8&src=internal_wenda_recommend_textn t _blank 语句m=15;中“=”是赋值号,将新的值15赋给了m,新的值15把旧的值12覆盖了,所以m的值是15。2-5已知:int i,a;执行语句“i=(a=2*3,a*5),a+6;”后,变量i的值是多少?答:变量i的值是30。2-6 已知:int x,a;执行语句“a=(x=1
14、,x+,x+2);”后,变量a、x的值分别是多少?答:a的值是4,x的值是2。2-7 求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 (设x=2.5,a=7,y=4.7) 答:2.5(2)(float)(a+b)/2+(int)x%(int)y (设a=2,b=3,x=3.5,y=2.5) 答:3.52-8 代数表达式sin30+1cosx QUOTE (sin60。+1)sin30。+1cosx 的C语言算术表达式如何写?答:#define PI 3.14159sqrt(sin(PI/180*30)+1)/cos(x)第3章习题答案3-1顺序结构、选择结构和循环结构3
15、-2表达式语句、复合语句、空语句、程序控制语句及函数调用语句3-3有符号的十进制形式整型数据,无符号的十进制形式整型数据,无符号的八进制形式整型数据,无符号的十六进制形式整型数据,单个字符数据,字符串数据,实型数据。3-4scanf(),getchar()等。3-5#include int main()float p,k;printf(请输入单位为磅的重量数:n);scanf(%f,&p);k=0.4535924*p;printf(对应的千克数为:%.3fn,k);return 0;3-6#include int main()float a,b,c,sum,average;printf(请输入
16、高数成绩:n);scanf(%f,&a);printf(请输入英语成绩:n);scanf(%f,&b);printf(请输入计算机成绩:n);scanf(%f,&c);sum=a+b+c;printf(总成绩为sum=%fn,sum);average=sum/3;printf(平均成绩为average=%.2fn,average);return 0;3-7#include #define PI 3.1415926int main()float r,S,V;printf(请输入球的半径(厘米):n);scanf(%f,&r);S=4*PI*r*r;printf(球的表面积是S=%.2f平方厘米n
17、,S);V=PI*r*r*r*4/3;printf(球的体积是V=%.2f立方厘米n,V);return 0;3-8#include #include int main()int y;float p;printf(请输入2016年后的某一年:);scanf(%d,&y);p=1500*pow(1+0.1),(y-2016);printf(生产总值是:%f万元n,p);return 0;3-9#include int main()char ch1,ch2,ch3,ch4,t;printf(请任意输入4个字母:n);scanf(%c,%c,%c,%c,&ch1,&ch2,&ch3,&ch4);pr
18、intf(依次输出字母:%c,%c,%c,%cn,ch1,ch2,ch3,ch4);t=ch1;ch1=ch3;ch3=t;t=ch2;ch2=ch4;ch4=t;printf(字母调换后输出:%c,%c,%c,%cn,ch1,ch2,ch3,ch4);return 0;3-10#include #include int main()float a1=2,a2=5,t1=60,t2,s,v;s=0.5*a1*t1*t1;printf(乙物体的位移是:%fn,s);t2=sqrt(2*s/a2);printf(乙物体所需的时间为:%fn,t2);v=a2*t2;printf(乙物体当时的速度是:
19、%fn,v);return 0;习 题 四(参考答案)4-1 C语言中的关系运算符有哪些?它们的优先顺序是怎样的?答:运算符含 义优先级小于优先级相同(高)大于=大于或等于= =等于优先级相同(低)!=不等于4-2 C语言中的逻辑运算符有哪些?它们的优先顺序是怎样的?答:运算符含 义举例说明优先级!逻辑非!x如果x为真,则!x为假;如果x为假,则!x为真高&逻辑与x&y如果x和y同时为真,则结果为真,否则结果为假中|逻辑或x|y如果x和y同时为假,则结果为假,否则结果为真低4-3 C语言中如何表示“真”和“假”?又是如何判断一个表达式的“真”和“假”的?答:C语言中,以数值1代表“真”,以数值
20、0代表“假”。判断表达式的值时,任何非零值均代表“真”(1),零值代表“假”(0)。4-4 条件表达式的形式是怎样的?“输入两个数,求最小值”如何用条件表达式实现?答:条件表达式的一般形式为:表达式1? 表达式2: 表达式3#includeint main()int a,b,min;scanf(%d,%d,&a,&b);min=ab|bc 答:原式=0 (5) !(a+b+c)=0 答:原式=14-8 编写程序,输入3个整数,输出其中最小的数。#include int main() int a,b,c,t; scanf(%d,%d,%d,&a,&b,&c); if(ab) t=a; a=b;
21、b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; printf(%dn,a); return 0;4-9 编写程序,输入一个非零实数,判断其正负性,若为正数,求其平方,若为负数,求其立方。#include int main() float a; scanf(%f,&a); if(a0)printf(%5.2fn,a*a); else printf(%5.2fn,a*a*a); return 0;4-10 编写程序,输入一个整数,判断其能否同时被2和3整除。若能则输出该整数,若不能,则输出“该数不能被2和3整除”。#include int main
22、() int a; scanf(%d,&a); if(a%2=0& a%3=0)printf(%dn,a); else printf(该数不能被2和3整除”); return 0;4-11 编写程序,输入一个字符,判断其是否为小写字母,若是则将它转换成大写字母,否则不转换,原样输出该字符。#include int main() char ch; scanf(%c,&ch); ch=(ch=A & ch=10 &x+1 0 x10&0 x=0 &2x-9 x0#includeint main()int x,y;scanf(%d,&x);if(x0)y=2*x-9;else if(x=0)y=0;
23、else if(x10)y=x+1;elsey=2*x+9;printf(y=%dn,y);return 0;4-13 某超市对啤酒进行促销,每瓶原价5元,每人每次限购100瓶,活动如下:10瓶内无优惠,10-29瓶每瓶优惠5%,30-49瓶每瓶优惠8%,50瓶以上每瓶优惠10%。编写程序,输入购买瓶数,计算购买所需金额。设n为购买啤酒的瓶数,d为折扣,则购买啤酒的金额p的计算公式为:p=5*n*(1-d)。#includeint main()int n; float p,d; printf(input a number: ); scanf(%d,&n); if(n0&n=10&n=30&n=
24、50&n=100) d=0.1; printf(The price is %fn, p=5*n*(1-d); else printf(Sorry, error!n);return 0;4-14 编写程序,输入一个112的数字,输出其相应的英文月份单词。#includeint main()int x;printf(请输入一个112的数字:);scanf(%d,&x);switch(x) case 1:printf(Januaryn);break; case 2:printf(Februaryn);break; case 3:printf(Marchn);break; case 4:printf(
25、Thursdayn);break; case 5:printf(Mayn);break;case 6:printf(Junen);break;case 7:printf(Julyn);break;case 8:printf(Augustn);break;case 9:printf(Septembern);break;case10:printf(Octobern);break;case 11:printf(Novembern);break;case 12:printf(Decembern);break; default:printf(输入有误n);return 0;4-15 某小学5年级6班班级
26、周一到周五每天的课外活动如下:周一 科技活动周二 社会活动周三 艺术活动周四 文艺活动周五 劳技活动编写程序,输入代表星期几的数字,得出相应的活动内容(设周一到周五用1-5数字表示)。#includeint main()int x;printf(请输入星期几:);scanf(%d,&x);switch(x) case 1:printf(周一 科技活动n);break; case 2:printf(周二 社会活动n);break; case 3:printf(周三 艺术活动n);break; case 4:printf(周四 文艺活动n);break; case 5:printf(周五 劳技活动
27、n);break; default:printf(输入有误n);return 0;4-16 用字符c、x、q、d代表“春季”(35月),“夏季”(68月),“秋季”(911月),“冬季”(12-2)月,设每月的时令水果为:月份时令水果月份时令水果月份时令水果1月猕猴桃5月草莓9月葡萄2月甘蔗6 月樱桃10月梨子3月菠萝7月桃子11月苹果4月芒果8月西瓜12月桔子编写程序,从键盘输入一个字符和数字,得出当季当月的时令水果。#includeint main()int x;char c;printf(请输入字符和数字:);scanf(%c,%d,&c,&x);switch(c) case c:pri
28、ntf(季节为春季n); switch(x) case 3:printf(月份:3月 时令水果:菠萝n);break; case 4:printf(月份:4月 时令水果:芒果n);break; case 5:printf(月份:5月 时令水果:草莓n);break; default:printf(数字输入有误n); break; case x:printf(季节为夏季n); switch(x) case 6:printf(月份:6月 时令水果:樱桃n);break; case 7:printf(月份:7月 时令水果:桃子n);break; case 8:printf(月份:8月 时令水果:西瓜
29、n);break; default:printf(数字输入有误n); break; case q:printf(季节为秋季n); switch(x) case 9:printf(月份:9月 时令水果:葡萄n);break; case 10:printf(月份:10月 时令水果:梨子n);break; case 11:printf(月份:11月 时令水果:苹果n);break; default:printf(数字输入有误n); break; case d:printf(季节为冬季n); switch(x) case 12:printf(月份:12月 时令水果:桔子n);break; case 1
30、:printf(月份:1月 时令水果:猕猴桃n);break; case 2:printf(月份:2月 时令水果:甘蔗n);break; default:printf(数字输入有误n); break; default:printf(字符输入有误n);return 0;习 题 五5-1 输出200以内所有能被7整除的数。#include int main()int i;printf(200以内能被7整除的数有:n);for (i = 1;i=200;i+)if ( i % 7 ) = 0 ) /取200以内能整除7的数printf( %5d,i); /输出return 0;5-2 输入一行字符,
31、分别统计出其中英文字母、空格、数字和其他字符的个数。#includeint main()char c;int letters=0,space=0,digit=0,other=0;printf(请?输?入?一?段?字?符?n);while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+;elseother+;printf(字?母?数y:%dn空?格?数y:%dn数y字?数y:%dn其?他?字?符?数y:%dn,letters,space,digit,other);return 0;5-3 求11000之间各位数字之和为15的数。#include int main
32、()int i,j,sum;for(i=1;i0);if(sum=15)printf(%5d,i);return 0;5-4 打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和正好等于该数本身。例如153是一个“水仙花数”,因为153=13+53+33。#include int main()int i,j,k,n;for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%5d,n);return 0;5-5 找到所有这样的三位数,该三位数等于其每位数字的阶乘之和,即abc=
33、a!+b!+c!。(如:145=1!+4!+5!)#include int fun(int i);int main() int n, a, b, c; printf(The number satisfied condition:n); for (n = 100; n 1000; n+) a = n / 100; b = (n / 10) % 10; c = n % 10; if (n = fun(a) + fun(b) + fun(c) printf(%4d = %d! + %d! + %d!n,n,a,b,c); return 0; int fun(int i) int n = 1; int
34、 s = 1; while (n = i) /*求阶乘?的?算?法*/ s *= n; n += 1; return s; /*返回?所求的?阶乘?值*/5-6 每行5个数,分行输出100以内所有的素数。#include int main() int i,n,t=1; printf( 2);/单独处|理2 for(i=3;i100;i+=2) for(n=3;n*n=i;n+=2) if(i%n=0) break; if(in*n)t+; printf(%5d,i);if(t%5=0) printf(n);return 0;5-7 从键盘上输入两个正整数,求这两个数的最大公约数与最小公倍数。#
35、include int main() int p,r,n,m,temp;printf(请?输?入?两?个?正y整?数yn,m:);scanf(%d%d,&n,&m);if(nm)temp=n;n=m;m=temp;p=n*m;while(m!=0)r=n%m;n=m;m=r;printf(它们?的?最?大公?约?数y为a:%dn,n);printf(它们?的?最?小?公?倍?数y为a:%dn,p/n);return 0;5-8 键盘输入整数n,输出1+3+5+7+前n项的值(n100)。#include int main()int n,i,sum; scanf(%d,&n); for(i=1,
36、sum=0;i=n;i+) sum+=2*i-1; printf(%dn,sum);return 0;5-9 键盘输入整数n,输出s=1+(1+2)+(1+2+3)+ +(1+2+3+n)的值。#include int main()int i,j,n,sum=0; scanf(%d,&n); for (i = 0; i = n; i+) for (j = 1; j = i; j+)sum += j; printf(sum=%dn,sum);return 0;5-10 键盘输入整数m,输出1+1/2+1/3+1/4+1/m的值。#include int main()int m,k=1;doubl
37、e sum=0.0;printf(please input m:);scanf(%d,&m);dosum=sum+1.0/k;k+;while(k=m);printf(%f,sum);return 0;5-11 用公式求的近似值:/41-1/3+1/5-1/7+,直到最后一项的绝对值小于10-6为止。#include #include int main()int i = 1, sign = 1; double t = 1, pi = 0; while (fabs(t) = 1e-6) pi = pi + t; i = i + 2; sign = -sign; t = sign*1.0 / i;
38、 printf(pi=%f,4 * pi);return 0;5-12 用公式求e的近似值:e1+1/1! +1/2!+1/3!+1/n!,使误差小于10-5。#include int main()double s=1,t=1;int i=1;while(1.0/t)=1e-6)t=t*i;s=s+1.0/t;i+;printf(%fn,s);return 0;5-13 从键盘输入行数n,打印菱形图案。*#include int main()int m,n,i,j;scanf(%d,&m);n=(m+1)/2;for(i=0; in; i+)for(j=0;jn-1-i;j+)printf(
39、);for(j=1; j=2*i+1; j+)printf(*);printf(n);for(i=1;in;i+)for(j=0;ji;j+)printf( );for(j=0;j2 *(n-i)-1;j+)printf(*);printf(n);return 0;5-14 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,不过瘾,又多吃了一个。第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩下的一半多一个,到第10天早上再想吃的时候,就剩下一个桃子了。求第一天共摘了多少个桃子。#include int main()int day,x1,x2; /*定义? day、x
40、1、x2 3 个?变?董-为a基本?整?型*/ day=9; x2=1; while(day0) x1=(x2+1)*2; /*第一?天的?桃子数y是?第二t天桃子数y加1后的?2倍?*/ x2=x1; day-; /*因为a从后向前推?所以?天数y递Y减?*/ printf(the total is %dn,x1); /* 输?出?桃子的?总数y*/return 0;5-15 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。计算需要大马、中马和小马的数目。#include int main()int i,j,k,n=0; for (i=0; i 34; i+) for
41、 (j=0; j=50; j+) k=100-i-j; if(k%2=0 & i*3+j*2+k/2 = 100) n+;printf(第%d组:o大马%d,?中D马%d,?小?马%dn, n,i,j,k); return 0;习题6:【题6.1】定义一个int型的一维数组,包含10个成员,分别赋值为110, 然后将数组中的成员都向前移一个位置,即a0=a1, a1=a2, 最后一个成员的值是原来第一个成员的值,然后输出这个数组。 #include #include int main(void) int arr=1,2,3,4,5,6,7,8,9,10; int i,temp; printf(
42、原数组为:n); for(i=0;i10;i+) printf(%d ,arri); printf(n); temp=arr0; for(i=0;i9;i+) arri=arri+1; arri=temp;/将arr0的值赋给temp,将arri+1赋给arri,最后将temp值赋给arri printf(向前移动后的数组为:n); for(i=0;i10;i+) printf(%d ,arri); return EXIT_SUCCESS;【题6.2】有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个成员的值。如果该数不在数组中,则输出“无此数”。#i
43、nclude int main() int a15 = 99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6; int x, low, high, mid, n; n = 15; low = 0; high = n - 1; scanf(%d, &x); while (low amid) high = mid - 1;/若查找的值大于中点值,则上限索引值变为中点索引减1 else if (x amid) low = mid + 1;/若x小于中点值,则将下限索引变为中点索引加1。 else if (x = amid) printf(
44、%d is %dth number!n, x, mid+1);/若x值等于中点值,则输出中点索引加1的值。 break; if (x != amid) printf(No match!n);/若遍历完所有元素,找不到与x相等的中点值,则输出找不到。 return 0;【题6.3】用筛选法求10100之间的素数。# include# includevoid main()int a90,i,j,n=0;/查找的值有90个for(i=10;i=100;i+)ai=i;/将第i个值ai设为ifor(i=10;i=100;i+)/i从10开始循环 for(j=2;j=sqrt(i);j+) if(ai%
45、j=0) ai=0;/若ai对j取余数值为0,则ai不是素数。 for(i=10;i=100;i+) if(ai!=0) printf(%d ,ai); n+;/若ai!=0,则为素数,将素数个数n加1if(n%10=0) printf(n);/每输出10个素数换行【题6.4】将一个数组中的值按逆序重新存放。例如,原来顺序为1, 2, 3, 4, 5,要求改为5, 4, 3, 2, 1。#include int main() int a5 = 1, 2, 3, 4, 5; int i = 0, tmp; for (i = 0; i 5/2; +i) tmp = a4-i; a4-i = ai;
46、 ai = tmp;/将a4-i的值赋给tmp,ai的值赋给a4-i,最后将tmp赋给ai,实现了逆序。 for (i = 0; i 5; +i) printf(%4d, ai);printf(n); return 0;【题6.5】找出一维数组中重复的数据,并将其删除。#include / 升序数组srcvoid sort(int *src, int len) int tem; for (int i = 0; i len; i+) for (int j = 0; j srcj+1) tem = srcj; srcj = srcj+1; srcj+1 = tem; int main() int
47、num10 = 0, 2, 5, 1, 1, 5, 4, 9, 2, 1, d; int i = 0, cnt; sort(num, 10); / 排序 d = num0; for (i = 1; i 10; i+) / 遍历比较 if (numi != d) printf(%d , d); d = numi; if (num9 = d) printf(%dn, d); return 0;【题6.6】.利用随机函数产生10个20以内的整数,逆序输出每个成员,再依次计算其中质数(素数)的和,并输出来。#include #include #include int main()int i,j,a10
48、,s=0;/c产生10个数srand(time(NULL);for(i=0;i10;i+)ai=rand()%20;printf(产生的随机数:n);for(i=0;i=0;i-)printf(%d ,ai);for(i=0;i10;i+)for(j=2;j1&ai%j=0) break;/值为0则说明ai不是素数。if(j=ai) s+=ai;/若ai的值与j相等,则说明ai为素数,将素数加起来求和。printf(n其中素数的和=%d,s);return 0;【题6.7】编写程序,在3行4列的二维数组中查找第一次出现的负数。#include#include#includeint main()
49、 int a34 = 41,345,35,23, 41,345,-2,23, 41,345,35,23; int flag=1;/flag为1说明元素值为正数 for(int i=0;i3 & flag;i+) for(int j=0;j4;j+) if(aij0) printf(%d %d %dn,i,j,aij);/将打印出负值的行号,列好,值依次输出 flag=0; break; return 0;【题6.8】编写程序,输出一个7行的Pascal三角形:#include#define M 7void main()int aMM, i , j ;for(i=0;iM;i+)for(j=0;
50、j=i;j+)if(i=j|j=0)aij=1;/若符合if条件,则满足值为1elseaij=ai-1j+ai-1j-1;printf(%dt,aij);if(i=j)printf(n); 【题6.9】编写程序,用二维数组输出沙漏形,图形如下:#include stdio.hvoid main() int i,j,k; for(i=1;i=3;i+) for(j=1;ji;j+) printf( ); for(k=1;k=7-2*i;k+) printf(*);/前三行的形状 printf(n); for(i=2;i=3;i+) for(j=1;j=3-i;j+) printf( ); for
51、(k=1;k=2*i-1;k+) printf(*);/后三行的形状 printf(n); 【题6.10】有一段文字,共有2行,每行40个字符。请编写程序,分别统计出其中英文大写字母、英文小写字母、数字、空格及其他字符的个数。#include int main()int i,j,upp,low,dig,spa,oth;char text240;/设置2行,每行40个字符upp=low=dig=spa=oth=0;for (i=0;i2;i+) printf(please input line %d:n,i+1);gets(texti);/输入字符for (j=0;j=A& textij=a &
52、 textij=0 & textij=9)dig+;else if (textij= )spa+;elseoth+;printf(nupper case: %dn,upp);printf(lower case: %dn,low);printf(digit : %dn,dig);printf(space : %dn,spa);printf(other : %dn,oth);return 0;习题7:7-1 变量所在存储单元的地址信息也是一种数据,C语言中用专门的一种数据类型来表示地址信息,这就是指针类型。如果把内存单元的地址用一个变量来保存,则这个变量就称为指针变量。“变量的指针”是指变量的地址
53、数据。7-2 数组名和指针变量均表示地址,但它们本质不同。数组名是数组的首地址,是地址常量;指针变量是变量。7-3 用字符数组和字符指针变量都能实现对字符串的操作,使用时应注意以下三方面存储内容不同,输入字符串时有区别。 赋值方式不同。指针变量的值是可以改变的。7-4 20 9 97-5 p!=q *p=*q7-6 mig7-7 135797-8 1 3 5 7 9 11 3 5 1 4 97-9 略7-10 略7-11 略7-12 给定5个字符串,输出其中最大的字符串,要求用指针实现。参考程序如下:(选择法排序)#include #include main( )int i,j,temp;ch
54、ar str510,*p5;printf(请输入5个字符串:n);for(i=0;i5;i+)gets(stri);/*输入5个字符串存入字符数组str*/for(i=0;i5;i+) pi=stri;/*让指针数组元素pi指向字符数组str的第i行*/*注意stri不是数组元素,而是第i行的首地址*/for(i=0;i=3;i+) for(j=i+1;j0) /*若pi指向的字符串大于pj指向的串*/ temp=pi; pi=pj;pj=temp; /*则交换指针值*/printf(这5个字符串按从小到大的顺序排列为:n);for(i=0;i5;i+) puts(pi);程序的一次运行结果:
55、请输入5个字符串:acdefabdefabcefabcdfabcde这5个字符串按从小到大的顺序排列为:abcdeabcdfabcefabdefacdef8-1 编写一个函数int mod(int x,int y),来计算并输出整数x、y的商及余数。#includevoid main()int a,b;void mod(int x,int y);printf(请输入两个整型数:);scanf(%d%d,&a,&b);mod(a,b);void mod(int x,int y)int a,b;a=x/y;b=x%y;printf(两数的商为: %d/%d=%dn,x,y,a);printf(两数
56、的余数为: %d%d=%dn,x,y,b);8-2 编写一个函数,判断某年是否为闰年,若为闰年则返回1,否则返回0。#includeint leap(int x) if(x%4=0 & x%100!=0 | x%400=0) return(1); else return(0);void main()int y;printf(enter Year y:);scanf(%d,&y);printf(leap(%d)=%dn,y,leap(y);if(leap(y)=1) printf(%d是闰年。n,y); else printf(%d不是闰年。n,y);8-3 编写函数,求方程ax2+bx+c=0
57、的解,并将结果作为函数值返回。其中的a、b、c作为函数的形式参数。#include#includeint equation(int a,int b, int c,float *p1,float *p2) float d; d=sqrt(b*b-4*a*c);if(d=0) *p1=(-b+d)/(2*a); *p2=(-b-d)/(2*a); return 1; else printf(该方程无实根。n);return 0;void main()int i,j,k;float x1,x2;printf(输入 a*x*x+b*x+c中的a,b,c:);scanf(%d,%d,%d,&i,&j,&
58、k);if(equation(i,j,k,&x1,&x2)!=0) printf(两实根为: x1=%.2f, x2=%.2fn,x1,x2);8-4 编写函数pow(x,n)来计算xn,其中x为浮点数,n为正整数,而返回值为浮点数。例如,pow(5.0,2)=25.0。#includefloat pow(float x,int n);void main() float x;int n;printf(请输入浮点数 x:); scanf(%f,&x); printf(请输入整数 n:); scanf(%d,&n); printf(%.0f的%d次方为: %.2fn,x,n,pow(x,n);fl
59、oat pow(float x,int n) int i;float multi;multi=1;for(i=0;in;i+) multi=x*multi; return(multi);8-5 编写函数int prime(int m),其功能是判断m值是否是素数,若是素数,则返回1,否则返回0。#include#includeint prime(int m)int n;for(n=2;nsqrt(m);n+)if(m%n=0) return 0;return 1;void main()int x,y;printf(enter a number x:);scanf(%d,&x); y = pri
60、me(x);printf(prime(%d)=%dn,x,y);if(y=1) printf(%d是素数。n,x); else printf(%d不是素数。n,x);8-6 编写一个函数,返回一维实型数组前n个元素的最大值、最小值和平均值。数组、n和最大值、最小值、平均值均作为函数的形式参数,本函数无返回值(用指针方法实现)。voidfun(floata,intn,float*pmax,float*pmin,float*aver)/*完善函数功能*/intmain()floata100;floatmax,min,aver;inti,n;printf(请输入一个数作为一维数组的长度:n);sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泌尿外科护士总结
- 部门预算的制定与监督计划
- 2024年物业服务合同:高端住宅小区物业服务
- 媒体广告行业员工培训总结
- 手表店前台工作总结
- 绩效激励政策的总结与优化计划
- 高考新课标语文模拟试卷系列之38
- 2024年度儿童剧演员演绎与推广合同3篇
- 江苏省兴化市高考考前冲刺试卷(二)(语文)
- 油气地震课课程设计
- 辐射与防护学习通超星期末考试答案章节答案2024年
- CRF病例报告表模板
- 前滚翻课件教学课件
- 2024年计算机二级WPS考试题库380题(含答案)
- 销售单模板(自动计算数字大写、时间自动生成)
- 2023年江苏省五年制专转本英语统考真题(试卷+答案)
- 艺术音乐鉴赏与实践智慧树知到答案2024年临沂市信息工程学校
- 班主任技能大赛真题及答案
- 山东省济南市2023-2024学年高二年级上册1月期末英语试题(解析版)
- 2023年全国职业院校技能大赛-声乐、器乐表演赛项规程
- 2025年高考数学复习大题题型归纳:专题07 数列中的构造问题(解析)
评论
0/150
提交评论