2015年湖南大学招收硕士研究生入学考试试题
一、单项选择题 ( 3x10=30 )
-
在C语言中,下面有关for循环的正确描述是 (D) A、for循环只能用于循环次数已经确定的情况 B、for 循环是先执行循环体语句,后判断表达式 C、在for循环中,不能用break语句跳出循环体X D、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 -
C语言程序中必须有的函数是 (B) A、#include “stdio.h” B、main C、printf D、scanf -
在C语言中,引用数组元素时,其数组下标的数据类型允许是 ( C) A、整型常量 B、整型表达式 C、整型常量或整型表达式 D、任何类型的表达式 -
若已定义x和y是整型变量,x=2 ;则表达式y=3.75+x/2的值是 ( C) A、6.5 B、6 C、4 D、5.0 -
对于语句int *px[10],以下说法正确的是 (B) A、px是一个指针,指向一个数组,数组的元素是整型 B、 px是一个数组,其数组的每一 个元素都是指向整数的指针 C、A和B均错,但在C语言中允许用 *px来定义数组 D、C语言不允许有这样的定义方式 -
一个算法应该具有“确定性“等5个特性,下面对其他特性的描述中错误的是 ( B) A、有零个或多个输入 B、 只能有零个或者一 个输出 C、有穷性 D、有效性 -
以下说法中正确的是 ( C) A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在mian( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 -
下面程序的输出是 (B)
#include <stdio.h>
int m=13;
int fun(int x,int y)
{
int m=3;
return(x*y-m) ;
}
void main()
{
int a=7 ,b=5;
printf%d\n",fun(a,b)/m);
}
A、1 B、2 C、7 D、10
-
以下数组定义中不正确的是 ( D) A、int a[2]; B、int b[ ] ={ 0,1,2,45,8 }; C、float a[100][100]; D、int d[3][3]= {({1,2},{1,2,3},{1,2.3.4}}; -
下列程序段的输出结果是 ( C)
float x=213.82631;
printf(“%3d" ,(int)x);
A、213.82 B、213.83 C、213 D、3.8
二、填空题( 3*10=30 )
- 计算机内部运算使用的数是____进制。//二
- C语言源程序的基本单位是_______,它由多条语句组成,用来实现一个特定功能,通过调用来使用。//函数
- 假定x=10,则表达式
x< = 10?70:34 的值为_____//70 - 若x=5,y= 10,则计算
y*=++x 表达式后,x和y的值分别是____和______//6 60 - 数值常量0x62对应的十进制值是_____ //6*16+2=98
- 在C语言程序的循环体中,使用_______语句可以跳出循环体,执行循环体后面的语句。//Break
- 下面程序的运行结果是
#include<stdio.h>
main( )
{
int i,x,y;
i=x=y=0;
do
{
++i;
if( i%2!=0)
{x=x+i;i++;};
y=y+i++;
}while(i<=7);
printf("x=%d,y=%d\n",x,y);
}
- 请填写下列程序中的两个语句,每个语句作为一个填空,用辗转相除法求两个整数的最大公约数
main( )
{
int a,b,r;
scanf("%d%d',&a ,&b);
__________;
while(r!=0)
{
a=b;
_____;
r=a%5;
}
printf(%d",b);
}
三、判断题〈2*10=20 )
-
递归调用不能直接或者间接调用该函数本身。× -
计算机不能直接识别和执行用C语言写的源程序, 必须用编译程序把C源程序翻译成二进制形式的目标程序后,才能正常执行。√ -
数组中的每一个元素都必须属于同一数据类型。√ -
C语言中的continue语句只结束本次循环,而不是终上整个循环的执行。√ -
对于全局变量,在程序开始执行时给其分配存储区, 程序执行完毕就释放。√ -
算法是为了解决一个问题而采取的方法和步骤 ,算法=数据结构+程序。× -
采用strcmp函数可以将两个字符数组中的字符串连接起来。× -
do…while语句的执行过程是,先无条件的执行循环体,然后判断循环条件是否成立。√ -
C语言规定标识符只能由字母、数字和下划线3种字符组成,第一个字符可以是数字。× -
采用fclose函数可以关闭数据文件,关闭就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。√
四、简答题(5*10=50)
- 简要陈述指针的优缺点
优点: (1)可以提高程序的编译效率和执行速度,使程序更加简洁。 (2)通过指针被调用函数可以向调用函数处返回除正常的返回值之外的其他数据,从而实现两者间的双向通信。 (3)利用指针可以实现动态内存分配。 (4)指针还用于表示和实现各种复杂的数据结构,从而为编写出更加高质量的程序奠定基础。 (5)利用指针可以直接操纵内存地址,从而可以完成和汇编语言类似的工作。 (6)跟容易实现函数的编写和调用。 缺点: 容易出错,如果对指针不能正确理解和灵活有效的应用,利用指针编写的程序也更容易隐含各式各样的错误,同时程序的可读性也会大打折扣
- 机器语言和高级语言各有什么特点
机器语言:能够被机器立即识别并加以执行,具有执行速度快,占用内存小等优点,但难学,难记,难以推广使用。 高级语言:弥补了机器语言的不足,不依赖具体机器,容易理解,较为方便。
- 用数组方式求出Fibonacci 数列前50个的值并输出到屏幕
#include<stdio.h>
int main()
{
int i;
double f[50] = { 1.0,1.0 };
for (i = 2; i < 50; i++)
f[i] = f[i - 1] + f[i - 2];
for (i = 0; i < 50; i++)
{
if (i % 5 == 0)
printf("\n");
printf("%15.0lf", f[i]);
}
printf("\n");
return 0;
}
- 有一个含n个整数的数组a,写一个C语言程序,要求调用函数实现n个整数反向顺序重新排列存放
#include<stdio.h>
int invet(int a[], int n);
int main()
{
int i;
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
int n = 10;
invet(a, 10);
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
int invet(int a[], int n)
{
int i, b[10];
for (i = 0; i < n; i++)
b[n - i - 1] = a[i];
for (i = 0; i < n; i++)
a[i] = b[i];
}
- 一个球从200米高度自由下落,落地后弹起高度为原来高度的一半,写一个C语言程序,求他第十次落地时的总运动距离,第十次反弹多高
#include<stdio.h>
int main()
{
float sn = 200.0;
float hn = sn / 2;
int n;
for (n = 2; n <= 10; n++)
{
sn = sn + 2 * hn;
hn = hn / 2;
}
printf("the total of road is %f\n", sn);
printf("the tenth is %f meter\n", hn);
return 0;
}
五、案例分析( 20分)
问题描述从键盘输入任意个四位数的整数 然后检查其是否为11的整数倍;
(1)如果是11的整数倍,则输出该数到屏幕
(2)如果不是11的整数倍则将组成该数的四个数字重新排列形成一个新的四位整数,对能形成的所有四位整数中,对那些为11的整数倍的数全部输出到磁盘文件C : \output.dat (数之间用逗号分隔),然后,读取磁盘文件C:\output.dat,求出最大数并输出到屏幕。
(3)如果在第二步中不存在是11整数倍的数,则在屏幕上输出“无" 。
1、 简述算法思路并画出其流程图( 10分)
2、 用C语言写出上述需求的实现代码( 10分)
#include<stdio.h>
#include<stdlib.h>
int checkFun(int num, int num_11[]);
void save(int num_11[], int count);
void printMax();
int main()
{
int num_in;
int num_11[24];
int count = 0;
printf("Enter an integer of four digits:");
scanf("%d", &num_in);
if (num_in > 9999 || num_in < 1000)
{
printf("Enter integer error\n");
return 1;
}
if (num_in % 11 == 0)
{
printf("%d\n", num_in);
return 0;
}
count = checkFun(num_in, num_11);
if (count > 0)
{
save(num_11, count);
printMax();
}
else
{
printf("无");
}
return 0;
}
int checkFun(int num, int num_11[])
{
int div[4];
int numTemp;
int count = 0;
int i1, i2, i3, i4, j;
for (j = 3; j >= 0; j--)
{
div[j] = num % 10;
num /= 10;
}
for (i1 = 0; i1 < 4; i1++)
for (i2 = 0; i2 < 4; i2++)
for (i3 = 0; i3 < 4; i3++)
for (i4 = 0; i4 < 4; i4++)
{
if (i1 != i2 && i1 != i3 && i1 != i4 && i2 != i3 && i2 != i4 && i3 != i4 && div[i1] != 0)
{
numTemp = div[i1] * 1000 + div[i2] * 100 + div[i3] * 10 + div[i4];
if (numTemp % 11 == 0)
{
for (j = 0; j < count; j++)
{
if (numTemp == num_11[j])
break;
}
if (j >= count)
{
num_11[count++] = numTemp;
}
}
}
}
return count;
}
void save(int num_11[], int count)
{
FILE *fp;
int i;
if ((fp = fopen("C:\\output.txt", "w")) == NULL)
{
printf("Can not open file!\n");
exit(0);
}
for (i = 0; i < count - 1; i++)
{
fprintf(fp, "%d,", num_11[i]);
}
fprintf(fp, "%d", num_11[count-1]);
fclose(fp);
}
void printMax()
{
int i;
int numTemp;
int max = 0;
FILE* fp;
if ((fp = fopen("C:\\output.txt", "r")) == NULL)
{
printf("Can not open file!\n");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%d,", &numTemp);
if (numTemp > max)
max = numTemp;
}
printf("The Max num is:%d\n", max);
fclose(fp);
}
|