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转换成它所对应的


本文标签: 程序 语言 输出