C语言试题有时间看看.doc_第1页
C语言试题有时间看看.doc_第2页
C语言试题有时间看看.doc_第3页
C语言试题有时间看看.doc_第4页
C语言试题有时间看看.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

C语言试题(本试题答卷时间为120分钟)试题一(28分)解答下列各小题,把正确的解答写在答卷纸的对应栏内。(1) 设有变量定义:int a = 12;根据此定义,试写出计算表达式a + = a / = a - = a*a后,a 的值。(2) 设有函数说明和指针变量定义如下:int max (int x, int y);int (*p) ( ) = max;试写出以参数 a和 b,利用 p调用它所指的函数的代码。(3) 设有变量定义如下:static char *a = “Beijing”, “Shanghai”, “Wuhan”;char *p = a;试根据此定义,写出函数调用 printf (“%sn”,*+p + 1) 输出的结果。(4) 已知字符数组 str的定义:char str = “ABCDEFGHIJ”;试写出函数调用 printf (“%.2sn”, str+5) 的输出结果。(5) 试写出要求条件 x = 2 和 y = 3由且只有一个成立的C表达式。(6) 试指出以下函数定义的功能。Double MakeTwoDigits ( double x ) return (int) (x*100+0.5) / 100.0; (7) 试指出函数内带初值的自动变量和带初值的静态变量在赋初值时间上的区别。试题二(12分)读程序,把程序的输出结果写在答卷纸的对应栏内。(1) 程序 2.1 # define exch1 (x, y) ( int t = x; x = y; y = t; ) exch2 ( int x, int y ) ( int t = x; x = y; y = t; ) exch3 ( int *x, int * y ) ( int t = *x; *x = *y; *y = t; )main ( ) int a = 2, b = 1; exch1 ( a, b ); printf (“a = %d b = %d n”, a, b ); exch2 ( a, b ); printf (“a = %d b = %d n”, a, b ); exch3 (& a, &b ); printf (“a = %d b = %d n”, a, b ); (2) 程序 2.2#define M 4#define N M* ( M+1 ) / 2main ( ) int I, j, aN, *pN; for ( i = 0; i M; i + ) pi = &a i*(i+1)/2;for ( i = 0; i M; i + ) p i 0 = p i i = 1;for (I = 2; i M; i + )for ( j = 1;j i; j + ) p i j = p i -1 j-1 + p i -1 j ;for ( i = 0, i M; i + ) for ( j = 0; j = i ; j + )printf ( “%4d”, p i j ); printf (“n”); 试题三(12分) 改错。下列程序都有一些错误,纠正所有错误,并以“将xxx改为xxx”的形式将解答写在答卷纸的对应栏内。(1) 本程序输入三个整数,输出其中最大值。程序3.1# include main ( ) int x, y, z, max; printf (“ Enter x, y, zn”); scanf (“ %d %d %d ”, x, y, z); max = x; if ( y z )if ( y x ) max = y; else if (z x ) max = z; printf (“ MAX = %dn”, max); (2) 本程序的目的是计算若干个整数的乘积。 程序3.2 main ( )int I, *dp, n;printf (“Enter n.n”);scanf (“%d”,&n);dp = malloc (n);printf (“Enter %d data.n”,n);for ( i = 0; i n; i+)scanf (“%d”, dp+i);printf (“MUL = %dn”,tim ( dp, n );tim ( int *a, int n)int s;for (s = 0; -n;)s *= *a+;return s;试题四(18分) 按指定要求,写出c代码,把正确的解答写在答卷纸的对应栏内。不要求写完整程序,也不必定义代码中出现的变量。(1) 试用 while 语句改写以下 for 语句:for ( s = p = 1, i = 2; i n 0 )个元素是否为不减序列,若该数组的前 n个元素为不减序列,则置变量 r 为1 ;否则,置 r 为0。试题五(15分) 阅读下列程序说明和C程序, 把应填入其中 (n) 处的字句写在答卷纸的对应栏内。程序5.1说明 本程序求所有这样的三位数,这些三位数等与其各位数字的立方和。例如 153 = 1*1*1 + 5*5*5 + 3*3*3.5.1main ( )int a, b, c, i;for ( i = 101; i 1000; i + ) a = (1) ; b = I % 100 / 10; c = I % 10; if ( (2) ) printf (“”, i ); 程序5.2说明 本程序输入 n (0 n 100 ) 个整数,找出其中出现频率最高的元素(当有多个不同的元素有相同的最高出现频率时,选择更大的元素)。程序5.2# define N 100main ( ) int a N, I, j, n, ind, c1, c2;do printf (“Enter n (0 n 100 ).n”); scanf (“%d”, &n); while ( n = 100 );printf (“Enter data.n”);for ( I = 0; I n,; I + )scanf (“%d”,&a i );for ( c2 = I = 0; I n; I + )for ( c1 = 1, (3) ; j + )if ( (4) ) c1 +;if ( (5) )c2 = c1;ind = I;printf (“%d appears %d times.n”, aind, c2 );试题六(15分)阅读下列程序说明和C程序, 把应填入其中 (n) 处的字句写在答卷纸的对应栏内。程序6说明 本程序中的函数 confert ( int n, int d ) 采用“除d 取余法”将十进制整数转换成进制数的字符列,其中字符列用字符链表表示。具体方法是先求出的余数放在链表的尾部,直至商为零。最后所得链表即为转换后的字符链表。 例如:n = 19, d = 3 , 执行本程序后,得到如下链表: 2 0 1 程序6 # include struct node char val;struct node *next;main ( )struct node *p, *head;int n, d;struct node *convert ( int n, int d );do printf (“Enter n & d(2 = d =16): n”); scanf (“%d%d”,&n, &d); while ( d 16);head = convert (n, d);for (p = head; p != NULL; p = p - val);printf (“%c”, p - val );printf (“(%d)n”,d); void insert ( struct node *h, char ch ) struct node *p;p = _ (1) _; p - val = ch;_ (2) _ ;_ (3) _; struct node *convert ( int n, int d )char letter = “ 0123456789ABCDEF”;int m = n 0 ? n : n;struct node *h;h = NULL;while ( m != 0 )insert ( _ (4) _ );m /= d;if ( n 0 )insert ( _ (5) _, -)lreturn h;结束C 试题一 (28分) 解答下列各小题, 把正确的解答写在答卷纸的对应栏内。(1) 试计算以下表达式的值。8*(int)(1/2 + 5/(double)2)(2) 设变量 x 满足以下所述的逻辑条件,试用C代码描述该条件。 60= x 70 或者 90 = x = 100(3) 试简要叙述以下宏定义的意义。# define round (t ) ( int ) ( ( t )* 10 + 0.5) / 10.0(4) fopen 函数中第二个变元表示打开文件的方式。如果要求打开一个已存在的二进制文件,且对该文件既能读也能写,那麽打开文件方式的字符串应为什么?(5) 按以下要求写出结构类型 w的定义形式: w 结构类型包含三项信息: 学号(SNO):最多有8个字符组成的字符串; 姓名 (SNAME):最多有10个字符组成的字符串;备注信息 (NOTE):字符个数不定,可能没有,也可能是有很多字符组成的字符串。(6) 试分别写出以下说明和定义中标识符u和v的意义。 int *u ( ); int (*v) ( );(7) 从变量作用域来分,程序有局部变量和全局变量。试回答,其中全局变量可能有那些存储类,各有什么特点?试题二(12分) 读程序。把程序的输出结果写在答卷纸的对应栏内。(1) 程序2.1 # include int a = 3, b = 4, c = 5;sub (int a ) int b = 20; static int s = 10; b += a +; s += b + c; printf (“%d, %d, %d ”, a, b, c);main ( ) int b = 6, c = 7; sub ( 10 ); sub ( a + c ); printf (%d, %dn”, a, b); (2 ) 程序 2.2 # include int orderi ( int *a, int i ) return a i a i + 1 ; main ( ) int a = 3, 8, 6, 2, 18, 9, 12, 14 , i; for ( i = 0; i 7; i + ) if ( ! orderi ( a, i ) )printf (“%4d%4dn”, a i , a i + 1 );试题三(12分)改错。下列程序段或程序都有一些错误,纠正所有错误,并以“将第 x 行改为 xxx”的形式写在答卷纸的对应栏内。程序段或程序左边的“#1”、“#2” 是附加的行号。(1) 程序3.1时希望通过函数指针变量调用它所指的函数,输出三个输入整数中的最大值。程序3.1#1#include #2int max(int x, int y);#3 return xy? y: x #4 #5main( )#6 int max(x, y);#7 int *p=&max;#8 int a, b, c, d;#9 printf(“输入三个整数。n”);#10 scanf(“%d %d %d”, a, b, c);#11 d = (*p)(*p)(a, b), c);#12 printf(“在 %d,%d 和 %d 中,最大数是 %dn”, a, b, c, d);#13 (2) 程序3.2希望通过对函数sorttwo( ) 的调用,使与函数的两个参数所对应的两个变量的值依次变成从小到大顺序。当函数发现它们不是从小到大顺序时,函数就应交换这两个变量的值,使它们变成从小到大顺序。程序3.2#1void sortrtwo(int x, int y)#2 int t;#3if(xy) t=x; x=y; y=t ; #4#5#define PR(a,b)= printf(“First = %d Second = %dn”, a, b)#6main( )#7 int a, b;#8 a=1; b=2; PR(a, b);#9 sorttwo(&a, &b);#10 PR(a, b);#11 a=2; b=1; PR(a,b);#12 sorttwo(b, a);#13 PR(a, b);#14试题四(18分)按指定要求,写出 c 程序段,把正确的解答写在答卷纸的对应栏内。不要求写完整的程序,也不必定义程序段中出现的变量。(1) 试用 for控制结构统计两维数组 aNN中全为 0元素的行的行数,将统计结果存于变量 s中。(2) 试用 while控制结构实现将存于数组 b 中的前个元素存储顺序颠倒,即执行该程序段后,使原来的b0存储到bn-1,而原来的bn-1存储到b0,其余以此类推。(3) 试用do-while语句计算下列公式的近似值 当计算某项的绝对值小于0.0001时,该项及以后各项不再累加。这时就完成了s 的近似计算。试题五(15分)阅读下列程序说明和 c 程序,把应填入其中_(n)_处的字句写在答卷值的对应栏内。程序5说明 某服务公司征询顾客意见,以考核公司的位服务员的工作业绩。设服务员已按1、2、3、 顺序连续编号,顾客意见是顺序列出第一名(最佳)至第十名的服务员编号。设所收到意见信息已存于正文文件中,一位顾客的意见一行,服务员编号整数之间由空格符分隔,对应名次的服务员编号可以为0,已表示该名次空缺。若一行意见信息中有不是服务员编号的整数,也不是0,或有编号重复出现,或一行有十个以上编号,或不足十个编号(包括0),则该行意见信息作废。程序综合顾客对各服务员的名次评定情况,给每位服务员计分,各名次得分标准如下:名次 一 二 三 四 五 六 七 八 九 十得分 15 12 9 7 6 5 4 3 2 1程序最后顺序输出各服务员各名次所得票数和它的合计得分。程序5#include #define N 41#define FNAME “SOURCE.DAT”int mark =15, 12, 9, 7, 6, 5, 4, 3, 2, 1;int scoreN10; /* scoreij是 i 号服务员得j+1名的票数*/ char buf81, *p;FILE *fp;main( ) int i, j, k, c, d, error, b10;for(i=0; iN; i+) for(j=0; j10; j+) scoreij=0;if(fp=fopen(FNAME, “r”)=NULL) printf(“Cant open %s file.n”, FNAME); exit(0);p=fgets(buf, 80, fp);while(*p!=0&*p!=n) /* 读入非空行情况下循环 */ error=0; k=0; while(!error) while(*p= ) p+; /* 跳过空格符*/ if(*p=0|*p=n) error=_(1)_; break; if(*p9) error=1; break; /*有非法字符*/ if(k=10) error=1; break; /*有十个以上编码*/ c=0; /*译出一个编号*/ while(*p=0 & *p=N) error=1; break; /*非法编号*/ if (c!=0) for(i=0; _(3)_ ; i+) /*检查重复编号*/error= _(4)_; /*如有重复编号,则置出错标志*/ if (!error)for(i=0; ik; i+) if( bi _(5)_;p=fgets(buf, 80, fp);fclose(fp);for(i=1; iN, i+ ) /*输出结果*/ printf(“t%2d”, I );/*输出服务员编号*/for( d=0, j=0;j 10; j+); printf(“%4d”, scoreij); d+=scoreij*markj; /*求合计得分*/ printf(“%6dn”, d ); /* 输出合计得分*/printf(“nn”);试题六(15分)阅读下列

温馨提示

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

评论

0/150

提交评论