2004级信息学院《C语言设计》考试试题
一、判断下列语句或程序的对错。  10分  √
1 int x=y=z=0’;        (×)  y,z没有定义
2 #include <stdio.h> ;      (×) 不能有分号,#开头的结尾均不能有分号;
3 printf(“%s\n”,”c language”);      (√)
4 float  a[100];
int *p=a;                            (×)    数据类型不匹配
5 char str[20];
6 int data[4]={0,1,2,3,4};        (×)五个元素,但是只有四个单元
7 float x=1.45e+310L;    (×)数值越界
8 int xyz-1=2;                            (×)
9 int x=‘\xae’ ;                          (√)
10 int *p,a[2][3] ;
p=a ;                                (×)  数据类型不匹配
二 计算下列表达式的值        10分
设 unsigned int a=10,b=17,c=5,d=3;
float f ;
  (1)f=b/c                                      ( 3.0  )
  (2)!(a+b)+c-1&&b+c/2                          ( 1  )
  (3)(a^b)+(c>>1+d)                              (  0x1b )
  (4)a+=b%=a=b                                  (  17  )
  (5)a=2,b=a*++b                                (  2 )
三 程序改错                              10分
(1) 求两个浮点数的平方和及平方差
#include <stdio.h>
float calculate (float x,float y,float *sub);添加函数原型声明
main ()
{
float a,b;
float  add_reasult,  sub_result;
scanf (%f,%f,a,b);
add_result=calculate(a,b,&sub_result);
printf( a*a+b*b=%d,a*a-b*b=%d\n,add_result,sub_result);
}
float calculate (float x,float y,float *sub)    添加函数类型
{
float  *temp;              应该直接定义为变量float temp;
sub=a*a-b*b  ;            *sub=a*a-b*b;
temp = a*a+b*b;
return *temp;        return temp
}
(2) 统计N 个字符中大写字母和数字字符的个数
#include <stdio.h>
#define N  5
Count(char *str,int *result);  添加函数声明
main ()
{
  char string[N][80];
  char  i;
  int Capital_Count=0,Num_Count=0需要初始化为0
  for(i=0;i<N;i++)
scanf( %s,&string[i]) ;  去掉&符
  for(I=0;I<N;I++)
Capital_Count+=Count(string[I],&Num_Count);
  Printf(Capital count :=%d,numbercount=%d\n
,Capital_Count,Num_Count) ;
}
Count(char *str, int *result)
{
int  temp,I int temp=0,i;  temp应该初始化为0
for(I=0;I<80;I++)
{
  If(str[I]>=A&& str[I]<=Z)
      Temp++;
  If(str[I]>0||str[I]<9)
      *result++;
}
  return temp;
}
四 程序填空                          10分
(答案参考书中p85~86)
(1)利用公式  sin x=x-x/3!+x
  x=0.5,n=20   
#include<stdio.h>
main()
{
float y,s,x,d,t;
int n,I,j;
scanf(%d%f,&n,&x);
s=1.0;
____________________________;
for(I=2;I<n;I++)
{
    d=t=__________________________;
    for(j=1;_______________;j++)
    {
          d=________________;
          t=________________;
    }
      s=(-1)*s;
      y+=_____________________;
}
(2)利用库函数char *strstr(char *sl,char *s2)在给定字符串中查子串最后(最右)一次出现的位置。如果S2并没有出现在S1的任何地方,函数返回一个NULL
指针。如果第二个参数是一个空字符串,函数就返回S1;
注:库函数char strstr(char*s1,char*s2),这个函数在S1中查子字符 串S2第一次出现的起始位置,并返回一个指向该位置的指针。如果S2并没有出现在S1的任何地方,函数返回一个NULL指针。如果第二个参数是一个空字符串,函数返回S1;
(答案见书中p196~197)
#include<stdio.h>
#include<string.h>
void main(void)
{
char str[80]=ABCdabcdfgabc;
char *p;
p=my_strrstr(str,abc);
printf(%s \n,p);
p=my_strrstr(str, );
printf(%s\n,p);
}
char *my_strrstr(char *s1,char*s2)
{
char *last;
char *current;
_________________________;     
if(________________________)     
{
last=current=_____________;
While(______);
{
        last=current;
current=_______;
}
}
return last;
}
五.写输出结果(20分)
(1)
#include <stdio.h>
void fun(int*,int);
void main()
{
    int a[]={5,6,7,8},i;
    fun(a,4);
    for(i=0;i<4;i++)
        printf("%d\n",a[i]);
}
void fun(int *b,int n)
{
    int i;
    for(i=0;i<n;i++)
        b[i]=i*2;
    return;
}
0
2
4
6
(2)
#include<stdio.h>
void main()
{
    int i,j,max;
    int row=0,column=0;
    int a[3][3]={{1,2,3},{2,-3,4},{9,4,7}};
    max=a[0][0];
    for(i=0;i<3;i++)
c语言程序分析题及答案
        for(j=0;j<3;j++)
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
                row=i+1;
                column=j+1;
            }
        }
    printf("max=%d,row=%d,column=%d\n",max,row,column);

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