51.根据定义和数据的输入方式,输入语句的正确形式为( )。已有定义:float f1,f2; 数据的输入方式:4.52
3.5
A)scanf(“%f,%f”,&f1,&f2); B)scanf(“%f%f”,&f1,&f2); C)scanf(“%3.2f,%2.1f”,&f1,&f2); D)scanf(“%3.2f%2.1f”,&f1,&f2); 52.指出下面正确的输入语句是( ) A.scanf (“a=b=%d”,&a,&b); B.scanf(“a=%d,b=%f”,&m,&f); C.scanf(“%3c”,c); D.scanf(“%5.2f,&f);
53. 设x,t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为( )。 A.不定值 B.10 C.1 D.0 54. 假定所有变量均已正确定义,则下列程序段运行后y的值是( )。 int a=0,y=10;
if(a=0) y--; else if(a>0) y++; else y+=y;
A.20 B.11 C.9 D.0 55. 假定所有变量均已正确定义,则下列程序段运行后x的值是( )。 a=b=c=0; x=35;
if(!a) x--; else if(b); if(c) x=3; else x=4;
A.34 B.4 C.35 D.3
56. 若有“int a=1,x=1;”,则循环语句“while(a<10) x++; a++;”的循环执行( )。 A.无限次 B.不确定次 C.10次 D.9次 57. 循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行( )。
A.无限次 B.不确定次 C.10次 D.9次 58. 假定i和j为int型变量,则执行以下语句后j的值是( )。 int i=1;
switch(i++) {
case 1:for(j=0;j<9;j++) if(i==1) break; case 2:for(j=1;j<10;j++) if(i==2) break; case 3:printf(“i=%d\\n”,i); }
A.0 B.1 C.9 D.10
59. 设x和y均为int型变量,则执行以下的循环后,y的值为( )。
for(y=1,x=1;y<=50;y++) {
if(x>=0) break;
if(x%2==1) {x+=5;continue;} x-=3; }
A.2 B.4 C.6 D.8 60. 在C语言中,下列说法中正确的是( )。 A. 不能使用“do 语句 while(条件)”的循环
B. “do 语句 while(条件)”的循环必须使用“break”语句退出循环 C. “do 语句 while(条件)”的循环中,当条件为非0时将结束循环 D. “do 语句 while(条件)”的循环中,当条件为0时将结束循环 61. 在C语言语句中,用来决定分支流程的表达式是( )。
A.可用任意表达式 B.只能用逻辑表达式或关系表达式 C.只能用逻辑表达式 D.只能用关系表达式 62. 若有以下数组说明,则数值最大的和最小的元素下标分别是( )。
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
A.1,12 B.0,11 C.1,11 D.0,12 63. 若有以下数组说明,则i=10;a[a[i]]元素数值是( )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A.10 B.9 C.6 D.5 64. 若有int a[3][5]={{2,2},{2,6},{2,6,2}},则数组a共有个元素:( A.8 B.5 C.3 D.15
65. 若有int a[7]={1,2,3,4,5,6,7},*p=a则不能表示数组元素的表达式是: ( ))
A.*p B.*a C.a[7] D.a[p-a] 66. 若有以下说明,则数值为4的表达式是( )。
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’,d,g;
A.a[g-c] B.a[4] C.a[‘d’-‘c’] D.a[‘d’-c] 67.
下列语句中,正确的是( )。
A. char a[3][]={‘abc’,‘l’}; B. char a[][3]={‘abc’,‘l’}; C. char a[3][]={‘a’,“l”}; D. char a[][3]={“a”,“l”}; 68.
下列定义的字符数组中,“printf(“%s\\n”,str[2]);”的是输出是( )。
static str[3][20]={“basic”,“foxpro”,“windows”};
A.basic B.foxpro C.windows D.输出语句出错 69.
合法的数组定义是( )。
A. int a[]={“string”}; B. int a[5]={0,1,2,3,4,5}; C. char a={“string”}; D. char a[]={0,1,2,3,4,5};
70.设有如下字符数组定义,则合法的函数调用是( )。 char a[]=“I am a student”,b[]=“techer”; A.strcmp(a,b); B.strcpy(a,b[0]); C.strcpy(a[7],b); D.strcat(a[7],b); 71.设有如下定义,则正确的叙述为( )。 char x[]=“abcdefg”;
char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; A. 数组x和数组y等价 B. 数组x和数组y长度相同 C. 数组x的长度大于数组y的长度 D. 数组x的长度小于数组y的长度 72.下列描述中不正确的是( )。 A. 字符型数组中可能存放字符串。
B. 可以对字符型数组进行整体输入、输出。 C. 可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
73.设有如下二维数组定义,则不正确的元素引用是( )。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; A.a[2][3] B.a[a[0][0]][1] C.a[7] D.a[2][‘c’-‘a’] 74.对于同类型的指针变量,不可能进行的运算是( )。
A.- B.= C.+ D.== 74.下列不正确的定义是( )。
A. int *p=&i,i; B.int *p,i; C.int i,*p=&i; D.int i,*p;
75.设指针x指向的整型变量值为25,则“printf(“%d\\n”,++*x);”的输出是( )。 A.23 B.24 C.25 D.26 76. 若有说明:“char ch,*p;”,则不能正确获得值的语句是( )。 A.*p=getchar();
B.p=&ch;scanf(“%c”,p);
C.p=(char *)malloc(1);*p=getchar(); D.p=&ch;*p=getchar();
77.以下选项中不能使指针正确指向字符串的是( ) A) char *ch;*ch=“hello” B) char *ch=“hello”
C) char *ch=“hello”;ch=“bye” D) char *ch”;ch=“hello”
78. 若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( )。 A.a[p] B.p[a] C.*(p+2) D.p+2 79. 若有以下定义,则不能表示a数组元素的表达式是( )。 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A.*p B.a[10] C.*a D.a[p-a] 80. 若有以下定义,则值为3的表达式是( )。 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; A.p+=2,*(p++) B.p+=2,*++p C.P+=3,*p++ D.p+=2,++*p;
81. 若有定义“int a[3][4];”则对数组元素a[i][j](0<=i<3,0<=j<4)正确的引用是( )。 A.*(a+4*i+j) B.*(*(a+i)+j) C.*(a+i)[j] D.a[i]+j
82. 若有定义“int a[3][4],*p=a;”,则对数组元素a[i][j](0<=i<3,0<=j<4)正确的引用是( )。
A.p=a B.*(*(p+i)+j) C.*(p+i*4+j) D.*(a+i)+j 83. 有如下定义和语句,则输出结果是( )。 int **pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf(“%d,%d\\n”,**pp,*p);
A.10,20 B.10,10 C.20,10 D.20,20 84. 若用数组名作为函数调用的实参,传递给形参的是( ) A.数组的首地址 B.数组第一个元素的值 C.数组中全部元素的值 D .数组元素的个数
85. 以下叙述中不正确的是( ) A.在不同的函数中可以使用相同名字的变量。 B.函数中的形式参数是局部变量。
C.在一个函数内的复合语句中定义变量在本函数范围内有效。 D.在一个函数内定义的变量只在本函数范围内有效。 86. 在C语言程序中,有关函数的定义正确的是( )。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和函数的均可以嵌套
87. 以下对C语言函数的有关描述中,正确的是( )。
A. 在C语言程序中,调用函数时,只能把实参的值传递给形参,形参的值不能传送给实参 B. C语言函数既可以嵌套定义又可递归调用 C. C语言函数必须有返回值,否则不能使用函数
D. 在C语言程序中有调用关系的所有函数必须放在同一个源程序文件中 88. 函数调用语句“f((e1,e2),(e3,e4,e5));”中参数个数是( )。 A.5 B.4 C.2 D.1 89.
有一函数的定义如:void fun(char *s){„„},则不正确的函数调用是( )。
A. main()
{char a[20]=”abcdefgh”; fun(a); „„ }
B. main()
{ char a[20]=”abcdefgh”; fun(&a[0]); „„ } C. main()
{ char a[20]=”abcdefgh”; char *p=a;fun(p); „„ } D. main()
{char a[20]=”abcdefgh”; fun(a[]); „„ }
90. 函数的功能是交换x和y中的值,且通过正确调用返回交换结果。不能正确执行此功能的
函数是( )。
A. funa(int *x, int *y)
{ int i,*p=&i; *p=*x;*x=*y;*y=*p; }
B. funa(int x, int y)
{ int t; t=x;x=y;y=t; }
C. funa(int *x, int *y)
{ int p;
p=*x; *x=*y; *y=p; }
D. funa(int *x, int *y)
{ *x=*x+*y; *y=*x-*y; *x=*x-*y; }
91. 要求函数的功能是在一维数组a中查找x值;若找到则返回所在的下标值,否则返回0;
数据放在a[1]到a[n]中,不能正确执行此功能的函数是( )。
A. funa(int *a, int n, int x)
{ *a=x;
while (a[n]!=x) n--; return (n); }
B. funb(int *a, int n, int x)
{ int k;
for(k=1;k<=n;k++) if(a[k]==x) return(k); return 0; }
C. func(int a[], int n, int x) { int *k; a[0]=x;k=a+n; while(*k!=x) k--; return (k-n);
}
D. fund(int a[], int n, int x) { int k=0; do k++;
while((k}92.以下程序的输出结果是( )。 fun(char **m)
{ ++m; printf(“%s\\n”,*m);} main()
{ char *a[]={“BASIC”,“FOXPRO”,“C”}; fun(a); }
A.BASIC B.ASIC C.FOXPRO D.C
93.放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是( )A.struct student {int sno; char name[20]; float score;} stu[100];
。 B. struct student stu[100] {int sno; char name[20]; float score;}; C. struct{ int sno; char name[20]; float score;} stu[100];
D. struct student {int sno; char name[20]; float score;}; struct student stu[100]; 94.设有定义语句“struct {int x; int y;} d[2]={{1,3},{2,7}};”则“printf(“%d\\n”,d[0].y/d[0].x*d[1].x);”输出的是( )。 A.0 B.1 C.3 D.6 95.
设
有
定
义
语
句
“
enum
team{my,your=4,his,her=his+10};
”
,
则
“printf(“%d,%d,%d,%d\\n”,my,your,his,her);”输出的是( )。
A.0,1,2,3 B.0,4,0,10 C.0,4,5,15 D.1,4,5,15 96. 若有如下定义,则“printf(“%d\\n”,sizeof(them));”输出的是( )。 typedef union {long x[2]; int y[4]; char z[8];} MYTYPE; MYTYPE them;
A. 32 B.16 C.8 D.24 97.若有以下说明和定义语句:
union uti {int n;double g;char ch[9];} struct srt{float xy;union uti uv;}aa; 则变量aa所占内存的字节数是( ) A) 9 B) 8 C) 13 D) 17
98.设有如下定义,则对data中的a成员的正确引用是( )。 struct sk{ int a; float b;} data,*p=&data; A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a 99.设有如下定义成的链表,则值为6的表达式是( )。
struct st {int n; struct st *next;} a[3]={5,&a[1],7,&a[2],9,NULL}, *p=&a; A.p++ ->n B.p->n++ C.(*p).n++ D.++p->n 100.在C语言中,文件由( )。
A.字符(字节)序列组成 B.记录组成 C.数据行组成 D.数据块组成 101.在下列语句中,将c定义为文件型指针的是( )。
A.FILE c; B.FILE *c C.file c; D.file *c;
102.以读写方式打开一个已有的文本文件file1,并且FILE *fp,下面fopen函数正确的调用方式是( )。
A.fp=fopen(“file1”,“r”)
B.fp=fopen(“file1”,“r+”) C.fp=fopen(“file1”,“rb”) D.fp=fopen(“file1”,“w”)
103. 标准库函数fputs(p1,p2)的功能是( )。 A. 从p1指向的文件中读一个字符串存入p2指向的内存 B. 从p2指向的文件中读一个字符串存入p1指向的内存 C. 从p1指向的内存中读一个字符串写到p2指向的文件中 D. 从p2指向的内存中读一个字符串写到p1指向的文件中 104. 下列正确的预编译命令是( )。 A. define PI 3.14159
B. #define P(a,b) strcpy(a,b) C. #define stdio.h D.#define PI 3.14159;
105. 下列命令或语句中,正确的是( )。 A. #define MYNAME=”ABC” B. #include stdio.h C. for(i=0;i<10;i++); D. struct int stu{int name};
106. 下列命令或语句中,错误的是( )。
A.#define PI 3.14159 B.#include ; B.if(2); D.for(;;) if(1) break; 107. 设有宏定义“#define AREA(a,b) a*b”,则正确的“宏调用”是( )。 A.s=AREA(r*r) B.s=AREA(x*y)C.s=AREA D.s=c*AREA((x=3.5),(y+4.1)) 108. 设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为( )。 #define N 3
#define Y(n) ((N+1)*n)
A.出错 B.42 C.48 D.54
109. 设有以下宏定义,当int x,m=5,n=1时,执行语句“IFABC(m+n,m,x);”后,x的值为( ) #define IFABC(a,b,c) c=a>b?a:b
A.5 B.6 C.11 D.出错 110. 110.下列关于指针定义的描述,___________是错误的。 A.指针是一种变量,该变量用来存放某个变量的地址值的。 B.指针变量的类型与它所指向的变量类型一致。
。 C.指针变量的命名规则与标识符相同。
D.在定义指针时,标识符前的“*”号表示后面的指针变量所指向的内容。 111.在函数中默认存储类型说明符的变量应该是( )存储类型。 A.内部静态 B. 外部 C.自动 D. 寄存器 112.对以下说明语句,叙述不正确的是( )。 struct stu { int a; float b; } stutype; A.struct 是结构体类型的关键字 B.struct stu是用户定义的结构体类型 C.stutype是用户定义的结构体类型名 D.a和b都是结构体成员名
113.在C程序中有如下语句:char *func(int x,int y); 它是 ( )。 A.对函数func的定义。 B.对函数func的调用。 C.对函数func的原型说明。 D.不合法的。
114.为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与(组成配对关系。
A. 缩排位置相同的if B. 在其之前未配对的if C. 在其之前未配对的最近的if D.同一行上的if 115.设有说明double(*p1)[N];其中标识符p1是( )。 A. N个指向double型变量的指针。 B. 指向N个double型变量的函数指针。
C. 一个指向由N个double型元素组成的一维数组的指针。
D. 具有N个指针元素的一维指针数组,每个元素都只能指向double型量。 116.下列描述中不正确的是( )。 A. 字符型数组中可能存放字符串。
B. 可以对字符型数组进行整体输入、输出。 C. 可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
117.设有如下定义: char *aa[2]={\"abcd\则以下说法中正确的是( )。 A)aa数组成元素的值分别是\"abcd\"和ABCD\"
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组
C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D)aa数组的两个元素中各自存放了字符'a'和'A'的地址
二、填空题
)1.汇编语言属于面向 的语言,高级语言属于面向 的语言。
2.C语言从源程序的书写到上机运行输出结果要经过____、_____、_____、_ 四个步骤。 3.C源程序的基本单位是 。
4.C语言中实型变量分为两种类型,是 和 。 5.C程序设计的三种基本结构是 ________、________和________。
6.在C语言程序中允许出现的字符集是 、 、 和 。 7.C语言程序是由函数构成的,其中有并且只能有 个主函数。C语言程序的执行总是由 函数开始,并且在 函数中结束。
8.C语言中的逻辑值“真”是用 表示的,逻辑值“假”是用 表示的。逻辑表达式值为“真”是用 表示的,逻辑表达式值为“假”是用 表示的。 9.有下列运算符:<<、+、++、&&、<=,其中优先级最高的是 ,优先级最低的是 。
10.设x和y均为int型变量,且x=1,y=2,则表达式“1.0+x/y”的值为 。 11.若a是int型变量,则下面表达式的值为 。 (a = 4 * 5 , a * 2), a + 6
12.能表述“2014.若有定义语句“int a=25,b=14,c=19;”,则以下语句执行结果是 。 if(a++<=25&&b--<=2&&c++)printf(“***a=%d,b=%d,c=%d\\n”,a,b,c); else printf(“***a=%d,b=%d,c=%d\\n”,a,b,c);
15.以下两条if语句可合并成一条if语句,即 。 if(a<=b) x=1; else y=2;
if(a>b) printf(“****y=%d\\n”,y); else printf(“****x=%d\\n”,x);
16.设i,j,k均为int型变量,则执行完下面的for循环后,k的值为 。 for(i=0,j=10;i<=j;i++,j--) k=i+j;
17.在C语言中,数组的各元素必须具有相同的 ,元素的下标下限为 ,但在执行过程中,不检查元素下标是否 。下标必须是正整数、0或者 。 18.在C语言中,数组在内存中各占一片 的存储区,由 数组名代表它的首地址。数组名是一个 常量,不能对它进行加、减和赋值运算。 19.在C语言中,二维数组元素在内存中的存放顺序是 。
20.若有定义:double x[3][5];则x数组中行下标的下限为 ,列小标的上限
为 。
21.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是 ,a[2][2]得到的初值是 。
22.执行“static int b[5],a[][3]={1,2,3,4,5,6};”后,b[4]= ,a[1][2]= 。 23.设有定义语句“static int a[3][4]={{1},{2},{3}};”,则a[1][1]的值为 , a[2][1]的值为 。
24.若在程序中用到“putchar()”函数,则应在程序开头写上包含命令 ,若在程序中用到“strlen()”函数,则应在程序开头写上包含命令 。
25.在C语言中,数组名是一个 常量,不能对这进行 和 运算,
由 代表它的首地址。
26.在C程序中,指针变量只能赋 值和 值。
27.在C程序中,指针变量可以通过 、 、 三种方式赋值。 28.在C程序中,可以对指针变量进行 和 来移动指针。 29.“*”称为 运算符,“&”称为 运算符。
30. 设有“char *a=“ABCD”;”,则“printf(“%s”,a)”的输出是 ,而printf(“%c”,*a)的输出是 。
31.函数中的形参和调用时的实参都是数组名时,传递方式为 ,都是变量时,传递方式为 。
32.若自定义函数要求返回一个值,则应在该函数体中有一条 语句;若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 。
33.若函数的形式参数是指针类型,则实参可以是 、 和 。 34.下面函数要求计算两个整数x,y之和,并通过形参z传回该和值。请填空。 void add(int x, int y, ) { =x+y; return;}
35.“.”称为 运算符,“->”称为 运算符。
36.若有以下说明和定义语句,则变量w在内存中所占的字节数是 。 union aa {float x; float y; char c[6];};
struct st { union aa v; float w[5]; double ave;} w; 37.若有以下定义和语句,则表达式“++p->a”的值是 。 struct wc{int a; int *b;}; int x[]={11,12}; y[]={31,32};
static struct wc z[]={100,x,300,y},*p=z;
38.C语言中调用 函数打开文件,调用 函数关闭文件。
39.在C语言程序中,对文件进行操作首先要_____;然后对文件进行操作,最后要对文件实行
_____操作,防止文件中信息的丢失。
40.“FILE *p”的作用是定义了一个 ,其中的“FILE”是在 头文件中定义的。 41.若在程序中用到“putchar()”函数,则应在程序开头写上包含命令 ,若在程序中用到“strlen()”函数,则应在程序开头写上包含命令 。
42.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入0来结束输入,用i,j来放统计数,请填空完成程序。 void main() { n,i,j;
printf(“输入整数,以0结束输入\\n”); scanf(“%d”,&n); while
{ if(n>0) i= ; if(n<0) j= ; ; }
printf(“i=%4d,j=%4d\\n”,i,j); }
43.下列程序的功能是输入一个正整数,判断是否是素数,若为素数则输出1,否则输出0,请填空完成程序。 void main() { int i,x,y=1; scanf(“%d”,&x); for(i=2;i<=x/2;i++)
if {y=0;break;} printf(“%d\\n”,y); }
44.以下程序的功能是输入50个数,以每行10个数据的形式输出a数组,请填空。 void main() { int a[50], i;
printf(“输入50个整数:”);
for(i=0;i<50;i++) scanf(“%d”, ); for(i=0;i<50;i++)
{ if( ) ; printf(“%3d”,a[i]);
} }
45.程序说明:统计正整数的各位数字中零的个数,并求各位数字中的最大者。 #include void main() {int n,count,max,t; count=max=0; scanf(“%d”,&n); do
{ t= ; if(t==0) ++count;
else if(maxprintf(“count=%d,max=%d”,count,max); }46.下面程序的功能是输出数组s中最大元素的下标,请填空。 void main() { int k,p;
int s[]={1,-9,7,2,-10,3};
for(p=0,k=p;p<6;p++) if(s[p]>s[k]) ; printf(“%d\\n”,k); }
47.下面程序的功能是在a数组中查找与x值相同的元素所在位置。数据从a[1]元素开始存放,请填空。
#include void main() { int a[11],i,x;printf(“输入10个整数:”);
for(i=1;i<=10;i++) scanf(“%d”,&a[i]);
printf(“输入要找的数x:”); scanf(“%d”, ); a[0]=x; i=10;
while(x!= ) ;
if( ) printf(“与x值相同的元素位置是:%d\\n”,i); else printf(“找不到与x值相同的元素!\\n”); }
48.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。 #include “string.h” void main() { int i,j, ,;
char str[]={“1234567”};
for(i=0,j=strlen(str); ;i++,j--) { k=str[i]; str[i]=str[j]; str[j]=k;} }
49.以下程序的功能是给偶数行的方阵中所有边上的元素和两对角线上的元素置1,其它元素置0(要求对每个元素只置一次值)。最后按矩阵形式输出。请填空。 void main()
{ int a[10][10],i,j; for(i=0;i<10;i++)
{a[ ][i]=1; a[i][ ]=1;} for(i=1;i<9;i++) a[0][ ]=1; for(i=1;i<9;i++) a[ ][i]=1;
for(i=1;i<9;i++) a[i][ ]=1;
for(i=1;i<9;i++) a[ ][9]=1; for(i=1;i< ;i++) for(j=1;j< ;j++)
if( ) a[i][j]=0; for(i=0;i<10;i++)5
{ for(j=0;j<10;j++) printf(“%2d”,a[i][j]); ; } }
50.用键盘输入一串字符,下面程序能统计输入字符中大写字母的个数,用‘#’号结束输入,请填空。
#include void main(){ int c[26],i; char ca;
for(i=0;i<26;i++) c[i]= ; scanf(“%c”,&ca); while( )
{ if((ca>=’A’)&&(ca<=’Z’)) c[ca-65]+= ;
; }
for(i=0;i<26;i++)
if(c[i]) printf(“%c:%d个\\n”,i+ ,c[i]); }
51.以下程序可把输入的十进制长整型数以十六进制数的形式输出,请填空。 void main()
{ char b[17]={“0123456789ABCDEF”}; int c[64],d,i=0,base=16; long n;
printf(“Enter a number:\\n”); scanf(“%d”,&n);
do {c[i]= ;i++;n=n/base;}; while (n!=0);
printf(“Transmit new base:\\n”);
52.以下程序用指针指向三个整型存储单元,输入三个整数,选出其中最小值并输出。请填空。 #include main(){ int ;
a=(int *)malloc(sizeof(int)); b=(int *)malloc(sizeof(int)); c=(int *)malloc(sizeof(int)); min=(int *)malloc(sizeof(int));
printf(“输入三个整数:\\n”);scanf(“%d%d%d”, ); printf(“输出这三个整数:%d%d%d\\n”, ); *min=*a;
if(*a>*b) ; if( >*c) ;
printf(“输出最小整数:%d\\n”, ); }
53.以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符串,存入一具字符数组,然后输出该字符数组中的字符串,请填空。 #include “stdio.h” #include “ctype.h” main()
{ char str[81], *sptr; int i;
for(i=0;i<80;i++)
{ str[i]=getchar(); if(str[i]==’\\n’) break;} str[i]= ; sptr=str;
while(*sptr) putchar(*sptr ); }
54.以下程序从输入的10个字符串中找出最长的那个串及长度,请填空。 #include #include main(){ char str[10][80], *sp; int i; for(i=0;i<10;i++) gets(str[i]); sp=str[0];
for(i=0;i<10;i++) if(strlen(sp)55.以下函数用来在w数组中插入x。n所指向的是存储单元中存放在w数组中的字符个数。数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。 void fun(char *w, char x, int *n) { int i,p; p=0; w[*n]=x;while(x>w[p]) p++;
for(i=*n;i>p;i--) w[i]= ;
w[p]=x; ++*n; }
56.函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值。即当s>t时返回正值,当s{ if(*s==’\\0’) return (0); ++s; ++t; }return( ); }
57.以下程序是把字符串中的内容按逆序输出,但不改变串中的内容,请填空。 void inverp(char *a) { if(! ) return; inverp(a+1);
printf(“%c”,* ); }
58.以下程序的功能是先输入20个人的姓名和他们的电话号码(七个数字),然后输入姓名,查找该人的电话号码,请填空。 #include #include struct ph{char name[10]; char tel[8];}; main()
{ s[20];
void readin(struct ph *p);
void search(struct ph *p, char *x); char c[10]; readin(s);
printf(“请输入被查人的姓名:\\n”); gets( ); search(s,c); }
void readin(struct ph *p) { int i;
for(i=0;i<20;i++,p++)
{ printf(“请输入姓名:”); gets( ); printf(“请输入他的电话号码:”);gets( ); } }
void search(struct ph *p, char *x) { int i;
for(i=0;i<20;i++,p++) if(strcmp( )==0)
{ printf(“%s的电话号码是%s\\n”,x,p->tel);break;} if(i==3) printf(“找不到%s的电话号码!\\n”,x); }
59.下面的程序用来统计文件中字符的个数。请填空 #include main() { FILE *fp; long num=0;if(fp=fopen(“fname.dat”,“r”)==NULL) { printf(“Can’t open file!\\n”); exit(0);} while {fgetc(fp); num++;} printf(“num=%d\\n”,num); fclose(fp); }
60.下面程序的作用是从磁盘文件stu.dat中读取N个学生的姓名、学号、成绩,然后在屏幕上显示输出。请将程序补充完整。 #include #define N 100 struct student { char name[20]; int no; int score; } stud[N]; main() { FILE *fp;int i; if
{ printf(“Can not open file!\\n”); exit(0);} ; for(i=0;iprintf(“name :%s NO: %d score: %d\\n”,stud[i].name, stud[i].no, stud[i].score); fclose(fp); }61.求主次对角线之和。 main()
{static int a[ ][3]={9,7,5,1,2,4,6,8}; int I,j,s1=0,s2=0; for(I=0;I<3;I++) for(j=0;j<3;j++) {if( ) s1=s1+a[I][j]; if( ) s2=s2+a[I][j]; }
printf(“%d\\n%d\\n”,s1,s2); }
三、判断题
1. C语言的一个特点是可以对计算机硬件进行操作( )
2. 在循环过程中,使用break语句和continue语句的作用是一样的( ) 3. 在函数的定义和调用过程中,形式参数和实在参数数目可以不一致( ) 4. 指针变量可以接收任何类型的值 ( )
5. 在C语言程序设计中,字符数组和字符串不是完全一样的概念( ) 6. 文件指针是结构体类型,用符号file来表示 ( ) 7. 选择结构(if语句)和循环结构都可以使用嵌套形式( ) 8. 在定义二维数组时,可以将该数组的两个维数全部省略( )
9. 逻辑运算符 && || ! 的运算顺序是 ! 优先于 && 优先于 || ( 10. 任何数组都可以实现整体使用操作( )
四、读程序,写出程序运行结果。
)1. 阅读下列程序,写出程序运行后的输出结果。 main() { int y=9; for(;y>0;y--)
if(y%3==0) {printf(%d”,--y); continue;}
}
2.写出下列程序段的输出结果 。 main() {int x=5; int y=10;
printf(\"%d\\n\ printf(\"%d\\n\
3. 阅读下列程序,写出程序运行后的输出结果。 main() { int i=5; do {
switch (i%2)
{ case 4:i--; break; case 6:i--; continue; } i--; i--;
printf(“i=%d”,i); } while(i>0);
}
4.下面程序的输出结果是 ? #include \"stdio.h\" main() { int x=3; switch(x) { case 1:
case 2:printf(\"x<3\\n\"); case 3:printf(\"x=3\\n\"); case 4:
case 5:printf(\"x>3\\n\");
default:printf(\"x unknow\\n\"); } }
5. 阅读下列程序,当输入为ab*AB%cd#CD$时,写出程序运行后的输出结果。 main() { char c;
while((c=getchar())!=’$’)
{ if(‘A’<=c&&c<=‘Z’) putchar(c);
else if(‘a’<=c&&c<=‘z’) putchar(c-32); } }
6.说明下列程序的功能。 #include #include main(){ char str[10][80],c[80]; int i;
for(i=0;i<10;i++) gets(str[i]); strcpy(c,str[0]);
for(i=1;i<10;i++) if((strlen(c)printf(“%d\\n”,strlen(c)); }7. 说明下列的程序的功能。 #include #include main(){ char a[10][80],c[80]; int i,j,k;
for(i=0;i<10;i++) gets(a[i]); for(i=0;i<9;i++) { k=i;
for(j=i+1;j<10;j++)
if(strcmp(a[j],a[k])<0) k=j;
if(k!=i)
{stcpy(c,a[i]); strcpy(a[i],a[k]);strcpy(a[k],c);} }
for(i=0;i<10;i++) puts(a[i]); }
8. 说明下列程序的功能。 #include main() { int i,j;float a[3][3],b[3][3],c[3][3],x; for(i=0i<3;i++) for(j=0;j<3;j++)
{ scanf(“%f”,&x); a[i][j]=x;} for(i=0i<3;i++) for(j=0;j<3;j++)
{ scanf(“%f”,&x); b[i][j]=x;} for(i=0i<3;i++)
for(j=0;j<3;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0i<3;i++) { printf(“\\n”);
for(j=0;j<3;j++) prinf(“%f ”,c[i][i]); } }
9. 阅读程序,写出运行结果。 #include main(){ char str[]=”SSSWILTECHl\\l\\llW\\lWALLMPl”; int k; char c;
for(k=2;(c=str[k])!=’\\n’;k++) { switch(c)
{ case ‘A’:putchar(‘a’); continue; case ‘l’:break;
case l:while((c=str[++k]!=’\\l’&&c!=’\\0’); case 9:putchar(‘#’);
case ‘E’:
case ‘L’:continue;
default:putchar(c); continue; }
putchar(‘*’); }
printf(“\\n”); }
10. 说明下列程序的功能。 #include main() { int i,j;float a[3][3],b[3][3],x; for(i=0;i<3;i+) for(j=0;j<3;j++)
{scanf(“%f”,&x); a[i][j]=x;} for(i=0;i<3;i++)
for(j=0;j<3;j++) b[j][i]=a[i][j]; //a的第i行第j列放到b的第j行第i列 for(i=0;i<3;i++) { printf(“\\n”);
for(j=0;j<3;j++) printf(“%f ”,b[i][j]); }
11. 阅读下列程序,写出程序的运行结果。 。 #include char s[]=”ABCD”; main() { char *p;for(p=s;p}
12.执行以下程序段,输出的结果为 . main()
{ int a[2][3]={{3,2,7},{4,8,6}}; int *p,m=1; p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4)); printf(“m=%d”,m);}
13.设有下列程序,试写出程序的运行结果。 #include main(){ int i,b,c,a[]={1,10,-3,-21,7,13},*p_b,*p-c; b=c=1; p_b=p_c=a; for(i=0;i<6;i++)
{ if(b<*(a+i)) {b=*(a+i); p_b=&a[i];} if(c>*(a+i)) {c=*(a+i); p_c=&a[i];} }
i=*a; *a=*p_b; *p_b=i; i=*(a+5); *(a+5)=*p_c; *p_c=i;
printf(“%d,%d,%d,%d,%d,%d,\\n”,a[0],a[1],a[2],a[3],a[4],a[5]); }
14. 阅读下列程序,写出程序的运行后的结果。 #include void main(){ char *alpha[4]={”ABCD”,”EFGH”,”IJKL”,”MNOP”}; char *p; int i; p=alpha[0];
for(i=0;i<4;p=alpha[++i]) printf(“%c”,*(p)); printf(“\\n”); }
15. 阅读函数,写出函数的主要功能。 float av(float a[], int n) { int i; float a;
for(i=0,s=0;i16. 阅读下列程序,写出运算结果。 unsigned fun6(unsigned num) { unsigned k=1;do { k*=num%10; num/=10;} while(num);
return k; } main()
{ unsigned n=26;
printf(“%d\\n”,fun6(n)); }
17. 阅读下列程序,写出程序的运行结果。 #include main() { int id; char *name; float sf; }a,*p=&a; int i=a.id=1998;char *s=a.name=”Window 98”; float f=a.sf=1800;
printf(“%d is %s sal %f\\n”,i,s,f);
printf(“%d is %s sal %f\\n”,p->id,p->name,p->sf); }
18. 阅读下列程序,写出程序的运行结果。 #include void main() { int n;struct st *next;
} a[3]={5,&a[1],7,&a[2],7,&a[0]},*p=a; int i;
for(i=0;i<5;i++) p=p->next; printf(“p->n=%d\\n”,p->n); }
19. 读程序,写功能。 #include main() { FILE *fp; int b=0;char ch;
if((fp=fopen(”fname.txt”,”r”))==NULL) { printf(“Can not open file!\\n”); exit(0);} while(!feof(fp))
{ ch= fgetc(fp); if(ch==’’) b+=1;} printf(”b=%d\\n”,b); fclose(fp); }
20.假定在当前盘当前目录下有两个文本文件,其名称和内容如下: 文件名 a1.txt a2.txt 内容 121314# 252627#
写出下列程序运行后的输出结果。 #include main() { FILE *fp;void fc(FILE *fp1);
if((fp=fopen(”a1.txt”,”r”))=NULL)
{ printf(”Can not open file!\\n”); exit(1);} else {fc(fp); fclose(fp);}
if((fp=fopen(”a2.txt”,”r”)==NULL)
{ printf(”Can not open file!\\n”); exit(1);} else { fc(fp); fclose(fp);} }
void fc(FILE *fp1) { char c;
while((c=fgetc(fp1))!=’#’) putchar(c); }
21.阅读下列程序,写出运行结果。 #define M 5 #define N M*3+4 #define MN N*M #include main(){ printf(”%d,%d\\n”,2*MN,MN/2);
}
22.阅读下列程序,写出运行结果。 #define EXCH(a,b) {int t; t=a;a=b;b=t;} #include main(){ int x=5, y=9; EXCH(x,y);
printf(”x=%d,y=%d\\n”,x,y);
}
23.下列程序的输出结果是( )。
char *p1=\"abcd\strcpy(str+2,strcat(p1+2,p2+1)); printf(\"%s\
24.下列程序的输出结果a的值为 ( )。 int a[5]={2,4,6,8,10},*P,* *k; p=a; k=&p;
printf(\"%d\printf(\"%d\\n\
25.下列程序的输出a结果是( )。 for (a=1,b=1;a<=100;a++) { if(b>=20) break; if(b%3==1)
{b+=3; continue;}
b-=5; }
五.简答题
1. 字符常量与字符串常量有什么区别? 2. C语言的词类主要分为哪几种?
3. C语言为什么要规定对所有用到的变量要“先定义,后使用”。这样做有什么好处? 4. C语言提供了的基本数据类型和构造数据类型有哪些? 5. C语言中的语句有哪几类?分别有什么功能? 6. 什么是表达式,怎么区别表达式和表达式语句?
7. 什么是算术表达式,什么是关系表达式,什么是逻辑表达式? 8. C语言规定了哪几种基本的程序结构?
9. 若循环体中的switch语句内有break语句,它的作用是什么?若switch语句中有循环
语句,内有break语句,则它的作用是什么?
10. 在C语言中,为什么不能对数组名进行加减和赋值运算? 11. “*”和“&”代表哪两种运算?有什么区别和联系? 12. 什么是文件?从数据存储形式上看,可以分成哪几类文件?
13. 对文件进行任何操作之前,必须打开文件,打开文件的实质是什么?
六.编程题
1.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。 2.编程序,按下列公式计算e的值(精度为1e-6);
e111!12!13!...1n!
3.编程,输入n 个整数,求这n个数的偶数平均值,并输出。
4.若一个3位整数的各位数字的立方和等于这个整数,则称之为“水仙花数”。例如:153是水仙花数,因为153=1+5+3。求所有的水仙花数。
5.从键盘输入一个正整数n,计算该数的各位数字之和并输出。例如:输入数是5246,则计算5+2+4+6=17并输出。
6.输入一个3*5的整数矩阵,输出其中最大值、最小值和它们的下标。
7.输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。 8.编程(编制一个主函数和一个被调用函数),请完成以下功能:对x=1,2,„,10求函数f(x)=x-10*cos(x)+5*sin(x)的最大值,并将该数以小数取三位输出。
9.编一个能判断一个整数是否是素数的函数,并用它求出3到100之间的所有素数。 10.用结构体存放下表中的数据,然后输出每人的姓名和实发数(基本工资+浮动工资-支出)。 姓名 zhao qian sun 基本工资 240.00 360.00 560.00 浮动工资 400.00 120.00 0.00 支出 75.00 50.00 80.00 3
3
3
11.编一个程序,将磁盘中当前目录下名为“ccw1.txt”的文本文件复制在同一目录下,文件名改为“ccw2.txt”
12.编一个名为countc的函数,要求如下: (1)形式参数:array存放字符串的字符型数组名; (2)功能:统计array数组中大写字母的数目; (3)返回值:字符串中大写字母的数目。
13.编一个函数,用“冒泡法”对字符数组中的字符按由小到大的排列。要求字符数组作为形参。
14.对输入的两个正整数m和n求其最大公约数和最小公倍数。
15.有15个整数按由大到小顺序存放在一个数组中,输入一个整数,找出该数是数组中第几个元素的值。如果该数不在数组中,则打印“找不到”。
16.编一个程序,输入X的值,按下列公式计算并输出Y的值。
(x1)xy2x1(1x10)3x11(10x)17. 自定义一个函数,完成对10个整数按从小到大的顺序排序。要求在主函数中输入10个整数,并将排序后的结果在主函数中输出。
18.求和: S=1/(1*3)+1/(3*5)+1/(5*7)+„„+1/(99*101)
19.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
20.输出1900~2000年中所有的闰年。每输出3个年号换一行。(判断闰年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被400整除。)
21.从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not exist”。
22.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分。
23.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信息,包括学号、性别、姓名和平均成绩。 24.从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+„„(共n项)的和。例a=2, n=4, 则sum=2+22+222+2222。
25.求3X3矩阵的主对角线元素之和。 26.输出1—100之间不能被12整除的数。
27.从键盘上输入10个评委的分数,去掉一个最高分,去掉一个最低分,求出其余8个人的平均分,输出平均分,最高分,最低分。
28.从键盘上输入20个元素的值存入一维数组a中,然后将下标为(1、3、5、7、9„„)的元29.素值赋值给数组b,输出数组b的内容。 编程实现求解下面的式子的结果 s=1*2+2*3+3*4+„+20*21
30.给定一个正整数,判断它是否能同时被3、5、7整除。
答案:
C语言练习题答案
一、选择题
题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 题号 答案 1 B 11 B 21 C 31 C 41 C 51 B 61 A 71 C 81 B 91 C 101 B 111 C 2 A 12 C 22 C 32 B 42 B 52 B 62 B 72 C 82 B 92 C 102 D 112 C 3 C 13 C 23 A 33 C 43 A 53 D 63 C 73 C 83 D 93 B 103 C 113 C 4 D 14 C 24 C 34 D 44 C 54 A 64 D 74 74 C A 84 A 94 D 104 BD 114 C 5 A 15 A 25 D 35 C 45 A 55 B 65 C 75 D 85 C 95 C 105 C 115 C 6 C 16 B 26 C 36 D 46 B 56 A 66 D 76 A 86 B 96 B 106 B 116 B 7 A 17 D 27 D 37 D 47 D 57 A 67 D 77 A 87 A 97 C 107 D 117 CD 8 C 18 D 28 D 38 D 48 A 58 D 68 C 78 C 88 C 98 B 108 C 9 B 19 A 29 39 B、C 49 B 59 y=1 69 D 79 B 89 D 99 D 109 B 10 D 20 A 30 A 40 D 50 AC 60 D 70 A 80 A 90 B 100 A 110 B 注:用红色标记的题目都有些问题。
12题题目改为:下列正确的标识符是( )。
二、填空题
1.
2.编辑、编译、连接、运行 3.函数
4.float double
5.顺序结构、分支结构、循环结构 6.字母、数字、运算符、特殊字符 7.1 、main main 8.1 0 非0 0 9.++ && 10.1.0 11.26
12.x>20 && x<30 || x<-100 13.顺序、循环 14.***a=26,b=13,c=19
15.if(a<=b){x=1;printf(“***x=%d\\n”,x);} else {y=2;printf(“***y=%d\\n”,y);} 16.10
17.类型, 数组长度-1, 越界 , 符号常量 18.连续 数组名 地址 19.按行优先存放 20.0 4
21.不确定 8 22.0 6 23.0 0
24.#include #include 25.地址 加减 赋值 26.地址 NULL27.初始化 赋值语句 动态内存分配 28.加减 赋值 29.间接访问 取地址 30.ABCD A
31.传地址 值传递 32.return void
33.变量的地址 数组名 指针变量 34.int *z *z
35.成员访问 指向 36.34 37.101
38.fopen fclose
39.打开文件 关闭文件
40.文件指针 stdio.h
41.#include #include 42.int n!=0 i+1 j+1 scanf(“%d”,&n); 43.x%i==044.&a[i] i%10==0 printf(“\\n”); 45.n%10 max=t 46.k=p
47.& x a[i] i-- i!=0 48.char k i49.i 9-i i 9 0 i 9 9 i!=j&&i+j!=9 printf(“\\n”); 50.0 ca!=‟#‟ 1 scanf(“%c”,&ca); „A‟ 51.n%16 for(i--;i>=0;i--) printf(“%c”,b[c[i]]);52.*a,*b,*c,*min a,b,c *a,*b,*c *min=*b *min *min=*c 53.‟\\0‟ ++
54.sp=str[i] sp strlen(sp) 55.w[i-1]
56.*s-*t
57.(*a) a
58.struct ph c p->name p->tel p->name,x
*min 59.(!feof(fp))
60.(fp = fopen(“stu.dat”,”rb”)==NULL fread(stud,sizeof(struct student),N,fp) 61.i==j i+j==n-1