快乐阳光 发表于 2013-8-10 22:20:08

哈尔滨工业大学C语言期末试卷

本帖最后由 快乐阳光 于 2013-8-11 10:19 编辑

一、单项选择题:(10分,每题2分)
1.char (*p);该语句声明p是一个         。
A) 指向含有5个元素的一维字符型数组的指针变量p
B) 指向长度不超过5的字符串的指针变量p
C) 有5个元素的指针数组p,每个元素可以指向一个字符串
D) 有5个元素的指针数组p,每个元素存放一个字符串
2.C语言源程序的某文件中定义的全局变量的作用域为:_______。
A) 本文件的全部范围
B) 本函数的全部范围
C) 从定义该变量的位置开始到本文件结束
D) 本程序的所有文件的范围
3.以下程序的正确输出结果为:_______。
main()
{
    inta = 2, c = 5;
    printf("a = %%d, b = %%d\n", a, c);
}
A)a = %2, b = %5      B)a = 2, b = 5
C)a = %%d, b = %%d         D)a = %d, b = %d
4.已知学生记录描述为:
struct student
{
   int      no;
   char   name;
   char   sex;
   struct
   {
         int    year;
         char   month;
         int    day;
   }birth;
};
struct student s;
设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是_____      。
A)s.birth.year = 1984;
s.birth.month = "11";
s.birth.day = 11;
B)s.birth.year = 1984;
s.birth.month = 11;   
s.birth.day = 11;
C)s.birth.year = 1984;
strcpy(s.birth.month,"11");
s.birth.day = 11;
D)s.birth.year = 1984;
s.birth.month[] = {"11"};
s.birth.day = 11;
5.若有二维数组定义语句:int a; 则下面能正确引用元素a的为:      。
A) *(a+j*4+i)   B) *(a+i*4+j)
C) *(a+j)      D) *((*a+i)+j)
二、写出下列程序的运行结果。(10分,每题2分)
1.

#include <stdio.h>
main()
{
    intx = 12, y = 8;
    printf("%d\t%d\t%d\n", !x, x&y, x|y);
}
程序运行结果是:




2.

#include <stdio.h>
main()
{
   int v1 = 10 ;
   float v2 = 2.5 ;
   float v3 ;
   int v4 ;
   float v5 ;
   v3 = v1 / v2 ;
   v4 = v1 / v2 ;
   v5 = v1 / 4 ;   
   printf("v3=%f\tv4=%d\tv5=%f\n",v3,v4,v5) ;
}
程序运行结果是:




3.

#include<stdio.h>
struct date
{
   int year;
   int month;
   int day;
};
void func(struct date p)
{
    p.year = 2000;
    p.month = 5;
    p.day = 22;
}
main()
{
   struct date d;
   d.year = 1999;
   d.month = 4;
   d.day = 23;
   printf(“%d,%d,%d\n”, d.year, d.month, d.day);
   func(d);
   printf(“%d,%d,%d\n”, d.year, d.month, d.day);
}
程序运行结果是:




4.

#include <stdio.h>
main()
{
    intk=4, n=0;

    for (;n<k;)
    {
       n++;
       if (n%2 == 0)continue;
       k--;
    }
    printf("k=%d, n=%d\n",k,n);
}
      程序运行结果是:





5.

#include <stdio.h>
int Func(int i);

main()
{
    int i;

    for (i=3; i<5; i++)
    {
      printf(" %d", Func(i));
    }
    printf("\n");
}

int Func(int i)
{
    static int k = 10;      
    for (; i>0; i--)
    {
      k++;
    }
    return (k);
}
程序运行结果是:





三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,每空1分)
1. 从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年:
       能被4整除,但不能被100整除。
       能被400整除。

#include <stdio.h>
main()
{
    intyear, flag;

    printf("Enter year:");
    scanf("%d",&year );

    if (                                                    )
    {
         flag = 1;               
    }
    else
    {
      flag = 0;               
    }

    if (            )
    {
         printf("Yes!\n");   
    }
    else
    {
      printf("No!\n");
    }
}

2.下面函数Fail用于计算不及格成绩的学生人数,函数Sort采用选择法对n个学生成绩由高到低排序。

int Fail(float score[], int n)   
{
    inti, j, sum =      ;

   for (i=0; i<n; i++)               
   {
      if (score < 60)   sum          ;      
}

                     ;                     
}
voidSort(float score[], int n)      
{                                    
      int    i, j, k;
      floattemp1;

      for (i=0; i<n-1; i++)         
      {
            k = i;                     
            for (j=   ; j<n; j++)      
            {
                if (score > score)k =    ;
            }

            if (      )
            {                              
                temp1 = score;         
               score = score;   
               score = temp1;      
            }
      }
}            

四、在下面的4个程序中,共有16处错误(包括语法错误和逻辑错误),只要找出其中的15处错误并改正之即可,多找不多加分,重新编写程序不加分。(30分)
1.编程判断m是否为素数。

#include <stdio.h>
#include <math.h>
int IsPrime(int m)

main()
{
    int n, flag;   

   printf("Input n:");
   scanf("%d", n);   

   flag = IsPrime(n);

    if (!flag)            
    {
      printf("Yes!\n");
    }
   else
    {
      printf("No!\n");
    }
}

int IsPrime(int m);
{
    int i, k;

   if (m <= 1)
    {
      return 0;
    }

    for (i=2; i<=sqrt(m); i++)
    {
      k = m % i;
      if (k = 0)      
      {
         return 0;
      }
    }
    return 1;
}
2.编写一个函数Inverse(),实现将字符数组中的字符串逆序存放的功能。 #include<string.h> #include<stdio.h> #define ARR_SIZE = 80;         void Inverse(char str[]);   main() {    char a ;      printf("Please enter a string: "); gets(a);   Inverse(char a[]);                   printf("The inversed string is: ");    puts(a); }   void Inverse(char str[]) {    int   len, i, j;    char*temp;                  len = strlen(str);   for (i=0; j=len-1; i<j; i++; j--)   {      temp = str;         str = str;               str = temp;    } }   3.下面程序的功能是求解爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。编程打印这条阶梯共有多少阶。 #include <stdio.h> main() {    intx,find;       x=0;    do{       ++x;       find=x%2=1&&x%3=2&&x%5=4&&x%6=5&&x%7=0;    }while (find);   printf("x=%d\n",x); }   五、编程(42分) 1.编程计算1×2 + 3×4 + 5×6 + ……+ 99×100的值,其中,n值由键盘输入。(14分)   2. 不用标准库函数strcat,自己编写一个函数MyStrcat,实现字符串链接功能,在主函数中输入两个字符串,然后调用函数MyStrcat将这两个字符串链接起来,并将结果显示到屏幕上。(14分) 已知函数MyStrcat的函数原型如下: void MyStrcat(char dstStr[], char srcStr[]); 其中,dstStr为目的字符串数组,srcStr为源字符串数组。 3.从键盘任意输入某班20个学生的成绩(int型)和学号(long型),编程打印最高分及其相应的学号。然后,在主函数中打印这些结果。(14分) 要求必须按照如下函数原型编程求解最高分和学号: int FindMax(int score[], long num[], int n, long *pMaxNum);其中,函数的返回值为求得的最高分,pMaxNum代表求得的最高分学生的学号,score数组用于存储学生的成绩,num数组用于存储学生的学号,n表示学生人数。


牡丹花下死做鬼 发表于 2013-8-10 22:59:27

不错的 帖子 去做做看 嘿嘿

lloy 发表于 2013-10-5 09:10:25

晕,好多题目答案已不确定了,恶补呀!!!:mad:

linyoubiao 发表于 2013-10-12 13:16:22

好东西,学习
页: [1]
查看完整版本: 哈尔滨工业大学C语言期末试卷