2023年C语言程序设计题库.docx
2023年C语言程序设计题库 郑州大学现代远程教育 C语言程序设计课程 学习指导书 柳宏川 编 第1章 绪论 (一)本章学习目标 掌握结构化程序设计的思想,结构化流程图描述,算法设计基础和良好程序设计风格。 (二)本章重点、要点 C语言特点,算法概念及NS图形描述,结构化程序设计思想,三种基本结构:顺序结构、选择结构和循环结构,使用良好的程序设计风格。 (三)练习题 1_1.什么是低级语言? 1_2.什么是高级语言? 1_3.面向过程语言的特点是什么? 1_4.什么是算法? 1_5.算法有什么特点? 1_6.结构化算法的基本结构有哪些? 1_7.结构化程序设计的标准有哪些? 第2章 C语言程序的开发过程 (一)本章学习目标 熟悉C程序开发环境,熟练掌握调试工具的使用,掌握C语言程序结构与语法规则。 (二)本章重点、要点 C程序开发环境工具的使用,C语言程序结构与语法规则。 (三)Turbo C 的操作指南 开发一个C语言程序一般包括3个主要步骤:编辑,编译和连接。掌握调试C语言程序的全过程。 n 编辑:根据求解算法,开发人员使用文本编辑器编辑代码,生成源程序代码,扩展 n n n n 1) 2) n n 名为.C。 编译:编译时,编译器首先检查源程序中每条语句的词法和语法。当发现错误时,在屏幕上显示错误的位置、错误类型等相关信息。根据错误信息,重新使用编辑器进行查错并修改,然后重新编译直到所有的词法和语法错误都被排除。正确编译后产生二进制目标文件,扩展名为.OBJ。 连接:编译后产生的目标文件是可重定位的程序模块,但不能直接运行。连接是将目标程序、库函数和其它目标程序连接到一起,生成可执行的程序。扩展名为.EXE。 运行:源代码经过编译、连接,生成可执行程序后,就可以进行程序的运行了。 编译过程发现的错误可分为两类。 一类是局部语法错误。例如,缺失了分号、逗号,或者引用了错误的数据对象。 另一类是程序内部上下文关系方面的错误。例如,需要使用的数据对象没有定义。 连接时,也可能产生错误。例如,连接文件找不到等,具体不再叙述。 源代码经过编译、连接,生成可执行程序后,还需要进行测试。测试的目的是发现程序的错误。一般通过输入一些实际数据来验证程序执行结果的正确性。如果程序执行中出现问题,或发现程序的输出结果不正确,需要设法找到出错的原因,并修改源程序,重新进行编译、连接,再测试和调试,不断反复,直到程序正确无误。 第3章 基本数据类型 (一)本章学习目标 熟练掌握标识符的概念,基本数据(整型、实型、字符型等),常量,转义符,变量,变量的赋值。 (二)本章重点、要点 标识符的组成规则,基本数据类型及对应的名称(整型、实型、字符型等),常量,转义符,变量,变量名,变量的赋值等。 (三)练习题 3_1基本整型数据的输出。 3_2实型数据的输出。 3_3字符型数据的输出。 3_4C语言标识符的命名规则如何? 3_5C语言的基本数据类型有哪些? 3_6什么是常量? 3_7什么是变量? 3_8转义字符有什么作用?举例说明。 3_9字符串常量与字符常量的表示有什么不同? - 23 (二)本章重点、要点 循环控制语句:while语句,dowhile语句,for语句,循环初始条件、循环终止条件、循环体和循环变量,循环的嵌套,辅助控制语句,continue语句,break语句,goto语句。 (三)练习题 7_1用while语句,求连加式1 + 2 + .+ n( n > 2)的值。 7_2用dowhile语句,求连加式1 + 2 + .+ n( n > 2)的值。 7_3求解奇数的连加式1 + 3 + 5 + .+ n ( n > 10 )的值。 7_4将如图所示的三角形图案显示到屏幕上。 7_5判断一个整数是否为素数。 第8章 函数 (一) (一)本章学习目标 熟知函数的结构,正确进行函数定义,掌握函数头部,函数体,函数的返回值等概念,理解函数的功能,理解函数参数的意义,掌握有参函数的调用和无参函数的调用,掌握运用函数调用的方式,掌握函数的声明方法,理解函数的原型的概念。 (二)本章重点、要点 函数的定义,函数头部,函数体,函数的值,返回语句,函数的功能,函数的调用,有参函数的调用,无参函数的调用,函数调用的方式,函数的声明与函数的原型。 (三)练习题 8_1编写程序,通过调用函数imin,求两个表达式的最小值。 8_2编写程序,通过调用PtrStar函数,输出4行“”号,每行10个。 8_3编写程序,输入一个年份,通过调用函数判断其是否为闰年。 8_4编写程序,输入两个数,输出其中绝对值最大的数。要求:求绝对值和求最大值分别使用函数完成,在求最大值的函数中调用求绝对值的函数。 8_5编写函数,完成显示下列所示的三角形图案, 行数由函数参数决定。 8_6编写程序,通过调用【实例8_5】中的函数,输出三个三角形的图案。 第9章 数组 (一)本章学习目标 张确使用一维数组和二维数组去解决问题。学会使用数组作为函数参数、数组元素作为函数的参数和数组名作为函数参数的方法。 (二)本章重点、要点 一维数组,一维数组的定义,一维数组元素的引用,一维数组在内存中的存储,一维字符数组的说明。二维数组,维数组的定义,二维数组元素的引用,二维数组在内存中的存储。数组作为函数参数,数组元素作为函数的参数,数组名作为函数参数。 (三)练习题 9_1用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数 9_2将一个一维数组a9中各元素值按行的顺序放入二维数组b33中。 9_3将一个二维数组b55中各元素值列优先的顺序放入一维数组a25中。 9_4有一个m×n矩阵,各元素值由随机数产生,求其转置矩阵并输出。 9_5有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。 9_6将矩阵M(n,n)对角线上的元素置为1,其余元素置为0。 第10章 结构体与共用体 (一)本章学习目标 掌握并正确使用结构体类型、结构体与数组,共用体,共用体类型。 (二)本章重点、要点 结构体类型的定义,结构体变量的定义,结构体变量的引用,结构体成员变量的引用,结构体变量的初始化。结构体与数组,共用体,共用体类型和共用体变量的定义,共用体变量的引用。 (三)练习题 10_1设有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5- 6 读写。 (三)练习题 12_1利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。编写程序将建立的数据文件读出且求出每个学生的平均成绩。 12_2用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。 12_3编写程序,利用第12_2建立的记录文件,从键盘上输入一个学号,查寻该位同学信息。 12_4编写程序,将第12_3题建立的文件复制到另一个文件。 第13章 运算符与表达式 (一)本章学习目标 深入理解运算符和表达式,掌握位运算方法。 (二)本章重点、要点 运算符与表达式,赋值运算符,复合赋值运算符,赋值表达式,赋值运算符的优先级和结合方向。逗号运算符与逗号表达式,逗号表达式的求解顺序,逗号运算符的优先级,逗号运算符的扩展形式。条件运算符与条件表达式,条件运算符的求解顺序,条件运算符的优先级,条件运算符的结合方向,条件表达式的其它形式。自增自减运算符,前置运算,后置运算,自增自减运算符的优先级与结合方向,位运算,位运算符,位运算的功能,与位运算有关的复合赋值运算符,不同长度的数据的位运算,表达式的求解。 (三)练习题 13_1利用条件运算符实现大小写字母的转换。 13_2使用for循环求1至100的和。要求将所有的命令放入一个for循环结构。 13_3将下列符号函数使用一个条件表达式完成。 13_4若int a=0,b=1,c=2,判断下列表达式执行后a,b,c及表达式的值 (1) 逻辑表达式 a+&&b+&&c+ (2) 逻辑表达式 +a&&b+&&c+ (3) 逻辑表达式 +a&&-b&&c+ (4) 逻辑表达式 a+|b+|c+ (5) 逻辑表达式 +a|b+|c+ (6) 逻辑表达式 a+|-b|c+ (7) 逻辑表达式 a+|b+&&(c-=2) (8) 逻辑表达式 a+&&b+|(c-=2) (9) 逻辑表达式 +a&&b+|(c-=2) 13_5若a=1,b=2,c=3,d=4,m=1,n=3,则逻辑表达式 (m=a>b)&&(n=c>d) 13_6解释x != 0.0 && y/x > 1.0的功能。 第14章 变量的存储 (一)本章学习目标 掌握变量的存储概念,理解变量的类别和作用域。 (二)本章重点、要点 变量的存储单元,整型变量在内存中的存储,字符型变量在内存中的存储,实型变量在内存中的存储。变量的作用域,内部变量,外部变量,变量的生存期,auto变量,全局变量,static变量,register变量。 (三)练习题 14_1在C语言中,变量的存储类别有哪4种? 14_2什么是外部变量?其特点有哪些? 14_3寄存器变量有什么特点? 14_4什么是变量的作用域? 14_5什么是变量的生存期? 第15章 指针 (二) (一)本章学习目标 深入理解指针,掌握高层次指针应用,掌握链表的使用。 (二)本章重点、要点 指针与数组,一维数组与一维数组指针,二维数组的指针及数组元素的访问,字符串指针。指针数组,指针数组,指向指针的指针,main函数的参数,函数指针。结构体指针,指向结构体的指针,指向结构体数组的指针,存储管理函数。链表,链表的概念,单链表的基本操作。 (三)练习题 15_1编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。 15_2调用MaxMin函数,返回数组的最大值和最小值。 第16章 函数 (二) (一)本章学习目标 深入理解函数,从存储方面解释函数的调用。 (二)本章重点、要点 函数调用时的内存,函数的活动,程序运行时存储空间的划分,函数的活动记录。参数的传递机制,C语言参数传递,指针参数,数组参数。递归函数,直接递归与间接递归,递归函数的调用过程。 (三)练习题 16_1设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并编写主函数实现调用。 16_2编写函数,比较两个字符串大小。若相等返回0,大于时返回1,否则返回-1。 第17章 预处理命令 (一)本章学习目标 正确理解预处理命令的概念,掌握预处理命令的使用方法。 (二)本章重点、要点 宏定义,无参宏定义,带参宏定义,宏的作用域。带参的宏与函数的区别,文件包含,条件编译,“# ifdef”命令,“# ifndef”命令,“# if”命令,条件编译和条件语句的比较。 (三)练习题 17_1C语言的预处理有哪些? 17_2预处理命令在书写格式上有什么要求? 17_3#include 和#include “文件名”有什么不同? 17_4 条件编译和条件语句有什么区别? 参考答案 第1章 绪论 1_1.什么是低级语言? 答:低级语言较依赖于所在的计算机系统,也称为面向机器的语言。使用低级语言编写的程序,移植性较差。低级语言主要包括机器语言和汇编语言。 机器语言是由二进制代码“0”和“1”组成的若干个数字串。用机器语言编写的程序,称为机器语言程序。机器语言程序能够被计算机直接识别并执行。但是,程序员直接编写或维护机器语言程序是很难完成的。 汇编语言是一种借用助记符表示的程序设计语言。汇编语言的每条指令都对应着一条机器语言代码。汇编语言也是面向机器的,即不同类型的计算机系统使用的汇编语言也不同。 1_2.什么是高级语言? 答:高级语言编写的程序易读,易修改,移植性好。但使用高级语言编写的程序不能直接在机器上运行,必须经过语言处理程序的转换,才能被机器识别。按照转换方式的不同,可将高级语言分为解释型和编译型两大类。 1_3.面向过程语言的特点是什么? 答:(1) 采用模块分解与功能抽象的方法,自顶向下,逐步求精。 (2) 按功能划分为若干个基本的功能模块,形成一个树状结构。各模块间的关系尽可能简单,功能上相对独立。每一个功能模块内部都是由顺序、选择或循环三种基本结构组成。 1_4.什么是算法? 答:问题的求解过程,是对数据对象的加工过程。问题的求解过程包括两个方面的内容,即对问题涉及的“数据”进行描述和对“加工过程”进行描述。对“数据”的描述,称为“数据结构”,对“加工过程”的描述,称为算法。 1_5.算法有什么特点? 答:算法具有以下特点: (1) 有穷性。一个算法包含的操作步骤是有穷的,而不能是无穷的,并且操作时一般还要求是合理可行的。 (2) 确定性。算法的每个操作都是确定的,而不应该具有二义性。 (3) 有零个或多个输入。“输入”指的是执行算法时,需要从外界获取的必要信息。 (4) 有一个或多个输出。算法的目的是为了得到计算的结果。一般地,计算结果即为输出。没有输出的算法是没有意义的。 (5) 有效性。算法的每一个操作都应能有效地执行,并得到确定的结果。 1_6.结构化算法的基本结构有哪些? 答:(1) 顺序结构。 (2) 选择结构。(3) 循环结构。 - 11121314num2 * num2; printf( "%d 2 + %d 2 = %dn", num1, num2, SquareSum ); printf( "%d 264 ) % 26 + 65; printf ( "%c's back is %cn", ch, BackCh ); return 0; 第5章 C语言程序的输出与输入 325_1编写程序求多项式 ax+bx+c的值( 键盘输入a=2, b=3, c=4, x=1.414)。 # include int main ( ) float a,b,c,x,y; printf ( "Input a,b,c,x: " ); scanf ( "%f%f%f%f", &a,&b,&c,&x );/*数据之间以空格分隔*/ y = a*x*x+b*x*c; printf ( "%fx2+%fx+%f=%fn", a,b,c,y ); getchar(); getchar(); return 0; 变化二: # include int main ( ) float a,b,c,x,y; printf ( "Input a,b,c,x: " ); scanf ( "%f%f%f%f", &a,&b,&c,&x );/*数据之间以空格分隔*/ y = a*x*x+b*x*c; printf ( "%.0fx2+%.0fx+%.0f=%fn", a,b,c,y ); getchar(); getchar(); return 0; 变化三: # include int main ( ) int a,b,c; float x,y; printf ( "Input a,b,c,x: " ); scanf ( "%d%d%d%f", &a,&b,&c,&x );/*数据之间以空格分隔*/ y = a*x*x+b*x*c; printf ( "%dx2+%dx+%d=%fn", a,b,c,y ); getchar(); getchar(); return 0; 运行结果参见变化二的结果图。 5_2已知华氏温度,根据公式:C = 5/9(F-32),求摄氏温度C(结果保留两位小数)。 #include int main ( ) float f,c; printf ( "Input f: " ); scanf ( "%f", &f ); c = 5.0/9*(f-32); /* 因为整除的原因,使用了5.0,而不是5 */ printf ( "C=%fn", c ); return 0; 5_3使用宏定义定义符号常量 PI,其值为3.14159,并使用符号常量,求圆半径r=2.456时的圆周长、圆面积。 #include #define PI 3.14159 int main ( ) float r,c,s; printf ( "Input r: " ); scanf ( "%f", &r ); c = 2*PI*r; s = PI*r*r; printf ( "C=%fnS=%fn", c,s ); return 0; 注:也可以采用赋值的方式对r赋值2.456。 5_4用getchar()分别输入A,B,C,并赋值给a,b,c, 然后将其转换成对应的小写字母,用putchar()将其输出。 #include #include int main ( ) char a,b,c; printf ( "Input Upper Characters A,B,C: " );/* 输入时ABC之间不能有空格! */ a=getchar(); b=getchar(); c=getchar(); a = a+32; b = b-'A'+'a' c = tolower(c); printf ( "a="); putchar(a);putchar('n'); printf ( "b="); putchar(b);putchar('n'); printf ( "c="); putchar(c);putchar('n'); return 0; 5_5若a=3,b=4,c=5,编写程序,要求用一个scanf()函数完成输入,按以下要求的格式输出: x1=a+b+c= 3+ 4+ 5= 12 x2=a-b-c= 3- 4- 5= -6 #include #include int main ( ) int a,b,c; printf ( "a=" ); scanf("%d",&a); printf ( "b=" ); scanf("%d",&b); printf ( "c=" ); scanf("%d",&c); printf ( "x1=a+b+c=%d+%d+%d=%dn",a,b,c,a+b+c); printf ( "x1=a-b-c=%d-%d-%d=%dn",a,b,c,a-b-c); return 0; 第6章 流程控制选择控制结构 6_1使用if语句,求解两个数中的最大值。 /*程序功能:输入两个数,输出其中的大者*/ # include int main ( ) int num1, num2; printf ( "Input two numbers: " ); scanf ( "%d %d", &num1, &num2 ); if ( num1 >= num2 ) printf ( "max num is %d", num1); else printf ( "max num is %d", num2 ); return 0; 6_2使用switch语句,求解简单算术表达式的值。 int main ( ) int num1, num2, result; char ch; printf ( "Input a expreion ( e.g.3 + 5): " ); scanf ( "%d%c%d", &num1, &ch, &num2 ); switch ( ch ) /*根据ch的值,选择分支执行*/ case '+': result = num1 + num2; break; /*求和完毕,退出当前switch语句*/ case '-': result = num1181932; break; break; case 1: /*是大写英文字母*/ ch2 = ch1 + 32; break; printf ( "Input: %cnOutput: %cn", ch1, ch2 ); return 0; 6_6编写程序,输入一个年份,判断其是否为闰年。 分析:一个年份,当且仅当符合下列两个条件之一的,即是闰年。 能被4整除,但不能被100整除的年份。例如,1992年、2023年。 能被400整除的年份。例如,2000年、2400年。 用flag的值,表示是否为闰年。如果flag的值为1,表示闰年;如果是0,表示非闰年。 # include int main ( ) int year, flag; printf ( "Input a year: " ); scanf ( "%d", &year ); if ( year % 4 = 0 ) if ( year % 100 != 0 ) flag = 1; else if ( year % 400 = 0 ) flag = 1; else flag = 0; else flag = 0; if ( flag ) printf ( "%d is a leap yearn", year ); else printf ( "%d is not a leap yearn", year ); return 0; 第7章 流程控制循环控制结构 7_1用while语句,求解连加式1 + 2 + + n( n > 2)的值。 # include int main( ) int i = 1,sum = 0 ,n; printf( “Input a number: ” ); scanf (“%d”,&n); while( i 2)的值。 # include int main ( ) int i = 1, n; long product = 1; printf ( "Input a number: " ); scanf ( "%d", &n); do product = product * i; i = i + 1; while ( i 10 )的值。 # include int main ( ) int i, sum = 0; int n; printf ( "Input a number: " ); scanf ( "%d", &n ); for ( i = 1; i printf ( "*" ); j = j + 1; /*第i行输出2 * i23242526i; ) printf ( " " ); j = j + 1; /*第i行输出n1 ) printf ( "*" ); j = j + 1; /*第i行输出2 * ii; ) printf ( " " ); j = j + 1; /*第i行输出n271 ) printf ( "*" ); j = j + 1; /*第i行输出2 * i2829303132333435363738394041424344 若要求x 1、x 2、y 1、y2的值分别为 10、20、A、B,正确的数据输入是( )。(注:代表空格) A10A20B B10A20B C10 A20 B D10A20B 43若变量已正确说明为float类型, 要通过语句scanf(”%f %f%f”, &a, &b, &c);给a赋予10.0, b赋予22.0, c赋予33.0, 不正确的输入形式为( )。 A10 B10.0,22.0,33.0 22 33 C10.0 D10 22 22.0 33.0 33 44有如下程序,若要求x 1、x 2、y 1、y2的值分别为 10、20、A、B,正确的数据输入是( )。(注:代表空格) int x1,x2; char y1,y2; scanf(”%d%d”,&x1,&x2); scanf(”%c%c”, &y1,&y2); A1020AB B1020ABC C1020 D1020AB AB 45已有定义int a=-2;和输出语句:printf(”%8lx”,a);以下正确的叙述是( )。 A整型变量的输出格式符只有%d一种 B%x是格式符的一种,它可以适用于任何一种类型的数据 C%x是格式符 D%8lx不是错误的格式符,其中数字8规定了输出字段的宽度 46有如下程序段,对应正确的数据输入是( )。 float x,y; scanf(”%f%f”, &x,&y); printf(”a=%f,b=%f”, x,y); A2.04 B2.04,5.67 5.67 CA=2.04,B=5.67 D2.055.67 47有如下程序段,从键盘输入数据的正确形式应是( )。(注:代表空格) float x,y,z; scanf(“x=%d,y=%d,z=%d”,&a,&y,&z); A123 Bx=1,y=2,z=3 C1,2,3 Dx=1 y=2 z=3 48以下说法正确的是( )。 A输入项可以为一个实型常量,如scanf(”%f”,3.5); B只有格式控制,没有输入项,也能进行正确输入,如scanf(”a=%d,b=5d”); C当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(”%4.2f”,&f); D当输入数据时,必须指明变量的地址,如scanf(”%f”,&f); 49根据定义和数据的输入方式,输入语句的正确形式为:( )。(注:代表空格) 已有定义:float x,y; 数据的输入方式:1.23 4.5 Ascan(”%f,%f”,&x,&y); Bscanf(”%f%f”,&x,&y); Cscanf(”%3.2f%2.1f”,&x,&y); Dscanf(”%3.2f%2.1f”,&x,&y); 50根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为( )。 #include ”stdio.h” main() char s1,s2,s3; 输入语句; printf(”%c%c%c”,s1,s2,s3); 输入形式:ABC (注:代表空格) 输出形式:AB Ascanf(”%c%c%c”,&s1,&s2,&s3); Bscanf(”%c%c%c”,&s1, &s2,&s3); Cscanf(”%c,%c,%c”,&s1,&s2,&s3); Dscanf(”%c%c”, &s1, &s2,&s3); 51以下程序的执行结果是:( )。 #include ”stdio.h” main() int x=2,y=3; printf(”x=%d,y=%dn”,x,y); A.x=%2,y=%3 B.x=%d,y=%d C.x=2,y=3 D.x=%d,y=%d 52以下程序的输出结果是( )。(注:代表空格) #include ”stdio.h” main() printf(”nstring1=%15s*”, ”programming”); printf(”nstring2=%-5s*”, ”boy”); printf(”string3=%2s*”, ”girl”); Astring1=programming* Bstring1=programming* string2=boy* string2=boy*string3=gi* string3=gi* Cstring1=programming* Dstring1=programming* string2=boy*string3=girl* string2=boy*string3=girl* 53根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( )。 #include ”stdio.h” main() int a; float b; - 4748 C语言程序设计题库 C语言程序设计试题题库 C语言程序设计 C 语言程序设计 C语言程序设计实验 C语言程序设计教案. c语言程序设计基础 C语言程序设计题 C语言程序设计讲稿 C语言程序设计心得