一、选择题
1、
下列选项中正确的C语言变量定义是__________。
A.char a1='A', a2=A; B.unsigned long a=1000;
C.float a1=a2=10.0; D.double a=0.618,a=3.14;
2、
假设有:float a=5,b=a+5/2;则执行语句printf("%f",b)的输出结果为__________。
A.7.500000 B.7 C.5.000000 D.7.000000
3、
有输入语句:scanf("a=%d,b=%d",&a,&b);为使变量a的值为1,b的值为2,正确的数据输入方式是__________。
A.12 B.1,2 C.a=1,b=2 D.a=1 b=2
二、填空题
1、
在C语言中,可以使用函数 _____ 1 _____ 来获取字符串的长度,使用函数_____ 2 _____来对两个字符串进行比较,使用宏定义命令_____ 3 _____来定义宏,使用文件包含命令_____ 4 _____实现“文件包含”操作。
三、综合应用题
1、
民警小张在某个案件中带回4个嫌疑人A,B,C,D,其中有一位是小偷,现在小张分别对4个嫌疑人进行询问:
A说:我不是罪犯;
B说:C是罪犯;
C说:D是罪犯;
D说:我不是罪犯而且B也不是罪犯。
已知其中3人说的是真话,1人说的是假话,请根据以上信息帮助小张找出罪犯。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i;
char who='A';
int isFound=0;
for(i=0; _____ 1 _____ ;i++)
{
int sum=0;
who= _____ 2 _____ ;
if(who!='A') sum++;
if(who=='C') sum++;
if(who=='D') sum++;
if( _____ 3 _____ ) sum++;
if( _____ 4 _____ )
{
printf("罪犯是%c\n",who);
isFound=1;
}
}
if(!isFound)
printf("没有找到符合条件的人");
}
四、写程序结果
1、
#include <stdio.h>
int main()
{
int a=7,b=3,c=2;
int d=(a>b!=c);
printf("%d",d);
return 0;
}
运行结果是____________________。
2、
#include <stdio.h>
main()
{
int c;
while((c=getchar())!='\n')
switch(c-'2')
{
case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
}
当输入为125时,运行结果是____________________。
3、
#include <stdio.h>
static int f=1;
int func(int n)
{
f=f+n;
return f;
}
main()
{
int i;
for(i=2;i<=3;i++)
printf("%d",func(i));
}
运行结果是____________________。
4、
#include <stdio.h>
main()
{
int a[9]={1,2,3,4,5,6,7,8};
int *p=a;
int sum=0;
for(;p<a+8;p++)
if(*p%2==0)
sum=sum+*p;
printf("%d",sum);
}
运行结果是____________________。
5、
#include <stdio.h>
void f(int *q)
{
int i;
for(i=0;i<3;i++)
(*q)--;
}
main()
{
int a[5]={8,7,6},i;
f(a);
for(i=0;i<3;i++)
printf("%d",a[i]);
}
运行结果是____________________。
五、程序填空
1、
下面的程序从文本文件test.txt逐个读入字符,并显示在屏幕上。
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fp;
char ch,*filename="test.txt";
if((fp= _____ 1 _____(filename,"r"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
while(! _____ 2 _____(fp))
{
ch=fgetc(fp);
putchar(ch);
}
fclose(fp);
}
2、
以下程序的功能是:读入一行字符,以回车结束,按输入时的逆序使用单向链表进行存储,先输入的位于链表尾,然后再遍历输出链表,如输入abc↙,链表结构如图所示,程序最后输出cba.
#include "stdlib.h"
#include "stdio.h"
struct node
{
char value;
struct node *link;
};
int main()
{
struct node *top,*p;
char c;
top=NULL;
while((c=getchar())_____ 3 _____)
{
p=(struct node *)malloc(sizeof(struct node));
p->value=c;
p->link=top;
_____ 4 _____
}
while(top)
{
p=top;
top=top->link;
putchar(_____ 5 _____);
}
return 0;
}
六、改错
1、
矩阵乘法是指两个矩阵相乘,生成一个新矩阵,其乘法公式如下:
以下程序实现了两个2×2的矩阵相乘,只对程序中的2行代码进行修改,使其可以正确运行。
#include <stdio.h>
#define M 2
#define N 2
#define K 2
int main()
{
int a[M][K]= {1,-1,0,2};
int b[K][N]= {4,0,2,5};
int c[M][N];
int i,j,l;
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
for(l=0; l<K; l++)
{
c[i][j]=a[i][l]*b[l][j];
}
}
}
return 0;
}
2、
某班举行歌唱比赛,赛后需要显示成绩最高的选手名字和成绩,以下程序实现了查找得分最高选手的功能,只对程序中的3行代码进行修改,使其可以正确运行。
#include <stdio.h>
#define MAX 3
struct PLAYER
{
char *name;
float score;
} Player;
int main()
{
Player players[]= {{"丁一",90.3}, {"陈二",95.8}, {"张三",89.6}};
Player *player;
Player topPlayer=players[0];
for(player=players; player<players+MAX;player++)
{
if(player.score>topPlayer.score)
{
topPlayer=player
}
}
printf("Top Player is %s,score is %6.2f",topPlayer.name,topPlayer.score);
return 0;
}
七、程序设计题
1、
折半查找也称为二分查找,适用于有序数组,其查找的基本过程是:先确定待查记录所在的范围,然后逐步缩小范围,直到找到,或找不到该记录为止。假定数组按照升序排列,对于给定值K,从数组中间位置开始比较,如果当前数据元素的值等于k,则查找成功。否则,若k小于当前数据元素的值,则在数组的前半部继续查找;反之,则在数组的后半部继续查找,依次重复进行,直至获得查找成功或不成功的结果。请补充完成下列程序中的相应部分:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int BinarySearch(int key,int data[]);
int key=0;
printf("请输入要查找的数:");
scanf("%d",&key);
int data[10]= {1,3,5,7,8,9,13,18,22,28};
int ret=BinarySearch(key,data);
if(ret>=0)
printf("\n %d 是数组中的第%d个数\n",key,ret+1);
else
printf("\n %d在数组中未找到!\n",key);
system("pause");
return 0;
}
int BinarySearch(int key,int data[])
{
int low=0,high=9,middle;
while(______1______) /*查找结束条件*/
{
int middle=______2______; /*获取数组中间位置*/
if(______3______) /*如查当前数据元素的值等于k*/
return middle; /*返回所在位置*/
if(key<data[middle]) /*如果若k小于当前数据元素的值*/
______4______; /*在数组的前半部继续查找*/
else
______5______; /*在数组的后半部继续查找*/
}
return -1; /*返回查找不成功标记*/
}
参考答案:
一、选择题
1—3 B、D、C
二、填空题
1、strlen()、strcmp()、#define 、#include
三、综合应用题
1、i<=3 2、'A'+i 3、who!='D' && who!='B'
4、sum==3 5、 876
四、写程序结果
1、 1 2、 36687 3、 36 4、 20
5、 576
五、程序填空
1、 fopen 2、feof
3、!='\n' 4、top=p; 5、p->value
六、改错
1、
L09 int c[M][N]={0};
L17 c[i][j]+=a[i][l]*b[l][j];
2、
L03 typedef struct PLAYER
L15 if(player->score>topPlayer.score)
L17 topPlayer=*player;
七、程序设计题
1、low<=high 2、 (low+high)/2
3、 key==data[middle] 4、high=middle-1
5、 low=middle+1