一、选择题
1、
在C语言中,下列叙述正确的是__________。
A.空字符串不占用内存,其内存空间大小是0
B.可以用关系运算符比较字符串的大小
C.连续两个双引号是合法的字符串常量
D.连续两个单引号是合法的字符常量
2、
若有语句:int x=12,y=8,z; z=0.8+x/y; 执行语句后z的值为__________。
A.1.8 B.1 C.2 D.2.4
3、
若有语句: int a,b; scanf("%d;%d",&a,&b); 如果把整数4赋给a,把整数5赋给b,应该输入__________。
A.4 5 B.4,5 C.45 D.4;5
二、程序填空题
1、
输入一行文字,找出其中大写字母、小写字母、空格、数字及其它字符各有多少。
#include "stdio.h"
int main()
{
char str[40],*p,sl=0,s2=0,s3=0,s4=0,s5=0;
gets(str);
p=str;
while(*p)
{
if( _____ 1 _____ ) sl++;
else if( _____ 2 _____ ) s2++;
else if( _____ 3 _____ ) s3++;
else if( _____ 4 _____ ) s4++;
else s5++;
p++;
}
printf("大写字母:%d 小写字母:%d 数字:%d 空格:%d 其它:%d\n",s1,s2,s3,s4,s5);
return 0;
}
三、写程序结果
1、
#include "stdio.h"
int main()
{
int i=0,a=0;
while(i<30)
{
for(;;)
if(i%10==0) break;
else i--;
i+=11;
a+=i;
}
printf("%d",a);
return 0;
}
运行结果是____________________。
2、
#include
"stdio.h"
int main()
{
int a[3][3]= {{0,1},{2,3},{4,5}},i,j,s=0;
for(i=1; i<3; i++)
for(j=0; j<=i; j++)
s+=a[i][j];
printf("%d",s);
return 0;
}
运行结果是____________________。
3、
#include <stdio.h>
int fun()
{
static int x=1;
x*=2;
return x;
}
int main()
{
int i,s=1;
for(i=1; i<=4; i++)
s*=fun();
printf("%d",s);
return 0;
}
运行结果是____________________。
4、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p;
int i;
p=(char*)malloc(sizeof(char)*20);
strcpy(p,"Thank ");
for(i=6;i>=0;i--)
putchar(*(p+i));
free(p);
return 0;
}
运行结果是____________________。
5、
#include <stdio.h>
int main()
{
FILE *fp;
int x[6]={0,1,2,3,4,5},i;
fp=fopen("test.dat","wb");
fwrite(x,sizeof(int),3,fp);
rewind(fp);
fread(x,sizeof(int),3,fp);
for(i=0; i<6;i++)
printf("%d",x[i]);
fclose(fp);
return 0;
}
运行结果是____________________。
四、程序填空
1、
已知公式如下:
float func(float x)
{
if(x<1)
return x;
else
if( _____ 1 _____ )
return x+5;
else
_____ 2 _____;
}
2、
编写函数,通过指针将一个字符串反向。如下程序的输出为:dcba
#include <stdio.h>
void strReverse(char *s)
{
char c;
char *p;
_____ 3 _____;
while(*p!='\0')
p++;
_____ 4 _____;
while(s<=p)
{
c=*s;
*s=*p;
s++;
*p=c;
_____ 5 _____;
}
}
int main()
{
char a[10]="abcd";
strReverse(a);
printf("%s",a);
return 0;
}
五、改错
1、
产生一个0-9之间的随机整数,要求用户猜这个整数。用户输入一个整数,程序判断是否与所产生的随机数相等,由屏幕显式判断结果。如果猜得不对,再次提示输入,进行判断,直到猜出这个数为止。以下程序只允许修改两行。
#include <stdio.h>
#include <math.h>
#include <time.h>
main()
{
int x,a=-1;
srand((unsigned)time(NULL)); /*随机种子*/
x=rand()%10; /*产生0-9的随机数*/
while(a!=x)
{
scanf("%d",a);
if(a=x)
puts("猜对");
if(a>x)
puts(“太大,请重试”);
if(a<x)
puts(“太小,请重试”);
}
}
2、
函数convertNum用于实现无符号十进制数到其它进制数的转换,转换结果的每一位以字符存储于字符数组s中(如十进制3转换为二进制后,数组s中存储的字符串为11),参数srclnt为待转换数据,d为转换的目标进制。函数convertNum转换成功返回1,失败返回0。以下程序只允许修改三行。
#include <stdio.h>
#include <stdlib.h>
#define M sizeof(unsigned int)*8
int convertNum(unsigned srclnt,int d,char s[])
{
static char digits[]="0123456789ABCDEF";
char buf[M+1];
int j,i=M;
if(d<2||d>16)
{
s[0]=’\0';
return 0;
}
buf[i]='\0';
do
{
buf[--i]=digits[srclnt/d];
srclnt=srclnt%d;
}while(srclnt);
for(j=0;buf[i]!=’\0';j++,i++)
{
s[j]=buf[i];
};
s[j+1]='\0';
return 1;
}
六、程序设计题
1、
编写程序用于从键盘读取一个字符串,将字符串中所有连续的数字转换为对应的整数并添加到链表中,整个字符串处理完毕后输出链表的内容。如输入为a25re776!jk321ss时,输出为25 776 321
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct IntData)
struct IntData
{
long data;
struct IntData *next;
};
/*将数据为data的新节点插入链表*/
struct IntData *addToList(long data,struct IntData * curTail)
{
struct IntData *p=(struct IntData *)malloc(LEN);
p->data=data;
p->next=NULL;
if(curTail!=NULL)
__________ 1 __________
return p;
}
struct IntData *picklntegersFromStr(char *str)
{
char ch;
long data=0;
/*hasData用于标识当前是否正在处理数字字符*/
/*isAdd标识处理的整数数据是否被添加到链表*/
/*isFirst标识是否是添加到链表的第一个数据*/
int hasData=0,isAdd=0,isFirst=1;
/*tail指向链尾,head指向链头*/
struct IntData *head=NULL,*tail=NULL,*p;
while((ch=*str)!='\0')
{
if(ch>='0'&&ch<='9')
{
__________ 2 __________
hasData=1;
isAdd=0;
}
else
{
if(hasData&&!isAdd)
{
p=addToList(data,tail);
__________ 3 __________
if(isFirst)
{
__________ 4 __________
tail=p;
isFirst=0;
}
else
tail=p;
hasData=0;
isAdd=1;
}
}
str++;
}
if(hasData&&!isAdd)
{
p=addToList(data,tail);
if(isFirst)
__________ 5 __________
}
return head;
}
void printList(struct IntData *head)
{
struct IntData *p=head;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
char str[100];
struct IntData *head=NULL;
gets(str);
head=picklntegersFromStr(str);
printList(head);
return 0;
}
参考答案:
一、选择题
1—3 C、B、D
二、程序填空题
1、*p>='A' && *p<='Z' 2、*p>='a' && *p<='z'
3、*p>='0' && *p<='9' 4、*p==' ' 或者
三、写程序结果
1、 63 2、 14 3、 1024 4、 □knahT□(□为空格)
5、 012345
分析:此题有问题,因为wb的方式,对于文件同时读写,会无效
改为fp=fopen("test.dat","wb+"); fwrite(x+2,sizeof(int),3,fp);
则答案为:234345
四、程序填空
1、 x>=1 && x<10 2、 return 8*x*x-32
3、 p=s 4、 p-- 5、 p--
五、改错
1、
L11 scanf("%d",&a);
L12 if(a==x)
2、
L17 buf[--i]=digits[srclnt%d];
L18 srclnt=srclnt/d;
L24 s[j]='\0';
第四个问题,此题第23句多了一个;
六、程序设计题
1、curTail->next=p; 2、data=data*10+(ch-'0');
3、data=0; 4、head=p;
5、head=p;