《程序设计基础》期末考试卷试卷一
一、语言基础(每小题2分,共26分)
1.设有变量定义:int  a=3, b=4, c=5; 表达式 !(a+b)+c-1 && b+c/2的值是多少?2.写出与代数式(x+2)e x+2对应的C表达式。
3.写出执行下列语句后的输出结果。
数学数组的定义是什么int  x=5;
if(x=3) printf(“%d\n”,x);
else printf (“%d\n”,x+2);
4.写出“仅当char类型变量ch是大写英文字母时改变ch为对应小写字母”的C表达式。5.若程序中使用了库函数toupper、strcpy,写出在预处理命令中必须包含的头文件名。6.写出下列程序段的输出结果:
int i,s=0;
for(i=1;i<10;i=i+2)  s=s+i;
printf(“i=%d  s=%x\n”,i,s);
7.设有宏定义“#define  f(a,b,x) a*x+b”,写出下列语句的输出结果: printf(“%d  %d\n”,f(1,2,3),f(f(1,2,3),4,2) );
8.写出下列程序段的输出结果:
int x=010,y=0x10,z=10;
printf(“%d,%d,%d\n,x,y,z);
9.写出下列程序段的输出结果:
int k,j=3;
k=j++;
printf(“k=%d  j=%d\n”,k,j);
10.student 是结构体类型标识符,x是student类型变量,写出计算x字节数的表达式。11.写出下列程序段的输出结果:
int f(int x)
{  static y=1;
x+=y;  y++;
return x;
}
void  main( )
{  int  k;
k=f(3);
printf(“%d  %d\n”,k,f(k) );
}
12.自定义函数fact的功能是计算k的阶乘,函数原型可以写作
“float fact(int)”。按照以下各小题的要求写出相应的函数原型。
(1)自定义函数f1的功能是计算平面上任意两点之间的距离。(2分)
(2)自定义函数swap的功能是交换调用函数中两个float类型实参变量的值。(2分)二、程序阅读(每题8分,共32分)
程序1:
#include <stdio.h>
void main( )
{  int m=18,s=0;
do {  switch(m%7)
{    case 2 : m/=2;s+=2;break;
case 3 : m/=3;s+=3;break;
case 5 : m/=5;s+=5;break;
default : m--;s--;
}
printf(“%d\n”,s);
} while (m);
}
程序2:
#include <stdio.h>
void main()
{  void div(int *,int *);
int a[5]={-5,0,60,45,34},  i=0,  j=2;
while(a[i]<=0)  i++;
while(a[i]!=1)  div(a+i,&j);
}
void div(int *n,int *k)
{  if(*n%*k==0)
{  printf(“%d,%d\n”,*n,*k);    *n/=*k;}        else  (*k)++;
}
程序3:
void main()
{  int s[8],i;  char ch=‘B’-1;
printf(“%c  %d\n”,ch,ch);
for(i=7;i>=0;i--)
{  s[i]=ch&1;  ch=ch>>1;  }
for( i=0; i<8; i++)  printf(“%d”,s[i]);
printf(“\n”);
}
程序4:
#include <stdio.h>
#include <string.h>
void f(char *s1)
{  char c;
if (*s1!=’\0’)
{  c=*s1;
strcpy(s1,s1+1);
f(s1);
putchar(c);
}
}
void main()
{  f(“abcdefg”);  }
三、程序填空(每空2分,共20分)
1.函数sort使用选择法将一维整型数组中各元素按值从大到小排序。
void sort (    (1)    )
{  int i,j,k,temp;
for(i=0;i<n-1;i++)
{  k=i;
for(j=i+1;j<n;j++)
if(    (2)  )  k=j;
temp=a[k];      (3)
}
}
2.函数del_node用于从头指针为head的链表中删除数据成员name与字符串str1相等的第一个节点(结构体类型标识符student定义如下)。
struct  student {
char name[9];
int score;
student  *next;
};
student *del_node(student *head, char *str1)
{  student *p1,*p2;
if(head==NULL)return head;
(4);
if(strcmp(head->name,str1)==0)
{  head=head->next;
free p1;
return head;
}
while (p1->next!=NULL)
{  p2=p1->next;
if(  (5))
{  p1->next=p2->next;
free  p2;  break;
}
else      (6);
}
return  head;
}
3.本程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每一个非英文字符后的第一个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。
#include <stdio.h>
#include <ctyp.h>
#include <stdlib.h>
void main()
{        (7);
int flag=1;
char ch;
if((f1=fopen("a.txt","r"))==NULL)
{printf("不能打开文件a.txt\n");exit(0);}

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