北航考研机考练习题目.pdf_第1页
北航考研机考练习题目.pdf_第2页
北航考研机考练习题目.pdf_第3页
北航考研机考练习题目.pdf_第4页
北航考研机考练习题目.pdf_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级语言程序设计(一) 实验指导手册 晏海华 孙自安 北京航空航天大学计算机学院 2006 年 6 月 目录 第一章 实验准备.3 11 登录教学辅助系统3 12 作业获取4 13 作业提交4 14 VC编程环境使用7 第二章 实验.13 21 实验一:C语言基础13 22 实验二:程序设计入门.19 23 实验三:模块化程序设计 127 24 实验四:模块化程序设计 237 25 实验五:复杂数据程序设计-数组与指针 148 26 实验六:复杂数据程序设计-数组与指针 255 27 实验七:复杂数据程序设计-结构.65 28 实验八:文件操作.76 第一章 实验准备第一章 实验准备 11 登录教学辅助系统登录教学辅助系统 高级语言程序设计教学辅助系统用于支持“高级语言程序设计(一) ”的所 有课外教学活动。 学生可以从该系统中获取课程公告、 课程信息 (包括课程大纲、 教师介绍、课件下载等) 、获取/提交作业、网上答疑(课程论坛) 、课程网上考 试及个人信息。 教学辅助系统登录网址: 校内访问: 校外访问:6 教学辅助系统登录界面如下: 由于本系统支持多门课程,因此,要确认所选课程为“高级语言程序设计 (一) ” 。首次登录时,密码为学号后四位。注意:首次登录后一定要修改个人密 码,以确保个人信息安全。 12 作业获取作业获取 学生可以从网上获取作业。学生登录教学辅助系统后,点击“作业” ,将会 出现如下画面: 从中可能看到当前正打开的作业。 一定要注意作业的要求完成期限, 当作业 要求完成期限过后,作业将自动关闭,学生将不能再提交该作业。 一定要注意作业的要求完成期限, 当作业 要求完成期限过后,作业将自动关闭,学生将不能再提交该作业。如上图中, 第七次作业要求在 2006 年 5 月 16 日至 2006 年 6 月 16 日期间内完成, 过了该时 间,作业将被关闭,即对学生不可见。 13 作业提交作业提交 每场作业包括两种类型题型:1)简答题;2)编程题。 1简答题 简答题亦包括两种类型,一种是选择题,另一种是计算结果题。 对于选择题可直接将选择结果填入空白处。注意:大小写无关,即 A 和 a 结果一样。 对于计算结果型,可将程序运行或输出结果直接填入空白处。 填写完答案后,可按每道题旁的“submit”按钮提交答案。在简答题最后可 查看所有简答题得分情况。 2编程题 每套作业均有 56 道编程练习。 点击相应编程练习,将得到该练习的作业要求: 作业要求包括: 【问题描述】给出需要编程实现的问题的描述。 【输入形式】给出问题的输入格式描述。 【输出形式】给出问题的输出格式描述。 【输入样例】给出问题的输入样例。 【输出样例】给出问题的输出样例。 【样例说明】对问题的输入/输出样例进行说明。 【评分标准】说明问题的评分标准。 学生应根据作业的作业要求,上机编程实现。在提交(上传)作业源程序前,应 使用输入样例测试程序, 并确保程序输出与输出样例完全一致。 学生完成作业后, 可通过教学辅助系统上传作业源程序(.c)文件,并可即时得到该作业的评测结 果(如编译是否有错、运行是否有错、是否通过测试点及通过多少个测试点) 。 学生依据作业评测结果反馈,修改源程序,并可再次提交作业。 14 VC 编程环境使用编程环境使用 学生实验可使用 Windows 操作系统下 VC 编程环境。 下面简单介绍 Windows 下 VC 编程环境的使用。 创建工程(Project) 使用 VC 编程首先要创建一个工程(Project) ,该工程名决定了最终所生成的 执行文件名(.EXE) 。VC 中创建一个工程步骤如下: 工工程程名名 步骤 1 步骤 2 创建 C 源文件 一旦创建好工程,则必须给出该工程中包含的 C 源程序名,对于本课程实 验,一个工程中只需包含一个 C 源文件。在一个工程中创建一个 C 源文件如下: 步骤 1 给出给出C源 文件名 源 文件名 步骤 2 编辑、编译及运行 C 程序 C 程序。 有了工程及 C 文件,接下来就可以编写、编译及运行 编辑编辑C 程序程序 编辑一个 C 程序 运行一个 C 程序 编译编译 Compile 编译编译 编译一个 C 程序 及连接及连接 Build 编译及连 接信息 编译及连 接信息 运行运行 Execute 运行结果运行结果 调试(Debug)程序 如果程序运行有错,可以使用 VC 环境下的调试工具来调试程序。 设置设置/删除断 点 删除断 点 断点断点 设置断点 单步执行及查看变量 调试程序调试程序(Debug)(续续):运行并查看变量:运行并查看变量 开始调试(运 行) 开始调试(运 行) 程序执行停在 断点处 程序执行停在 断点处 当前变量及内 容 当前变量及内 容 查看其它变量 内容 查看其它变量 内容 单步执行单步执行(Step Over) 执行到光标处执行到光标处(Run to Cursor) 第二章第二章 实验实验 21 实验一:实验一:C 语言基础语言基础 实验目标:实验目标:通过实验使得学生了解 C 程序的一般结构(包括如何使用 C 语言进 行简单的标准及文件输入/输出) ,并简单掌握在 Windows 下 C 程序的编辑、编 译和运行方法。掌握 C 程序的基本数据类型、常见运算符及表达式。 实验机时:实验机时:4 小时 学生在指定机时的实验课后,仍可能需要一定时间继续完成实验。 实验内容:实验内容: 一简答题(共一简答题(共 12 题,每题题,每题 1 分)分) 有输入语句:int a,b,c; scanf(“a=%d,b=%d,c=%d“, 为使变量a 的值为 1,b的值为 3,c的值为 2, 从键盘输入数据的正确形式应当是(注:#表示空格) (A) 132 (B) 1,3,2 (C) a=1#b=3#c=2 (D) a=1,b=3,c=2 2. 字符串“ta017bc”的长度(不包括结束符)是 (A) 9 (B) 5 (C) 6 (D) 7 3. 执行以下程序段后,变量a,b,c的值分别是 int x = 10, y = 9; int a, b, c; a = (-x = y+)? -x: +y; b = x+; c = y; (A) a = 9, b = 9, c = 9 (B) a = 8, b= 8, c = 10 (C) a = 9, b = 10, c = 9 (D) a = 11, b = 11, c = 10 4. 已知:char a=a;float b=2.3;double c=41;int d;则执行语句d=a+b+c; 后变量d的数据类型为 (A) int (B) char (C) float (D) double 5. 已知: int a=2, b=7; 计算下列表达式的值: a=4,b=1,ab?+a:+b; 6. 设字符型变量ch中存放字符A,则执行ch+5后,ch中的字符是 (A) A (B) B (C) F (D) G 7. 设整型变量x和y的值均为 7,则表达式“x/(y-4)”的值是 (A) 3 (B) 3 (C) 2 (D) 1 8. 已知:char c=064; 则表达式“ccx)”后b 的值为 12. 给出下述程序的输出结果 #include void main() int a=10,b=4,c=5,x,y; x=+a-c+b+; y=18+(b=4)*3; printf(“x=%d,y=%dn“,x,y); 二编程题(共二编程题(共 6 题,每题题,每题 20 分)分) 1计算平均值 【问题描述】 从键盘输入三个整数, 分别存入 x,y,z 三个整型变量中, 计算并输出三个数的和以及平均值。 【输入形式】 从键盘输入三个整数,整数之间以空格隔开。 【输出形式】 在屏幕上分两行显示结果: 第一行为三个数的和,整数形式输出; 第二行为三个数的平均值,浮点数形式输出,小数点后保留两位小数。 【输入样例】 3 2 3 【输出样例】 8 2.67 【样例说明】 3、2、3 的和为 8,所以第一行输出 8; 第二行输出 3、2、3 的平均值 2.67(保留两位小数) 。 【评分标准】 结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0101.c。完全符合要求得 20 分, 每个测试点 4 分。提交程序名为 c0801.c。 2数值变换 【问题描述】 编写一程序,从键盘输入输入一个三位正整数,然后反向输出对应的数,如果输入的数不是 三位正整数,则输出1。 【输入形式】 从键盘输入三位的正整数。 【输出形式】 输出交换后的正整数值。 【输入样例】 356 【输出样例】 653 【样例说明】 从键盘输入的正整数值为 356,将该数的个位与百位互换,所得结果为 653.如果输入的正 整数为 300,则输出为 3。 【评分标准】 结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0102.c。 3前驱、后驱字符 【问题描述】 从键盘输入一个字符,求出它的前驱和后继字符(按照 ASCII 码值排序),并按照从小到 大的顺序输出这三个字符和对应的 ASCII 值。 【输入形式】 从键盘输入一个字符 【输出形式】 按两行输出: 第一行按照从小到大的顺序输出这三个字符,并以一个空格隔开; 第二行按照从小到大的顺序输出三个字符对应的 ASCII 值,并以一个空格隔开。 【输入样例】 b 【输出样例】 a b c 97 98 99 【样例说明】 输入字符 b,b 的前驱字符是 a,后继字符是 c,第一行按照从小到大的顺序输出 a b c;第 二行输出对应的 ASCII 值 97 98 99 【评分标准】 结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0103.c。 4整数转换 【问题描述】编写一个程序,当用户输入一个小数(正值浮点数)后,将小数转化为最近的 整数输出(四舍五入) 。 【输入形式】用户在第一行输入一个小数 【输出形式】用户在下一行显示输出结果 【样例输入】3.47 【样例输出】3 【样例说明】 与输入值 3.47 接近的整数为 3 和 4, 3.47 比 3.5 小, 舍掉小数部分, 结果为 3。 【评分标准】结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0104.c。 5计算空格换行个数 【问题描述】 编写一程序,分别计算所输入的字符串中空格,换行符的个数。 【输入形式】 输入可以是键盘上的任意字符。 【输出形式】 分别输出空格,换行符的个数,输出的结果一行显示,数字之间以空格格开。 【输入样例】 bb ss pp= fz 【输出样例】 2 1 【样例说明】 字符 b 与 s 之间有一个空格,s 与 p 之间有一个空格,p 与 f 之间有一个换行。 【评分标准】 结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0105.c。 6整数组合(选做题) 【问题描述】 假设 unsigned short 类型占 16 位,x、y、z 都是 short 类型。编写一程序,从键盘输入 x,y 的值(十进制形式) ,然后将 x 的高 8 位作为 z 的高 8 位,y 的高 8 位作为 z 的低 8 位,最 后输出 z 的值(十进制形式) 。 【输入形式】 以十进制形式输入 x 和 y 的值,以空格隔开。 【输出形式】 以十进制形式在新的一行上输出 z 值。 【输入样例】 840 2177 【输出样例】 776 【样例说明】 840 的二进制形式为: 0000 0011 0100 1000 2177 的二进制形式为: 0000 1000 1000 0001 将 840 的高 8 位作为结果的高 8 位,2177 的高 8 位作为结果的低 8 位, 所以结果为:0000 0011 0000 1000,即十进制形式为:776 【评分标准】 结果完全正确得 20 分,每个测试点 4 分。提交程序名为:c0106.c。 22 实验二:程序设计入门实验二:程序设计入门 实验目标:实验目标:通过实验使得学生能够正确理解 C 中控制流设施。并通过一系列实 验问题的分析、算法设计和代码实现的解决过程掌握程序设计过程,使用 C 语 言的各种控制流设施(if, while, for, do_while, switch, break, continue)进行简单程 序设计。 实验机时:实验机时:4 小时 学生在指定机时的实验课后,仍可能需要一定时间继续完成实验。 实验内容:实验内容: 一简答题(共一简答题(共 12 题,每题题,每题 1 分)分) 1. 若有以下语句 int x = 3; do printf(“%dn“, x -= 2); while (!(-x); 则上面程序段 (A) 输出的是 1 (B) 输出的是 1 和-2 (C) 输出的是 3 和 0 (D) 是死循环 2. C 语言中 while 和 do-while 循环的主要区别是 (A) do-while 的循环体至少无条件执行一次 (B) while 的循环控制条件比 do-while 的循环控制条件严格 (C) do-while 允许从外部转到循环体内 (D) do-while 的循环体不能是复合语句 3. 以下正确的描述是 (A) continue 语句的作用是结束整个循环的执行 (B) 只能在循环体内和 switch 语句体内使用 break 语句 (C) 在循环体内使用 break 语句或 continue 语句的作用相同 (D) 从多层循环嵌套中退出时,只能使用 goto 语句 4. 对 for (表达式 1; ; 表达式 3)可理解为 (A) for (表达式 1; 0; 表达式 3) (B) for (表达式 1; 1; 表达式 3) (C) for (表达式 1; 表达式 1; 表达式 3) (D) for (表达式 1; 表达式 3; 表达式 3) 5. 以下不正确的语句是 (A) if (x y); (B) if (x = y) (C) if (x !=y) scanf(“%d“, else scanf(“%d“, (D) if (x main() int i=1; switch(i) case 1: printf(“%d“,i+); case 2: printf(“%d“,i+); case 3: printf(“%d“,i+); case 4: printf(“%d“,i+); break; default: printf(“END“); 上述程序的输出结果为 8. 给出下述程序的输出结果 #include main() int a,b; for(a=1,b=1;a=20) break; if(b%3=1) b+=3; continue; b-=5; printf(“%d,%dn“,a,b); 9. 给出下述程序的输出结果 #include main() int x=0; char ch=A; do switch(ch+) case A: x+;break; case B: x-; case C: x+=2;break; case D: x=x%2;continue; case E: x=x*10;break; default: x=x/3; x+; while(ch main() int x=2,y=1; while(x-!=-1) do y*=x; y+; while(x-); printf(“%d, %dn“,y,x); 11. 下面程序段的执行结果是 int a,b,c,t; a=1; b=2; c=2; while(a main() int m=5; if(m+5) printf(“%dn“,m); else printf(“%dn“,m-); 二编程题(共二编程题(共 6 题,每题题,每题 20 分)分) 1工资 【问题描述】 假设税前工资和税率如下(s 代表税前工资,t 代表税率) : s main() int y=10; do y-; while(-y); printf(“%dn“,y-); 2. 给出下述程序的执行结果 #include main() int a=10,x=0; do a+=2; x+=a; if(x50) break; while(a=14); printf(“a=%d x=%dn“,a,x); 3. 下述程序是否正确?如果正确,给出输出结果。空白处填写“不正确”或者 直接写上输出结果。 #include main() int x=3,y; do y=x-; if(!y) printf(“*n“); continue; while(1 main() int x; for(x=100;x main() int i0; while(i1。 比如,对于输入的数字 10,可以分解成“10=1+2+3+4”。 如果存在多于一种的可行方案,则选取等式右边项的个数最多的那一种。比如,9 可以分解 为“9=2+3+4”,也可以分解为“9=4+5”。但是前一种分解成 3 个数的和,后一种分解成 2 个 数的和,所以前一种是有效解。如果无法分解,则输出 No Answer。 【样例输入 1】 38 【样例输出 1】 38=8+9+10+11 【样例输入 2】 256 【样例输出 2】 No Answer 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0304.c。 5简易计算器 【问题描述】 编程实现简易的计算器: 读入两个整数运算数(data1 和 data2)及一个运算符(op), 计算表达 式 data1 op data2 的值,其中 op 可以是+,-,*,/。 【输入形式】 从键盘输入运算数和运算符: 1. 首先输入以空格分隔的两个整数,分别是 data1 和 data2; 2. 输入一个字符作为运算符 op,op 可以是+,-,*,/。 输入时,data1、data2、op 之间各留有一个空格。 具体格式见样例输入。 【输出形式】 在屏幕上输出运算结果 【输入样例】 23 5 * 【输出样例】 115 【样例说明】 输入中先后输入第一个运算数 23,第二个运算数 5,运算符*,要求对 23 和 5 进行乘法运算。 计算结果为 115。 【评分标准】 结果正确得 20 分,否则得 0 分,提交程序文件名为 c0305.c。 6魔方阵 【问题描述】 输入一个自然数(1N9),要求输出如下的魔方阵,即边长为 2*N-1,在中心出现一 次,其余位置上的数字从外向中心逐渐增大。 N=3 时: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 N=4 时: 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 2 3 3 3 2 1 1 2 3 4 3 2 1 1 2 3 3 3 2 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 【输入形式】 从键盘输入一个整数 N。 【输出形式】 向屏幕输出结果。输出符合要求的方阵,每个数字占两个字符宽度,数字占第二个字符位, 同时数字后有个空格,在每一行末均输出一个回车符。 【输入样例】 3 【输出样例】 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0306.c。 24 实验四:模块化程序设计实验四:模块化程序设计 2 实验目标:实验目标:通过实验进一步理解模块化程序设计思想,特别是递归概念,能够使 用函数,特别是递归函数进行简单程序设计。 实验机时:实验机时:2 小时 学生在指定机时的实验课后,仍可能需要一定时间继续完成实验。 实验内容:实验内容: 一简答题(共一简答题(共 12 题,每题题,每题 1 分)分) 1. 给出下述程序的执行结果 #include #define ADD( X ,Y ) X*Y main( ) int a = 3 , b = 6 ; printf( “%dn“ ,ADD( a+ , b+ ) ) ; 2. 给出下述程序的执行结果 void fun( ) static int a3=0, 1, 2; int i=0 ; while (i int f(int b); main() int a=3,i; for(i=0;i int x=2; void increment(); main() int x=8; increment(); x+; increment(); x+; increment(); void increment() int x=0; x+; printf(“%d,“,x); 5. 给出下述程序的执行结果 #include long fib(int x) switch(x) case 0: return 0; case 1: case 2: return 1; return (fib(x-1)+fib(x-2); main() int x=6; printf(“%dn“,fib(x); 6. 给出下述程序的执行结果 #include int x1=30,x2=40; void swap(int x,int y); void main() int x3=10,x4=20; swap(x3,x4); swap(x2,x1); printf(“%d,%d,%d,%dn“,x3,x4,x1,x2); void swap(int x,int y) x1=x; x=y; y=x1; 7. 给出下述程序的执行结果 #include int a=4,b=5; int max(int a,int b) int c; c=ab?a:b; return c; void main() int a=6; printf(“%dn“,max(a,b); 8. 给出下述程序的执行结果 #include #define ADD(x) x+x void main() int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“%d“,sum); 9. 给出下述程序的执行结果 #include void num() extern int x,y; int a=15,b=10; x=a-b; y=a+b; int x,y; main() int a=7,b=5; x=a+b; y=a-b; num(); printf(“%d,%dn“,x,y); 10. 给出下述程序的执行结果 #include int fun2(int a,int b) int c; c=a*b%3; return c; int fun1(int a,int b) int c; a+=a; b+=b; c=fun2(a,b); return c*c; main() int x=11,y=19; printf(“%dn“, fun1(x,y); 11. 写出下述程序的输出结果 #include int x = 1; int f1() return (+x); int f2(int x) static int y = 3; x += y+; return (x+); int f3(int x) return (-x); void main() int x,y,z; x = y = z = 10; printf(“%d,“,f1(); printf(“%d,“,f2(x); printf(“%d,“,f2(x); x = y+ + -z; printf(“%dn“,f3(x); 12. 写出下述程序的输出结果 #include int func(int n) if(n=0) 【输出形式】 在屏幕上输出 n+1 行杨辉三角形。 【输入样例】 3 【输出样例】 -*1 -*1*1 -*1*2*1 *1*3*3*1 其中和*都是空格位 即每个数字占四位! 【评分标准】 结果完全正确得 20,每个测试点 4 分,提交程序文件名称为 c0406.c。 (算法提示:杨辉三角形中的数,是(x+y)的 n(n=0)次方幂展开式中各项的系数。对 这些系数,可以提炼出有规律的数学公式,故可利用递归方法求解。) 25 实验五:复杂数据程序设计-数组与指针 1实验五:复杂数据程序设计-数组与指针 1 实验目标:实验目标:通过实验使得学生正确了解 C 语言中数组的定义及使用(特别是一维 字符数组);正确理解 C 语言中指针的说明方式, 指针运算, 指针和数组的关系, 并能够正确应用数组或指针解决所遇到的简单程序设计问题。 实验机时:实验机时:3 小时 学生在指定机时的实验课后,仍可能需要一定时间继续完成实验。 实验内容:实验内容: 一简答题(共一简答题(共 12 题,每题题,每题 1 分)分) 1. 已知 int a, *p= 则下列函数调用中错误的是 (A) scanf(“%d”, (B) scanf(“%d”, p); (C) printf(“%d”, a); (D) printf(“%d”, p); 2. 以下正确的定义语句是 (A) int a14 = 1, 2, 3, 4, 5; (B) float x3 = 1, 2, 3; (C) long b23 = 1, 1, 2, 1, 2, 3; (D) double y3 = 0; 3. 下面程序段的运行结果是 char ch = “600“; int a, s = 0; for (a = 0; cha = 0 inverp(a+1); printf(“%c“, ); main() char s10 = “hello!“; inverp(s); Selection 1 : (A) *a != 0 (B) *a != NULL (C) *a = 0 (D) ! a * = 0 Selection 2 : (A) * (a-1) (B) *a (C) * (a+1) (D) * (-a) 6. 设有说明 int (* ptr) M; 其中 ptr 是 (A) M 个指向整型变量的指针 (B) 指向 M 个整型变量的函数指针 (C) 一个指向具有 M 个整型元素的一维数组的指针 (D) 具有 M 个指针元素的一维指针数组,每个元素都只能指向整型量 7. 说明语句 int *(*p)();的含义是 (A) p 是一个指向 int 型数组的指针 (B) p 是指针变量,它构成了指针数组 (C) p 是一个指向函数的指针,该函数的返回值是一个整型 (D) p 是一个指向函数的指针,该函数的返回值是一个指向整型的指针 8. 若用数组名作为函数调用的实参,传递给形参的是 (A) 数组的首地址 (B) 数组第一个元素的值 (C) 数组中全部元素的值 (D) 数组元素的个数 9. 以下与 int *q5; 等价的定义语句是 (A) int q5 ; (B) int *q ; (C) int *(q5) ; (D) int (*q)5 ; 10.若有以下定义,则数值不为 3 的表达式是 int x10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p1; (A) x3 (B) p1 = x + 3, *p1+ (C) p1 = x + 2, *(p1+) (D) p1 = x + 2, *+p1 11. 下面能正确进行字符串赋值,并且能确保字符串以0结尾的操作是 (A) char s5 = “ABCDE“; (B) char s5 = A, B, C, D, E; (C) char *s; s = “ABCDE“; (D) char *s; scanf(“%s“, s); 12.若有说明: char *language = “FORTRAN“, “BASIC“, “PASCAL“, “JAVA“, “C“;则表达式 *language1 *language3 比较的 是 (A) 字符 F 和字符 P (B) 字符串 BASIC 和字符串 JAVA (C) 字符 B 和字符 J (D) 字符串 FORTRAN 和字符串 PASCAL 二编程题(共二编程题(共 6 题,每题题,每题 20 分)分) 1插入字符 【问题描述】 编写一函数 char * insert(char *string, char c),用于在一个已排好序(ASCII 值从小到大) 的字符串 string(少于 50 个字符)中适当位置插入字符 c,要求插入后串的序不变(从小 到大) ,允许字符重复,函数返回插入后的字符串。 在 main 函数中测试该函数: 从键盘分别输入有序字符串和单个字符, 然后调用 insert 函数, 并向屏幕输出插入后的字符串。 【输入形式】 从键盘分行输入有序字符串和单个字符 【输出形式】 向屏幕输出插入后的字符串 【输入样例】 abdef c 【输出样例】 abcdef 【样例说明】 从键盘输入少于 50 个字符的有序字符串 abdef 和字符 c,通过调用函数 char * insert(char *string, char c)将字符 c 插入字符串 abdef,并以 ASCII 值从小到大排序输出 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0501.c。 2矩阵求和 【问题描述】 对于一个 N 阶矩阵,分别按行、按列、按两对角线计算元素之和。 【输入形式】 先输入矩阵的阶数(不超过 50) ,然后输入一个 n 阶矩阵。 【输出形式】 第一行输出按行计算出的元素之和,以一个空格分隔; 第二行输出按列计算出的元素之和,以一个空格分隔; 第三行、第四行分别输出左、右对角线计算出的元素之和。 【输入样例】 3 1 2 3 4 5 6 7 8 9 【输出样例】 6 15 24 (行之和) 12 15 18 (列之和) 15 (左对角线和) 15 (右对角线和) 【样例说明】 输入一个 3 阶矩阵,分别计算输出它的行,列和对角线的和 【评分标准】 结果完全正确得 20 分;每个测试点 4 分,提交程序文件名为 c0502.c。 3整数转换 【问题描述】 编写一个程序,从标准输入读入一个十进制正整数,将其转换成相应的二进制、八进制和十 六进制数,并以字符串形式分三行输出到标准输出。 【输入形式】 从标准输入读入一个十进制正整数。 【输出形式】 向标准输出打印三行:第一行是该正整数的二进制字符串形式;第二行是该正整数的八进 制字符串形式;第三行是该正整数的十六进制字符串形式。 注意: 1. 输出的二进制、八进制和十六进制数的每一位之间用空格符分隔,但是首位之前不要加空 格符,末位后有空格符; 2. 在十六进制数中使用大写字母 A-F。 【输入样例】 62147 【输出样例】 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 1 7 1 3 0 3 F 2 C 3 【样例说明】 将 62147 转换成相应的二进制、八进制和十六进制数,并分三行输出。 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0503.c。 4合并字符串 【问题描述】 编写一个函数 char * str_bin(char* str1, char* str2), str1、str2 是两个有序字符串(其中 字符按 ASCII 码从小到大排序) , 将 str2 合并到字符串 str1 中, 要求合并后的字符串仍是有 序的,允许字符重复。在 main 函数中测试该函数:从键盘输入两个有序字符串,然后调用 该函数,最后输出合并后的结果。 【输入形式】 分行从键盘输入两个有序字符串(不超过 100 个字符) 【输出形式】 输出合并后的有序字符串 【输入样例】 aceg bdfh 【输出样例】 abcdefgh 【样例说明】 输入两个有序字符串 aceg 和 bdfh,输出合并后的有序字符串 abcdefgh 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0504.c。 5最长公共子串 【问题描述】 编写一个程序,对输入的字符串 s 和 t,求其最长的公共子字符串。 【输入形式】 从屏幕分行读入串 s 和 t。s 和 t 由任意字符构成,长度都不超 50 个字符。输入数据确保只 有唯一的最长公共子串。如果没有公共子串,打印 No Answer 【输出形式】 在单独行上输出串 s 和串 t 的最长公共子串,在结尾输出一个回车符。 算法提示:用一个 int 型的计数器记录当前匹配长度,用一个字符数组记录当前匹配子串, 如果存在更长子串,则进行相应替换。 【样例说明】 假设从屏幕输入以下内容: aabcdababce 12abcabcdace 则输出内容为: abcda 【评分标准】 结果完全正确得 20 分,每个测试点 4 分,提交程序文件名为 c0505.c。 6旋转魔方阵 【问题描述】 输入一个自然数(2N9),要求输出如下的魔方阵,即边长为 N*N,元素取值为 1 至 N*N,1 在左上角,呈顺时针方向依次放置各元素。 N=3 时: 1 2 3 8 9 4 7 6 5 【输入形式】 从标准输入读取一个整数 N。 【输出形式】 向标准输出打印结果。输出符合要求的方阵,每个数字占 5 个字符宽度,向右对齐,在每一 行末均输出一个回车符。 【输入样例】 4 【输出样例】 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 【评分标准】 本题不准使用数学库函数。 结果正确得 20 分, 每个测试点 4 分, 提交程序文件名为 c0506.c。 26 实验六:复杂数据程序设计-数组与指针 2实验六:复杂数据程序设计-数组与指针 2 实验目标:实验目标:通过实验使得学生进一步理解数组与指针,特别是指针的应用,并能 够正确应用数组,特别是应用指针解决所遇到的程序设计问题。 实验机时:实验机时:3 小时 学生在指定机时的实验课后,仍可能需要一定时间继续完成实验。 实验内容:实验内容: 一简答题(共一简答题(共 12 题,每题题,每题 1 分)分) 1. 下述对 C 语言字符数组的描述中错误的是 (A) 字符数组可以存放字符串 (B) 字符数组的字符串可以整体输入,输出 (C) 可以在赋值语句中通过赋值运算符“=“对字符数组整体赋值 (D) 不可以用关系运算符对字符数组中的字符串进行比较 2. 对以下说明语句的正确理解是 int a10 = 6, 7, 8, 9, 10; (A) 将 5 个初值依次赋给 a1至 a5 (B) 将 5 个初值依次赋给 a0至 a4 (C) 将 5 个初值依次赋给 a6至 a10 (D) 因为数组长度与初值的个数不相同,所以此语句不正确 3. 有如下定义: int a342; 则数组 a 的第 10 个元素是 (A) a212 (B) a101 (C) a201 (D) a221 4. 以下正确的说明语句是 (A) int *b = 1, 3, 5, 7, 9; (B) int a5, *num5 = (C) int a = 1, 3, 5, 7, 9; int *num5 = a0, a1, a2, a3, a4; (D) int a34, (*num)4; num1 = 5. 若有说明: char *language = “FORTRAN“, “BASIC“, “PASCAL“, “JAVA“, “C“;则以下不正确的叙述是 (A) language+2 表示字符串“PASCAL“的首地址 (B) *language2的值是字母 P (C) language 是一个字符型指针数组,它包含 5 个元素,每个元素都是一个 指向字符串变量的指针 (D) language 包含 5 个相同长度的数组 6. 给出下述程序的执行结果 #include void swap(int *p, int *q) int *t; t=p; p=q; q=t; void main() int a=10,b=20; swap( printf(“a=%d,b=%dn“,a,b); 7. 下列程序是否正确,如果正确给出输出结果,如果不正确,答案处填写“不 正确”。 #include void func(char *q) char a=“hello“; q=a; void main() char *p; func(p); printf(“%sn“,p); 8. 给出下述程序的执行结果 #include void sub(int x,int y,int *z) *z=y-x; void main() int a,b,c; sub(10,5, sub(7,a, sub(a,b, printf(“%d,%d,%dn“,a,b,c); 9. 给出下述程序的执行结果 #include void main() int a4 = 1,2,3,4; int *p; p= printf(“%d “,+*p); printf(“%dn“,*-p); 10.给出下述程序的执行结果 #include void main() char a80=“AB“,b80=“LMNP“; int i=0; strcat(a,b); while(ai+!=0) bi=ai; printf(“%s“,b); 11. 写出下述程序的输出结果 #include void main() int a = 8,0,3,7,2,5, i, j, t; i = 1; while ( i=0 j-; aj+1 = t; i+; i = 0; while(i #include void str(char s, int i, int j) char temp; if(i; (D)+; 2. 设有以下说明语句: struct strutype int a; float b; var; 则下面叙述中错误的是 (A) struct 是结构类型的关键字 (B) struct strutype 是用户定义的结构类型 (C) var 是用户定义的结构类型名 (D) a 和 b 都是结构成员名 3. 以下对结构类型变量 std1 的定义中错误的是 (A) #define STUDENT struct student STUDENT int num; float age; std1; (B) struct student int num; float age; ; struct student std1; (C) struct int num; float age; std1; (D) struct int num; float age; student; struct student std1; 4. 假设 sizeof(int)为 4,sizeof(char)为 1,sizeof(double)为 8,已知: union int i; char c; double d; test; 则 sizeof(test)为 (A) 13; (B) 8; (C) 16; (D) 4; 5. 若有以下说明和语句: struct student int age; int num; std, *p; p = 则以下对结构变量 std 中成员 age 的引用方式不正确的是 (A) std.age (B) p-age (C) (*p).age (D) *p.age 6. 若有以下说明和语句,则下面表达式中值为 1002 的是 struct student int age; int num; ; struct student stu3 = 1001, 20, 1002, 19, 1003, 21; struct student *p; p = stu; (A) (p+)-num (B) (p+)-age (C) (*p).num (D) (*+p).age 7. 以下程序的运行结果是 #include struct n int x; char c; ; void func(struct n b) b.x = 20; b.c= y; main() struct n a = 10, x; func(a); printf (“%d,%c“, a.x,a.c); 8. 有如下定义: struct int x; char *y; tab2 = 1, “ab“, 2, “cd“, *p = tab; 语句 printf(“%c“, *(+p)-y ); 的输出结果是 9. 已知: union u_type int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论