一、选择题(本题有10小题,每题1分,共计10分)
(在每小题列出的四个选项中,选出一个正确答案)
1.以下叙述正确的是()。
A)main()必须是程序的第一行
B)C程序每一行只能写一条语句
C)C程序可以由一个或多个函数组成
D)在编译时可以发现注释中的拼写错误。
2.下面选项中()是不合法的C用户标识符。
A)user
B)switch
C)_345
D)Abc
3.结构化程序设计所规定的三种基本控制结构是()。
A)输入、处理、输出
B)树形、网形、环形
C)顺序、选择、循环
D)主程序、子程序、函数
4.设有说明:charw;intx;f1oaty;doublez;则表达式w*x+z-y值的数据类型为()。
A)float
B)double
C)int
D)char
5.下列运算符中()的优先级最低。
A)&&
B)!
C)+
D)=
6.C语言中的文件类型划分为()。
A)索引文件和文本文件两种
B)ASCII文件和二进制文件两种
C)只有文本文件一种
D)只有二进制文件一种
7.以下对C语言函数的描述中,不正确的是()。
A)C语言中,函数可以嵌套定义
B)C语言中,函数可以递归调用
C)C语言中,函数可以没有返回值
D)C语言程序由函数组成
8.若有以下说明和语句:inta[10],*p1,*p2;p1=a;p2=&a[5];则p2-p1的值为()。
A)5
B)6
C)10
D)没有指针与指针的减法
9.定义一维数组外部变量a的正确格式是()。
A) int a(10);
B)int n=10, a[n];
C)int a[ ];
D)#define SIZE 10
int a[SIZE];
10.已有如下定义:
struct node { int data;
struct node *next;
}*p,*q;
并已建立了如图所示的单向链表,p,q分别指向图中所示的结点,将q所指的结点插入到链表末尾组成单向链表,以下不能实现该功能的程序段是()。
A)(*p).next=q;(*q).next=NULL;
B)q->next=p->next;p->next=q;
C)q->next=NULL;p->next=q;
D)p->next=q;q->next=p->next;
二、阅读下列程序,写出程序运行结果(本题有4小题,每小题4分,共计16分)
1、main( )
{ int i,j,m,n;
int a=12,b=5,c=23;
i=9; j =12;
m=--i; n=j--;
printf(“%d,%d,%d,%dn”,i,j,m,n);
printf(“%dn”,a%=2+5);
printf(“%d”,c/=b);
}
2、main()
{ int i,sum;
for(sum=0,i=7;i>=4;i--)
switch ( i ){
case 4: case 6: sum += 2; break;
case 5: case 7: sum += 1; break;
}
printf(“sum=%d”,sum);
}
3、main()
{
static int a[][4]={{1,2,3},{4,5},{6},{0}};
int k;
for(k=0;k<=3;k++)
printf("%4d", a[k][k]);
}
4、 main()
{ static int a[]={1,2,3,4,5,6};
int *p;
p=a;
*(p+3) +=4;
for(p=a;p
#define EPS (3)
main()
{ double x, y=1, a;
printf(“请输入要开方的数。n”);
scanf(“%lf”, (4) );
do {
x = (5) ; /*保存前次近似根*/
y= (6) ; /*计算本次近似根*/
}while ( fabs(y-x) (7) EPS);
printf(“ %lf 的平方根是 %10.5lfn”,a,y);
}
3、【程序说明】输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
# (8)
main()
{ char ch;
int letter, digit, space, other;
(9) ;
digit=0; space=0; other=0;
while ((ch=getchar()) (10) ‘n’)
if (ch>=’a’ && ch<=’z’>=’A’ && ch<=’Z’) letter++;
else if ( (11) ) digit++;
else if (ch==‘ ’) (12) ;
else other++;
printf(“letter=%4d, digit=%4d, space=%4d, other=%4dn”, letter, digit, space, other);
}
4、【程序说明】本程序的功能是以如下格式打印杨辉三角形的前10行。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
#define LASTROW 10
main()
{ int row,col,a[11];
a[1]=1;
printf("%4dn",a[1]);
for(row=2;row<=lastrow];row++)
{
a[row]=1;
for( (13) )
a[col]=a[ (14) ]+a[ (15) ];
for(col =1; (16) ; col ++)
printf("%4d", a[col]);
(17) ;
}
}
5、【程序说明】本题中的函数encode()和decode()分别实现对字符串的变换和复原.变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
(1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中.
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中
(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中.
(4)以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔.例如:encode()函数对字符串26a3t2的变换结果为666_a_tttt_2
复原函数decode()做变换函数encode()的相反的工作.即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符.
假定调用变换函数encode()时的已知字符串中不含下划线字符.
int encode(char *instr,char *outstr)
{ char *ip,*op,c;int k,n;
ip=instr; op=outstr;
while (*ip) {
if (*ip>='0'&&*ip<='9'&&*(ip+1)) {
n= (18) ;
c= (19) ;
for (k=0;koutstr) op--;
(21) ;
return op - outstr;
}
int decode(char *instr,char *outstr)
{ char *ip,*op,c; int n;
ip=instr; op=outstr;
while (*ip) {
c=*ip; n=0;
while (*ip==c&&n<10) {ip++; n++; }
if ( (22) ) *op++='0'+n-1;
*op++=c;
if ( (23) ) ip++;
}
*op='';
return op - outstr;
}
三、用C语言编写下列程序(共78分)。
1、给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。(15分)
2、用选择法或冒泡法对输入的50个字符(按ASCII码由小到大)进行排序。(15分)
3、输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;找出最高的分数所对应的学生和课程;③求平均分方差:(28分)
,xi为某一学生的平均分。
4、编写一个函数int prism(int n),函数的功能为判定n是否为素数(所谓素数是指除了能够被1和自身整除外不能被其它任何数整除的数),如果n为素数则返回值1,否则返回0。把一个大于4的偶数分解为两个素数和的形式,并且把分解的结果写入一个磁盘文件result.dat中去。(如8=3+5)。(20分)
一、 选择题
1.C 2.B 3.C 4.B 5.D 6.B 7.A 8.A 9. D 10.D
二、阅读下列程序,写出程序运行结果
1、 8,11,8,12
5
4
2、sum=6
3、1 5 0 0
4、1 2 3 8 5 6
三、程序填空
(1) str[i] or *(str+i)
(2) i
(3) 1e-6
(4) &a
(5) y
(6) y=(y+a/ y)/2 or y=(x+a/ x)/2
(7) >
(8) include
(9) letter=0
(10) !=
(11) ch>=’0’ && ch<=’9’
(12) space++ 或 ++space 或 space=space+1
(13) col=row-1;col>=2;col--
(14) col
(15) col-1
(16) col<=row
(17) printf(“n”)
(18) *ip - '0' + 1 或 *ip-47
(19) *++ip
(20) *op++=*ip
(21) *op=''
(22) n>1
(23) *ip=='_'