期末考试错题整理

期末考试错题整理

卷一:

1
以下程序的输出结果是(    )。
main()
{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
  printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
}
(2.0分)
0.0 分
A、
0650
B、
1470
C、
5430
D、
输出值不定

正确答案: A 我的答案:D 

答案解析:

定义的数组a为4行4列,且前三行三列元素已初始化,根据C语法规定,未初始化的元素值为0。

答案:A

2
以下程序的正确运行结果是(  )。
#inclued<stdio.h>
main()
{     
  int k=4,m=1,p;
  p=func(k,m);
  printf(“%d”,p);
  p=func(k,m);
  printf(“%d\n”,p);
}
func(int a,int b)
{     
  static int m=0,i=2;
  i+=m+1;
  m=i+a+b;
  return (m);
}

(2.0分)
0.0 分
A、
8,17
B、
8,16
C、
8,20
D、
8,8

正确答案: A 我的答案:D 

错因:没有注意到 static 是全局保存,一直不变。

3、字符串中的“\n”、“\1”和“\”都是转义字符,都表示一个字符,所以字符串中的字符个数为9。

函数直接或者间接的自己调用自己,称为函数的 递归调用

若用0至9之间不同的三个数构成一个三位数,下面程序统计出共有多少种方法。请填空。
         main ( )
         { int i,j,k,count = 0; 
          for (i =1; i <=9; i++)
            for (j =0; j<=9; j++)
              if (   ①    )  continue;
              else for (k =0; k < =9; k ++)
                    if (    ②   )  count ++;
              printf(“%d”,count);
          }
(3.0分)
1.5 分
正确答案
第一空: 
i==j
第二空: 

第二空:

a[j]>a[j+1]

第二空:

a[j+1]<a[j]

也就是说,尽量使用大于号,而不是使用小于号。

下面程序的功能是检查一个N×N矩阵是否对称(即判断是否所有的a[i][j]等于a[j][i])。请填空。
  #define N 4
main()
{ int a[N][N]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
  int i,j,found=0;
  for(j=0;j<N-1; j++)
   for(         ①        ;i<N; i++)
    if(a[i][j]!=a[j][i])
    {         ②       ;
      break;
    }
  if(found) printf("No");
  else printf("Yes");
}

(3.0分)
0.0 分
正确答案
第一空: 
i=j+1
第二空: 
found=1
3
读程序写结果

int fun(char s[])
{    
  int n=0;
  while(*s<='9'&&*s>='0')
  {
    n=10*n+*s-'0';
           s++;
  }
  return(n);
}
main()
{
  char s[10]={'6','1','*','4','*','9','*','0','*'};
  printf("%d\n",fun(s));
}
注意两个数字间夹着一个‘*’

(2.0分)
0.0 分
正确答案
61
4
下列程序的运行结果是
  main()
  { char ch[2][5]={"6937","8254"},*p[2];
    int i,j,s;
    for(i=0;i<2;i++) p[i]=ch[i];
    for(i=0;i<2;i++)
    { s=0;
      for(j=0;ch[i][j]!=’\0’;j++)
        s=s*10+ch[i][j]-’0’;
      printf("%5d",s);
    }
}

(2.0分)
0.0 分
正确答案
6937  8254
我的答案
6937082540(应该自己不自动带零,而且一般就是向左对齐)


5、
main()
  { int  a[]={2,4,6,8,10};
    int y=1,x,*p;
    p=&a[1];
    for(x=0;x<3;x++)
      y+=*(p+x);
    printf("%d\n",y);  }


(2.0分)
0.0 分
正确答案
19






编程题:编写一个递归函数,计算1+2+3+......+n 的和。
(10.0分)
0.0 分
正确答案

我的答案
#include<stdio.h>
add(int a) 
{
if(a! =0) 
a+=add(a-1) ;
return a;
}
void main() 
{
int n;
scanf("%d", &n) ;

printf("%d", add(n)) ;

}
4
C语言中最简单的数据类型包括 (        )

(2.0分)
A、
整型、实型、逻辑型 
B、
整型、单精度型、双精度、字符型
C、
整型、字符型、逻辑型
D、
整型、实型、逻辑型、字符型

正确答案: B 我的答案:D 
6
若有如下定义,则值为3的表达式是()。
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
(2.0分)
A、
p+=2,*(p++)   【先调用a,后+1】
B、
p+=2,*++p
C、
p+=3,*p++
D、
p+=2,++*p

正确答案: A 我的答案:B 

宏定义是在预处理进行的,只做最基本的代码展开,可以理解为代码文本拷贝
宏定义ADD(x) x+x , 代码中ADD(a+b) x K , 会把a+b表达式当做x
预处理宏展开后就是 ,a+b+a+b x K

在C程序中,只能给指针变量赋 ① 值和 ② 值。

(3.0分)

正确答案

第一空:

地址

第二空:

NULL

在C语言中,注释语句要用 /* */ 标记起来。【注意://是从其他地方应进来的】

转义字符是由( )符号开始的单个字符或若干个字符组

第一空:

下列程序的功能是将数组a的元素按行求和并存储到数组s中。
  main()
  { int s[3]={0};
    int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int i,j;
    for(i=0;i<3;i++)
    { for(j=0;j<4;j++)
                 1       ;
      printf("%d\n",s[i]);
    }
  }

(3.0分)
正确答案
第一空: 
根据题意,应将第i行累加到数组元素s[i]中。程序中的外循环次数是行数,内循环次数是列数,所以应填s[i]+=a[i][j](或s[i]=s[i]+a[i][j])。

正确答案

第一空:

j<=2

第二空:

b[j][i]=a[i][j]

第三空:

i<=2

我的答案:

第一空:

​ j<=2

第二空:

​ b[i][j] =a[j][i]

第三空:

​ i<3

一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量。 正确答案:

main()

{ int i,n[6]={0};

for(i=1;i<=4;i++)

{ n[i]=n[i-1]*2+1;

​ printf("%d ",n[i]);

}

}

(5.0分)

正确答案

1 3 7 15

我的答案

137


#include<stdio.h>
#define M 10
void main()
{
int a[M][M], i , j ;
for(i=0;i<M;i++)
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
printf("%5d",a[i][j]);
if(i==j)printf("\n");
}
}

调用C语标准库函数时要求用 命令。

(3.0分)

正确答案

第一空:

#include

6

下面的程序功能是打印100以内个位数为6,且能被3整除的所有数。请填空。

​ main ( )

​ {int i,j;

​ for ( i = 0 ; ① ; i++)

​ { j = i*10 + 6;

​ if ( ② ) continue;

​ printf (“%d”,j);}}

(3.0分)

正确答案

第一空:

i<=9或i<10

第二空:

j%3!=0

我的答案:

第一空:

​ i<10

第二空:

​ !(j%3)

9
以下程序可计算10名学生1门课成绩的平均分,要求使用无返回值函数实现。请将程序补充完整。
#include<stdio.h>
void average(float array[10])
{     
  int i=0;
  while(【1】)
    array[0]+=【2】;
  array[i-1]=array[0]/10;
}
main()
{     
  float score[10];
  int i;
  printf("Please input 10 scores:\n");
  for(i=0;i<10;i++)
    scanf("%f",&score[i]);
  average(score);
  printf("The average score is %.2f\n",【3】);
}

(3.0分)
正确答案
第一空: 
++i<10
第二空: 
array[i]
第三空: 
score[8]
我的答案:
第一空: 
i<9 
第二空: 
array[++i] 
第三空: 
array[8] 
2
下面程序执行结果是32768。(  )
main( ) 
   {int a,b;
    printf("%d\n",b=(a=32767,a+1));}

(2.0分)

正确答案: × 我的答案: √ 

为什么错???因为32767是最大的了,而32768 就变成-1
1
输入字符串并统计各数字字符出现的次数。
(10.0分)
正确答案
#include "stdio.h"
#include "string.h"
main()
{ int a[10]={0},len,i; char ch[81];
  gets(ch);
  len=strlen(ch);
  for(i=0;i<len;i++)
   if(ch[i]>= '0'&&ch[i]<='9') a[ch[i]-'0']++;
  for(i=0;i<10;i++)
   printf("%c   %d\n",'0'+i,a[i]);
}
2
输入10个数,将其中最小数与第一个数交换,将最大数与最后一个数交换。
(10.0分)
正确答案
main()
{ int a[10],i,maxi,mini,max,min;
  printf("input array a:\n");
  for(i=0;i<10;i++)
    scanf("%d",&a[i]);
  maxi=0;mini=0;
  max=a[0];min=a[0];
  for(i=1;i<10;i++)
  {  if(a[i]>max) {max=a[i];maxi=i;}
    if(a[i]<min) {min=a[i];mini=i;}
  }
  i=a[0];a[0]=a[mini],a[mini]=i;
 if(maxi==0) maxi=mini;
  i=a[9];a[9]=a[maxi],a[maxi]=i;
  printf("input array a:\n");
  for(i=0;i<10;i++)
    printf("%4d",a[i]);
}

我的答案
#include<stdio.h>
int main()
{
int a[10];
int i,min,max,temp;
printf("请输入10个数字\n");
for(i = 0; i < 10; i++)
scanf("%d",&a[i]);
min = max = 0;
for(i = 1; i < 10; i++)
{
if(a[i] > max)
{
max = i;
}
if(a[i] < min)
{
min = i;
}
}
temp = a[min];
a[min] = a[max];
a[max] = temp;
for(i = 0; i < 10; i++)
printf("%d ",a[i]);
return 0;
}
答案解析:
3
从键盘上输入10个数,求其平均值
(10.0分)
正确答案
#include <stdio.h>
void main(){ 
      int  a,i,sum=0;                 
      float ave;;                  
      for(i=0;i<10;i++){
          scanf("%d",&a); 
          sum+=a;
      }
    ave=(float)sum/10;
      printf("ave = %f\n", ave); 
}

我的答案
#include<stdio.h>
int main()
{int x,i,s=0;
 scanf("%d",&x);
 for(i=0;i<10;i++)
 {scanf("%d",&x);
  s+=x;
 }
 printf("平均值=%.1f",s/10.0);
 return 0;
}

1

函数fread(buffer,size,count,fp)的作用是

(3.0分)

正确答案

第一空:

从fp所指向的文件读取count个size字节的数据存放到以buffer为起始地址的内存中

6

将文件指针fp移到离文件指针当前位置32个字节处,正确的函数操作是

(3.0分)

正确答案

第一空:

fseek ( fp, 32L, 1 )

我的答案:

第一空:

​ fseek(fp,32,SEEK_CUR);

stract函数的作用是 。

(3.0分)

正确答案

第一空:

连接两个字符数组中的字符串

我的答案:

第一空:

​ 把两个字符串连接起来

如果被定义函数的返回值类型是整型或字符型,使用前可以不必进行说明。

(1.0分)

                                                                                                                                                                                                                                                                        正确答案:                                                                                                                                                           *√*                                                                                                                                                                                                                                                                             我的答案:                                                                                           *×*                                                                                     
2
分析程序,写出运行结果

#include "stdio.h"
main()
{struct num {int x;int y;}sa[]={{2,32},{8,16},{4,48}};
 struct num *p=sa+1;
 int x;
 x=p->y/sa[0].x*++p->x;
 printf("x=%d p->x=%d",x,p->x);
}

(5.0分)
正确答案
x=72 p->x=9
我的答案
x=18 p->x =8 
五、论述题 (题数:3,共 30.0 分) 
1
编写程序,根据输入的三个边长a、b、c,判断它们是否构成三角形,若能构成三角形,继续判断该三角形是等边、等腰还是一般三角形,并求出此三角形的面积和周长。
(10.0分)
正确答案

我的答案
#include <stdio.h>

int main()
{
    int a, b, c;
    printf("输入三边长短:");
    scanf("%d%d%d",&a&b&c);
    if( ( (a-b) <c ) )&&( (a-c)<b )&&((b-c)<a)  )
        if((a==b)||(b==c)||(a == c))
            if(a==c==b)
                    printf("等边");
                            else printf("等腰");
                                else printf("一般);
    retrun 0;
}
2
有5个学生,每个学生有四门课程,将有不及格课程的学生成绩输出。
(10.0分)
正确答案
#include <stdio.h>
void main()
{ int  a[5][4]={{78,87,93,65},
               {66,57,70,86},
               {69,99,76,76},
               {78,59,87,90},
               {90,67,97,87}};
  int i,j,k;
  for(i=0;i<5;i++)
   for(j=0;j<4;j++)
     if(a[i][j]<60)
       { printf("%4d",i+1);
         for(k=0;k<4;k++)
           printf("%4d",a[i][k]);
         printf("\n");
         break;
        }
}

转载于:https://www.cnblogs.com/ydyk/p/11116362.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值