一.判断题:
1-1
局部变量如果没有指定初值,则其初值不确定。 (2分)
T
F
1-2
实参向形参进行数值传递时,数值传递的方向是单向的,即形参变量值的改变不影响实参变量的值。(2分)
T
F
1-3
文件的读函数是从输入文件中读取信息,并存放在内存中。(2分)
T
F
1-4
C语言中,编译预处理后,所有的符号常量名和宏名都用相应的字符串替换。(2分)
T
F
1-5
用typedef可以增加新类型。(2分)
T
F
答案:
T T T T F
二.单选题:
2-1
以下数组定义中错误的是( )。(2分)
A.
int x[][3]={0};
B.
int x[2][3]={{1,2},{3,4},{5,6)};
C.
int x[][3]={{1,2,3},(4,5,6)};
D.
int x[2][3]={1,2,3,4,5,6};
2-2
以下不正确的赋值或赋初值的方式是( )。(2分)
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’};
2-3
以下枚举类型的定义中,正确的是()。(2分)
A.
enum a={one,two,three};
B.
enum a{one=9,two=-1,three};
C.
enum a={"one","two","three"};
D.
enum a{"one","two","three"};
2-4
若定义pf为指向float类型变量f的指针,下列语句中__是正确的。(2分)
A.
float f, *pf = f;
B.
float f, *pf = &f;
C.
float *pf = &f, f;
D.
float f, *pf =0.0;
2-5
在单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行( )(2分)
A.
s->next=p; p->next=s;
B.
s->next=p->next; p=s;
C.
s->next=p->next; p->next=s;
D.
p->next=s; s->next=p;
答案:
B C B B C
三.函数题:
递归求Fabonacci数列 (15分)
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n?2)+f(n?1) (n≥2),其中f(0)=0,f(1)=1。
函数接口定义:
int f( int n );
裁判测试程序样例:
#include
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
8
参考答案:
int f( int n )
{
do
{
if(n==0)
{
return 0;
break;
}
else
if(n==1)
{
return 1;
break;
}
else
{
return(f(n-2)+f(n-1));
}
}while(n>=0);
}
四.编程题:
4-1 成绩转换 (15分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A
参考代码:
#include
#include
main()
{
int a;
scanf("%d",&a);
if(a>=90)
printf("A");
else
if(a>=80)
printf("B");
else
if(a>=70)
printf("C");
else
if(a>=60)
printf("D");
else
printf("E");
}
4-2 输出100~200之间素数 (15分)
求出100~200之间的全部素数,每行输出8个数,每个数宽度为5列。
输出格式:
每行输出8个素数数,每个素数宽度为5列。
输出样例:
101 103 107 109 113 127 131 137
139 149 151 157 163 167 173 179
181 191 193 197 199
参考代码:
#include
#include
int sushu(int a);
int sushu(int a)
{
int i,flag=1;
if(a==1)
return 0;
else
{
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
{
flag=0;
break;
}
}
if(flag==1)
return 1;
else
return 0;
}
}
main()
{
int i,j=0;
for(i=100;i<=200;i++)
{
if(sushu(i)==1)
{
printf("%5d",i);
j++;
if(j==8 || j==16||j==24)
printf("\n");
}
}
}
4-3 交换最小值和最大值 (15分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
参考代码:
#include
#include
int main()
{
int a[10],b[10],n,i,j,k,t;
scanf("%d",&n);
for(i=0;i
{
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i
{
k=i;
for(j=i+1;j
{
if(a[k]
k=j;
}
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i
{
if(a[n-1]==b[i])
{
t=b[0];
b[0]=b[i];
b[i]=t;
}
}
for(i=0;i
{
if(a[0]==b[i])
{
t=b[n-1];
b[n-1]=b[i];
b[i]=t;
}
}
for(i=0;i
{
printf("%d ",b[i]);
}
}
4-4 计算职工工资 (20分)
给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。
输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00
参考代码:
#include
struct str
{
char name[20];
float ji;
float fu;
float zhi;
float shi;
}t[10000];
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i
{scanf("%s %f %f %f",t[i].name,&t[i].ji,&t[i].fu,&t[i].zhi);
t[i].shi=t[i].ji+t[i].fu-t[i].zhi;
}
for(i=0;i
{
printf("%s %.2f\n",t[i].name,t[i].shi);
}
}