c语言面试题2

《程序设计基础-C》试卷
一、单项选择题
1. C 语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。
    A、‘’    B、‘[‘和’]’       C、“/*”和”*/”     D、“*/”和”/*”
2. 下列运算符中,优先级最低的是_____。
    A、*           B、!=           C、+            D、=
3. 若变量已正确定义,表达式 (j=3, j++) 的值是_____ 。
A、3          B、 4           C、5            D、0
4. 已知字符 ‘a’ 的ASCII码为 97 ,执行下列语句的输出是_____。
    printf ("%d, %c", ’b’, ’b’+1 ) ;
    A、98, b        B、语句不合法    C、98, 99      D、 98, c
5. 表达式strcmp(“box”, “boss”) 的值是一个_______。
    A、 正数       B、 负数         C、 0         D、 不确定的数
6. 数组定义为 int a[3][2]=,数组元素_____的值为6。
    A、a[3][2]       B、a[2][1]        C、a[1][2]       D、a[2][3]
7. 要调用数学函数时,在#include命令行中应包含_____。
    A、 ”stdio.h”    B、 ”string.h”      C、 ”math.h”    D、 ”ctype.h”
8. 判断i和j至少有一个值为非0的表达式是_____。
    A、 i!=0 && j!=0   B、i*j!=0       C、!(i==0 || j==0)   D、i&&j
9. 若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。
    A、scanf(”%d,%f”, &a, &c);          B、scanf(”d=%d, c=%f”, &a, &c);
    C、scanf(”%d%f”, &a, &c);           D、scanf(”%d%f”, a, c);
10. 若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于_____。
    A、p++          B、x++           C、*(p++)         D、&x++
11. 若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x,  _____是正确的。
    A、p2=p1;       B、p2=**p1;       C、p2=&p1;        D、p2=*p1;
12. 下列程序段的输出是_____。
    int c[]=;
    int *k=c+1;
    printf("%d", *++k);
    A、 3           B、 5            C、 4             D、6
13. 不正确的赋值或赋初值的方式是______。
    A、char str[]="string";        
    B、char str[7]=;
C、char str[10];str="string";
D、char str[7]=;
14. 对于以下结构定义,++p->str中的++加在_____。
struct {
       int len;
    char *str;
} *p;
    A、指针str上    B、指针p上       C、str指的内容上   D、以上均不是
15. 对于如下说明,语法和语义都正确的赋值是_____。
int c, *s, a[]=;
A、c=*s;         B、 s[0]=a[0];      C、s=&a[1];        D、 c=a;

二、填空题
1. 写出下列程序段的输出结果。
float x1, x2;
x1=3/2;
x2=x1/2;
printf("%d, %.1f", (int)x1, x2) ;
2. 表达式 (7<<1>>2^2 ) 的值是_______。
3. 写出下列程序段的输出结果。
    #define  A  10
    #define  B  (A<A+2)-2
    printf("%d", B*2);
4. 写出判断字符变量c是英文字母的表达式              。
5. 写出下列程序段的输出结果。
    int k, x;
for (k=0, x=0; k<=9&&x!=10; k++)
    x+=2;
    printf ("%d, %d", k, x) ;
6. 写出下列程序段的输出结果。
printf(“%d, %d”,  NULL, EOF);
7. 对于以下递归函数f,调用 f (3) 的返回值是_____。
    f (int n)
   
8. 写出下列程序段的输出结果。
    char str[]="hello\tworld\n";
    printf("%d, %c\n", sizeof(str), *(str+10));
9. 输入12345#后,写出下列程序的输出结果。
    void main()
    {  char c;
    for(c=getchar(); getchar()!=’#’; c=getchar())
          putchar(c);
    }
10. 执行程序find –nx ould text.txt时,*++argv[1]的值是_______。
三、程序阅读题
1. 若输入 3  1  2  3 <回车> ,  则以下程序的输出结果是_______。
    #include "stdio.h"
    void main()
    {  int i, j, n, a[10];
       scanf("%d", &n);
       for (i=0; i<n; i++)
          scanf("%d",&a[i]);
       for (i=0; i<n; i++)
         for (j=0; j<n; j++)
           printf("%d, ", a[(i+j)%n]);
    }
2. 若输入89 76 24 25 9 8 11 16 35 4 <回车> ,  则以下程序的输出结果是_______。
    #include "stdio.h"
    #define N 10
    main()
    { 
      int x[N], y1[N], y2[N];
      int i, j, n1, n2, t, p;
      n1=n2=0;
      for(i=0;i<N;i++){
         scanf(“%d”, &x[i]);
         if(x[i] % 2==0)  y1[n1++]=x[i];
         else  y2[n2++]=x[i];
      }
      for(i=1; i<n1; i++)
         for(j=0; j<n1-1; j++)
          if(y1[j]>y1[j+1]){
          t=y1[j]; y1[j]=y1[j+1]; y1[j+1]=t;
          }
      for(i=0; i<n2-1; i++){
         p=i;
         for(j=i+1; j<n2; j++)
             if(y2[p]<y2[j]) p=j;
         if(p!=i){
              t=y2[i]; y2[i]=y2[p]; y2[p]=t;
         }
      }
      for(i=0; i<n1; i++) printf("%d, ", y1[i]);
      for(i=0; i<n2; i++) printf("%d, ", y2[i]);
    }
3. 以下程序的输出结果是_______。
    #include <stdio.h>
    int z;
    void p(int *x, int y)
{    ++*x;
     y--;
     z=*x+y+z;
         printf("%d, %d, %d#", *x, y, z);
}
void main()
{    int x=1, y=5, z=9;
         p(&x, y);
         printf("%d, %d, %d#", x, y, z);
    }
4. 若输入 -6+15*3/5=<回车> ,  则以下程序的输出结果是_______。
   #include <stdio.h>
   void main()
   {
       int m=0, sum=0;
       char c, oldc='+';
   do {
       c=getchar();
        if(c<='9'&&c>='0')  m=10*m+c - '0';
        else {
              if(oldc=='+') sum += m;
           else sum -= m;
           m=0;
           oldc=c;
              printf("%d, ", sum);
           }
       }  while(c!='=');
    }

四、程序填空题
下列程序的功能是创建单向链表。
    #include <stdio.h>
    #include <alloc.h>
    struct link {
     char  name[10];
         int mark;
         struct link  * next;
    };
    void insert(char *, int);
    struct link * head = NULL;
    main()
    {
     char    name[10];
         int    mark;
         struct  link * t;
         while ( 1 ) {
      scanf("%s %d",  name,  &mark);
          if ( strcmp(name, "#") == 0 )  break;
      ______(1)_______;
        }
  for (t=head; ______(2)_______)
          printf("<%s>: %d\n",  t->name,  t->mark);
}
void insert(char * name,  int mark)
{
  struct link * p;
  p = ______(3)_______ ;
  strcpy(p->name,  name);
  p->mark = mark;
      ______(4)_______;
  if ( head != NULL )  ______(5)_______;
  head = p;
}

答案
2000~2001学年《程序设计基础C》参考答案

一、单项选择题
C D A D A B C B D B A B C A C
二、填空题
1 1, 0.5
2 1
3 -3
4 c>=’a’&&c<=’z’|| c>=’A’&&c<=’Z’
5 5, 10
6 0, -1
7 -17
8 13, d
9 13
10 ‘n’
三、程序阅读题
1 1, 2, 3, 2, 3, 1, 3, 1, 2,
2 4, 8, 16, 24, 76, 89, 35, 25, 11, 9,
3 2, 4, 6#2, 5, 9#
4 0, -6, 9, 6, 1,
四、程序填空题
(1)  insert(name, mark)
(2)  t!=NULL; t=t->next
(3)  (struct link *)malloc(sizeof(struct link))
(4)  p->next = NULL
(5)  p->next = head

编程
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
给定平面任意两点坐标 (x1, y1) 和 (x2, y2),求这两点之间的距离(保留2位小数)。
要求定义和调用函数 dist(x1, y1, x2, y2)计算两点间的距离,函数形参x1、y1、x2和y2的类型都是double,函数类型是double。
输入输出示例:括号内是说明
输入
1               (repeat=1)
10 10           (x1=10, y1=10)
200 100         (x2=200, y2=100)
输出
Distance = 210.24

#include <stdio.h>
#include <math.h>
double dist(double x1, double y1, double x2, double y2);
int main(void)
{
    int repeat, ri;
    double distance, x1, y1, x2, y2;

    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat; ri++){
        scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
/*---------*/
        printf("Distance = %.2f\n", distance);
    }
}

/*---------*/

程序填空。
求1~100中能被6整除的所有整数的和

#include <stdio.h>
int main(void)
{
    int i, sum = 0;
/*---------*/
    printf("%d", sum);
}

程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入1 个实数x和正整数 n(n<=50),计算并输出 x 的 n 次幂(保留2位小数),不允许调用pow函数求幂。
输入输出示例:括号内是说明
输入
2       (repeat=2)
1.5 2   (x=1.5,n=2)
2 7     (x=2,n=7)
输出
2.25
128.00

#include <stdio.h>
int main(void)
{
    int i, n;
    int repeat, ri;
    double mypow, x;

    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat; ri++){
        scanf("%lf%d", &x, &n);
/*---------*/
        printf("%.2f\n", mypow);
   }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值