2000~2001学年《程序设计基础-C》试卷一、单项选择题(每小题 2 分,共 30 分)1. C 语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。
A、‘{‘ 和’}’B、‘[‘和’]’C、“/*”和”*/”D、“*/”和”/*”2.下列运算符中,优先级最低的是_____。
A、*B、!=C、+D、=3.若变量已正确定义,表达式 (j=3, j++) 的值是_____ 。
A、3B、 4C、5D、04.已知字符‘a’ 的ASCII码为 97 ,执行下列语句的输出是_____。
printf ("%d, %c", ’b’, ’b’+1 ) ;A、98, bB、语句不合法C、98, 99D、 98, c5.表达式strcmp(“box”, “boss”) 的值是一个_______。
A、正数B、负数C、 0D、不确定的数6.数组定义为 int a[3][2]={1, 2, 3, 4, 5, 6},数组元素_____的值为6。
A、a[3][2]B、a[2][1]C、a[1][2]D、a[2][3]7.要调用数学函数时,在#include命令行中应包含_____。
A、”stdio.h”B、”string.h”C、”math.h”D、”ctype.h”8.判断i和j至少有一个值为非0的表达式是_____。
A、 i!=0 && j!=0B、i*j!=0C、!(i==0 || j==0)D、i&&j9.若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。
A、scanf(”%d,%f”, &a, &c);B、scanf(”d=%d, c=%f”, &a, &c);C、scanf(”%d%f”, &a, &c);D、scanf(”%d%f”, a, c);10.若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于_____。
A、p++B、x++C、*(p++)D、&x++11.若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, _____是正确的。
A、p2=p1;B、p2=**p1;C、p2=&p1;D、p2=*p1;12.下列程序段的输出是_____。
int c[]={1, 3, 5};int *k=c+1;printf("%d", *++k);A、 3B、 5C、 4D、613.不正确的赋值或赋初值的方式是______。
A、char str[]="string";B、char str[7]={'s', 't', 'r', 'i', 'n', 'g'};C、char str[10];str="string";D、char str[7]={'s', 't', 'r', 'i', 'n', 'g', ’\0’};14.对于以下结构定义,++p->str中的++加在_____。
struct {int len;char *str;} *p;A、指针str上B、指针p上C、str指的内容上D、以上均不是15.对于如下说明,语法和语义都正确的赋值是_____。
int c, *s, a[]={1, 3, 5};A、c=*s;B、 s[0]=a[0];C、s=&a[1];D、 c=a;二、填空题(每小题 2 分,共 20 分)1.写出下列程序段的输出结果。
float x1, x2;x1=3/2;x2=x1/2;printf("%d, %.1f", (int)x1, x2) ;2.表达式 (7<<1>>2^2 ) 的值是_______。
3.写出下列程序段的输出结果。
#define A 10#define B (A<A+2)-2printf("%d", B*2);4.写出判断字符变量c是英文字母的表达式。
5.写出下列程序段的输出结果。
int k, x;for (k=0, x=0; k<=9&&x!=10; k++)x+=2;printf ("%d, %d", k, x) ;6.写出下列程序段的输出结果。
printf(“%d, %d”, NULL, EOF);7.对于以下递归函数f,调用 f (3) 的返回值是_____。
f (int n){ return ((n>0) ? 2*f(n-1)+f(n-2) : -1); }8.写出下列程序段的输出结果。
char str[]="hello\tworld\n";printf("%d, %c\n", sizeof(str), *(str+10));9.输入12345#后,写出下列程序的输出结果。
void main(){ char c;for(c=getchar(); getchar()!=’#’; c=getchar())putchar(c);}10.执行程序find –nx ould text.txt时,*++argv[1]的值是_______。
三、程序阅读题(每题5分,共20分)1.若输入 3 1 2 3 <回车> , 则以下程序的输出结果是_______。
#include "stdio.h"void main(){ int i, j, n, a[10];scanf("%d", &n);for (i=0; i<n; i++)scanf("%d",&a[i]);for (i=0; i<n; i++)for (j=0; j<n; j++)printf("%d, ", a[(i+j)%n]);}2.若输入89 76 24 25 9 8 11 16 35 4 <回车> , 则以下程序的输出结果是_______。
#include "stdio.h"#define N 10main(){int x[N], y1[N], y2[N];int i, j, n1, n2, t, p;n1=n2=0;for(i=0;i<N;i++){scanf(“%d”,& x[i]);if(x[i] % 2==0) y1[n1++]=x[i];else y2[n2++]=x[i];}for(i=1; i<n1; i++)for(j=0; j<n1-1; j++)if(y1[j]>y1[j+1]){t=y1[j]; y1[j]=y1[j+1]; y1[j+1]=t;}for(i=0; i<n2-1; i++){p=i;for(j=i+1; j<n2; j++)if(y2[p]<y2[j]) p=j;if(p!=i){t=y2[i]; y2[i]=y2[p]; y2[p]=t;}}for(i=0; i<n1; i++) printf("%d, ", y1[i]);for(i=0; i<n2; i++) printf("%d, ", y2[i]);}3.以下程序的输出结果是_______。
#include< stdio.h>int z;void p(int *x, int y){ ++*x;y--;z=*x+y+z;printf("%d, %d, %d#", *x, y, z);}void main(){ int x=1, y=5, z=9;p(&x, y);printf("%d, %d, %d#", x, y, z);}4.若输入 -6+15*3/5=<回车> , 则以下程序的输出结果是_______。
#include <stdio.h>void main(){int m=0, sum=0;char c, oldc='+';do {c=getchar();if(c<='9'&&c>='0') m=10*m+c - '0';else {if(oldc=='+') sum += m;else sum -= m;m=0;oldc=c;printf("%d, ", sum);}} while(c!='=');}四、程序填空题(每空 2 分,共 20 分)1.下列程序的功能是创建单向链表。
#include <stdio.h>#include <alloc.h>struct link {char name[10];int mark;struct link * next;};void insert(char *, int);struct link * head = NULL;main(){char name[10];int mark;struct link * t;while ( 1 ) {scanf("%s %d", name, &mark);if ( strcmp(name, "#") == 0 ) break;______(1)_______;}for (t=head; ______(2)_______)printf("<%s>: %d\n", t->name, t->mark);}void insert(char * name, int mark){struct link * p;p = ______(3)_______ ;strcpy(p->name, name);p->mark = mark;______(4)_______;if ( head != NULL ) ______(5)_______;head = p;}2.prog.c是带命令行参数的程序。
运行prog filename时,将文本文件filename中的内容原样输出;运行prog -u filename时,将文本文件filename中的所有字母以大写方式输出(其余字符原样输出);运行prog -d filename时,只将文本文件filename中的数字输出。