期末考试错题整理
卷一:
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;
}
}