台州学院往年C语言程序设计期末试题

本试卷为台州学院往年C语言程序设计期末试题,题目包括:单项选择题,填空题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,结构体,程序题。

C语言程序设计期末试题

一、单项选择题 (共20题,每题2分,共计40分)

(  B  )
1、与"y=(x>0?1:x<0?-1:0)"; 的功能相同的if 语句是________。
A、if(x>0)y=1;
else if(x<0)y=1;
else y=0;
B、if(x)
if(x>0)y=1;
else if(x<0)y=-l;
else y=0;
C、y=-l
if(x)
if(x>O)y=1;
else if(x=-0)y=0;
else y=-l;
D、y=0;
if(x>=0)
if(x>=0)y=1;
else y=-l;
(  C  )
2、下面程序的运行结果是________。
main( )
{
int m=7,n=5,i=1;
do
{
if (i%m==0);
if (i%n==0)
{
printf("%d\n",i);
break;
}
i++;
}
while(i!=0);
}
A、7
B、6
C、5
D、4
(  C  )
3、以下函数按每行8个输出数组中的数据
void fun( int *w, int n)
{
int i;
for(i=0;i<n;i++)
{
________ printf("%d",w[i]);
}
printf("\n");
}
下列划线处应填入的语句是________。
A、if(i/8==0)printf(“\n”);
B、if(i/8==0)continue;
C、if(i%8==0)printf(“\n”);
D、if(i%8==0)continue;
(  A  )
4、设有如下程序段 char s[20]= "bejing",*p; p=s; 则执行p=s; 语句后,以下叙述正确的是________。
A、可以用*p表示s[0]
B、s数组中元素的个数和p所指字符串长度相等
C、s和p都是指针变量
D、数组s中的内容和指针变量p中的内容相等
(  D  )
5、若有定义: int a[3][4]; 不能表示数组元素 a[1][1] 。
A、*(a[1]+1)
B、*(&a[1][1])
C、(*(a+1)[1])
D、*(a+5)
(  B  )
6、设有以下函数:
#include <stdio.h>
int f(int a)
{
int b=0,c;
c=3;
b++ ;
c++;
return (a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是 ______.
void main()
{
int i;
for(i=0;i<3;i++)
printf("%d\n",f(i));
}
A、5 6 7
B、5 7 9
C、3 4 5
D、3 3 3
(  B  )
7、以下不正确的定义语句是________。
A、double x[5]=1.0,2.0,3.0,4.0,5.0;
B、int y[5]=0,1,2,3,4,5;
C、char c1[]='1','2','3','4','5';
D、char c2[]='a','b','c';
(  C  )
8、以下程序的输出结果是
#include<stdio.h>
struct st
{
int x;
int *y;
}
*p;
int dt[4]= {10,20,30,40 };
struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{
p=aa;
printf("%d\n",++(p->x));
}
A、10
B、11
C、51
D、60
(  A  )
9、有以下程序:
main()
{
int a=3,b=4,c=5,d=2;
if(a>b) if(b>c) printf("%d",d+++ 1);
else printf("%d",++d+1);
printf("%d\n",d);
}
程序运行后的输出结果是 ______。
A、2
B、3
C、43
D、44
(  C  )
10、下列选项中,表示字符串末尾的结束标志是________。
A、'\n'
B、'\r'
C、'\0'
D、NULL
(  C  )
11、以下scanf函数调用语句中不正确的是__。
struct pupil
{
char name[20];
int age;
int sex;
}
pup[5], *p=pup;
A、scanf("%s", pup[0].name);
B、scanf("%d", &pup[0].age);
C、scanf("%d", p->age);
D、scanf("%d", &(p->sex));
(  B  )
12、在c语言中以下说法不正确的是________。
A、实参可以是常量、变量、表达式
B、形参可以是常量、变量、表达式
C、实参可以为任意类型
D、形参应与其对应的实参类型一致
(  C  )
13、以下二维数组c 的定义形式是________。
A、int c [3][]
B、float c [ 3,4]
C、double c [3][ 4]
D、float c 3)4)
(  C  )
14、c 语言中的标识符第一个字符。
A、必须为字母
B、必须为下划线
C、必须为字母或下划线
D、可以是字母, 数字和下划线中任一种字符
(  C  )
15、下列程序段的输出是____。int c[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);
A、3
B、4
C、5
D、6
(  D  )
16、表达式 *((int *)(p+1)+2)的值时_______.
static struct
{
int x, y[3];
}
a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p;
p = a+1;
A、3
B、7
C、10
D、11
(  C  )
17、有以下程序
#include <string.h>
main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r);
strcat(p,q);
printf("%d\n", strlen(p));
}
程序运行后的输出结果是______。
A、9
B、8
C、11
D、12
(  C  )
18、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低的顺序依次为____
A、算术运算、赋值运算、关系运算
B、关系运算、赋值运算、算术运算
C、算术运算、关系运算、赋值运算
D、关系运算、算术运算、赋值运算
(  A  )
19、设n 为整型变量,则循环语句for(n=10;n > 0;n--) 的循环次数为________。
A、10
B、9
C、11
D、12
(  A  )
20、下述程序段的输出结果是________。int a=3;
b=4;
int c=a^b >> 3;
printf(''%d'',c)
A、3
B、4
C、5
D、6

二、填空题 (共10题,每题2分,共计20分)

1、以下程序的输出结果是 ________ 。
main()
{
char s[]="abcdef";
s[3]=‘\0';
printf("%s\n",s);
}
2、共用体类型变量的定义关键字是________。
3、c语句分为______大类。
4、c语言中与指针有关的两个运算符是&与________。
5、设a=5,b=2,则表达式"!a+b"的值是________。
6、下列程序段的运行结果是________。
main()
{
int n,s=0 ;
for(n=1; n<=5; n++)
{
if(n%2==0) continue;
s=s+n;
}
printf("%d\n", s);
}
7、C语言替换字符的函数是什么?
8、在c 语言中,二维数组在内存中的存放顺序是________。
9、下列给定程序中,函数ptoc()的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入前两个字符中,插入后前3个字符依然有序;
再把第4个字符插入前三个字符中,待排序的字符串已 在主函数中赋予。 请添加合适的语句____________,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#define M 80
void proc(char*arr)
{
int i,j,n;
char ch;
n=strlen(arr);
for(i=1;i<n;i++)
{
ch=arr[i];
j=i-1;
while(______________)
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=ch;
}
}
void main()
{
char a[M]="QWERTYUIOPASDFGHJKLMNBVCXZ";
printf("The original string:%s\n",a);
proc(a);
printf("The string after sortin9: %s\n\n",a);
}
10、下面程序的输出结果是:
#include <stdio.h>
void add(int *p, int n)
{
int *pend = p + n;
for( ; p<pend; p++) *p += 10;
}
void main( )
{
int a[5]={1,2,3,4,5}, *q = a;
add(q, 5);
for(q=a; q < a+5; q++) printf("%4d", *q);
}

三、编程题 (共3题,每题0分,共计40分)

1、编写程序:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
2、若有以下银行卡信息:
struct card{
int id;//银行卡号
int bonus; //金额
};
请编写程序,从键盘输入5条银行卡记录,使用结构体数组存
储这些数据,并按金额升序排序,输出排序后的结果。
【输入形式】5条银行卡记录分行输入,每行数据用空格间隔
【输出形式】分5行输出数据,每行数据均使用空格间隔
【输入样例】
1001 20
1002 80
1003 50
1004 10
1006 40
【输出样例】
1004 10
1001 20
1006 40
1003 50
1002 80
3、任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。