C语言程序设计_A卷(17页).doc
-哈尔滨工业大学(威海)2007/2008学年秋季学期 C语言程序设计 笔试试题(A卷)题号一二三四五六笔试(70%)综合(30%)总分分数 号学名姓试卷说明:1. 笔试卷面总分100分,取卷面成绩的70%计入总分;2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%;3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸;4. 答题时间120分钟。一、单项选择题。请把答案填入下面框中, 不允许出框线。(本题16分,每小题2分) 题号12345678答案注意行为规范 遵守考试纪律1. 以下选项中合法的C语言用户标识符是( )。A) long B) _2Test C) 3Dmax D) A.dat2. 有以下程序main() int a=0, b=0, c=0, d=0;if(a=2) b=2; c=4;else d=3;printf("%d,%d,%d,%dn",a,b,c,d);则程序输出( )。A) 0,1,2,0 B) 0,0,0,3C) 1,1,2,0 D) 编译有错教研室主任签字:3. 用语句scanf(“%c%c%c”,&c1,&c2,&c3);输入”a,b,c”时,变量c1、c2、c3的值分别为( )。A) a, b, cB) a, b, C) a, , ,b D) a, , c4. 有以下程序段main( )int k=0;while(k=1) k+;则while循环执行的次数是( )。A) 无限次 B) 有语法错,不能执行C) 一次也不执行D) 执行1次5. 有以下程序:#include <stdio.h>#include <string.h>main()char *p=”abc1010fghijk0”;printf(“%d”,strlen(p);执行后的输出结果为( )。A) 6B) 4C) 12D) 146. 设有说明语句:int a=1, b=2, c=3, d=4, m=2, n=2; 则执行(m=a>b) && (n=c>d)后n的值为( )。A) 1 B) 2C) 3D) 47. 表达式0x13&0x17和0x13|0x17的值分别是( )。A) 19, 23B) 23, 19C) 248, 232D) 236, 2008. 设有以下语句typedef struct TT char c;int a4; CIN;则下面叙述中正确的是( )。A) 可以用TT定义结构体变量 B) TT是struct类型的变量C) 可以用CIN定义结构体变量 D) CIN是struct TT类型的变量二、填空题。请按序号把答案填入下面框中, 不允许出框线。(本题20分,每空1分) 题号答 案题号答 案11121231341451561671781891910201. 下面程序的功能是输出二维数组的所有元素值,请完成程序。main( )int a34=1,3,5,7, 9,11,13,15, 17,19,21,23;int *p;for( 【1】 ; p< 【2】 ; p+) printf("%dt", *p); 2. 有以下函数int fun (char *s) char *t=s;while(*t+);return(t-s-1);该函数的功能是 【3】 。3. 读入三个浮点数,取出其小数部分分别输出,完成下列程序。void splitfloat(float x, float *fracpart)int intpart= 【4】 x;*fracpart=x - 【5】 ;main()int i;float x, temp;printf("Enter 3 float point numbers:n");for(i=0;i<3;i+)scanf("%f",&x);splitfloat(x, 【6】 );printf("Fraction Part= %5.4fn", temp);4. 下列程序段为链表结点类型定义,请填空。 【7】 student int num;char name20;int score; 【8】 next;5. 如下图所示,设指针p指向的结点已经申请空间,并进行了赋值,写出将结点p插入头节点h之前的C程序语句。datanextdatanextdataNULL·····datanextph 【9】 ; 【10】 ;6. 如下图所示,设指针q指向要删除的结点,写出删除该结点的语句。hdatanextdataNULL·····qdatanext 【11】 ; 【12】 ;7. 下面程序的运行结果为 【13】 。main() enum weekday sun, mon, tue, wed, thu, fri, sat a,b,c; a=sun;b=tue;c=sat; printf("%d%d%d", a,b,c);8. 在C语言中,对于文件的操作主要是通过调用包含在头文件”stdio.h”的标准库函数来实现的。因此,在对文件操作的C程序中,必须添加包含此头文件的预处理指令,该指令为 【14】 。假设在C盘根目录下有一文本文件hit.txt,现在要以读写方式打开此文件并在打开后立即关闭。请完成下面的C程序语句: 【15】 fp;fp = fopen( 【16】 , “rw”); 【17】 ;9. 若有定义语句:int a=7; float x=2.5, y=4.7; 则表达式x + a % 3 * (int) (x+y) % 2 / 4的值是 【18】 ;10. 以下函数的功能是:输出三个变量中的最小值,请完成该函数。int GetMin(int x1, int x2, int x3) int t1 = 【19】 ; int t2 = 【20】 ; return (t1 > t2 ? t2 : t1);三、请把下列程序运行结果填入答案框中,不允 许出框线,用“”表示回车。(本题24分,每小题3分) 题号12345678答案1. #include <stdio.h>main( ) int p=30;printf("%dn",(p/3>0 ? p/10 : p%3);2. #include <stdio.h>main( )char c1,c2,c3,c4,c5,c6;scanf("%c%c%c%c",&c1,&c2,&c3,&c4);c5=getchar(); c6=getchar();putchar(c1);putchar(c2);printf("%c%cn",c5,c6);程序运行后,若从键盘输入 (代表回车换行):1357 24请把输出结果填入答案框中。3. #include <stdio.h>main() int a=1, b; for(b=1;b<=10;b+) if(a>=8) break; if(a%2=1) a+=5;continue; a-=3; printf("%dn",b); 4. #include <stdio.h>main( )int a = 1, 2, 3, 4, 5, 6, *p = a;*(p+3) += 2;printf ( "%d,%d", *p, *(p+3);5. #include <stdio.h>char * fun(char *str) return str="fun" main( ) char *str="ction" printf("%s,%cn", fun(str)+1, *fun(str)+1);6. #include <stdio.h>main( ) char *s="two","three","four","five"char *p=s1;char *q=s3;q+=2;printf("%s,%s",(+p),(q-);7. #include <stdio.h>struct st int x; int *y;*p;int dt4=10,20,30,40;struct st stMatrix4=50,&dt0,60,&dt1,70,&dt2,80,&dt3;main() p=stMatrix;printf("%d,%d",+(p->x),*(p+2)->y);8. #include <stdio.h>main( )int a=0,b=2,c=3;switch(a)case 0: switch(b=2)case 1:printf("&");break;case 2:printf("%");break;case 1: switch(c)case 1:printf("$");case 2:printf("*");break;default:printf("#");四、根据功能描述改正程序中的错误。 不得增行或删行,不得更改程序结构。(本题10分)1. 要求以下程序的功能是计算1+1/2+1/3+1/10的和。(本小题4分)#include <stdio.h>main( ) int n; float s;for(n=10;n>1;n-)s += 1/n;printf("%6.4fn",s);2. 下面函数Squeez()的功能是删除字符串s中所出现的与变量c相同的字符。(本小题6分)void Squeez(char s, char c);int i, j;for (i=0,j=0; si!='0' i+) if (si != c) sj = si; j+; si='0'五、请用标准程序流程图描述下列问题的算法 (本题10分,每小题5分)1. 依次从键盘输入10个不同的整型数据,请查找出这些数据中的最大值和最小值,并指出它们分别是第几次输入的。2. 某人身上有人民币50张,面值分别为20元、10元、5元和1元。请分别统计出这些不同面值人民币的张数并计算出这50张人民币的总面值来。 六、编程题(本题20分) 1. 请从键盘输入一个长度为29的字符串,要求分别统计出该字符串中所包含的英文字符、数字字符、空格字符以及其他字符的个数。请写出解决该问题的完整C程序。(本小题6分)2. 输入任意长度的字符串str1和子字符串str2(str2的长度要小于str1的长度),请统计出str1中包含有几个子字符串str2,并计算str1中出现最后一个子串str2之前已有多少个字符出现。 (本小题8分)3. 某数理化三项竞赛训练组有4个人,其中有且仅有一个人的一项成绩不及格(小于60),请找到此人并输出其所有成绩。要求使用指针函数,完成下列程序。(本小题6分)#include <stdio.h>int * seek( int ) int i, *pnt_col; /*定义一个(列)指针变量pnt_col */pnt_col = ; for(i=0; i<3; i+) if( ) return(pnt_col); main( )int grade43=65,65,75, 65,45,85, 75,80,90, 77,75,95; int i, j, *pointer;for(i=0; i<4; i+) pointer = seek( grade+i ); if(pointer=*(grade+i) printf(" No.%d grade list: ", i+1); for(j=0; j<3; j+) printf("%d ",*(pointer+j); printf(" n");break; 第 17 页-