2013年湖南大学招收硕士研究生入学考试试题
一、单项选择题 (20*1=20分)
部分数据丢失请见谅!
- 下列语句中,将p定义为指针数组的是 (A)
A、int* p[4] B、int ( * p)[4] C、int*p(4) D、int(*p)(4)
二、简要回答下列问题( 1*20=20分)
C语言有几种语句可以实现分支,请写出这些语句的一般形式,并画出相应流程图。
主要有 if 和 switch 两种,有以下形式:
(1) if(表达式) {}
(2) if ……else ……
(3) if ……if else ……else ……
(4)if(表达式1)
{
if(表达式2)
{
语句1;
}
}
else
{
语句2;
}
(5) switch(表达式):
case 值1:语句1;break;
case 值2:语句2;break;
……
default:语句n;break;
流程图
三、阅读下面的程序,写出运行结果( 10*3=30分)
#include<stdio.h>
int main( )
{
int p = 300;
printf(%d\n" ,(p/3>0?p/100:p%3));
}
#include<stdio. h>
int main( )
{
char m;
m ='B'+32;
printf("%c\n" ,m);
}
#include<stdio.h>
int main( )
{
int a=1,b=3,c=5;
if(c=a+b)
printf("yes\n");
else
printf("no\n");
}
注意:这里是赋值,不是比较大小
#include<stdio.h>
int main( )
{
int i,m=0,n=0,k=0;
for(i=9;i<=11;i++)
switch(i/10)
{
case 0:m++;n++;break;
case 10:n++ ;break;
default:k++;n++;
}
printf("%d %d %d\n" ,m,n,k);
}
#include<stdio.h>
int main( )
{
int i,j;
for(i=1;i<5;i++)
for(j=2;j<=i;j++)
printf("#");
}
#include<stdio.h>
int main( )
{
int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{
n[i] = n[i-1]*2+1;
printf("%d ",n[i]);
}
}
#include<stdio.h>
int main( )
{
int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
a[i][j]=Q;
for(i-0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d" ,a[i][j]);
printf("\n");
}
}
#include<stdio. h>
int a=5;
fun(int b)
{
static int a = 10;
a+=b++ ;
printf("%d",a);
}
int main()
{
int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
#include<stdio.h>
int main()
{
int a=4,b=3,c=5,t=0;
if(a<b) t=a;a=b;b=t;
if(a<c) t=a;a=c;c=t;
printf("%d %d %d\n" ,a,b,c);
}
注意:你是不是觉得很简单,是不是觉得就是交换,5 3 4,NO,这里没有用大括号括起来,
#include<stdio.h> int main() {
int a = 4, b = 3, c = 5, t = 0;
if (a < b)
{
t = a; a = b; b = t;
}
if (a < c)
{
t = a; a = c; c = t;
}
printf("%d %d %d\n", a, b, c);
这里非常容易错, if 后面的语句就一句,到第一个分号停止;没有大括号是两个逻辑。
#include<stdio.h>
int main( )
{
int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},
{-31,32,-33,0}};
int i,j,s=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j]<0)continue;
if(a[i][j] == 0) break;
S+=a[i]lj];
}
}
printf("%d" ,s);
}
四、程序填空题(每空2分,共30分)
- 程序读入10个整数,统计负数的个数,并计算负数之和。
#include<stdio.h>
int main()
{
int i,a[10],s,count;
s = count = 0;
for(i=0;i<10;i++)
scanf("%d",_____);
for(i-0;i<10;i++)
{
if(a[i]>=0)
________;
s+=a[i] ;
count++ ;
}
printf("s=%d, count=%d\n",s, count);
}
- 程序最多从键盘输入50个字符,将字符送入数组c中,遇到空格转换成字符 ’ # ’ ,遇到换行符( ’ \n ’ )结束。
#include<stdio.h>
int main( )
{
int i;
char ch,c[100];
for(i=0;_______;i++)
{
if((ch=getchar()) == '\n')
__________;
if(ch==' ')
__________;
c[i] = ch;
}
c[i] = '\0';
puts(c);
}
- 下面的程序实现从十个数中找出最大值和量小值。
#include<stdio.h>
int max,min;
find_ max_ min(int*p,int n)
{
int *p;
for(q=____;____;q++)
if(_____)
max = *q;
else if(_____)
min = *q;
}
int main()
{
int i,num[10];
printf("input 10 number:\n");
for(i=0;i<10;i++)
scanf("%d" , &num[i]);
find_ max_ min(num,10);
printf( "max=%d, min=%d\n",max ,min);
}
- 下面的函数fun(int n)完成计算1到 n 的累加和
sum(int n)
{
if(n<=0)
printf("data error\n");
if(n==1)
_______;
else
_______;
}
- 下面的程序显示指定的文件,再显示文件内容的同时加上行号,#include<stdio. h>
#include<string.h>
int main()
{
char s[20],filenane20J;
int flag = 1,______;
FILE *fp;
printf("enter filename:!n");
gets(filename );
if((fp=fopen(filename,"r"))_______)
printf("FILE open error!");
else
{
while(_______)
{
fgets(s,20,fp);
if(_______)
printf("%3d ,%s",++i,s);
else
printf("%s",s);
if(s[strlen(s)-i]=='\n')
flag = 1;
else
flag = 0;
}
}
fclose(fp);
}
五、编程题(50分)
- 程序要输出如图1所示的矩形图案,程序的流程图如图2所示:请完成以下工作:
(1)编写程序,完成图案的翰出 (2)将输出模块设计成独立的函教: 编写程常为通过调用函数完成图案榆出; (3 )画出输出模块函数的流程图。( 20分) 【仅供参考】
#include<stdio.h>
void output(int, int);
int main()
{
int i, m, n;
scanf("%d%d",&m, &n);
if (m > n && m > 0 && n > 0)
output(m, n);
else
printf("输入数据有误");
return 0;
}
void output(int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf("*");
printf("\n");
}
}
- 设计个冒泡排序的函数 :
void mysort(int num[],int n) ,用胃泡法对n人整型数进行升序排序,编写程序进行调试。(30分) 【仅供参考】
void mysort(int num[], int n)
{
int i, j, t, a = { 0 };
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
|