1、哈工大C语言03秋EMK哈工大 2003 年 秋 季学期班号姓名高级语言程序设计试题 题号一二三四五六七八九十总分分数(说明:卷面总分85,另有8分选做题。平时成绩15分)一、判断(5分)(1) 自动变量和外部变量都是局部变量。 ( )(2) 在函数调用过程中,不能通过改变形参的值而使实参的值也改变;但可以通过改变指针形参的值而使指针实参的值也改变。 ( )(3) 数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值。 ( )(4) 对于printf()函数,通过字符数组名或者字符指针变量做参数可以输出一个字符串,而对一个数值型数组是不能用数组名做参数输出它的全部元素的。 ( )(5) 实参
2、和形参(均为变量)各占独立的存储空间。 ( )二、解释下列语句含义(10分)(1) int *p(); 语句含义:_(2) int (*p)(); 语句含义:_(3) int (*p)3; 语句含义:_(4) int *p4; 语句含义:_(5) int *p; 语句含义:_三、单选题(13分)(1) 下列哪种说法是正确的? ( )A. 程序编译时的警告(warning)可以全不在乎B. 编译通过,程序就是没有问题的C. 程序在一台计算机运行无误,而在另一台计算机按同样步骤运行,却可能出错D. 程序发生编译错误(error),仍可以运行(2) 下列说法正确的是 ( )A. 一个int类型的变量
3、占两个字节B. 一个结构体变量占的字节数,是每个成员变量字节数的总和C. 任何类型的指针变量占的字节数,与其指向的类型所占字节数相等D. 一个long类型变量可能与一个int类型变量占用相同大小的内存(3) 下列关于程序调试的说法,错误的是 ( )A. 可以一条语句一条语句地执行B. 调试过程中如果修改了源代码,不需要重新编译就能继续运行C. 可以随时查看变量值D. 可以跟踪进入自己编写的函数内部(4) 下面这些名词,没有“地址”的是: ( )A. 变量 B. 函数 C. 宏 D. 指针(5) 在C语言中 ( )A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数
4、的调用可以嵌套C. 函数的定义和函数的调用均不可以嵌套D. 函数的定义和函数的调用均可以嵌套(6) 阅读程序选择正确答案填空程序功能:检查给定字符串s是否满足下列两条件:1、从字符串首字符起,在顺序检查s中的字符的过程中,遇到的右括号“)”的个数在任何时候均不超过所遇到的左括号“(”的个数;2、字符串s中左括号“(”的个数与右括号“)”的个数相同。若字符串s同时满足上述条件1和条件2,函数返回非0值,否则返回0值。int check( (1) ) ( ) int lp, rp; lp = 0; rp = 0; while ( (2) ) ( ) if ( *s = ( ) lp+; else
5、if ( *s = ) ) rp+; if ( (3) ) ( ) return 0; (4) ; ( ) return (lp != rp) ? 0 : 1);(1) A. char *s B. char s C. char s D. char s(2) A. *s B. *s = 0 C. *s != 0 D. s(3) A. rp lp B. rp lp C. rp = lp D. rp != lp(4) A. s+ B. (*s)+ C. +(*s) D. +s四、阅读程序(22分)(1) 下面程序运行会出错吗?如果会,请改正。(4分)#include main() char buff
6、er128; int c; int pos=0; while(c=getchar() != EOF) bufferpos+ = c; printf(%s, buffer);(2) 对下面这个程序谈谈你的看法。(3分)#include main() int i, j; for (i=1, j=1; i!=0; j+) i+;(3) 给下面程序找错。请标注在程序上,并给予恰当的文字说明。(6分)#include main() int size=10, i; float fsize; for (i=0; i=size; i+) scanf(%f, fi); if (f0 = f10) printf(
7、您输入的第一个数和最后一个数相等n);(4) 阅读程序,写出输出结果。(4分)#include main() int i, j, k, sum, temp; sum = 0; temp = 0; for (i=1; i=2; i+) for (j=1; j=3; j+) for (k=1; k=i; k+) temp = temp + k; sum = sum + temp; printf (sum = %d, sum);(5) 阅读程序,写出输出结果。(5分)#include main() int a20, *p4; int i, k=0; for (i=0; i20; i+) ai = i
8、; for (i=0; i4; i+) pi = &ai*(i+1); for (i=0; i4; i+) k += *(pi+i); printf(%d, k);五、简答题(11分)(1) 请定义一个结构student,其成员包括姓名、学号、性别、出生年月日、籍贯、身高(单位:米)、体重(单位:公斤)。(6分)(2) 请谈谈你对高级语言程序设计的看法。(5分)(注:后面两道大题答在试卷的附页上)六、程序设计。请从下面5道题中任选3题,按题意要求编写程序。(24分)(1) 编写一个函数int IsPrime(int data),判断data是否为素数(除了1和其本身以外,不能被其他正整数整除的
9、正整数),若是返回-1,否则返回0。(2) 一个函数void func(void),现在想统计这个函数一共被调用了多少次,并在函数被调用的时候打印此数值。请用两种方法实现,并推荐一种最好的方法,说明理由。(3) 用户输入若干个(不超过20个)小于100的正整数,编程求出这些数的最大值、最小值和平均值。用户输入一个负数表示输入结束。(4) 输入一行字符(最多80个),统计其中的大写字母,小写字母,数字,空格及其它字符的个数。(5) 利用memcpy()函数实现char* my_strcpy(char* dst, char* src)函数,把字符串src拷贝到dst内,并返回dst。注:Turbo
10、 C 2.0对memcpy的联机帮助如下 memcpy: copies a block of n bytes from src to dest void *memcpy(void *dest, const void *src, size_t n); Prototypes in mem.h Returns dest七、选做题。此题分数不在试卷总分之内。如作答,则此题得分额外加入总分,否则不加分(8分)用户输入一行字符串,可能输入的字符个数不定,以回车作为结束标志。统计用户的输入中一共有多少个单词。单词之间以空格或者t作为分隔。Key to Part VI(1)#include int IsPri
11、me(int data) int i; int result=0; int limit=(int)sqrt(double)data); for(i=2;i=limit;i+) if(data%i=0) i=-1; break; return result;(2)1、全局变量法int invoked=0;void func(void)invoked+;printf(“%dn”,invoked);2、静态变量法void func(void)static int invoked=0;invoked+;printf(“%dn”,invoked);喜欢哪个看个人喜好(3)/*这题让输入正整数,负数表示结
12、束,输入0咋整*/#include main()int i=0,temp;int max=0,min=100,sum=0;int num20;while(scanf(“%d”,temp)=1) if(tempmax)max=temp; if(tempmin)min=temp; sum+=temp; numi=temp; i+;if(i=0)printf(“No input.n”);else printf(“Max: %dn”,max); printf(“Min: %dn”,min); printf(“Average: %lfn”,sum/(double)i);(4)#include #defi
13、ne UCASE 0#define LCASE 1#define NUM 2#define SPACE 3#define OTHER 4main() int i=0;char temp;int letter5=0;while(temp=getchar()!=n) if(temp=A&temp=a&temp=0&temp=9)letterNUM+; else if(temp= )letterSPACE+; else letterOTHER+;printf(“Upper case: %dnLower case: %dnNumber: %dnSpace: %dnOther: %dn”,letter0
14、,letter1,letter2,letter3,letter4);(5)char* my_strcpy(char *dst,char *src)int i=0;while(*(src+(i+);return (char *)memcpy(dst,src,i);Key to Part VII#include #include using namespace std;int main() int word=0;string input;getline(cin,input);for(int i=0;iinput.size();i+) if(inputi= |inputi=t)word+;if(inputinput.size()-1!= |inputinput.size()-1!=t)word+;coutwordendl;return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1