文档库 最新最全的文档下载
当前位置:文档库 › c语言习题

c语言习题

第十套】
一 单项选择
1 以下不符合C语言语法的赋值语句是()。
A、j=j=5;
B、k=2*4,k*4;
C、j++;
D、y=float(j);
2 以下运算符中,优先级最高的运算符是()。
A、?:
B、,
C、&&
D、++
3 根据下面的程序,正确的输出形式是( );
main()
{
int i=5,j=10;
printf ("i=%d,", i);
printf ("j=%d ", j);
}

A、i=5, j=10
B、10,5
C、5,10
D、i=5Uj=10
4 int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为()。
A、1
B、3
C、2
D、不一定
5 在以下一组运算符中,优先级最高的运算符是:( )
A、=
B、&&
C、<=
D、%
6 执行语句 for(i=1;i++<4;); 后变量 i 的值是()。
A、3
B、5
C、4
D、不定
7 若i为整型变量,则以下循环执行次数是()。
for(i=2;i==0;) printf("%d",i--);

A、0次
B、2次
C、无限次
D、1次
8 下列数组说明中,正确的是()。
A、char str1[],str2[];str2={"China"}; strcpy(str1,str2);
B、char str[]="China";
C、char str[]; str="China";
D、char str1[5],str2[]={"China"}; str1=str2;
9 设有数组定义: char array [ ]="China"; 则数组 array所占的
空间为()。
A、7个字节
B、6个字节
C、5个字节
D、4个字节
10 以下能对二维数组a进行正确初始化的语句是()。
A、int a[][3]={{1,2,3},{4,5,6}};
B、int a[2][4]={{1,2,3},{4,5},{6}};
C、int a[2][]={{1,0,1},{5,2,3}};
D、int a[][3]={{1,0,1}{},{1,1}};
11 用户定义的函数不可以调用的函数是()。
A、本文件外的
B、本函数下面定义的
C、非整型返回值的
D、main函数
12 以下正确的函数声明是()。
A、double fun(int x,int y);
B、double fun(int x,y);
C、double fun(int x;int y)
D、double fun(int x,int y)
13 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。
A、外部(extern)
B、静态(static)
C、寄存器(register)
D、自动(auto)
14 有关"文件包含"命令说法,下列叙述正确的是( ).
A、将预处理的结果作为一个源程序编译,得到一个目标文件.
B、一个 include 命令可指定多个被包含文件.
C、将预处理的结果作为多个文件编译.
D、被包含的文件可以是源文件或目标文件.
15 下面程序的输出结果应该是( ).
char s[ ]="ABCD";
main()
{
char *p;
for(p=s;pprintf("%s",p);
}

A、DCBA
B、ABCDBCDCDD
C、ABCDABCABA
D、ABCD
16 对于如下的结构体定义,若对变量person的出生年份进行赋值,正确的赋值语句是( ).
struct date
{int year,mouth,day;
};
struct worklist
{char name[20];
char sex;
struct date birthday;
}person;

A、year=1976;
B、person.birthday.year=1976;
C、birthday.year=1976;
D、person.year=1976;
17 若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,
下面符合此要求的函数调用是()。
A、fopen("A:\user\abc.txt","rb")
B、fopen("A:\\user\\abc.txt","r+")
C、fopen("A

:\\user\\abc.txt","w")
D、fopen("A:\user\abc.txt","r")

DDACD BABBA DADAB BB

二 判断
1 在C程序中,逗号运算符的优先级最低。
2 C语言的输入、输出功能是由系统提供的输入、输出语句实现的.
3 运算符的级别由高向低依次为赋值运算符->关系运算符->算术运算符->逻辑运算符->!.
4 已知x=3,y=1,执行分支语句 if(x>y){t=x;x=y;y=t;} else printf("error!");后,结果为error!.
5 若有说明int c;则while(c=getchar());没有语法错误。
6 for循环的三个表达式中间用分号相分隔,并且分号不能省略.
7 若有语句: char a[ ]="string";则 a[6]的值为'\0';
8 数组整体可以参加各种数学运算,数组元素也可以参加各种数学运算.
9 C语言中引用数组元素的方括号可以用花括号代替.
10 在C语言中,函数名仅仅代表函数的名称,没有任何含义.
11 当全局变量与局部变量同名时,局部变量起作用.
12 在C程序中 , 函数可以嵌套定义 , 但不可以嵌套调用
13 宏名有类型,其参数也有类型.
14 用指针取值比用数组名取值速度要快.
15 结构体变量的成员可以象普通变量一样进行各种运算.
16 C语言中,遇到回车符号就意味着文件结束.

对错错错对 对对错错错 对错错对对 错

三 填空
1 已知:int i=8,j=10,m,n;m=++i;n=j++;问语句执行后m=_____,n=_____。
2 执行下列语句后,z 的值是_____.
int x=4,y=25,z=5; z=y/x*z;
3 设x=2&&2||5>1,x的值 为_____.
4 已知a=12,写出表达式 05 若有数组定义:int a[10];
则该数组可用的最小下标值是_____.
6 在调用一个函数的过程中,直接或间接地调用该函数本身,称为函数的_____调用。
7 设有以下结构类型说明和变量定义,在TC编译环境下,变量a在内存所占字节数是 _____。
struct stud { char name[10]; float s[4]; double ave; } a,*p;
8 若有fp=fopen("a1.dat","r+")打开文件语句,这个文件的数据是以_____的形式存放在内存中,该文件的使用方式为读/_____。

9 10 30 1 0 0 递归 34 ASCII 或 ASCII码 或 文本 写

四 程序设计
1 /*-------------------------------------------------------
【程序设计】
--------------------------------------------------------
功能:编写函数求10个数中的次大数,返回其值。

注意:请勿改动主函数main和其它函数中的任何内容。
-------------------------------------------------------*/
#include "stdio.h"
int second_max(int a[], int n)
{
/*********Begin**********/



/********** End **********/
}

main()
{
void TestFunc();
int x[10]={12,-4,5,8,0,9,-3,10,6,2};
printf("this second max =%d\n", second_max(x, 10));
TestFunc();
}

void TestFunc()
{
FILE *IN,*OUT;
int i,b[10];
int o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read File Error");
}
OUT=fopen("out.dat","w");
i

f(OUT==NULL)
{
printf("Write File Error");
}
for(i=0;i<10;i++)
fscanf(IN,"%d",&b[i]);
o=second_max(b,10);
fprintf(OUT,"%d\n",o);
fclose(IN);
fclose(OUT);
}

【参考代码】
int i,j,max,min,second_max;
max=min=a[0];
for(i=1;i{if(a[i]>max) max=a[i];
if(a[i]second_max=min;
for(i=1;iif(a[i]>second_max && a[i]return(second_max);

===============


2 /*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:编写函数fun求sum=d+dd+ddd+……+dd...d(n个d),
其中d为1-9的数字。
例如:3+33+333+3333+33333(此时d=3,n=5),d和n在主函
数中输入。

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

#include "stdio.h"
main()
{
int d,n;
long sum,fun();
void TestFunc();
printf("d=");
scanf("%d",&d);
printf("n=");
scanf("%d",&n);
sum=fun(d,n);
printf("sum=%ld\n",sum);

TestFunc();
}

long int fun(int d,int n)
{
/*********Begin**********/






/********** End **********/
}

void TestFunc()
{
FILE *IN,*OUT;
int n;
int i[2];
long o;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("Read File Error");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("Write File Error");
}
for(n=0;n<2;n++)
{
fscanf(IN,"%d",&i[n]);
}
o = fun(i[0],i[1]);
fprintf(OUT,"%ld\n",o);

fclose(IN);
fclose(OUT);
}

【参考代码】

long int s=0,t=0;
int i;
for(i=1;i<=n;i++)
{ t=t+d;
s=s+t;
d=d*10;
}
return s;


===============

五 程序改错
1 /*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:删除 w 数组中下标为k的元素中的值。程序中,调用了
getindex、arrout和arrdel三个函数,getindex用以输入
所删元素的下标,函数中对输入的下标进行检查,若越界,
则要求重新输入,直到正确为止。arrout用以输出数组中
的数据,arrdel进行所要求的删除操作。

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

#include "conio.h"
#include "stdio.h"
#define NUM 10

/**********ERROR**********/
void arrout ( int w, int m )
{
int k;
/**********ERROR**********/
for (k = 1; k < m; k++)
/**********ERROR**********/
printf ("%d " ,w[m]);
printf ("\n");
}

int arrdel ( int *w, int n, int k )
{
int i;
for ( i = k; i < n-1; i++ )
w[i] = w[i+1];
n--;
return n;
}

int getindex( int n )
{ int i;
do
{ printf("\nEnter the index [ 0<= i< %d ]: ", n );
scanf ("%d",&i );
} while( i < 0 || i > n-1 );
return i;
}

main( )
{ int n, d, a[NUM]={21,22,23,24,25,26,27,28,29,30};
n = NUM;

printf ("Output primary d

ata :\n"); arrout ( a, n );
d = getindex( n ); n = arrdel ( a, n, d );
printf ("Output the data after delete :\n"); arrout( a, n );
}

【改错1】
【参考答案】
void arrout ( int *w, int m )
void arrout ( int w[], int m )


============================================================

【改错2】
【参考答案】
for (k = 0; k < m; k++)


============================================================

【改错3】
【参考答案】
printf ("%d ", w[k]);


============================================================



2 /*------------------------------------------------------
【程序改错】
--------------------------------------------------------

功能:编写函数fun生成一个对角线元素为5,上三角元素为0,
下三角元素为1的3*3的二维数组。

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

#include "stdio.h"
void fun(int arr[][3])
{
/**********ERROR**********/
int i,j
/**********ERROR**********/
for(i=1;i<3;i++)
for(j=0;j<3;j++)
/**********ERROR**********/
if(i=j)
arr[i][j]=5;
else if(j>i)
arr[i][j]=0;
else
arr[i][j]=1;
}
main()
{
int a[3][3],i,j;
fun(a);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}

【改错1】
【参考答案】
int i,j;


============================================================

【改错2】
【参考答案】
for(i=0;i<3;i++)


============================================================

【改错3】
【参考答案】
if(i==j)


============================================================


六 程序填空
1 /*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:函数fun的功能是:有N×N矩阵,以主对角线为对称线,
对称元素相加并将结果存放在左下三角元素中,右上三角
元素置为0。请用下标法访问数组元素。
例如:若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为
1 0 0
6 5 0
10 14 9
注意:请在下划线处填入正确的内容并把下划线删除。
不得增行或删行,也不得更改程序的结构!
-------------------------------------------------------*/
#include
#define N 3

void fun(int (*t)[N])
{
int i,j;
for(i=1;i{
/***********FILL***********/
for(j=0;_______;j++)
{
/***********FILL***********/
_________=t[i][j]+t[j][i];
/***********FILL***********/
_________=0;
}
}
}

main()
{
int t[][N]={1,2,3,4,5,6,7,8,9},i,j;
printf("\nThe original array:\n");
for(i=0;i{
for(j=0;jprintf("\n");
}
fun(t);
printf("\nThe result is:\n");

for(i=0;i{
for(j=0;jprintf("\n");
}
}


【空1】
【参考答案】
ji>j


============================================================

【空2】
【参考答案】
t[i][j]=t[i][j]+t[j][i];


============================================================

【空3】
【参考答案】
t[j][i]


============================================================


2 /*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:根据整型参数m,计算如下公式的值
y=1/(100×100)+1/(200×200)+1/(300×300)+…+1/(m×m)
例如:若m=2000,则应输出0.000160。
注意:请在下划线处填入正确的内容并把下划线删除。
不得增行或删行,也不得更改程序的结构!
-------------------------------------------------------*/
#include
/***********FILL***********/
_________ fun(int m)
{
double y=0,d;
int i;
/***********FILL***********/
for(i=100;_______;i+=100)
{
d=(double)i*(double)i;
/***********FILL***********/
y+=1/________;
}
return(y);
}

main()
{
int n=2000;
printf("\nThe result is %lf\n",fun(n));
}

【空1】
【参考答案】
double


============================================================

【空2】
【参考答案】
i<=m
m>=i


============================================================

【空3】
【参考答案】
d


============================================================


相关文档