上海交大C程序设计试题集含答案_第1页
上海交大C程序设计试题集含答案_第2页
上海交大C程序设计试题集含答案_第3页
上海交大C程序设计试题集含答案_第4页
上海交大C程序设计试题集含答案_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计试题集一、 单项选择题1.1 定义一个具有 10 个元素的整型数组,应当使用代码是A int a10; B int a2, 5; C int a; D int *a10;1.2 设 int a = 8, b = 7, c = 6, x = 1;执行以下语句后 x 的值是if (a 6) if (b 7) if (c 8) x = 2; else x = 3;A0 B 1 C 2 D 31.3 下列代码中,正确的数组定义是38-34注:解答写在答卷纸上,试卷中的解答不评分 int a = string ”; char a = “string ”; int a5 = 0, 1, 2, 3,

2、 4, 5; char a = 0, 1, 2, 3, 4, 5;A B .C D 1.4 字符串 ”abcx43np102q”的长度是A 9 B 12 C 13 D 171.5 执行下列程序后 , 输出的结果是#define M(a, b) (a) (b)?(a)+(b):(a)-(b) void main() int i = 10, j = 15; printf(“%dn ”, 10*M(i, j); A 10 B 25 C 250D -501.6 执行下列程序后 , 输出的结果是#define M(a, b) (a) (b)?(a):(b) void main() int i = 10,

3、 j = 5; printf(“%dn”, M(i, j)*10); A 10 B 5 C 100D 1501.7 计算立方数时,不可能引起二义性的宏定义是A. #define S(x) x*x*x B C #define S(x) (x*x*x)D#define S(x) (x)*(x)*(x)#define S(x) (x)*(x) *(x)1.8 下列代码中,正确的是A. char a3 = abc ,C. char a3 = “ab ”,1; B. char a 3 = 12”; D. char a 3 = abc, 1; “ab ”, “12”;1.9 设 char str110 =

4、“ABCDE”, str210 =则执行以下语句后的输出结果是printf( “%d”, strlen(strcpy(str1, str2);A 12 B 11 C 8 D 6 ?xyzuvw”;1.10 以只写方式打开一个二进制文件,应选择的使用方式是A.”a+” B .”w+” C .”b ”D .”wb”后,变量x的值是1.11 .设 int x = 8, y, z;执行 y = z = x-; x = y = zA. 0 B . 1 C . 8 D . 9m , n的值是1.12 .设变量 m , n , a , b , c , d 均为 0,执行(m = a=b)|(n=c=d)后,

5、A. 0, 0 B. 0,1 C. 1,0 D. 11.13 .设 int x = 2, 6, 5, 7, 9, 15, 12, *p = x;则不能正确引用数组元素的表达式是A. * (p- ) B . *(-p) C . *(p+) D . *(+p)1.14 .根据变量定义“ static int b5; ”,b4的值是。A. 1 B . 0 C . 2 D.不确定1.15.设 int a = 9, b = 8, c = 7, x = 5;执行语句if (a 7) if (b 8) if (c 9) x = 3; else x = 4;后x的值是A. 1 B . 5 C . 3 D .

6、41.16下列字符列中,可以作为“字符串常量”的是A.ABCB.ABC C.abcD./ /a1.17下列数据类型中,不属于构造类型是A.实型B.数组型C.结构型D.联合(共用)型1.18下面所列常量中,都是 C语言整型常量的是。A.0xffff和611B . 01b 和 0xa1 C . 986.012和 0667 D.2e4 和 0x1.19若有以下变量定义和输入语句,要求a1、a2、c1和c2的值分别为10、20、A和B。是正确的输入方式。int a1, a2; char c1, c2;sca nf( %d%c%d%c&a1, &c1, & a2, &c2)A. 10 A 20 B /

7、B . 10 A 20B / C . 10A 20 B / D . 10A 20B /1.20若变量b的值为3,则执行语句b += b -= b*b 后,变量b的值是(A. 3 B0 C. -12 D1.21若a、b和c均为整型变量,则执行以下语句后,变量 a = 0; b = 2; c = 1; a+ & +b | +cA . 1、3、2 B . 0、3、2 C . 1、2、2a、b和c的值为()D . 0、 2、 21.22将数学公式|yx + e y|写成C表达式,正确的是。A . sqrt(abs(pow(x, y) + exp(y)B sqrt(abs(pow(y, x) + exp

8、(y)C sqrt(fabs(pow(x, y) + exp(y)D sqrt(fabs(pow(y, x) + exp(y)1.23 函数调用时,下列说法中不正确的是A. 形参不分配内存C.主调函数和被调用函数可以不在同一个文件中B.实参和形参可以同名D.函数可以使用全局变量1.24 若有变量定义: “ int i, j = 7, *p = &i;”,则与“ i = j; ”等价的代码是A. i = *p; B. *p = *&j; C . i = &j; D . i = *p;1.25 若希望存储字符串,下列各代码中,正确的是A. char s5 = ABCDE; B. char s5 =

9、 A, B, C, D, E;C. char *s; s = ABCDE; D. char *s; scanf(%s, s);1.26设有代码“ int a = 3;”则执行了语句a += a -= a * a ;后,变量a的值是A. 3 B. 0C. 9 D.-21.27 设有如下定义,则正确的叙述为char x = abcdefg, y = a, b,c,d,e,f,g;A . x和y的长度和内容相同C . x 的长度大于 y 的长度B. x和y的长度相同D. x 的长度小于 y 的长度1.28设a,b为字符型变量,执行scanf( a=%c,b=%c, &a, &b)后使a为,A,b为,

10、B,,从键盘上的正确输入是A. ABB. A, B C . A=A,B=B D . a=A,b=B1.29 若有以下的定义,则值为 3的表达式是int a = 1,2,3,4,5,6,7,8,9,10, *p = a;p+=2, +*pA . p+=2, *(p+) B . p+=2, *+p C . p+=3, *p+ D1.30 设 a 为 5,执行下列代码后, b 的值不为 2 的是A. b = a/2 B. b = 6-(-a) C. b = a%2 D. b = a val, p = h; p != NULL; )if( ) m = p-val ;return m;23下面函数的功能

11、是寻找链表h中最小值,并返回。试给出空框中的代码。struct node int val;struct node *n ext;;int traveL in k(struct node *h) struct node *p; int m;for(m = h-val, p = h; p != NULL; )if( ) m = p-val ;return m;2.4 希望通过函数调用,能改变某个int类型的变量值,则对应形参的类型是。2. 5 .设 FILE *fp;函数调用 fp = fopen( ABC.dat ”,r ”)的作用是。2.6 .设int a45, *p = a3;该指针变量p指

12、向的元素是。2.7设int x = 4;以下表达式的值是 。x += x *= x + 12.8 .执行语句for(j = k = 0; jTO; k += j+); ”后 k 的值是 。2. 9 .若d是已定义的双精度变量,再定义一个指向d的指针变量p的代码是。2.10 .以下分别是算术、关系和逻辑运算符:+ , & , next-next = NULL) return h;for(p = h; ; p = p-next);p-next-next = h; ; p-next = NULL;return h;2.16 写出描述“ a和b中有且只有一个小于 x”的C表达式。2.17 .执行语句“

13、 for(j = k = 0; j-8; k += j+); ”后 k 的值是 。2.18 .写出描述“ x和y中有且只有一个大于 z”的C表达式。2.19.设 a=1 ,b=2 ,c=3 ,d=4 ,则表达式 a b ? a : c d ? a : d的结果为 2.20 .设a为整型变量,表达数学关系式:10 a 15 的C表达式是 。2.21 .若有定义: char a ; int b ; float c ; double d ;则表达式 a * b + d / c 的值的类型为 。2.22. 设 x 、y 、z 、t 均为 int 型变量,则执行以下语句后, t 的值为 。x = y =

14、 z = 1 ; t = +x | +y & +z;2.23. 假定所有变量均已正确定义,下列程序段运行后x 的值是 。a = b = c = 0 ; x = 35 ;if(!a)x- ; else if(b); if(c)x = 3; else x = 4;2.24 .设有宏定义: #define F(N) 2*N执行代码: printf(%dn, F(2+3) 后输出的结果是 。2.25. 表述 20 x 30 或 x - 100 的 C 表达式是 。2.26. 设有代码“ static int a34=6 , 5 , 4 , 3 , 2 , 1 ;”则 a11 的值为 。2.27. C

15、代码“ float (*f)5; ”的含义是 。2.28 . C程序有且只有一个 。三、读函数或程序,写出函数的功能或程序的输出结果3.1 . #include int sigmaDigit (int n) int s = 0;while(n) s += n % 10; n /= 10;return s;void main() printf(“sigmaDigit(12345) = %dn ”, sigmaDigit(12345);3.2 #include struct stu int num; char name15; int age; ;void py(struct stu *p) pri

16、ntf(“%sn”, p-name);void main() struct stu student3 = 1001,“Sun”, 25,1002,“Ling ”, 23,1003,“Shen”, 22;py(student+2); 3.3 #include void main() char str =“ABCDEF”G; int i;for(i = 0; i 7; i += 2) printf(“%s ”,str + i);3.4 #include void main() int i, a5;for(i = 0; i 2 ? 4 : 0) % 5; for(i = 4; i = 0; i-)

17、printf(“%3d”, ai);3.5.#include void main() char *a6 = “AB”, “CD”, “EF”, “GH”, “U”, “KL”; int i;for(i = 0; i 4; i+) printf(“%s ”, ai);3.5(2)#include char str =“ABCDEFGHU K”L;void main() char *a6 = str, str+2, str+4, str+6, str+8, str+10; int i; for(i = 0; i 4; i+) printf(“%s”, ai);3.6void fun(int a,

18、int n) int i = 0, j = nT, temp;while(i j) while(ai = 0)j -;if(i j) temp = ai; ai = aj; aj = temp;3.7#include #include char *subStr(char *s1, char *s2, int pos, int len) int i = 0; char *p = s2;if(pos = strlen(s1)for(s1 += pos; *s1 & i len; i+)*s2+ = *s1+;*s2 = 0;return p;void main()char *s1 = ABCDEF

19、G, s210;subStr(s1, s2, 2, 3);printf(%sn, s2);3.8#include int array(int *a, int n) int x;if(n = 1) return *a;x = array(a+1, n-1);return *a x ? *a : x;void main() int a = 57, 73, 23, 67, 131, 79; printf(%dn, array(a,6);3.9#include void postMsg(int msg); void main() int msg;for(msg = 0; msg next; v2-ne

20、xt = v1; v1 = v2; v2 = p; return v1; 3.11void rp(int *s, int k)int t;if (k = 0) return;rp(s+1, k-2);t = *(s+k-1); *(s+k-1) = *s; *s = t; 3.12void seleS(int a, int n) int i, j, t, k;for(i = 0 ; i n-1; i+) for(k = i , j = i+1; j aj) k = j;if(k != i) t = ai; ai = ak;ak = t;3.13void pp(char *s, int k) c

21、har c;if (k next; free(p); 3.15void s(int a, int n) int i, j, t;for(i = 1 ; i = 0 & aj t; j-) aj+1 = aj;aj+1 = t;3.16#include int fs(char *s) if(*s) return 1+fs(s+1); return 0;void main() char s=strings; printf(%dn, fs(s);3.17#include #include void ostr(char *s1, char *s2) int i,j,k, len = strlen(s1

22、);for(k = 0; s2k; k+) for(j = 0 ; s1j & s2k s1j; j+);for(i = len; i = j; i-) s1i+1 = s1i;s1j = s2k;len+;void main() char a20= epoz, b20= wnba; ostr(a, b); printf(%s, a); 3.18#include int f(int a) int b = 0; static int c = 3; b+; c+; return (a+b+c);void main() int i;for(i = 0; i 3; i+)f(i);printf(%dn

23、, f(i);3. 19#include void s(int b , int k) int i, j, t;for(i = 1; i = 0 & t bj; j-) bj+1 = bj;bj+1 = t;void main() int i, a5 = 6, 12, 7, 11, 5;s(a, 5);for(i = 0; i 5; i+) printf(%3d, ai); printf(n);3. 20#include void s(int a , int k) int i, j, t;for(i = 0; i k-1; i+) for(j = 0; j aj+1) t = aj; aj =

24、aj+1; aj+1 = t;void main() int i, b5 = 9, 6, 7, 5, 8;s(b, 5);for(i = 0; i 5; i+) printf(%3d, bi);printf( n );3.21#include int mDigit(int n) int c = 9;while(n 0) if(d = n % 10) c) c = d; n /= 10; return c;void main() printf( %4dn , mDigit(9657);3.22#include void s(int b , int k) int i, j, t, m;for(i

25、= n-1; i 0; i-) for(m = i, j = i-1; j = 0; j-) if(bj bm) m = j;if(m != i) t = bi; bi = bm; bm = t;void main() int i, a5 = 6, 12, 7, 11, 5;s(a, 5);for(i = 0; i 5; i+) printf(%3d , ai); printf(n);3.23#include void main() int i, j, sum;for(sum = 0, i = 1; i = 4; i+) for(j = 1; j = i; j+) sum += i * j;p

26、rintf(%3d,sum)3.24#include int a, b;void p(int c, int *d) c = a + b; *d = a-b; printf( %3d, %3d, c, *d);void main() a = 1; b = 2; p(a, &b); printf(%3d, %3dn , a, b);3.25 .当输入为12 78/时。#include int i, j, k;void main() scanf(%d%d &i, &j);do k = i % j; i = j; j = k; while (j != 0);printf(%dn, i);3.26int

27、 reverseNum(int n)return reverseDigit(n, 0);reverseDigit(int low, int high)if(low = 0)return high;return reverseDigit(low/10, high*10+low%10);四、完全程序或函数4.1 将一字符串中的大写英文字母改成小写。 void upToLow(char *str)while (1) ) if( ) *str -= astr+;4.2. 以下函数用来在 w数组中插入x。形参n是w数组中的整数个数。 按从小到大的顺序排列,插入后数组 w 中的整数仍有序。void fun

28、(int w, int x, int n) int i, p;p = 0;wn = x;while(x wp) p+;for(i = n; (1) ; i-)wi= 一 一;一 (3) 一 = x;4.3 下面函数pi()的功能是根据以下公式求n值(直到最后一项小于n 1121231234数组 w 中的整数已10-6 为止)。+23 3 5 3 5 7 3 5 7 9 double pi( ) double s = 0.0, t = 1.0; int n;for( n = 1; t =0.000001; n+) s += t; t = t *(1); return 2.0 * s;4.4 .使

29、用结构型计算复数x和y的和。struct comp float re, im; ;struct comp addComp(struct comp x, struct comp y) struct comp z;乙re =(1) ; z.im =(2)return z;4321。4.5. 下面函数是求计算整数 x 的逆数。例如, x 为 1234,则函数的计算结果是int reverseNum(int x) int s = 0;while(x != 0) s = 一 (1) 一 ; x =;return s;4.6 将一字符串中的小写英文字母改成大写。void lowToUp(char *str

30、) int i = 0;while (1) if(一 一)stri-=a - Ai+;4.7 以下程序求出所有各位数字的立方和等于 1099的 3位数。 #include void main() int a, b, c; /*变量定义 */for(a = 1; a = 9; a+)for(b = 0; b = 9; b+)for(c = 0; c = 9; c+)if ( ( 1 ) = 1099) printf(“%dn”, (2) );4.7(2) 以下程序求出所有各位数字的立方和等于 1099的 3位数。 #include void main() int k, a, b, c; /*变量

31、定义 */for(k = 100; k 0; i-)printf(%d, ai);/* 自高位到低位输出 */printf(%dn, a0);4.9 函数 Node *merge(Node *h1, Node *h2) 实现由链表 h1 和 h2 产生一个新链表,其中 hl和h2分别是两个从小到大有序链表首表元指针,新链表包含或在链表hl,或在链表h2中出现的元素。要求新链表也从小到大链接,并且没有重复的表元。设链表表元类型ELE的定义为:typedef struct ele int val;struct ele *next;Node;Node *merge(Node *h1, Node *h

32、2)Node *h = NULL, *tail = NULL, *p, *q;while(h1 | h2) if(h2 = NULL | ( (1) ) p = h1; h1 = h1-next;elsep = h2; h2 = h2-next;if(tail = NULL | (2) /只复制与末表元不相等的表元q = (Node *)malloc(sizeof(Node); q-val = p-val;if( (3) ) h = tail = q;else tail = (4);if(tail) (5);return h;4.10 函数 f(NODE1 *h) 参照无序整数链表,生成一个从

33、小到大顺序链接的有序整数链表, 新链表中没有重复的整数,新链表的表元有整数和该整数在原链表中出现的次数等信息。 typedef struct node1 /*原无序整数链表的表元类型 */int val; struct node1 *next;NODE1;typedef struct node2 /*从小到大顺序链接的整数链表的表元类型 */int val; int count; struct node2 *next;NODE2;NODE2 *f(NODE1 *h) NODE2 *u, *v, *p, *list;for(list = NULL; h ; h = h-next) /* 顺序考察

34、已知链表 */for(u = NULL, v = list; _(1)_ ; u = v, v = v-next);/* 寻找插入位置 */ if ( _(2)_ ) v-count+;else p = (NODE2 *)malloc(sizeof(NODE2);p-val = h-val; _(3)_ ;if(_(4)_) list = p; else u-next = p;_(5)_ ;return list;4.11 某服务公司征询顾客意见,以考核公司的 n(40) 位服务员的工作业绩。设服务员已 按1、2、3、顺序连续编号,顾客意见是顺序列出第一名(最佳)至第十名的服务员编号。设所收到

35、的信息已存于正文文件SOURCE.DA中,每位顾客给出的10服务员编号用一个正文行表示, 服务员编号之间用空白符分隔, 某些名次位置上的服务员编号可以为 0 ,表示该顾 客认为相应名次空缺,没有合适的服务员,编号 0 称为空缺编号。若一行意见信息中有不是服务员编号的整数, 也不是空缺编号, 或所给的服务员编号有 重复出现, 或一行有十个以上编号, 或不足十个编号 ( 包括空缺编号 ) ,则这条意见信息作废。程序综合顾客对各服务员的评定情况,给每位服务员累计计分,各名次得分标准如下: 一二三四五六七八九十15 12 9 7 6 5 4 3 2 1程序最后顺序输出各服务员各名次所得票数和他的合计得

36、分。程序中函数fgets(buf, 80, fp)实现从指定文件读入一行信息,若文件结束返回NULL否则返回 buf。#include #define N 40#define FNAME SOURCE.DATint mark = 15, 12, 9, 7, 6, 5, 4, 3, 2, 1;int scoreN10; /* scoreij是 i 号服务员得 j+1 名的票数 */char buf81, *p;FILE *fp;int i, j, k, c, d, error, b10;void main() for(i = 0; i N; i+) for(j = 0; j 10; j+) sc

37、oreij = 0;if(fp = fopen(FNAME, r) = NULL) printf(Cant open %s file.n, FNAME); return;while (p = fgets(buf, 80, fp) != NULL) error = 0; k = 0; /* error出错标志 , k 编号个数 */while (!error) while (*p = | *p = t) p+; /* if (*p = 0 | *p = n) /*error = _(1)_ ; break; /* if (*p 9) /* error = 1; break; /*if (k =

38、10) /*已有了十个编error = 1; break; /*跳过空白类字符 */一行结束 */检查编号个数 */有非法字符 */ 设定有错标志后,结束当前行 */号,不可再有 */ 设定有错标志后,结束当前行 */c = 0; /*译出一个编号 */while (*p = 0 & *p = N) error = 1; break; /* bk+ = c; /* 编号存入 */ if (c != 0) /* 一个非空缺编号 for(i = 0; _(3)_ ; i+); /* error = _(4)_ ; /*非法编号 */*/检查服务员编号是否有重复 */ 如有重复编号 , 则置出错标志

39、 */ if (!error)for(i = 0; i k; i+) fclose(fp);for(i=1; i N; i+) /* printf(t%2d, i); /*if (bi) _(5)输出结果 */输出服务员编号 */for(d = 0, j = 0; j next; (6) ; v1 = v2; v2 = p;(7) ;4. 13已知数组的 n 个元素,生成一个从小到大的有序链表,函数返回链表首指针。 设链表表元类型 NODE勺定义如下所示。typedef struct node int val;struct node *next; NODE;NODE *cSortList(in

40、t *a, int n) NODE *u, *w, *p, *h = NULL; int k;for(k = 0; k val = ak;u = h;while ( (8) ) w = u; u = u-next;if ( (9) ) h = p;else (10) ;p-next = u;return h;4.14 本题给出勺函数 orderStd(stdType std, int n) 根据存于数组中勺学生 成绩信息, 求各学生从高分到低分勺名次。 要求成绩相同勺学生, 他们勺名次相 同,所有名次连续编号, 不考虑同一名次勺人数多少。 设数组勺每个元素对应一 个学生,是一个结构,有学生勺学

41、号、姓名、成绩和名次。函数先按成绩从高分 到低分顺序排序, 然后求得学生勺名次。 排序采用改进勺冒泡法, 即下一次比较 范围勺上界是上一轮扫视比较时最后一次交换勺位置。 另为了避免排序时交换结 构,引入指针数组,变交换结构为交换指针。存储学号 */ 存储指向名字字符串勺指针 */ 存储成绩 */ 存储名次 */typedef struct node char no8; /* char *name; /* int score;/*int order;/*stdType; stdType *ptar, *t;void orderStd(stdType std , int n) int m, i,

42、j;ptar = (stdType *)malloc( _(1)_ );for(i = 0; i n; i+) /*为数组 ptar 设定初值 */ptari = std+i;/*以下采用冒泡法排序,按成绩由高到低排序*/m = n-1;while ( _ ) for( j = 0, i = 0; i order = i = 1; i order = ptari-score =(4)?(5);free(ptar);4.15函数in tNode * searchDOL in k(i ntNode *h, i nt key, in tNode * pp)实现在已知有序(从小到大)链表h中查找值为k

43、ey的新结点的插入位置(插入结 点的前驱结点指针通过指针参数pp带回,插入结点的后继结点指针通过函数值返回)。函数 intNode *sortCopy(intNode *t)利用函数 searchDOLink ()实现由已知链表t复制出一个有序链表返回。设链表表元类型intNode的定义如下:typedef struct node int val;struct node *n ext; in tNode;in tNode * searchDOL in k(i ntNode *h, i nt key, in tNode * pp)in tNode *v = h, *u = NULL;while ( (1)&)u = v; v = v-n ext;*pp = u; return v;4.16 函数 intNode *sortCopy(intNode *t)利用函数 searchDOLink

温馨提示

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

评论

0/150

提交评论