2012年湖南大学招收硕士研究生入学考试试题
一、单项选择题 (20*1=20分)
-
下列合法的C语言标识符是 (A) A、file. bak B、num(5) C、$123b D、break -
若 i=5,当 执行 printf("%d",-i++); 后。a的值为 ( C) A、6 B、-6 C、-5 D、5 -
若 a=10,当执行运算 a+=a-=a*a; 后:a的值为 (D) A、10 B、100 C、-90 D、-180 -
已知int x,y; 执行逗号表达式y=(x=4*5,x*5),x+25; 后,y的结果为多少 (B) A、20 B、100 C、125 D、45 -
若有语句:
int i=0;
switch(i)
{
case 0: i+=1;
case 1: i+=1;
case 2: i+=1;
default:i+=1;
}
执行上面的语句后,变量的正确结果为多少? (D) A、1 B、2 C、3 D、4
- 若有语句:
char s[15];
scanf("%s" ,s);
printf("%s",s);
当从键盘上输入的值为: Hello World时,下列输出的结果中,正确的是 (A) A、Hello B、Hello World C、H D、d
scanf读取到空格停止
-
设整型变量a. b的值分别为2.3,当执行运算b+=(++a)+(++a) 后,b的值为 ( C) A、9 B、10 C、11 D、12 -
设整型变量 i 的值为5,则执行表达式 i+++i 后 ,i 的值为 (B) (看编译器) A、5 B、6 C、7 D、表达式不正确 -
设有定义: int k=1,m= 2;float f=7; 测以下选项中错误的表达式是 (C) A、k=k>=k B、-k++ C、k%int(f) D、k>=f>=m -
没有定义: int a=2,b=3,c=4;以下下选项中值为0的表达式是 (A) A 、(!a == 1)&&(!b == 0) B、(a) C、a&&b D、a||(b+b)&&(c-a) -
以下4个选项中,不能看作一条语句的是 (D) A、{;} B、a=0,b=0,c=0; C、if (a>0); D、if ((b==0)m=1;n=2; -
已有定义: int x=3,y=4,z= 5; 则表达式!(x+y)+z-1&&y+z/2 的值是 (D) A、6 B、0 C、2 D、1 -
设int x=1,y=1; 表达式(!xlly--) 的值是 (B) A、0 B、1 C、2 D、-1 -
以下叙述正确的是 (D) A、do-while 语句构成的循环不能用其他语句构成的循环代替。 B、do -while语句构成的循环只能用break语句退出。 C、用do-while语句构成的循环,在while后的表达式为非零时循环结束。 D、用do-while语句构成的循环,在while后的表达式为零时结束循环。 -
执行语句: for(i=1;i++<4;); 后,变量 i 的值是 ? A、3 B、4 C、5 D、不定 -
有关函数参数,下列说法不正确的是 ( C) A、实参可以将数据传给形参; B、实参和形参是不同的变量; C、形参可以将数据传给实参; D、实参和形参必须个数相等,类型一致。 -
定义函数时,若函数的类型缺省,则函数的默认类型是 (D) A、char B、void C、float D、int -
已知: char s1[4]= "128” ,char * ptr; 则执行以下语句后的输出为 (A)
ptr = s1;
printf(" %c\n",*(ptr+ 2));
A.字符 ’ 8 ‘ B、字符 ’ 1 ’ C、字符 ’ 2 ’ 的地址 D、不确定
-
下列数据中属于字符串常量的是 (B) A、0 B、"0” C、‘0’ D、‘10’ -
下列语句中,将f定义为文件类型指针的语句是 (B) A、FILE f; B、FILE *f; C、file f; D、file *f;
二、判断题:( 15*2=30分)
- C语言是一种计算机高级语言。√
- C语言不允许直接访问物理地址,不能进行位操作。×
- C语言是面向对象的程序设计语言。×
- C程序要通过编译,链接才能得到可执行的目标程序。√
- 每一个C程序都必须有一个主函数main()。×
- C语言允许有空函数。√
- C程序书写格式规定一行只能写一 条语句。×
- c程序的每一条语句都给定一个行号。×
- C语言的每个语句的最后必须有一个分号。√
- C语言本身没有输入输出语句。√
- C语言可用来编写应用软件,也可用来编写系统软件。√
- TurboC是在微机上广泛使用的编译程序。√
- C语言的数据结构是以数据类型形式出现的。√
- 空类型不是C语言的数据类型。×
- C语言中数据不分常量和变量。×
三、简答题( 15*2=30分)
- C语言的基本数据类型有哪些?允许自定义数据类型吗?如果允许,可以添加哪些数据类型?请举例说明如果不允许,请说明原因。
整型,字符型,浮点型 允许 可添加结构体,共用体,枚举类型等等 例
struct student
{
int num;
char name[20];
}stu1;
- C语言的分支语句有几种? 请分别写出C语言分支结构的基本形式,并说明他们的主要区别。
主要有 if 和 switch 两种,有以下形式:
if(表达式1)
{
if(表达式2)
{
语句1;
}
}
else
{
语句2;
} (5) switch(表达式):
case 值1:语句1;break;
case 值2:语句2;break;
……
default:语句n;break;
区别:switch 适合处理判断分支较多的情况下(代码可读性好), 而 if 适合处理判断分支较少的情况下(反之代码可读性差,容易出现漏判或重复判断)。
四、程序理解题。阅读下面的程序,写出程序的运行结果( 3*10=30分)
#include<stdio.h>
void main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)
continue;
x++;
}
x++ ;
}
printf("x=%d\n",x);
}
#include<stdio. h>
void main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
(
case 0: a++ ;break;
case 1: b++;break;
}
case 2: a++;b++;break;
case 3: a++;b++;
}
printf( "a=%d,b=%d\n",a,b);
}
#include<stdio. h>
void addsub(int m,int n);
int main()
{
int a-10,b=15;
addsub(a,b);
printf("a=%d, b=%d)n",a,b);
}
void addsub(int m, int n)
{
int temp = m;
m = m*n;
n = temp - n;
}
#include<stdio.h>
int i=0;
int fun(int n)
{
static int a = 2;
a++; ,
return a+n;
}
int main()
{
int k=5;
{
int i-2;
k+=fun(i);
}
k+=fun(i);
printf("k=%d\n" ,k);
}
#include<stdio.h>
int main()
{
int i,a[4] = {2,4,6,8},*pa;
pa = a;
for(i=0;i<4;i++)
{
*pa*=*pa;
printf("a[%d]=%d\n" ,i,*pa);
pa++;
}
}
#include<stdio.h>
int sum(int array[],int len);
int main( )
{
static int a[5]={1,2,3,4,5},result;
result=sum(a,5);
printf("result=%d\n" ,result);
}
int sum(int array[],int len)
{
int sum = 0;
for(int i=0;i<len;i++)
sum = sum+array[i];
return sum;
}
五、编程题。完成下列各程序中的函数定义(请勿修改主函数main中的语句)( 4*10=40分)
- 请编写函数
void fun(int a,int b,long *c) 的定义,其功能是将两个两位数的正整数 a,b 合并成一个整数放在 c 中。合并的方式是将 a 数的个位和十位数依次放在C数干位和十位上,b 数的十位和个位数一次放在 c 数的个位和百位上。 例如: a=37,b=62,合并和的数: c=7236
#include<iostream.h>
using namespace std;
void fun(int a,int b,long *c);
void main()
{
int a,b;
long c;
cout<<"Input a,b;"<<endl;
cin>>a>>b;
fun(a,b, &c);
cout<<"The result is: \n"<<c<<endl;
}
【仅供参考】
void fun(int a, int b, long* c)
{
*c = 0;
*c += b / 10;
*c += b % 10 * 100;
*c += a / 10 * 10;
*c += a % 10 * 1000;
}
- 请编写函数
long Fibo(int n) 的定义,该函数返回 n 的 Fibonacci 数,规则如下:n等于1或者2时,Fibonacci数为1,之后每个Fibonacci数均为其前面两个数之和,即: F(n)=F(n-1)+F(n-2). 请使用递归算法实现该函数。如n=8 时,结果为21.
#include<stdio.h>
long Fibo(int n);
void main( )
{
int n;
scanf("%d",&n);
long f = Fibo(n);
printf("f=%ld\n",f);
}
【仅供参考】
long Fibo(int n)
{
long g;
if (n == 1 || n == 2)
g = 1;
else
g = Fibo(n - 1) + Fibo(n - 2);
return g;
}
- 请编写函数
void fun(int(*s)[10],int *b,int *n,int mm,int nn); 的定义,该函数的功能是将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。例如:若二维数组中的数据为 33333333 44444444 55555555 则一维数组中的内容为: 33 44 55 33 44 55 33 44 55 33 44 55.
#include<stdio.h>
void fun(int(*s)[18],int*b,int*n,int mm,int nn);
void main()
{
int w[10][10]={{33,33,33,33},{44,44,44,44},
{55,55,55,55}};
int a[100]= {0},n=0,i,j;
printf("The matrix:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d\t" ,w[i][j]);
printf("\n");
}
fun(w,a,&n,3,4);
printf("\nThe A array:\n");
for(i=0;i<n;i++)
printf("%d\t" ,a[i]);
}
【仅供参考】
void fun(int(*s)[10], int* b, int* n, int mm, int nn)
{
int i, j;
for (i = 0; i < nn; i++)
{
for (j = 0; j < mm; j++)
{
*(b++) = *(s[j] + i);
(*n)++;
}
}
}
- 请编写函教int fun(char*str)该函数的功能星判断字符事是否为回文,若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出NO,回文是指顺读和倒读都是一样的字符串。例如:字符串LEVEL是回文,而字符串123312不是回文。
#include<stdio.h>
#define N 80
int fun(char *str);
void main()
{
char s[N];
printf("Enter a string:\n");
gets(s);
printf("\n");
puts(s);
if(fun(s))
printf("YES\n");
else
printf("NO\n");
}
【仅供参考】
int fun(char* str)
{
if (!str)
return 0;
char* left = str;
char* right = str;
while (*right)
{
right++;
}
right--;
while (left < right)
{
if (*left != *right)
{
return 0;
}
left++;
right--;
}
return 1;
}
|