命题教师:成科扬
共12页
第 1 页
江 苏 大 学 试 题
学生所在学院                  专业、班级                    学号                姓名              任课教师               
(2014 -2015学年第二学期)
        课程名称     程序设计(C语言)  开课学院   计算机学院   
使用班级       理工类          考试日期 2015年06月17日
题    号
总分
核查人签名
得    分
阅卷教师
注意事项:
1. 闭卷考试。考试时间为120分钟。
2.选择题答案请用2B铅笔填涂至答题卡,其他题目答案请用签字笔或圆珠笔填写在答题纸上。
3.请将试卷及答题纸分别都写上班级、学号、姓名、任课教师。
一、选择题(每题1分,共50分)
1.以下叙述不正确的是______。
A. 在C程序中,注释说明只能位于一条语句的后面
B. 一个C源程序可由一个或多个函数组成
C. C程序的基本组成单位是函数
D. 一个C源程序必须包含一个main函数
2.以下关于C语言语句的叙述中,正确的是______。
A. 所有语句都包含关键字
B. 所有语句都必须在一行内书写完毕 
C. 所有语句都可以出现在源程序中的任何位置
D. 复合语句由{}括住,且在复合语句中也可以定义变量
3. C语言程序经过编译以后生成的文件名的后缀是   
A. .cpp          B. .c            C. .obj              D. .exe         
4. 下列数据中属于“字符串常量”的是______。
A. ABC          B. 'A'          C. 'ABC'            D. "A"
5. 若有以下定义:
char a; int b;  float c; double d;
则表达式a*b+d-c值的类型为______。
A. float            B. int            C. char              D. double
6. 设有语句 int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是______。 
A. 3              B. 0              C. 9                D. -12
7.设a,b为字符型变量,执行“scanf("a=%c,b=%c", &a , &b); ”后,使变量a的值为字母A,变量b的值为字母B,从键盘上正确的输入是_   
A.AB            B. 'A' , 'B'          C. A,B              D. a=A,b=B
8. 设 int x=1, y=1; 表达式(!x||y--)的值是   
A. 0              B. -1            C. 1            D. 2
9. 设有以下语句:int x=3,y=4,z=5; 则下面表达式中值为0的是   
A.’x’&&’y’        B.x||y+z&&y-z    C.!((x<y)&&!z||1)    D.x<=y
10.为表示关系a≥b≥c,应使用的C语言表达式是  _ 
A. (a>=b>=c)                          B.(a>=b)AND(b>=c)
C.  (a>=b)&&(b>=c)                  D.(a>=b)&(b>=c)
11.数学式在C程序中正确的表示形式为_______。
A.sqrt (a)/2*b      B. sqrt (a)/2/b        C. sqrt (a)/2b        D. sqrt a /(2*b)
12.putchar ( )函数可以向终端输出一个______
A. 整型变量表达式值               B. 实型变量值
C. 字符串                         D. 字符常量或字符型变量值
13. 以下程序运行后的结果是   
#include<stdio.h>
void main()
{int i=0;
switch(i)
{case 0: printf("%d",i);
case 2: printf("%d",i);break;
default: printf("%d",i);break;}}
A.000            B.022              C.00              D.0
14.对下面三条语句(其中s1和s2为内嵌语句),正确的论断是______。
  (1)if(a) s1; else s2;
  (2)if(a==0)s2; else s1;
  (3)if(a!=0) s1;else s2;
A.三者相互等价                     
B.(1)和(2)等价,但与(3)不等价
C.三者互不等价                     
D.(1)和(3)等价,但与(2)不等价
15. 假定所有变量均已正确定义,下列程序段运行后x的值是   
a=b=c=0; x=35;
if(!a) x--; else if(b); if(c) x=3; else x=4;
A.34            B.35            C.3            D.4
16. 以下程序段的输出结果是     
 int x=3;
 do{ printf("%3d",x-=2); }
while(!(--x));
 A.1                B.3 0                C.1 -2                D.死循环
17. 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是   
A.for(i=1,p=1;i<=5;i++) p*=i;            B.for(i=1;i<=5;i++) {p=1;p*=i;}
C.i=1;p=1;while(i<=5){p*=i;i++;}          D.i=1;p=1;do{p*=i;i++;}while(i<=5);
18. 以下数组定义中不正确的是______。
A.int a[2][3];                        B.int b[ ][3]={0,1,2,3};
C.int c[100][100]={0};                D.int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
19. 以下程序段的输出结果是     
 #include<stdio.h>
void main()
{ int i,sum;
for(i=1;i<6;i++) sum+=sum;
printf("%d\n",sum);}
A.15                B.14                C.不确定              D.0
20. 以下程序段的输出结果是     
#include<stdio.h>
void main()
{ int y=10;
for(;y>0;y--)
if(y%3==0)
printf("%d",--y);}
A.741              B.852                C.963                D.875421
21. 下列程序的输出为:   
#include<stdio.h>
void main( )
{int j,k,l=0,m=0;
for(j=0;j<2;j++)
{for(k=0;k<3;k++)l++; l-=k;}
m=j+k;
printf("%d,%d",l,m);}
A.0,3            B. 0,5          C.1,3              D.1,5
22. 以下程序运行后的输出结果是     
#include<stdio.h>
void main()
c语言二维数组转置{int i=0,x=0,s=0;
for(; ;)
  {if(i==3||i==5) continue;
  if(i==6) break;
  i++; s+=i;};
printf("%d\n",s);}
A.10              B. 13          C.21            D.程序进入死循环
23. 有定义int a[10]; 则对a数组元素的正确引用是______。
A.a[10]        B.a[-1]        C.a(5)        D.a[10-10]
24. 对以下说明语句的正确理解是______。
  int a[10]={6,7,8,9,10};
A.将5个初值依次赋给a[1]至a[5]
B.将5个初值依次赋给a[0]至a[4]
C.将5个初值依次赋给a[6]至a[10]
D.因为数组长度与初值的个数不相同,所以此语句不正确
25. 合法的数组说明语句是______。
A.int a[ ]= "string";                  B.char a[ ]= "string";
C.char a= "string";                    D.char a[5]={ '0', '1', '2', '3', '4', '5'};
26.若有数组A和B的声明“static char A[ ]="ABCDEF",B[ ]={'A','B','C','D','E','F'}; ”,则数组A和数组B的长度分别是______。
A. 7,6          B. 6,7            C. 6,6          D. 7,7
27. 函数调用“strcat(strcpy(str1,str2),str3)”的功能是______。
A.将字符串str1复制到字符串str2中后再连接到字符串str3之后
B.将字符串str1连接到字符串str2之后再复制到字符串str3之后
C.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后
D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中
28. 若二维数组a有m列,则在存储其中的某一元素a[i][j]之前有______个数组元素。
A.j*m+i          B.i*m+j        C.i*m+j-1          D.i*m+j+1
29. 函数返回值的类型应由    决定。       
A.return中的表达式类型              B.调用该函数的主调函数类型
C.定义函数所指定的类型              D.实参类型
30.以下函数的类型是_______。
fun(float x)
{float y;
y=3*x-5.5;
return y;}
A. int              B. 不确定          C.  void          D.  float
31.以下叙述中正确的是______。
A.函数可以有参数
也可以没有参数
BC函数既可嵌套定义又可递归调用
C函数须有返回值,否则不能调用
D.主函数必须书写在子函数之前
32. 在下面有关函数间传递数据的四种方式中,不能把被调用函数的数据带回到主调函数中的是   
A.地址传递        B.值传递        C.返回值传递    D.全局变量
33. 以下叙述中不正确的是   
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
34. 函数调用语句f((e1,e2),(e3,e4,e5));中参数的个数是   
A.1              B.2            C.4            D.5
35.若有声明“long fun(int *x, int n, long *s); int a[4]={1,2,3,4}; long b, c;”,则以下函数调用形式中正确的是_______。
A.c=fun(a,4,b);                        B.c=fun(a[ ],4,&b);
C.c=fun(a[4],4,b);                      D.c=fun(a,4,&b);
36.以下是一个自定义函数的头部,其中正确的是______。
A. int fun(int x[ ] , y)                    B. int fun(int x[ ], int x)
C. int fun(int x[ ], int y)                  D. int fun(char x[ ][ ],int y)
37. 设函数中的整形变量n,为保证其在未赋初值的情况下初值为0,应选择的存储类别是
A.auto        B.register        C.static        D.auto或register
38. 下面各语句行中,能正确进行赋字符串操作的语句是_________。
A. char  s[5]={ "ABCDE"};            B. char  s[5]={ 'A', 'B', 'C', 'D', 'E'};
C. char *s;  s="ABCDE";              D. char *s;  scanf("%s", &s);
39. 以下程序运行后的输出结果是     
#define N 20
void fun(int a[],int n,int m)
{int i;
for(i=m; i>=n; i--)
a[i+1]=a[i];}
void main()
{int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);}
A.10234          B.12344        C.12334        D.12234
40. int j,*p=&j; 要实现j的内容加10,错误的是_________。
A. *p=*&j+10;      B. j=*p+10;        C. *p=*p+10;    D. *p=&j+10;
41. 若有说明int(*p)[3]; 则以下_________是正确的叙述。
A. p是一个指针数组
B. (*p)[3]与*p[3]等价
C. p是一个指针,它可以指向一个一维数组中任一元素
D. p是一个行指针,它可以指向一个包含3列int类型元素的二维数组的每一行
42. 设已有定义:char *st="how are you"; 下列程序段中正确的是_________。
A. char a[11], *p;  strcpy(p=a+1,&st[4]);   
B. char a[11];    strcpy(++a, st);
C. char a[11];    strcpy(a, st);       
D. char a[ ], *p;  strcpy(p=&a[1],st+2);
43.若有结构体类型定义“typedef struct test{int x, y[2];}TEST ; ”,则以下声明中正确的是_______。
A.struct TEST x;    B.struct x;        C.test x;            D.TEST x;
44. 对于下列程序段:
  struct SD
  {int x;  float y; };
  struct SD a[3]={{1001, 3.5},{1002,4.5},{1003,4.0}}, *p;
  p=a;
则下面不正确的使用是__________。
A. (++p)->x        B. p++        C. (*p).y        D. p=&a[0].x
45. 值为6的表达式为__________。 
    struct st{int n; struct st *next;}
    static struct st a[3]={5,&a[1],7,&a[2],9,’\0’},*p;
    p=&a[0];
A. p++ ->n      B. p->n++      C. (*p).n++        D. ++p->n
46. 下列语句中,将c定义为文件型指针的是______。
A. FILE c;          B. FILE  *c;        C. file c;              D. file *c;
47. 有以下程序
#include<stdio.h>
struct ord
{int x,y;}dt[2]={1,2,3,4};
void main()
{struct ord *p=dt;
printf("%d,",++p->x); printf("%d\n",++p->y);
}
程序运行后的输出结果是
A.1,2        B.2,3        C.3,4        D.4,1
48.标准库函数fputs(p1,p2)的功能是______。
A. 从p1指向的文件中读一个字符串存入p2指向的内存空间
B. 从p2指向的文件中读一个字符串存入p1指向的内存空间
C. 从p1指向的内存空间中读一个字符串存入p2指向的文件
D. 从p2指向的内存空间中读一个字符串存入p1指向的文件
49. fwrite函数的一般调用形式是______。
A. fwrite(buffer, count, size, fp);              B. fwrite(fp, size, count,buffer);
C. fwrite(fp, count,size, buffer);              D. fwrite(buffer, size, count, fp);
50. 有以下程序
#include<stdio.h>
void main()
{FILE *f;
f=fopen("","w");
fprintf(f,"abc");
fclose(f);
}
若文本文件中原有内容为:hello,则运行以上程序后,文件中的内容为
A.helloabc        B.abclo        C.abc        D.abchello
二、阅读程序题(每空2分,共20分)
1. 以下程序段的输出结果是  ① 
#include<stdio.h>
void 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);}
2. 以下程序的输出结果是  ①  。 
void main()
{char a[]="programming", b[]="language";
  char *p1,*p2;  int i;
  p1=a;p2=b;
  for(i=0;i<7;i++)
  if(*(p1+i)==*(p2+i))
    printf("%c",*(p1+i)); }
3. 以下程序的输出结果是:  ①  。若程序中变量a的值初始化为16,则输出结果是  ② 
#include<stdio.h>
void main()
{int a=15,b=21,m=0;
switch(a%3)
  {case 0: m++;break;
  case 1: m++;
          switch(b%2)
            {default: m++;
            case 0: m++;break;}}
printf("m=%d\n",m);}
4. 以下程序运行时输出结果是  ① 
  #include<stdio.h>
  #include<ctype.h>
  int count(char s[])
  {int i=0;
  if(s[i]=='\0') return 0;
  while(isalpha(s[i]))i++;        //int isalpha(int ch) 为检查ch是否为字母的库函数
  while(!isalpha(s[i])&&s[i]!='\0')i++;
  return 1+count(&s[i]); }
  void main()
  {char line[]="one world,one dream.";
  printf("%d",count(line)); }
5.运行下列程序,输入字符串"Albert"后,输出结果是  ①  ,本程序的功能是  ② 
#include <stdio.h>
void main()
{char a[100];
  int n;
  gets(a);
  n=0;
  while(a[n]!= '\0')n++;
  printf("%d\n",n); }
6. 下面程序的输出结果是  ① 
#include<stdio.h>
void main()
{ int fun(int a);
int a=2,i;
for(i=0;i<3;i++) printf("%2d",fun(a));}
int fun(int a)
{int b=1; static int c=1;
b++;c++;
return(a+b+c);}
7. 以下程序运行后的输出结果是:  ① 
#include<stdio.h>
void main()
{int a=1,b;
for(b=1;b<=10;b++)
  {if(a>=8) break;
  if(a%2==1){ a+=5;continue;}
    a-=3;}
printf("%d\n",b);}
8. 以下程序的输出结果是  ① 
struct ks{ int a;int *b;};
  void main()
  {struct ks  s[4],*p; int n=1,j;
  for(j=0;j<4;j++){
  s[j].a=n;s[j].b=&(s[j].a); n+=2;}
  p=&s[0];
  printf("%d, %d\n",++(*p->b),*s[2].b);}
三、完善程序题(每空2分,共30分)
1. 用牛顿迭代法求方程:4x3-3x2+2x-7=01.5附近的根。要求前后两次求出的根的差的绝对值小于10-5
#include<math.h>
#include <stdio.h>
void main()
{ float x,x0,f,f1; x=1.5;
do{  ①  ;
f=((4*x0-3)*x0+2)*x0-7;
f1=(12*x0-6)*x0+2;
x=  ②  ; } while(  ③  );
printf("root=%f\n",x);}
2. 以下程序求一组整数的最大公约数。试完善程序以达到要求的功能。
  #include<stdio.h>
  int gcd(int a,int b)
  {int r,t;;
  if(b>a)
  {t=a;a=b;b=t;}
    while(  ①  ){a=b;b=r;}
    return b;}
  void main()
  {int x,i,a[6]={12,56,48,32,16,24};
  x=a[0];
  for(i=1;i<6;i++)
    x=gcd(x,  ②  );
  printf("这组整数的最大公约数为:%d",x); }
3. 以下程序段的功能是将一个2×3的矩阵转置生成一个3×2的矩阵。(即行列互换)
  即  1  3  5                1  2
2  4  6                3  4
                        5  6
void main()
  {int a[2][3],b[3][2],i,j,k;
  for (k=1,j=0;j<3;j++)
    for(i=0;i<2;i++)
    a[i][j]=  ①  ;
  for(i=0;i<2;i++)
    for(j=0;j<3;j++)
    b[j][i]=  ②  ;
  for(i=0;i<3;i++)
    {for(j=0;j<2;j++)printf("%3d",b[i][j]);
    printf("\n");}}
4. 以下程序段的功能是用折半查法判断任意读入的整数是否在有序数组中。
#define n 11
void main()
{int x,low,mid,high,find;
  static int a[]={2,5,11,18,24,35,42,50,58,86,92};
  scanf("%d",&x);
  low=0; high=n-1;  find=0;
  while((low<=high)&&!find)
  {mid=(low+high)/2;
    if(x==a[mid])
      ①  ;
    else
      if(x>a[mid])
          ②  ;
      else
            ;}
  if(find)
    printf("It's successful:a[%d]=%d\n", mid, x);
  else
    printf("It's fail to find %d", x);}
5. 程序填空:以下程序的功能是计算s=
#include<stdio.h>
long fun(int n)
{int i;long m;
m=1;
for(i=1;i<=n;i++) m=  ①  ;
return m; }
void main()
{long m; int k,n;
scanf("%d",&n);
  ②  ;
for(k=0;k<=n;k++) m=m+  ③  ;
printf("%ld\n",m);}
6. 任意读入10个字符串,然后按从小到大的顺序输出。
  #include <string.h>
  #include <stdio.h>
  void main()
  {char c[10][80],  ①  ;  int i, j;
  for(i=0;i<10;i++)
    gets(*(c+i));
  for(j=1;j<=9;j++)
    for(i=0;i<10-j;i++)
    if(  ②  )
      {strcpy(t, c[i]); strcpy(c[i], c[i+1]); strcpy(c[i+1], t);}
  for(i=0;i<10;i++)
    puts (*(c+i)); }
学生所在学院                  专业、班级                    学号                姓名              任课教师               
江 苏 大 学 答 题 纸

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。