最少硬币问题
【问题描述】有n种不同面值的硬币,各硬币面值存于数组T[1:n];现用这些面值的钱来找钱;各面值的个数存在数组Coins[1:n]中。
【编程任务】对于给定的1<=n<=10,硬币面值数组、各面值的个数及钱数m,0<=m<=2001,编程计算找钱m的最少硬币数。
input : 第一个数字n,后面n行每行两个数,面值T[i],面值个数Num[i];最后是钱数m。
output:最少硬币数。
Sample intput :
3
1 3
2 3
5 3
18
Sample output:
5
陷阱提示:表面上看该题用贪心算法比较合适,确实如此,但是仅用用贪心算法可能导致无解(事实上有解),用动态规划方法来做,可以,但浪费时间和空间,一种基于动态规划思想的贪心算法可以很好地解决此类问题。
m[i][j] 表示一第i种面值的硬币为最大币,j表示为要找的零钱数,首先判断j>i 或 j>T[i] ,在 j>i 或 j>T[i]的情况下求
int X=j/T[i];X=min(X,Coins[i]);
动态方程:m[i][j]=min{X+m[i-1][j-T[I]*X],X-1+m[i-1][j-(X-1)*T[i]]}; 详细代码如下:
// LeastCoins.h
#ifndef LEASTCOINS_H
#define LEASTCOINS_H
class LeastCoins
{
public:
LeastCoins();
~LeastCoins();
void run();
private:
int number; // 不同面值的硬币个数
int TotalMoney; // 要找回的总钱数
int *T; // 存储硬币的面值
int *Coins; // 硬币的个数
int **m; // m[i][j] 是以最大面值 i 要找回钱数是 j 需要硬币数的最少个数
bool input();
int changeMoney(int i,int j); // i 是第 i 中硬币
void output();
void traceback(); // 寻找轨迹
};
#endif
// LeastCoins.cpp
#include
#include
#include
#include
#include "LeastCoins.h"
#define N 10 // 根据实际问题规模的大小来初始化
ifstream inputFile("input.txt",ios::out);
ofstream outputFile("output.txt",ios::out);
LeastCoins::LeastCoins()
{
number=0;
TotalMoney=0;
T=new int [N];
Coins=new int [N];
m=new int *[N];
for (int i=0;i { m[i]=new int [N*N]; } } LeastCoins::~LeastCoins() { delete []T; delete []Coins; for (int i=0;i { delete []m[i]; } delete []m; } void LeastCoins::run() { if (input()) { changeMoney(number,TotalMoney); output(); } } bool LeastCoins::input() { inputFile>>number; outputFile<<"有 "< outputFile< int sum=0; for (int i=1;i<=number;i++) { inputFile>>T[i]; inputFile>>Coins[i]; outputFile< sum+=T[i]*Coins[i]; } inputFile>>TotalMoney; outputFile<<"需要找回的总钱数为: "< if (T!=NULL && Coins!=NULL) { if (sum>=TotalMoney) { return true; } else { outputFile<<"所有硬币的总钱数是"< } return false; } return false; } int LeastCoins::changeMoney(int i,int j) { if (i>1) { if (j { m[i-1][j]=changeMoney(i-1,j); m[i][j]=m[i-1][j]; return m[i][j]; } else { int X=j/T[i]; // 最多需要面值为 T[i] 的硬币的个数 X=(X int T1=changeMoney(i-1,j-X*T[i]); int T2=changeMoney(i-1,j-(X-1)*T[i]); m[i-1][j-X*T[i]]=T1; m[i-1][j-(X-1)*T[i]]=T2; if ((T1+X)>(T2+X-1)) { m[i][j]=T2+X-1; // 取小 } else { m[i][j]=T1+X; } return m[i][j]; } } else if(i==1)// 此时 i==1 { if ((j%T[1])==0 && (j/T[1]<=Coins[1])) { m[1][j]=j/T[1]; return m[1][j]; } else { return 1000000; // 只要能保证不被选中就行 } } else { return 1000000; } } void LeastCoins::output() { if (m[number][TotalMoney]<1000000) // 判断是否有解 { outputFile<<"需要最少的硬币个数是: "< outputFile< traceback(); } else { outputFile<<"无解"< } } void LeastCoins::traceback() { int j=TotalMoney; for (int i=number;i>=2;i--) { int X=j/T[i]; // 最多需要面值为 T[i] 的硬币的个数 X=(X int T1=m[i-1][j-X*T[i]]+X; int T2=m[i-1][j-(X-1)*T[i]]+X-1; if (T1 { outputFile< j-=X*T[i]; } else { outputFile< j-=(X-1)*T[i]; } } outputFile< } // main.cpp #include "LeastCoins.h" int main() { LeastCoins LC; LC.run(); return 0; } 《C语言程序设计》部分例题及课后习题参考程序1.编程计算如下分段函数: y={2x+3 x≥10 4x 0≤x<10 5x?6 x<0 [参考程序] #include rank='D';break; default: rank='E'; } printf("%.2f:%c\n",score,rank); return 0; } 3.编程判断以从键盘输入的三个数为边长,是否能构成三角形。 [参考程序] #include 习题二 一、选择题 二、填空题 1.18 2.int float double 3.10 11 4.8 16 10 5.% 三、阅读题 1. 10,10,9,10 2. j=1, i=2 k=3,i=3 i=3,i=2 k=1,i=1 习题三 一、选择题 二、填空题 1. 从键盘上读入一个字符在屏幕上输出一个字符 #include 2. x=127,x= 127,x=177,x=7f y=123.4567,y= 123.46,y=123,45670 3. 2,1 4. 1234 5. 4,3 6. -6,-6 习题四一、选择题 二、填空题 1. 非0 0 、 2. k==0 3. n%7==0&&n%==0 else 三、阅读题 1. a=1,b=0 2. c=1 习题五一、选择题 二、填空题 1. for语句 do-while 语句 while 语句 2. a=14,y=26 3. k=14,n=-1 4. 39 5. s=19 6. 22222 7. 10 8. 7 9. 8 10. 5,5 三、改错题 1. for( i=0;i<5;i++);for控制部分用分号分隔 2. int j=0;while(j<10){j++;i=j} 分号是多余的,否则会造成死循环 3. int s=1,i=1; while(i<5) {s*=i; i++; } 两条语句需要加上花括号 4. while(j<10);(分号不能少) 5. continue改为break 习题六 一、选择题 二、填空题 1. 20 0 19 2. 数组名 3. 越界 4. 6 5. j==k a[j][k]=1; a[j][k]=0; 三、阅读题 1. 6 5 4 3 2 1 2. aaa bbb ccc ddd 3. 2,2,1 习题七 一、选择题 二、填空题 1. 整个函数体内局部 2. 整型 3. k<=b return y; 单选题 1、下列语言中不属于计算机语言的三大类的是(C )。 A.机器语言 B.汇编语言 C.脚本语言 D.高级语言 2、下列说法中不正确的是(C ) A.计算机语言大致可分为三大类,即机器语言、汇编语言和高级语言 语言是一种通用的、过程式的编程语言,具有高效、灵活、可移植等优点 语言属于汇编语言 D.高级语言比汇编语言更贴近于人类使用的语言,易于理解、记忆和使用 3、以下开发工具中不属于主流的开发工具的是(B ) Studio ::Block 4、下列选项是对主流开发工具的介绍,其中错误的是(B ) Studio支持C/C++、C#、F#、VB等多种程序语言的开发和测试 ::Block是一个免费的跨平台IDE,支持C、C++和Fortan程序的开发 是一种被广泛使用的免费跨平台IDE,最初由IBM公司开发 是一款功能非常强大的IDE ( 和其他IDE不同的是,Vim本身并不是一个用于开发计算机程序的IDE,而是一款功能非常强大的文本编辑器,它是UNIX系统上Vi编辑器的升级版。) 5、下列选项中,不属于开发一个C语言应用程序的具体实现步骤的是(A ) A.启动开发工具 B.添加源文件 C.编写代码 D.运行程序 6、下列选项中,关于main()函数叙述不正确的是(C ) A.一个完整的C语言程序中,有且只能有一个main()函数 ()函数是程序的主入口,程序总是从main()函数开始执行 C.如果没有声明main()函数,程序将从第1行开始执行 ()函数可以有返回值,也可以没有返回值 7、下面程序中,合法的选项是(D ) A.#include int main() { printf("hello world\n"); return 0; } B.#include int man() { printf("hello world\n"); return 0; } C.#include int main() { printf("hello world\n") return 0; } D.#include int main() { print("hello world\n"); return 0; } 8、下面程序中,运行结果为“1,2”的是(A ) A.#include int main() { int a = 1; int b = 2; printf("%d %d\n",a,b); return 0; } B.#include int main() { int a = 1; int b = 2; printf("%d,"a); printf("%d\n",b); return 0; } C.#include int main() { int a = 1, b = 2; printf("%d,,%d\n",a,b); return 0; } 一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20. 1.题目标题: 四位反序数 题目描述: 设N是一个四位数,它的n倍恰好是其反序数(例如:123的反序数是321),编程,输出一个满足条件的N。(知识点:控制语句) 输入描述: 输入为一个整形数n(2<=n<=9) 输出描述: 输出为一个四位数的整形数 样式输入: 9 样式输出: 1089 #include 输出描述: 输出为11个正整数; 样式输入: 1 2 11 12 22 23 33 34 44 45 55 56 66 67 68 88 99 100 101 102 样式输出: 2 2 2 2 2 2 3 0 1 1 3 #include 【教材】《C语言程序设计(第2版)》清华大学出版社,黄保和,江弋编著。2011年10月第二版。ISBN:978-7-302-26972-4。售价:35元。 【答案版本】本习题答案为2012年2月修订版本。 一、选择题 1. 设有程序段”int k=10; while(k=0) k=k-1;”,则下面叙述正确的是D)循环体语句一次也不执行。 A. while循环执行10次 B. 循环是无限循环 C. 循环体语句执行一次 D. 循环体语句一次也不执行 2. 设有程序段”int x=0,s=0;while(!x!=0) s+=++x; printf(“%d”,s);”则A)运行程序段后输出1。 A. 运行程序段后输出1 B. 程序段执行无限次 C. 运行程序段后输出0 D. 程序段中的控制表达式是非法的 3. 下面循环语句中,错误的是D) int a=1,b=2;do b-- while(b= =0);。 A. int a=1,b=2; while(b--); B. int a=1,b=2; do a++; while(a==b); C. int a=1,b=2; while(a=3); D. int a=1,b=2; do b-- while(b==0); 4. 已知”int i=5;”,下列do…while循环语句的循环次数为C) 5。 do{ printf(“%d\n”,i--); } while(i!=0); A. 0 B. 1 C. 5 D. 无限 5. 循环语句”for(int i=0,j=10; i==j; i++,j--)”的循环次数是A) 0。 A. 0 B. 5 C. 10 D. 无限 6. 下述有关break语句的描述中,不正确的是C) break语句用于if语句的内嵌语句内,它结束该if语句。 A. break语句用于循环体内,它将结束该循环 B. break语句用于开关语句,它结束该开关语句 C. break语句用于if语句的内嵌语句内,它结束该if语句 D. break语句在一个循环体内可使用多次 7. 下面关于循环语句的描述中,错误的是B)循环体内必须同时出现break语句和continue 语句。 A. 循环体内可以包含有循环语句 B. 循环体内必须同时出现break语句和continue语句 C. 循环体内可以出现选择语句 D. 循环体可以是空语句 8. 以下不是死循环的是D)for(;(c=getchar()!=’\n’);)printf(“%c”,c);。 A. for(; ; x+=i); B. while(1) { x++; } C. for( i=10; ; i--) sum+=i; D. for( ; (c=getchar() )!=’\n’ ; ) printf( “%c”,c); 9. 执行语句”for(i=0;i++<3;);”后,变量i的值为C) 4。 A.2 B. 3 C. 4 D. 5 10.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C)循环4次。 A. 无限循环 B. 循环次数不定 C. 循环4次 D. 循环3次 单选题 1、关于数组的定义与初始化,下列哪一项是错误的() A.int arr[5] = {1,2,3,4,5}; B.int arr[] = {1,2,3,4,5}; C.int arr[5] = {1,2,3}; D.int arr[5] = {1,2,3,4,5,6}; 2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是() A.arr[10] B.arr[6.3] C.arr(6) D.arr[0] 3、在C语言中,引用数组元素时,其数组下标的数据类型允许是() A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 4、若int arr[5] = {1,2,3}; 则arr[2]的值为() A.1 B.2 C.3 D.null 5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为() A.4 B.1 C.2 D.5 6、关于二维数组,下列选项能正确定义并赋初值的是() A.int n = 5,b[n][n]; B.int a[1][2] = {{1},{3}}; C.int c[2][] = {{1,2},{3,4}}; D.int a[3][2] = {{1,2},{3,4}}; 7、阅读下列程序段: char s[18] = "a book!"; printf("%.4s\n", s); 其输出结果为() A.a book! B.a book C.a bo D.a 8、阅读下列程序: int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } }; printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]); C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后( #include 实验二参考答案 1.输入两个整型数字,输出他们的和。 #include 4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?(h和f的值由键盘输入,输出鸡和兔的头数) #include 2 第1章程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10.可读性11.模块化12.对问题的分析和模块的划分 三、应用题(第24页) 2.源程序: main() {int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf("cock hen chick\n"); for(i=1;i<=20;i++) for(j=1;j<=33;j++) for(k=1;k<=33;k++) if (i+j+k*3==100&&i*5+j*3+k==100) printf(" %d %d %d\n",i,j,k*3);} 执行结果: cock hen chick 4 18 78 8 11 81 12 4 84 3.现计算斐波那契数列的前20项。 递推法源程序: main() {long a,b;int i; a=b=1; for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/ {printf("%8ld%8ld",a,b); a=a+b;b=b+a;}} 递归法源程序: main() {int i; for(i=0;i<=19;i++) printf("%8d",fib(i));} fib(int i) {return(i<=1?1:fib(i-1)+fib(i-2));} 执行结果: 1 1 2 3 5 8 13 21 3 4 55 89 144 233 377 610 987 1597 2584 4181 6765 阅读程序题 【2.1】以下程序的输出结果是。 main(D ) { float a; printf("%g",a); } A) 0.00000e+00 B) 0.0 C) 1.00000e-07 D) 0 【2.2】下面程序的输出结果是B____。 #include { unsigned int n; int i=-521; n=i; printf("n=%u\n",n); }//变量i中的负号传送给变量n后,因n是无符号数,已不作为负号处理。 【2.4】以下程序的输出结果是。 main(D ) { int x=10, y=10; printf("%d %d\n", x――, ――y); } A) 10 10 B) 9 9 C) 9 10 D) 10 9 【2.5】以下程序的输出结果是___B。 main() { int n=1; printf("%d %d %d\n",n,n++,n--); } // C语言在执行printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理n- -,再处理n++,最后处理n, A) 1 1 1 B) 1 0 1 C) 1 1 0 D) 1 2 1 【2.6】以下程序的输出结果是____。 main() { int x=0x02ff,y=0x0ff00; C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是() A、abc B、12AC C、sun D、 A2 3、设有语句int a=4;则执行了语句a+=a- =a*a后,变量a的值是() A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是() A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是() A、% B、/ C、%和/ D、 + 6、以下关于运算符的优先顺序的描述正确的是() A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是()sum=pad=5;pAd=sum++,pAd++,++pAd; printf(“%d\n”,pad); A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() A、 INPUT x、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、 scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456< 回车 >,下面程序的输出结果是:() void main ( ) { int m,n; scanf(“%2d%3d”,&m,&n); printf(“m=%d n=%d\n”,m,n); } A、m=23 n=45 B、m=234 n=56 C、m=23 n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是() main( ) { int x,y; scanf(“%d”,&x); y=x>12x+10:x-12; printf(“%d\n”,y); } A、 0 B、 22 C、 12 D、10 11、C语言中while和do-while循环的主要区别() A、do-while的循环体至少执行一次 B、while 的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 例子: #include { int a,b,max; scanf (“%d%d”,&a,&b); if (a>b) max=a; else max=b; printf (“%d”,max); } 输出a+b的值: #include C 语言程序设计习题答案 习题一 C 语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S 流程图最大的区别是什么? 答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。 4. 求1×2×3×…×10的值。 5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 7. 求一元二次方程ax 2+bx+c=0的根。分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。 四、注释下面C 程序的各个组成部分。 main() /*主函数 */ { /*程序开始 */ int a,k,m; /*定义三个用来存放整数的变量 */ a=10; /*将整数10赋值给变量a */ k=2; /*将整数2赋值给变量k */ m=1; /*将整数1赋值给变量1 */ a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */ printf("%d\n",a); /*在屏幕上打印出变量a 的值 */ } /*程序结束 */ 习题二 数据类型、运算符与表达式 一、选择题 1~10:BCDCB DDBCA 11~20: ADDAA DBADC 21~28: DABAD CDD Y= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1 《C程序设计》练习题 一、单项选择题 导读:单项选择题要求从给出的四个备选答案中,选出一个最符合题意的答案。在完成习题的过程中,不但要选出正确的答案,而且要清楚不正确的选项错在何处,以加深对概念的理解。对于掌握不准的问题,应该通过上机实验来检验。(注:选用普通整型数据占用2个字节的c编译器。如Turbo C 2.0 、Win-TC、Turbo C++ 3.0) 【1.1】以下不正确的C语言标识符是____。 A) int B) a_1_2 C) ab1exe D) _x 【1.2】以下是正确的C语言标识符是____。 A) #define B) _123 C) %d D) \n 【1.3】下列四组字符串中都可以用作C语言程序标识符的一组是。 ??? A) print B) iam C) Pxq D) str_l ??? _3d one_half My->book Cpp ??? oodbs tart$it line# pow ??? aBc 3pai His.age while 【1.4】下面各选项组中,均是C语言关键字的组是。 A) auto,enum,include B) switch,typedef,continue C) signed,union,scanf D) if,struct,type 【1.5】下列不属于C语言关键字的是。A) default B) register C) enum D) external 【1.6】C语言程序从main()函数开始执行,所以这个函数要写在____。 A) 程序文件的开始B) 程序文件的最后 C) 它所调用的函数的前面D) 程序文件的任何位置 【1.7】下列关于C语言的叙述错误的是____ A) 大写字母和小写字母的意义相同 B) 不同类型的变量可以在一个表达式中 C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型 D) 同一个运算符号在不同的场合可以有不同的含义 【1.8】在C语言中,错误的int类型(长度为2字节)的常数是。 A) 32768 B) 0 C) 037 D) 0xAF 【1.9】执行语句printf("%x", -1); (int类型长度为2字节)屏幕显示____。 A) -1 B) 1 C) -ffff D) ffff 【1.10】已知long i=32768; 执行语句printf("%d", i); 屏幕显示____。 A) -1 B) -32768 C) 1 D) 32768 【1.11】已知long i=65539; 执行语句printf("%d", i); 屏幕显示____。 A) 65539 B) -3 C) 3 D) 程序不能执行 【1.12】在C语言中,整数-8在内存中的存储形式是。 简单C语言程序的例子 Prepared on 22 November 2020 例子: #include<> main() { tips();/*caller*/ printf(“\nSuccessisaboutbangingonafterothershaveletgo”); } tips()/*caller*/ { printf(“\nWhenyoureachtheendoftheropetieaknot&hangon”,)0; } [上述程序的输出结果如下:Whenyoureachtheendoftheropttieaknot&hangon. Successisabouthangingonafterothershaveletgo.] #include<> main() { inta,fact; printf(“\nEnteranynumber”); scanf(“%d”,&a); fact=rec(a); printf(“Factorialvalueis%d”,fact); } rec(x); intx; { intf; if(x==1) return(1); else f=x*rec(x-1); return(f); } [其显示的结果为:Factorialvalueis2.] 比较两个数较大的那个: #include<> main() { inta,b,max; scanf(“%d%d”,&a,&b); if(a>b) max=a; elsemax=b; printf(“%d”,max); } 输出a+b的值: #include<> voidmain() { inta,b,x; scanf(“%d%d”,&a,&b); x=a+b; printf(“%d”,x); } 输出a,b中最大的一位数:#include<> intmax(intx,inty) { intz; if(x>y)z=x; elsez=y; return(z); } voidmain() { inta,b,c; scanf(“%d%d”,&a,&b); c=max(a,b); printf(“%d\n”,c); } 输出Hello: #include<> intmain() { printf(“Hello!”); return0; } 求1~100的和: #include<> c 语言程序设计教程第二版课后习题 答 案 篇一: c 语言程序设计教程_李含光_ 郑关胜_ 清华大学 出版社习题答案习题答案[完美打印版]】1.单项选择题 (1)a (2)c(3)d (4)c (5)b 2.填空题(1)函数 (2)主函数(main )(3)printf(),scanf()第 2 章习题参考答案 1.单项选择题 1-5 cbccc 6-10 cdcdc 11-13 dbb 2 .填空题 (1)1(2)26 (3)6 , 4 , 2 (4)10 , 6 (5)3.000000 (6)双精度(double )(7)9 (8)字母,数字,下划线(9)13.700000 (10)11(11)((m/10 )%10 )*100+ (m/100 )*10+m%10 (12)0 (13)10 ,9 ,11(15) (x0y0)||(x0z0)||(y0||z0)(16 )double (17)x==0 (18)sqrt(fabs(a-b))/(3*(a+b))(19 )sqrt((x*x+y*y)/ (a+b)) 第 3 章习题参考答案 1.单项选择题 1-5 cccdd 6-10 bcdbc11-15 bcbbb16 a 2 .填空题 (1)用;表示结束(2){ } (3 )y=x0?1:x==0?0:-1 (4)y%4==0y%100!=0||y%400==0 (5)上面未配对(6)default 标号(7)while ,do while ,for (8)do while (9)本次(10)本层3.阅读程序,指出结果 (1)yes (2)*(3)abother (4)28 70 (5)2,0(6)8(7)36 (8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12 (11) i=6 ,k=4 (12)1,-2 4 .程序填空 (1)x:y ,u :z (2)m=n ,m !=0 ,m=m/10 (3)teps , t*n/(2*n+1) , printf( n”“,%2*lsf )(4)m%5==0 , 1.编程求出1000到3000之间能被7、11、17同时整除的整数的平均值,并输出(结果保留两位小数)。 2.用选择结构的嵌套实现:判断一个数是否同时是5和7的倍数 3.在给定的含n(不超过100)个整数的数组中查找某个数m,若找到则打印在数组中第几个元素,若 不在该数组中则打印“无此数”。 4.编程判断输入的正整数是否既是5又是7的整倍数。若是,输出yes,否则输出no。 5.歌唱比赛有10个评委,分别给出1~100分,除去一个最高分,再除去一个最低分,剩余8个人的给 分的平均值作为选手的最终得分。请编写该程序。 6.输入一个正整数n(1C语言程序设计部分习题及例题参考程序
C语言程序设计(第二版)课后答案 丁亚涛
C语言程序设计教程第一章练习题题目
C语言程序设计试题集与答案解析
C语言20道编程题操作题示例
第5章-C语言程序设计(第2版)教材习题答案
(完整版)C语言程序设计教程第五章练习题题目
C语言程序设计期末考试试题(含答案)
C语言程序简单例子讲解学习
《C语言程序设计教程(第二版)》习题答案
C语言程序设计阅读程序题库及答案
C语言程序设计习题及答案
简单C语言程序的例子
C语言程序的设计习题参考答案(第二版_杜友福)
《C语言程序设计》练习题
简单C语言程序的例子
c语言程序设计教程第二版课后习题答案
C语言编程题练习