当前位置:文档之家› 高级语言程序设计(C)答案

高级语言程序设计(C)答案

学习中心/ 函授站_姓名学号西安电子科技大学网络与继续教育学院2015 学年上学期《高级语言设计(C)》期末考试试题(综合大作业)题号一二三四总分题分15 25 30 30得分考试说明:1、大作业于2015 年4 月3 日公布,2015 年5 月9 日前在线提交;2、考试必须独立完成,如发现抄袭、雷同、拷贝均按零分计。

一、名词解释(每小题 3 分,共15 分)1、【初始化】: 初始化就是把变量赋为默认值,把控件设为默认状态,把没准备的准备好。

2、【软件测试】: 描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。

3、【库函数】:顾名思义是把函数放到库里,是别人把一些常用到的函数编完放到一个文件里,供程序员使用,程序员用的时候把它所在的文件名用#include<> 加到里面就可以了(尖括号内填写文件名),例如#include<math.h> 。

4、【作用域】:通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

5、【编译预处理】:编译预处理是 C 语言区别于其它高级程序设计语言的特征之一,它属于 C 语言编译系统的一部分。

C 程序中使用的编译预处理命令均以# 开头,它在 C 编译系统对源程序进行编译之前,先对程序中这些命令进行“预处理”。

本章的知识点是编译预处理命令的三种不同形式:宏定义、文件包含和条件编译。

二、简答题(每小题 5 分,共25 分)1、为什么要用变量?答:1) 、计算机在工作过程中所产生的所有数据,都是在“内存”是存储和读取的。

大家可以把“内存”想象成一个工厂的仓库,数据呢就是这个工厂工作过程中要使用的“零件”。

在一段程序中,有很多很的数据(零件),它们分别存放在内存(仓库)中的不同地方。

需要用变量把它引用出来。

2、算法设计的一般步骤有哪些?答:1)、分析问题:输入是什么?输出是什么?条件是什么?能用什么方法?2 )、用流程图画出解决方案:决定了程序的结构。

三大结构有:顺序结构、判断结构、循环结构3 )、算法设计:常见的算法设计方法:穷举法、迭代法、递推法、递归法、回溯法、贪婪法、分治法4 )、程序设计:用编程语言来实现3、引入数组机制的好处是什么?答:数组在内存中分配是栈内存,是【连续】存储【同一种类型】的【线性】结构。

它的作用主要体现在对同一类型的数据进行存储。

(要是int 型,全都是int 型,要是char 型,全都是char 型),不可以出现其他类型。

对数据的访问是具名访问,可是直接读出数据中某一块的数据,例如int array[5]={1,2,3,4,5}; array[3] 等于 3. 这里需要注意的是:数组的下标是从0 开始的。

如果你想访问array[5], 会提示错误,因为已经越界了。

提取数据比较方便,因为数组在内存中是连续存储数据的,好找。

随便说句,数组可以当指针用,但它绝不是指针。

4、函数设计三要素包括功能、输入和输出三个方面的内容,它们和函数结构的关系是怎么样的?答:函数设计的功能告诉这个函数具有具体的功能。

输入对应函数的首部,输出对应函数的返回值。

5、值调用的特点是什么?答:函数体内相应数据的改变不影响调用它的函数中的数据。

三、分析填表题(每小题 6 分,共30 分)1. struct student{ int StuId;int Score[4];int Total ;}struct student com [10]={{ 1, 90, 83, 72, 82},{ 2, 71, 92, 88, 78 },{ 3, 85, 72, 98, 66 },{ 4, 78, 95, 63, 90 } };struct student x, *sPtr;sPtr=com;x=com[0];结构成员引用值x. Total 0x.Score[2] 72com[1].StuId 2com[2].Score[2] 98sPtr->Total 0sPtr->Score[3] 82(*sPtr).StuId 1(*sPtr).Score[3] 82(sPtr+1)->Score[3] 782. main(){for (int i=0; i<2; i++)for (int j=3; j>0; j--) printf("*");}i 0 1 2j 3 2 1 3 2 1 3输出*** *** 结束3. main(){ int i =5;char c[6] ="abcd" ;// 步骤(1)do{ c[i] =c[i ―1] ;// 步骤(2)} while (――i>0);}下标0 1 2 3 4 5 步骤(1)c[] a b c d \0 \0 步骤(2 )i=5 时c[] a b c d \0 \0步骤(2 )i=4 时c[] a b c d d \0步骤(2 )i=3 时c[] a b c c d \0步骤(2 )i=2 时c[] a b b c d \0步骤(2 )i=1 时c[] a a b c d \0 4.main(){int a[10], b[10];int *aPtr, *bPtr, i;aPtr=a; bPtr=b;for ( i=0; i< 6; i++, aPtr++, bPtr++){*aPtr=i+2;*bPtr=3*i;}aPtr=&a[1]; ①bPtr =&b[1]; ②for ( i=0; i<5; i++ ,aPtr++, bPtr++){*aPtr +=i; ③第 3 页(共 6 页)*bPtr *=i; ④}}i 0 1 2 3 4 5 6 7 8 9a 2 3 5 7 9 11b 0 0 6 18 36 60i 0 1 2 3 4 5 6 7 8①*aPtr 2 3 4 5 6 7③*aPtr 2 3 5 7 9 11②*bPtr 0 3 6 9 12 15④*bPtr 0 0 6 18 36 605.以下程序有语法错误和逻辑错误。

在改正了语法错误后,为有效率地调试程序,你认为在调试时应该在哪些地方设置断点,应该观察哪几个量?找出程序中的错误。

(观察的变量、断点设置、各种错误的改正等写在表格的说明栏中)程序功能: 输入一个以回车结束的字符串(少于80 个字符),将它的内容颠倒过来再输出。

如”ABCD”颠倒为”DCBA”。

程序说明1 #include <stdio.h>2 int main()3 {4 int i,k,tmp;5 char str[]; 数组未指定元素个数67 printf("input a string:\n");89 while((str[i]=getchar())!= ’n’)i 未赋初值10 i++;11 str[i]= ’0’;1213 k=i; K=i; 应改为k=--i;14 for(i=0;i<k;i++) 观察i 和k, 两个变量15 { 的变化。

16 tmp=str[i];17 str[i]=str[k];18 str[k]=tmp;19 k++; K++; 应改为k--;20 }2122 for( i=0; str[i]= = ’0’; i++ ) == 改为!=23 putchar(str[i]);2425 return 0;第 4 页(共 6 页)}四、程序设计题(每小题10 ,共30 分)编程题要求:(1) 先给出伪代码,然后再写出源码,重要变量和语句要加注释;(2) 若有子函数,则要给出函数框架设计( 函数名、形参、返回类型) 。

1、编写一个程序,这个程序能够找出几个整数中最小的整数。

假定程序读取的第一个值是程序要处理的整数的个数。

给出伪代码描述及程序实现。

Main(){int n,x,min;Scanf( “%d”,&n);/* 输入处理的整数个数*/Scanf( “%d”,&x);/* 输入要处理的第一个数*/min=x;For(i=2;i<=n;i++)/* 用循环找出几个整数的最小值*/{scanf( “%d”,x);if(max>x) min=x;}Printf( “%d”,min);}2、我们需要一个小程序,输入两个整数,输出这两个数的平方和与平方差,要求:(1) 主函数负责接收这两个整数Main(){double sum,diff;int x,y;scanf( “%d%d”,&x,&y);sum=quadratic_sum(x,y);diff=quadratic_diff(x,y);printf( “%lf %lf\n ”,sum,diff);}(2) 将计算代码独立做成子函数quadratic_ sum 和quadratic_ diffdouble quadratic_sum(int x,int y){dobule sum;Sum=x*x+y*y;Return sum;}double quadratic_diff(int x,int y){dobule diff;Sum=x*x-y*y;Return diff;}(3) 在主函数中调用子函数并输出结果到屏幕上功能输入信息输出信息求两个数的平方和quadratic_sum (int x,int y) double sum求两个数的平方差quadratic_diff (int x,int y) double diff函数名形参表函数类型3、读入30 个取值在20 到90 之间的数字,读取每个数字时,仅在它不是重复已经读取数字的情况下才输出它。

使用最小的可能数组来解决这个问题。

main(){int a[30],i,j;for(i=0;i<30;i++){a[i]=20+rand()%70;for(j=i-1;j>=0;j--)if(a[i]==a[j]) {i--; break;}if(j<0) printf("%d ",a[i]);}}。

相关主题