admin 管理员组文章数量: 887021
2024年2月27日发(作者:一维数组定义方式错误举例)
c语言入门经典第5版答案
【篇一:c语言入门必做习题100例(五)】
希望对c语言的初学者有所帮助!
存放 0 或 1,相邻的 1 可以连成一条连线,连接的方法可以是行,也可以是列; 同时约定一条连线只能有一个起点和一个终点,图形上的点最多只能访问一次。
编程求最长连线. 例如 n=6 时,有下图:
1 2 3 4 5 6
┌─┬─┬─┬─┬─┬─┐
1 │1│1│1│0│0│1│
├─┼─┼─┼─┼─┼─┤
2 │1│1│0│1│1│1│
├─┼─┼─┼─┼─┼─┤
3 │0│0│0│1│0│1│
├─┼─┼─┼─┼─┼─┤
4 │1│1│0│1│1│1│
├─┼─┼─┼─┼─┼─┤
5 │0│1│0│0│0│0│
├─┼─┼─┼─┼─┼─┤
6 │1│1│1│1│0│0│
└─┴─┴─┴─┴─┴─┘
在该图中,包含有如下的一些连线:
1←1←1 1←11
↓ ↓ ↓
1→11 1→1 1
↓ ↑↓
1→1→111
↑↓
1←1←1
在以上的连线中,最长的连线为: 表示方法:
1 最长连线长度:lmax=9
↓ 连线:(1,6)→(2,6)→
1→1 1 (3,6)→(4,6)→
↑↓ (4,5)→(4,4)→
11 (3,4)→(2,4)→
↑↓ (2,5)
1←1←1连线的表示不是唯一的,仅给出一种即可。
2. (noi95.1_2) 在一个园形操场的四周摆放 n 堆石子(n≤100), 现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
编一程序,由文件读入堆数 n 及每堆的石子数(≤20),
① 选择一种合并石子的方案, 使得做n-1次合并, 得分的总和最小;
② 选择一种合并石子的方案, 使得做n-1次合并, 得分的总和最大.
例如, 图 2-1 所示的4堆石子,每堆的石子数(从最上面的一堆数起,
顺时针数) 依次为4 5 9 4. 则 3 次合并得分总和最小的方案为图2-2,得分总和最大的方案 为图 2-3.
(加图)
输入数据:
文件名由键盘输入,该文件内容为;
第一行为石子堆数 n;
第二行为每堆的石子数, 每两个数之间用一个空格符分隔
输出数据:
输出文件名为
第 1 至 n-1 行为得分最小的合并过程. 每行包含两个数, 表示应该合并的两 堆石子的数目, 小数在前, 大数在后, 第 n 行为合并成一堆后的最小得分总和; 第 n+1 行为空行, 第 n+2 至 2n+1 行为得分最大合并过程(格式同前). 第 2n+2
行为最大得分总和.73. (noi95.1_4) n 位由 0 和 1 组成的字符串 a、b 可分别表示为a=anan-1?ai?a2a1
b=bnbn-1?bi?b2b1
其中, ai=0或1, bi=0或1,1≤i≤n, n≤15.
如果存在某一位j(j?1?n), 在该位上两串不同, 即aj≠bj, 而其余n-1位 上的两串相同, 即ai=bi(i?1?n,i≠j), 则称 a、b 两串“互邻”。
比如,在n=4时, a=1100, b=1000, a、b 两串“互邻”, 而 c=1100, d= 1010, c、d 两串不“互邻”。
编程要求:
寻找一个含有 2n 个上述01串的序列, 该序列满足以下要求:
① 组成该序列的每一个01串都与其它串不同;
② 第k个串与第k-1个串有“互邻”关系,2≤k≤2n;
③ 该序列首项由输入指定.
例如 n=2, 指定首项为01, 则一个满足上述要求的序列为
01 11 10 00
输入数据 ┏━━━━━━┓ ┏━━━━━┓ 文件名由键盘输入
┃┃ ┃┃ 该文件共有两行 ┠──────┨
┠─────┨
第一行为 n ┃2 ┃ ┃2┃ 第二行为指定的序列首项 ┃01 ┃ ┃01
┃ ┃┃ ┃11 ┃输出数据 ┗━━━━━━┛ ┃10 ┃ 输出文件为
┃00 ┃ 第一行为 n ┃ ┃ 第二行至第2n+1行依次输出序列的每一个串.┗━━━━━┛输入输出举例
参考输入文件:
参考输出文件:
3. (noi95.1_4) n 位由 0 和 1 组成的字符串 a、b 可分别表示为
a=anan-1?ai?a2a1
b=bnbn-1?bi?b2b1
其中, ai=0或1, bi=0或1,1≤i≤n, n≤15.
如果存在某一位j(j?1?n), 在该位上两串不同, 即aj≠bj, 而其余n-1位 上的两串相同, 即ai=bi(i?1?n,i≠j), 则称 a、b 两串“互邻”。
比如,在n=4时, a=1100, b=1000, a、b 两串“互邻”, 而 c=1100, d= 1010, c、d 两串不“互邻”。
编程要求:
寻找一个含有 2n 个上述01串的序列, 该序列满足以下要求:
① 组成该序列的每一个01串都与其它串不同;
② 第k个串与第k-1个串有“互邻”关系,2≤k≤2n;
③ 该序列首项由输入指定.
例如 n=2, 指定首项为01, 则一个满足上述要求的序列为
01 11 10 00
输入数据 ┏━━━━━━┓ ┏━━━━━┓ 文件名由键盘输入
┃┃ ┃┃ 该文件共有两行 ┠──────┨
┠─────┨ 第一行为 n ┃2 ┃ ┃2┃ 第二行为指定的序列首项
┃01 ┃ ┃01 ┃ ┃┃ ┃11 ┃输出数据 ┗━━━━━━┛ ┃10
┃ 输出文件为 ┃00 ┃ 第一行为 n ┃ ┃ 第二行至第2n+1行依次输出序列的每一个串.┗━━━━━┛输入输出举例
参考输入文件:
参考输出文件:
4. (noi95.1_5) m、n为整数,且满足下列两个条件:
① m、n?{1, 2, ?, k}, (1≤k≤109)
② (n^2-m*n-m^2)^2=1
编一程序, 由键盘输入k, 求一组满足上述两个条件的 m、n, 并且使m^2+n^2 的值最大.
例如, 若 k=1995, 则 m=987, n=1597 时, 则 m、n 满足条件, 且可使 m^2+n^2的值最大.
5. (钱币系统问题) 某钱币系统由 k (k≤20) 种硬币组成, 币值依次为
a[1], a[2],...,a[k], 其中 a[i] (i=1,2,...,k) 为互不相同的正整数, 且依降序排列, a[1]≤200. 给定某整数币值 n(n≤3000), 要求用最少枚数的硬币表示这个币值. 输入: 用文件输入已知数据, 格式为:
第 1 行: k (硬币种数)
第 2 行: a[1] a[2] ... a[k] (各币值用空格隔开,已按降序排列好)
第 3 行: n (给定的币值)
输出: 直接在屏幕上输出结果. 如果该钱币系统无法表示币值 n,应输出no, 否则按以下格式输出:
第 1 行: 最少钱币枚数 r.
第 2 行: 输出若干形如 m*n 的表达式, m 为币值, n为使用该币值的枚数. 各式第 2 个因子之和应等于 r, 各式乘积之和应等于 n.
例: 设 (a[1],a[2],a[3])=(5,2,1), n=12, 则应输出
3
5*2 2*1.
target=_blank title = div视频教程div
class=td_content6. (刻度尺问题)给定长度为 l 的直尺, l 为整数, 且l≤40. 为了能一次直接
量出 1,2,...,l 的各种长度, 该尺内部至少要有多少条刻度 ? 请输出最少刻度 数( 不含两端点)及每个刻度的位置. 测量长度时可利用两端点, 其位置分别为 0, l.
输入: 由键盘输入 l.
输出: 用文本文件按以下格式输出结果(文件名: ):
第 1 行: s ( 最少刻度数 )
第 2 行: 尺内 s 个刻度的位置
第 3 行至第 l+2 行: 每行输出 3 个用空格隔开的整数 t m n, 其中
1≤t≤l 为要测量的各长度, m,n 依次为该长度的起止刻度 (mn).
例: 如果 l=6, 则一个正确的输出是: 省
2
1 4 提示: (1) 最少刻度数 s 应满足:
1 0 1c[s+2,2]=(s+2)*(s+1)/2≥l.
2 4 6 (2) 除两端点外, 第一个刻度可取为 3 1 4a[1]=1, 第二个刻度可在 1, l-2, l-1 这 4 0 4三个数中选取.
5 1 6
6 0 6
7. 设有有2 n(n=6)个球队进行单循环比赛,计划在2 n ? 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n ?
1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
队1 23 4
比赛 1==23==4 一天
1==32==4 二天
1==4 2==3 三天
8.数制转换
设有一个字符串a$的结构为: a$=’mnp’
其中m为数字串(长度=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。 程序要求:从键盘上读入a$后(不用正确性检查),将a$中的数字串m(n进制),以p进制的形式输出。
例如:a$=’48108’
其意义为:将10进制数48,转换成8进制数输出。
输出结果为:4810=608
9.挖地雷(30分)
在一个地图上有n个地窖(n=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。
10.编码问题:
设有一个数组a:-1] of integer;
数组中存放的元素为0~n-1之间的整数,且a[i]≠a[j](当i≠j时)。
例如:n=6时,有: a=(4,3,0,5,1,2)
此时,数组a的编码定义如下:
a[0]的编码为0;
a[i]的编码为:在a[0],a[1],?,a[i-1]中比a[i]的值小的个数(i=1,2,?,n-1) ∴ 上面数组a的编码为: b=(0,0,0,3,1,2)
程序要求解决以下问题:
【篇二:《c语言编程基础》习题答案】
ass=txt>前 言
《c语言编程基础(第2版)》每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。编程答案只是实现题目算法要求的一种,并不一定是最好的。希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平和锻炼自己的创新能力。由于作者水平所限,错误和不当之处在所难免,恳请批评指正。
习题一
1、填空题。
⑴ c语言程序由__函数__组成,其中必须有且只能有一个名为_main__的函数。c程序的执行从___名为main的主__函数开始。
⑵ 每个c语句必须以__分__号结束。
⑶ 标识符只能由_英文字母_、__数字_和_下划线__三类符号构成,而且标识符的第一个字符必须是__英文字母__或__下划线__。
⑷ 关键字是指___c语言编译系统所固有的、具有专门意义的标识符___。 ⑸ c程序中,注释的内容应放在__/*_和_*/__符号之间。
2、选择题。
⑴ 下面合法的c语言标识符是___ c ___。
⑵ c语言中主函数的个数是___ a______。
⑶ 以下有关注释的描述中,错误的是___ c ___。
⑷ c程序中,main函数的位置____ d___。
3、指出并改正下面程序中的错误。
⑴ main 应为 main()
⑵ 应在本程序最后加上大括号 }。
⑶ 语句结束应有分号。如:
int a,b;
a=1;b=2;
printf(%d,a+b);
4、分析下列程序,写出运行结果。
⑴ 该程序是计算两个整数a和b的乘积并赋值给c,运行结果为:
c=30
⑵ 该程序输出一个字符串和一排星号,运行结果为:
hello!
*****************
5、编程题。
⑴ 按题目要求,编写输出固定信息的程序如下:
main()
{
pt();
printf( welcome!);
pt();
}
pt()
{
printf(*****************);
}
⑵ 按题目要求,编写输入数据输出其表达式的程序如下:
main()
{
int a,b,c;
scanf(%d,a);
scanf(%d,b);
c=a*b+10;
printf(c=%d,c);
}
习题二
1、单项选择题。
⑴ c语言中的变量名只能由字母、数字和下划线组成,且第一个字符_ c _。 ⑵ 合法的常量是__ d ___。
⑶ c语言中的基本数据类型所占存储空间长度的顺序是__ d___。
⑷ 下列符号串中与123.0相同的合法常量是__ c___。
2、填空。
⑴ c语言中的基本数据类型包括____整型(int)_、____浮点型(flot)__ 和_字符型(char)_三种。
⑵ 整型常数有_十进制整数_、_八进制整数_和_十六进制整数_三种表示形式; 整型变量可分为四类: _一般整型(int)_、_短整型(short)_、_长整型
(long)_、_无符号型_。其中_无符号型_又可分为_无符号整型(unsigned int)、_无符号短整型(unsigned short)和_无符号长整型(unsigned long)_3种。
⑶ 有10个用指数形式表示的符点常数:
请指出合法的有___③④⑥⑧⑩___。
⑷ 在c中,没有专为存贮字符串的变量,但可以用__字符型数组__ 或__字符型指针变量_存贮字符串。其定义格式为_ char str[6];_和_
char *a;_。
⑸ 数据类型混合运算时, 要进行同型转换,转换方式分为__自动转换(隐式转换)__和__强制转换(显式转换)__两种。
3、写出下列程序运行结果。
⑴ 215/9=23?8
⑵ 97b
⑶ 4.000000
4、编写程序。
⑴ 按题目要求编写求三个已知数的乘积,程序如下:
main()
{
int a,b,c;
a=19;
b=22;
c=650;
printf(a*b*c=%dn,a*b*c);
}
⑵ 按题目要求,编写将值整数化后赋值的程序如下:
main()
{
int a1,a2;
float b,c;
b=35.425;
c=52.954;
a1=(int)(b*c);
a2=(int)c%(int)b;
printf(a1=%d;a2=%dn,a1,a2);
}
⑶ 按题目要求,编写计算圆周长、面积和圆柱体积的程序如下:
main()
{
int r,h,c,s,v;
r=15;
h=3;
c=2*3.14*15; s=3.14*r*r; v=s*h;
printf(c=%d, s=%d , v=%dn,c,s,v);
}
习题三
1、填空题。
⑴ 设有int x=11;则表达式(x++*1/3)的值是_____3____。
⑵ 已知数学表达式y=x2-2x+5,写出对应的c语言表达式_y=x*x-2*x+5_。 ⑶ 已知a=10,则表达式x=(a=a+b,a-b)的值为__x=10__。
2、选择题。
⑴ 在c语言中,下列运算符的操作数必须是int类型的运算符是( d )。 ⑵ 假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为( a )。 ⑶ 已定义int m=6,n=5;,则执行m%=n-1;之后,m的值是( b )。
⑷ 已有int a=1,b=1;则执行b=(a=2*3,a*5),a+7之后,a,b的值是( b )。 ⑸ 已有int x=2,y=1;则执行x++==y--;的结果是( d )。
3、求下面算术表达式的值。
⑴ 2.500000
⑵ 3.500000
4、分析下列程序,写出运行结果。
⑴ 注意,在c语言中,因为函数调用中参数按从右到左的顺序求值,因此该程序执行打印输出的结果为:
311
⑵ 该程序在计算条件表达式的值赋给a时,其x值已为6,y值已为7,因此运行结果为:
a=7,b=0,c=6
⑶ 该程序利用运算符与结合性的优先级不同,而取得a与b的值。(因为该题使用了逻辑运算符,可在学了第5章以后再详细分析)运行结果如下:
a=2,b=1
⑷ 该程序应用复合的赋值运算符和从右至左结合性的运算规则,求取n的值,运行结果如下:
n=28
⑸ 该程序在执行语句“y=x++-1;”时,y为0而x在执行后变为2;在执行语句“z=--y+1;”时,z为0而y便成了-1。运行结果如下:
x=2,y=-1,z=0
5、编程题。
⑴ 用符号常量编写简单计算程序如下(复杂应用应在第9章学习后再做):
#define n 12
#define m 25
main()
{
float c;
printf(n+m=%dn,n+m);
printf(n-m=%dn,n-m);
printf(n*m=%dn,n*m);
c=(float)n/m;
printf(n/m=%fn,c);
}
⑵ 查看i++与++j运算结果差异的程序,编写如下:
main()
{
int i=20,j=20;
printf(i++:%dn++j:%dn,i++,++j);
}
⑶ 查看m--与--n运算结果差异的程序,编写如下:
main()
{
int m=20,n=20;
printf(m--:%dn--n:%dn,m--,--n);
}
习题四
1、单项选择题。
⑴ 下列叙述不正确的是__b__。
⑵ 当输入数据为12345678时,下面程序运行的结果是__c___。
⑶ putchar函数可以向终端输出一个__d___。
⑷ 按格式输出的格式符__ c__。
2、回答问题。
【篇三:c语言基础题及答案】
txt>一、 选择题
1. c语言的基本构成单位是:。
a. 函数b. 函数和过程 c. 超文本过程 d. 子程序
2. 一个c语言程序总是从 开始执行。
a. 主过程 b. 主函数 c. 子程序d.主程序
3. c语言的程序一行写不下时,可以 。
a. 用逗号换行 b. 用分号换行 c. 在任意一空格处换行 d. 用回车符换行
4. 以下叙述不正确的是:。
a. 在c程序中,语句之间必须要用分号;分隔
b. 若a是实型变量,c程序中a=10是正确的,因为实型变量中允许存放整型数
c. 在c程序中,无论是整数还是实数都能正确无误地表示
d. 在c程序中,%是只能用于整数运算的运算符
5. 以下不正确的c语言标识符是 。
a. abc b. abc c. a_bcd. ab.c
6. 下列字符串是标识符的是: 。
a. _hj b. 9_studentc. longd. line 1
7. 以下说法中正确的是:。
a. c语言程序总是从第一个定义的函数开始执行
b. 在c语言程序中,要调用的函数必须放在main()函数中定义
c. c语言程序总是从main()函数开始执行
d. c语言程序中的main()函数必须放在程序的开始部分
8. 不合法的常量是: 。
a. ?2?b. c. ?3?d. ?483?
9. 已知各变量的类型说明如下,则以下不符合c语言语法的表达式是: 。
int k,a,b;
unsigned long w=5;
double x=1.422;
a. x%(-3) b. w+=-2
10.
11. 若有定义:int a=7; float x=2.5; y=4.7;
则表达式x+a%3*(int)(x+y)%2/4的值是: 。 c. k=(a=2,b=3,a+b)
d. a+=a=+(b=4)*(a=3) 在c语言中,字符型数据在内存中以形式存放。 a. 原码 b. bcd码 c. 反码d. ascii码
a. 2.500000
12. b. 2.750000 c. 3.500000 d. 0.000000 设有说明:char w; int
x; float y; double z;
b. charc. intd. double 则表达式w*x+z-y值的数据类型为: 。 a.
float
13.
14.
以下 是不正确的转义字符。 若x为int型变量,则执行以下语句后,x的值为 。 x=6; x+=x-=x*x;
b. -60 c. 60 d. -24
字符串abc的长度是。 a. b. c. 081d. 0 a. 36 15.
二、 填空题 a. 11 b. 7 c. 5 d. 3
1. 一个函数由两部分组成,它们是和 。
2. 一个c源程序至少包含一个 ,即。
3. 设int a=12; 则表达式a/=a+a的值是 。
4. 表达式x=(a=3,6*a)和表达式x=a=3,6*a分别是表达式和 表达
式,两个表达式执行完的结果分别是和 ,x值分别是 和 。
5. 在c语言中,实数有两种表示形式,即和。
6. 在c语言中,运算符的优先级最小的是运算符。
第二单元 顺序程序设计
一、 选择题
1. 若m为float型变量,则执行以下语句后的输出为 。
m=1234.123; printf(%-8.3fn,m); printf(%10.3fn,m);
a. 1234.123 b. 1234.123 c. 1234.123 d. -1234.1231234.1231234.123 1234.123001234.123
2. 若x,y,z均为int型变量,则执行以下语句后的输出为 。
x=(y=(z=10)+5)-5; printf(x=%d,y=%d,z=%dn,x,y,z);
y=(z=x=0,x+10); printf(x=%d,y=%d,z=%dn,x,y,z);
b. x=10,y=10,z=10 x=0,y=10,z=10 d. x=10,y=10,z=10
x=0,y=10,z=0 a. x=10,y
=15,z=10x=0,y=10,z=0 x=10,y=10,z=0 c. x=10,y=15,z=10
3. 若x是int型变量,y是float型变量,所用的scanf调用语句格式为: scanf(x=%d,y=%f,x,y);
则为了将数据10和66.6分别赋给x和y,正确的输入应是: 。
a. x=10,y=66.6回车b. 10 66.6回车
c. 10回车66.6回车 d. x=10回车y=66.6回车
4. 已知有变量定义:int a;char c;用scanf(“%d%c”,a,c);语句给a和c输入数据,使30存入a,字符‘b’存入c,则正确的输入是: 。
a. 30’b’回车b. 30 b回车
c. 30回车b回车 d. 30b回车
5. 已知有变量定义:double x;long a; 要给a和x输入数据,正确的输入语句是 。若要输出a和x的值,正确的输出语句 。
a. scanf(“%d%f”,a,x);b. scanf(“%ld%f”,a,x);
printf(“%d,%f”,a,x);printf(“%ld,%f”,a,x);
c. scanf(“%ld%lf”,a,x); d. scanf(“%ld%lf”,a,x);
printf(“%ld,%lf”,a,x);printf(“%ld,%f”,a,x);
6. 若有定义double x=1,y;则以下的语句执行的结果是 。
y=x+3/2; printf(“%f”,y);
a.2.500000 b.2.5 c.2.000000 d.2
7. 若a为整型变量,则以下语句 。
a=-2l; printf(%dn,a);
a. 赋值不合法 b. 输出为不确定的值
二、 读程序写结果
1. main()
{ int x,y; scanf(%2d%*2d%ld,x,y); printf(%dn,x+y); c. 输出值为-2 d. 输出值为2
}
执行时输入:1234567
2. main()
{ int x=4,y=0,z;
x*=3+2;
printf(%d,x);
x*=y=z=4;
printf(%d,x);
}
3. main()
{ float x; int i;
x=3.6; i=(int)x;
printf(x=%f,i=%d,x,i);
}
4. main()
{ int a=2;
a%=4-1; printf(%d, ,a);
a+=a*=a-=a*=3; printf(%d,a);
}
5. main()
{ int x=02,y=3;
printf(x=%d,y=%%d,x,y);
}
6. main()
{ char c1=?6?,c2=?0?;
printf(%c,%c,%d,%dn,c1,c2,c1-c2,c1+c2);
}
7.main()
{ int x,y,z;
x=y=1; z=++x-1;
printf(%d,%dn,x,z);
z+=y++;
printf(%d,%dn,y,z);
}
三、 填空题
1. 在c语言中,字符型数据和整型数据之间可以通用,一个字符数据既能以输
出,也能以输出。
2. %-ms表示如果串长小于m,则在m列范围内,字符串向 靠,
补空格。
3. printf函数的“格式控制”包括两部分,它们是 和 。
4. 编写程序求矩形的面积和周长,矩形的长和宽由键盘输入,请填空。
#include stdio.h
void main()
{float l,w;
printf(“please input length and width of the rectanglen”);
scanf(“%f%f”,l,w); area=; girth=;
}
整数存入n,如:字符‘0’所对应的整数就是0。请填空。
void main()
{ char c;
}
; printf(“please input a char:n”); c= ; n= ; printf(,c,n); 5. 编写程序,输入一个数字字符(‘0’~‘9’)存入变量c,把c转换成它所对应的
版权声明:本文标题:c语言入门经典第5版答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1708996446h536346.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论