习题一 学号: 专业: 姓名:
一.填空题
1.i为int型变量,且初值是3,有表达式i++(3,则
该表达式的值是 ,变量i的值是 。
2.i为int 型变量,且初值是2,有表达式++i(3, 则
该表达式的值是 ,变量i的值是 。
3.i为int型变量,且初值是3,有表达式i=i+=i(5,则
该表达式的值是 ,变量i的值是 。
4.i为int型变量,且初值是3,有表达式i=(a=5,b=10)+(i+=b, b+=a),
则该表达式的值是 ,变量i,a,b的值分别是 。
5.i为int型变量,且的初值是3,有表达式i=(i+=i, i(=i), i(10, i%4,则
该表达式的值是 ,变量i的值是 。
6.说明变量为双精度的关键字是 。
7.在Turbo C中,整型数据的表示形式有 种。
二.选择题
1.若a, b, c, d都是int型变量且初值均为10,不正确的赋值语句是( )。
A.a=b=c=d; B.a=b++; C.a+b++; D.d=(a=b=125)(c++;
2.若a, b, c, d都是float型变量且初值为10.95,不正确的赋值语句是( )。
A.a=b=15; B.d=int(a+c); C.a=(int)(b+1); D.++a;
3.若a, b, c均为int型变量且有值,要交换变量a和b的值,正确的语句组是( )。
A.c=a, a=b, b=c; B.a=b; b=a;
C.c=a; a=b; b=c ; D.c=a; b=a; a=c;
4.若a, b均为int型变量,x, y均为float型变量,正确的输入函数是( )。
A.scanf("%d%f",&a,&b); B.scanf("%d%f",&a,&x);
C.scanf("%d%d",a,b); D.scanf("%f%f",x,y);
5.若x, y均为double型变量,正确的输入函数是( )。
A.scanf("%f%f",&x,&y); B.scanf("%d%d",&x,&y);
C.scanf("%lf%lf",&x,&y); D.scanf("%lf%lf",x,y);
6.若x为char型变量,y为int型变量,x, y均有值,正确的输出函数是( )。
A.printf("%c%c",x,y); B.printf("%c%s",x,y);
C.printf("%f%c",x,y); D.printf("%f%d",x,y);
7.若x, y均为int型变量且有值,要输出x, y的值,正确的输出函数是( )。
A.printf("%d%d",&x,&y); B.printf("%f%f",x,y);
C.printf("%f%d",x,y); D.printf("%d%d",x,y);
8.x为int型变量,且值为2345,不正确的输出函数是( )。
A.printf("%d",x); B.printf("%3d",x);
C.printf("%c",x) ; D.printf("%s",x);
习题二 学号: 专业: 姓名:
一.写出下列程序的运行结果
1.下面程序的运行结果是( )。
main( )
{int a, b;
a=23; b=87;
printf("%d%d\n",a,b);
}
A. 23 B.23,87 C. a=23 D.2387
87 b=87
2.下面程序的运行结果是( )。
main( )
{float x, y;
x=12.34; y=0.00045; printf("%f,%f",x,y);
}
A.12.34,0.00045 B.12.340000,0.000450
C.12.34 0.00045 D.12.340000 0.000450
3.下面程序的运行结果是( )。
main( )
{int h=34, k=56;
printf("h=%d\nk=%d\n",h,k);
}
A. h=34 B.h=34 k=56 C.34 56 D. 34
k=56 56
4.下面程序的运行结果是( )。
main( )
{float x=12.34567, y=345.2354;
printf("x=%5.3 f, y=%5.3 f ",x,y);
}
A.12.346,345.235 B.x=12.346, y=345.235
C.12.345670,345.235000 D.x=12.34567, y=345.2354
5.下面程序的运行结果是( )。
main( )
{int s=(3, w=5;
printf("%u, %u, %d, %d",s,w,s,w);
}
A.(3,5,(3,5 B.(3 5 (3 5 C.65533,5,(3,5 D.65533,65531,(3,5
习题二 学号: 专业: 姓名:
6.运行下面程序时若从键盘输入:123 45 6789 ( 输出结果是( )。
main( )
{ int a, b, c;
scanf("%3d%3d%3d",&a,&b,&c);
printf("a=%d, b=%d, c =%d", a,b,c) ;
}
A.a=123, b=45, c=678 B.a=123 b=454 c=678
C.123, 45, 678 D.a=123, b=456, c=789
7.运行下面程序时若从键盘输入:123456789( 输出结果是( )。
main( )
{int a, b, c;
scanf("%3d%3d%3d",&a,&b,&c);
printf("a=%d, b=%d, c=%d",a,b,c);
}
A.a=123, b=45, c=678 B.a=123, b=456, c=789
C.123, 456, 789 D.a=123 b=456 c=789
8.以下程序若a=12, b=45, c=3467, 正确的数据输入方法是( )。
main( )
{int a, b, c;
scanf("a=%dB=%dc=%d",&a,&b,&c);
printf("%d, %d, %d\n",a,b,c);
}
A.a=12 b=45c=3467 B.12 45 3467
C.a=12B=45c=3467 D.a=12 b=45 c=3467
二.填空题
1.C语句的最后用 结束。
2.执行printf("%d",045); 函数的结果是 。
3.执行printf("%u\n",-0x2a); 函数的结果是 。
4.若x是整型,且x = (1,执行printf("%o\n", x ); 函数的结果是 。
5.若一个C程序包含若干个函数,程序的执行总是从 函数开始。
习题三 学号: 专业: 姓名:
1.设a=1, b=2, c=3,写出下列关系表达式的值
(1)(a<b)<(c<a+b) 。
(2)(c<b)>(a<c) 。
(3)a+b==c 。
(4)a+b>=c 。
2.设a=1, b=2, c=3, d=4写出下列逻辑表达式的值
(1)a && b && c 。
(2)a || !b || !c 。
(3)++a || b++ && ++c || d++ 。
(4)(!(a+b)+c(1)&& (b+c/2) 。
(5)a !=11 && b<4 。
3.设x=y=z=(1,则执行逻辑表达式++x || ++y && ++z后,x,y,z的值分别为 。
4.设x=y=z=1, 执行逻辑表达式++x && y(( || ++z后,x, y, z的值分别为 。
5.设a=1, b=2, c=3, d=4, x=1, y=1,则执行逻辑表达式(x=a>b) && (y=c>d)后,x,y的值分别为 。
6.在以下一组运算符中,优先级最高的运算符是( )
A.<= B.= C.% D.&&
7.以下程序的运行结果是 。
main( )
{ int a=(1, b=4, k;
k=(++a<0) && !(b((<=0);
printf("%d,%d,%d\n",k,a,b);
}
8.在C中,下列哪一个表达式能正确表示a (10或a ( 0( )
A.a>=10 or a<=0 B.a>=10 | a<=0
C.a>=10 || a<=0 D.a>=10 && a<=0
9.若a,b,c均为int型变量,则执行以下语句后,a,b,c的值分别为 。
a=b=c=1;
++a || ++b && ++c
习题三 学号: 专业: 姓名:
10.给出下列程序的输出结果
main( )
{int a, b, c;
a='E'; b='J'; c='W';
if (a>b)
if (a>c) printf("%c\n",a);
else printf("%c\n",c);
else if (b>c) printf("%c\n",b);
else printf("%c\n",c);
}
结果是:
main( )
{int x=100, a=10, b=20, OK1=5, OK2=0;
if (a<b)
if (b!=15)
if (!OK1) x=1;
else
if (OK2) x=10;
x=(1;
printf("%d\n",x);
}
结果是:
运行两次下面的程序,如果分别从键盘上输入数值6和4,其运行结果分别为
main( )
{int x;
scanf("%d",&x);
if (x++>5) printf("%d", x);
else printf("%d\n",x(();
}
输入6时,结果是:
输入4时,结果是:
11.若有定义:float x; int a, b; 再有下面4个switch语句
A.switch(x)
{case 1.0: printf("(\n");
case 2.0: printf("((\n");}
B.switch(x)
{case 1,2: printf("(\n";)
case 3: printf("((\n");}
C.switch(a+b);
{case 1 : printf("(\n");
case 1+2: printf("((\n");}
D.switch(a+b)
{case 1: printf("(\n");
case 2: printf("((\n");}
正确的switch语句是( ),其它switch语句错在什么地方?
习题四 学号: 专业: 姓名:
1.下面程序若在运行时从键盘输入3.6 2.4 (,运行结果为( )。
#include"math.h"
main( )
{float x,y,z;
scanf("%f%f",&x,&y);
z=x/y;
while (1)
{if (fabs(z)>1.0) {x=y; y=z; z=x/y;}
else break;
}
printf("%f\n",y);
}
A.1.500000 B.1.600000 C.2.000000 D.2.400000
2.下面程序的输出是( )。
main( )
{int x=3,y=6,a=0;
while (x++!=(y(=1))
{a+=1;
if (y<x) break;
}
printf("x=%d,y=%d,a=%d\n",x,y,a);
}
A.x=4, y=4, a=1 B.x=5, y=5, a=1
C.x=5, y=4, a=3 D.x=5, y=4, a=1
3.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束,请填空。
main( )
{float x,amax,amin;
scanf("%f",&x);
amax=x; amin=x;
while ( )
{if (x>amax) amax=x;
if ( ) amin=x;
scanf("%f",&x);
}
printf("\namax=%f\namin=%f\n",amax,amin);
}
习题四 学号: 专业: 姓名:
4.下面程序的输出是: 。
main( )
{int x=2;
while (x(();
printf("%d\n",x);
}
5.下面程序的运行结果为: 。
main( )
{int i=0, sum=1;
do
{sum+=i++;}
while (i<6);
printf("%d\n",sum);
}
6.C语句中,下列说法中正确的是( )。
A.不能使用do-while语句构成的循环;
B.do-while语句构成的循环必须用break语句才能退出;
C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环;
D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环。
7.下面程序的输出结果是: 。
main( )
{int y=9;
for ( ; y>0; y(()
if (y%3==0)
{printf("%d",((y);
continue;
}
}
8.若x是int型变量,且有下面的程序段,其运行结果为( )。
for (x=3; x<6; x++) printf((x%2)?("((%d"):("##%d\n"),x);
A.((3 B. ##3 C. ##2 D. ((3##4
##4 ((3 ((4##5 ((5
((5 ##5
习题四 学号: 专业: 姓名:
9.以下程序的运行结果是( )。
main( )
{int i;
for (i=1;i<=5;i++)
{if (i%2) printf("(");
else continue;
printf("#");
}
printf("$\n");
}
A.(#(#(#$ B.#(#(#($ C.(#(#$ D.#(#($
10.下面程序的功能是根据以下的公式,返回满足精度eps要求下的值,请填空。
main( )
{double s=0.0, t=1.0;
int n;
float eps;
scanf("%f",&eps);
for(( ;t>eps; n++)
{s+=t;
t=n(t/(2(n+1);
}
printf("pi=%f\n", ( );
}
习题五 学号: 专业: 姓名:
1.以下正确的叙述是( )。
A.C语言的主函数是无参函数
B.C语言的主函数最多允许有1个参数
C.C语言的主函数最多允许有2个参数
D.C语言的主函数可以有2个以上的参数
2.C语言中函数返回值的类型是由( )决定的。
A.return语句中的表达式类型
B.调用该函数的主调函数类型
C.调用函数时临时确定
D.定义函数时所指定的函数类型
3.以下不正确的描述是( )。
A.调用函数时,实参可以是表达式
B.调用函数时,简单变量的实参与形参可以共用内存单元
C.调用函数时,将为形参分配内存单元
D.调用函数时,实参与形参的类型必须一致
4.若x为int型变量,则以下函数fun的返回值类型为( )。
fun(x)
……
{printf("%d\n",x);}
A.返回值为void类型 B.无法确定返回值
C.返回值为int类型 D.没有返回值
5.C语言规定,调用一个函数时,实参变量与形参变量之间的数据传递是( )
A.地址传递 B.由实参传给形参,再由形参传回来给实参
C.值传递 D.由用户指定传递方式
6.填空
① 变量存储类别,从作用域的角度分为 变量和 变量。
② 局部静态变量在 时赋初值且只赋值一次。
7.判断以下说法的正误
( 一个源文件由一个或多个函数组成, C程序是以一个源文件为编译单位的。( )
( 局部静态变量在函数调用结束后仍存在,但其它函数不能引用它。 ( )
( 自动(auto)变量是由编译系统自动处理的,对自动变量分配存储空间后,就赋值为0,执行函数后自动释放。 ( )
( 由于全局变量的作用域增加了函数间数据联系的渠道,利用全局变量可以从函数得到一个以上的返回值,故建议在程序中尽量定义全局变量。 ( )
8.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量的存储类应该是( )。
A.extern B.register C.auto D.Static
习题五 学号: 专业: 姓名:
9.以下不正确的描述为( )
A.在函数之外定义的变量称为外部变量,外部变量是全局变量
B.在一个函数中既可以使用局部变量,又可以使用全局变量
C.外部变量定义和外部变量说明的含义不同
D.若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。
10.以下不正确的描述为( )
A.不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在一个函数内部定义的变量只在本函数范围内有效
D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效
11.在C语言中,对于存储类型为( )的变量,只有在使用它们时才
占用内存单元。
A.static和auto B.静态(static)
C.register和static D.auto和register
12.C语言中形参的缺省存储类别是( )
A.自动(auto) B.静态(static)
C.寄存器(register) D.外部(extern)
13.下列程序的运行结果是: 。
unsigned fun3(unsigned num)
{unsigned k=1;
do
{k(=num%10;
num/=10;
}while(num);
return(k);
}
main( )
{unsigned n=26;
printf("%d\n",fun3(n));
}
14.下列程序的运行结果是: 。
long fun4(int n)
{long s;
if ((n==1)||(n==2)) s=2;
else s=n+fun4(n(1);
return(s);
}
main( )
{long x;
x=fun4(4); printf("%ld\n",x);
}
习题五 学号: 专业: 姓名:
15.下列程序的运行结果是: 。
# include "stdio.h"
main( )
{ int n=4,x=2,s;
s=fun(x,n); printf("s=%d\n",s);
}
fun(int x,int n)
{ if (n==1) return(x);
else return(x(fun(x,n(1));
}
16.下列程序的运行结果是: 。
int fun2(int x,int y)
{int m=5;
return(x(y(m);
}
main( )
{int a=7,b=5;
printf("%d\n",fun2(a,b));
}
17.下列程序的运行结果是: 。
fun(int p)
{ int d=5;
d+=p++;
printf("%d ",d);
}
main( )
{ int d=1,a=3;
fun(a);
d+=a++; printf("%d\n",d);
}
18.下列程序的运行结果是: 。
fun(int n)
{ if (n==1) return(0);
else if (n==2||n==3) return(1);
else return(fun(n(1)+fun(n(2)+fun(n(3));
}
main( )
{ int x;
x=fun(10); printf("x=%d\n",x);
}
习题五 学号: 专业: 姓名:
19.下面程序的执行结果是:
int x=3;
main( )
{ int i;
for (i=1; i<4; i++)
{ ++x; f( ); }
printf("%d\n",x);
}
f( )
{ static int i;
int x=10;
x/=x++; printf("%d",x);
}
20.下列程序的运行结果是:
fun(int x)
{ static int a=3;
a+=x;
return(a);
}
main( )
{ int k=3,m=2,n;
n=fun(k);
printf("n=%d\n",n);
n=fun(m);
printf("n=%d\n",n);
}
21.下列程序的运行结果是:
#include "stdio.h"
f(int a)
{ int b=0;
static int c=3;
a=c++,b++;
return(a);
}
main( )
{ int a=2,i,k;
for (i=0; i<2; i++) k=f(a++);
printf("%d\n",k);
}
22.下列程序的运行结果是:
#include "stdio.h"
int i=2,j=2;
main( )
{ int i=2;
printf("i=%d,j=%d\n",i,j);
i=(i+++j)+(j+++i);
{ int i=0;
printf("i=%d,j=%d\n",i,j);
}
printf("i=%d,j=%d\n",i,j);
}
习题六 学号: 专业: 姓名:
一、选择题
1.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用双引号(“ ”)括起时,寻找被包含文件的方式为( )。
A.直接按系统设定的标准方式搜索目录
B.先在源程序所在目录搜索,再按系统设定的标准方式搜索
C.仅仅搜索源程序所在目录
D.仅仅搜索所在的当前目录
2.以下叙述中不正确的是( )。
#define IBM-PC
A.预处理命令行都必须以#号开始
B.在程序中凡是以#号开始都是预处理命令行
C.C程序在执行过程中对预处理命令行进行处理
D.以上定义是正确的宏定义
3.以下叙述中正确的是( )。
#define CR 37.688
A.在程序的一行上可以出现多个预处理命令行
B.预处理行是C的合法语句
C.被包含的文件不一定以.h作为后缀
D.在以上定义中CR是称为“宏名”的标识符
4.以下有关宏替换的叙述中不正确的是( )。
A.宏替换不占用运行时间 B.宏名无类型
C.宏替换只是字符替换 D.宏名必须用大写字母表示
5.C语言的编译系统对宏命令的处理是( )。
A.在程序运行时进行的
B.在程序连接时进行的
C.和C程序中的其它语句同时进行编译的
D.在对源程序中其它成分正式编译之前进行的
6.以下程序的输出结果是( )。
#define ADD(X) (X)+(X)
main( )
{ int a=4, b=6, c=7;
int d=ADD(a+b)(c;
printf("d=%d",d);
}
A.d=70 B.d=140 C.d=280 D.d=80
习题六 学号: 专业: 姓名:
7.以下程序的输出结果是( )。
#define LETTER 0
main( )
{
char str[20]="C Language",c;
int i;
i=0;
while ((c=str[i])!='\0')
{ i++;
#if LETTER
if(c>='a'&&c<='z')
c=c(32;
#else
if(c>='A'&&c<='Z')
c=c+32;
#endif
printf("%c",c);
}
}
8.下面程序的输出结果是( )。
#include<stdio.h>
#define SUB(X,Y) (X)(Y
main( )
{
int a=3, b=4;
printf("%d\n",SUB(a++,b++));
}
A.12 B.15 C.16 D.20
9.执行下面的程序后,a的值是( )。
#define SQR(X) X(X
main( )
{
int a=10, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A.10 B.1 C.9 D.0
习题六 学号: 专业: 姓名:
二、填空题
1 设有以下宏定义:
#define WIDTH 80
#define LENGTH WIDTH+40
则执行赋值语句:v=LENGTH(20;(v为int型变量)后,v的值是 。
2.以下程序的输出结果是: 。
#define CIR(r) r(r
main( )
{ int a=1,b=2,t;
t=CIR(a+b); printf("%d\n",t);
}
3.以下程序的输出结果是: 。
#define MAX(a,b,c) ((a)>(b)? ((a)>(c)? (a):(c)):((b)>(c)?(b):(c)))
main( )
{ int x,y,z;
x=1; y=2; z=3;
printf("%d\n",MAX(x,y,z));
printf("%d\n",MAX(x+y,y,y+x));
printf("%d\n",MAX(x,y+z,z));
}
4.以下程序的输出结果是: 。
#define EXCH(a,b) {int t; t=a; a=b; b=t;}
main( )
{ int x=5, y=9;
printf("x=%d,y=%d\n",x,y);
EXCH(x,y);
printf("x=%d,y=%d\n",x,y);
}
5.以下程序的输出结果是: 。
#define PRINT(V) printf("V=%d\t",V)
main( )
{ int a, b;
a=1; b=2;
PRINT(a);
PRINT(b);
}
习题七 学号: 专业: 姓名:
一.选择题
1.若有定义:int a[4]={1,2,3};则数组a的每一个元素为( )组。
A.a[1]=1; a[2]=2; a[3]=3; a[4]=0;
B.a[1]=1; a[2]=2; a[3]=3;
C.a[0]=1; a[1]=2; a[2]=3; a[3]=0;
D.a[0]=1; a[1]=2; a[2]=3;
2.若有定义:char a[]={"Hunan University"};则数组a的长度为( )。
A.5 B.6 C.16 D.17
3.下面程序的输出结果为( )。
main( )
{int f1=-1,f2=1,f,i=8,st[8];
while (--i)
{f=f1+f2; f1=f2; f2=f; st[i]=f;}
for (i=1; i<8; i++) printf("%3d",st[i]);
printf("\n");
}
A.8 5 3 2 1 1 0 B.1 2 3 4 5 6 7 8
C.0 1 1 2 3 5 8 D.2 3 4 5 6 7 8
二.阅读下列程序,写出运行结果
1.下面程序的运行结果是:
#include <stdio.h>
add1(a,n)
int a[],n;
{ int i;
for(i=0; i<n; i++) a[i]++;
}
main()
{static int array[]={0,1,2,3,4,5,6,7,8,9};
int i;
add1(array,10);
for (i=0; i<10; i++)
printf("%d ",array[i]);
}
2.下面程序的运行结果是:
#include <stdio.h>
main( )
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int i;
for (i=0; i<3; i++)
printf("%d",a[i][2(i]);
}
习题七 学号: 专业: 姓名:
3.下面程序的运行结果是: 。
#include <stdio.h>
int f(int b[], int n)
{ int i,r;
r=1;
for (i=0; i<=n; i++) r=r(b[i];
return(r);
}
main( )
{ int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3); printf("x=%d\n",x);
}
4.下面程序的运行结果是: 。
#include <stdio.h>
main( )
{ int i,j,row=0, colum=0,max;
static int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for (i=0; i<=2; i++)
for(j=0; j<=3; j++)
if (a[i][j]>max)
{max=a[i][j]; row=i; colum=j; }
printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
5.下面程序的运行结果是: 。
#include <stdio.h>
main( )
{ int a[4][5]={{1,2,3,4,0},{2,2,0,0,0},{3,4,5,0,6},{5,0,0,6,0}};
int i,j;
for (i=0; i<4; i++)
{for ( j=0; j<5; j++)
{if (a[i][j]==0)
break;
printf("%d",a[i][j]);
}
}
printf("\n");
}
6.下面程序的运行结果是: 。
#include <stdio.h>
main( )
{char string1[]="I have a book";
char string2[]={'H','o','w',' ','a','r','e',' ','y','o','u'};
printf("%s\n",string1);
printf("%s\n",string2);
}
习题七 学号: 专业: 姓名:
7.下面程序的运行结果是: 。
#include <stdio.h>
main( )
{ int a[2][2]={1,3,5,7};
int i,j,b[2][2];
for (i=0; i<2; i++)
for (j=0; j<2; j++)
{b[i][j]=a[1(i][1(j]; printf("%d",b[i][j]); }
}
8.下面程序的运行结果是: 。
#include <stdio.h>
char fun(char c)
{ if (c<='Z' && c>='A') c(='A'('a';
return (c);
}
main( )
{char s[80]="Open Your BOOK.";
int i;
for (i=0; i<15; i++) putchar(fun(s[i]));
putchar('\n');
}
9.下面程序在运行输入:abcdefg (,则输出是: 。
#include <stdio.h>
main()
{char str[100];
printf("输入字符串:\n"); scanf("%s",str);
inverse(str); printf("轮换后的字符串是:%s\n",str);
}
inverse(str)
char str[];
{char t;
int i,j;
for(i=0,j=strlen(str); i<strlen(str)/2; i++, j--)
{t=str[i]; str[i]=str[j-1]; str[j-1]=t;}
}
10.下面程序的运行结果是: 。
#include <stdio.h>
#include <string.h>
main()
{ int i, j;
for (i=1,j=1; i<=50; i++)
{if (j>=10) break;
if (j%2==1) { j+=5; continue; }
j(=3;
}
printf("i=%d\nj=%d\n",i,j);
}
习题七 学号: 专业: 姓名:
三.填空题(在程序中的下划线处填入正确的语句并给出程序的运行结果)
1.从一维数组的数据中找出指定数据(k),显示其位置句。
#include <stdio.h>
main( )
{int a[]={14,23,52,66,47,33,28,76,87,96};
int i, k, t=1;
printf("What is k data?"); scanf("%d",&k);
for (i=0; i<10; i++)
{if (a[i]==k)
{printf("Now begin search\n");
printf("Search point=%d\n",i);
t=0;
}
}
if (t) printf("The data of yours not exist!\n");
}
2.编写函数acopy( ),将数组a[]的内容赋值到b[]数组中。(以(999做结束标志)
#include <stdio.h>
void acopy(( )
{int i=0;
while (a[i]!=(999)
{(
i++;
}
b[i]= (
}
main( )
{ int a[]={1,2,3,4,5,6,7,8,9,10,(999};
int b[100], i=0;
(
while (b[i]!=(999) printf("%d",b[i++]);
}
习题七 学号: 专业: 姓名:
3.把10个人的得分数据装入数组a[ ],求其总和与平均值并显示。(数组数据以(999作为结束标志)。
#include <stdio.h>
main( )
{int ① ={73,82,66,74,58,59,69,56,75,84,(999};
int sum,ave,i;
sum=0; i=0;
while (② )
{sum=sum+a[i];
③
}
ave= ④
printf("Total=%d\n",sum); printf("ave=%d\n",ave);
}
4.函数findmax返回数组s中最大元素的下标,数组中元数的个数由m传入。
findmax(int a[],int m)
{int k,p;
for (p=0,k=p;p<m;p++)
if (a[p]>a[k])
return (k);
}
5.找出并显示以字母’C’开头的姓名数据。
#include <stdio.h>
main( )
{char name[][8]={"China","Japan","Canada","Germany"};
int i;
for (i=0;i<4;i++)
if ( ) printf("%s\n",name[i]);
}
6.输入一字符串,将字符串从最后一个开始,按倒序显示在屏幕上。
#include <stdio.h>
main( )
{char a[10];
int i;
printf("Please imput yuor string:\n");
for (① )
scanf("%c",&a[i]);
for (② )
printf("%c",a[i]);
}
习题八 学号: 专业: 姓名:
一.选择题
1.以下选项中,对基类型相同的指针变量不能进行运算的运行符是( )。
A.( B.( C.( D.((
2.若有以下定义和语句,且0 ( i(10,则对数组元素地址的正确表示是( )。
int a[ ]({1,2,3,4,5,6,7,8,9,0}, (p, i ;
p(a;
A.&(a(1) B.a(( C.&p D.&p[i]
3.若有以下定义和语句,且0( i(10,则对数组元素错误引用的是( )。
int a[ ]({1,2,3,4,5,6,7,8,9,0}, (p, i ;
p(a;
A.((a(i ) B.a[p(a] C.p(I D.((&p[i])
4.与以下定义等价的是( )。
int (p[4];
A.int p[4]; B.int (p; C.int ((p[4]); D.int ((p)[4];
5.若有定义:int a[4][10]; 则以下选项中对数组元素a[i][ j](此处0( i(4,0(j(10)错误引用的是( )。
A.((&a[0][0]+10(i+j) B.((a+i )[ j]
C.((((a+i )+j) D.((a[i]+j)
6.若有定义:int a[4][3],b[3][4],((ptr)[3]; 且0( i(3,则正确的赋值语句是( )。
A.ptr(a; B.ptr(b; C.ptr(b[i]; D.ptr(a[i];
7.若有定义:char (p1, (p2, (p3, (p4,ch; 则不能正确赋值的程序语句是( )。
A.p1(&ch; scanf("%c",p1); B.p2((char ()malloc(1); scanf("%c",p2);
C.(p3(getchar( ); D.p4(&ch; (p4(getchar( );
8.若有定义:int ((ptr)[3]; 则标识符ptr( )。
A.定义不合法
B.是一个指针数组名,每个元素是一个指向整型变量的指针
C.是一个指针,它指向一个具有三个元素的一维数组
D.是一个指向整型变量的指针
9.以下正确的定义和语句是( )。
A.int a[10], (p; char (s; p(a; s(a;
B.double a[5][3], b[5][3], (s; s(a; b(a;
C.float a[5][3], (p[3]; p[0](a[0]; p[2](a[4];
D.int a[5][3], ((pb)[5], ((pp)[3]; pb(a; pp(a;
10.若有定义:int a[5],(p(a; 则对a数组元素地址正确引用的是( )。
A.&a[5] B.p+2 C.a ++ D.&a
11.若有定义:int a[5], (p(a; 则对a数组元素正确引用的是( )。
A.((p+5) B.(p+2 C.((a+2) D.(&a[5]
12.若有以下定义和语句,则对a数组元素非法引用的是( )。
int a[2][3], ((pt)[3] ;
pt=a;
A.pt[0][0] B.((pt+1)[2] C.((pt[1]+2) D.((a[0]+2)
习题八 学号: 专业: 姓名:
13.下列程序段:char str[ ]= "ABCD", (p=str;
printf("%d\n", ((p+4) );
的出结果是( )。
A.68 B.0 C.字符"D"的地址 D.不确定的值
14.下列程序运行后的输出结果( )。
main( )
{static char s[10]="ABC";
char (p=s+1, (q, c;
c=((++p+1); printf("%d\n",c);
}
A.‘A’ B.‘B’ C.‘C’ D.0
15.下列程序的输出结果是( )。
#include "stdio.h"
void prt(int (x, int (y, int (z)
{printf("%d,%d,%d\n",++(x, ++(y, ((z++) ); }
int a=10, c=20, b=40;
main( )
{prt(&a,&b,&c); prt(&a,&b,&c);
}
A. 11,42,31 B. 11,41,20 C. 11,21,40 D. 11,41,21
12,22,41 12,42,20 11,21,41 12,42,22
16.若有以下定义和语句,则对a数组元素都是正确引用的表达式组是( )。
(其中0( i(4,0( j(3)
main( )
{int a[4][3]={0}, ((ptr)[3], i, j;
ptr=a;
(
}
A.a[i][ j], a[i]+j, ((((a+i)+j)
B.((ptr+i)[ j], ptr[i]+j, ((((ptr+i)+j)
C.((ptr+i)[ j], ((a+i)[ j], ((ptr+i)
D.ptr[i][ j], ((ptr[i]+j), ((a[i]+j)
17.若有以下定义和语句,则都是a数组元素地址的表达式组是( )。
(其中0( i(4,0( j(3)
main( )
{int a[4][3]={0}, (p[4], ((pa, i, j;
for (i=0; i<4; i++) p[i]=a[i];
pa= p;
(
}
A.&a[i][ j], p[i]+j, pa[i][ j]
B.((pa+i)+j, p[i], ((p+i)+j
C.&a[ j], &p[i], ((((pa+i)+j)
D.((pa, a, p
习题八 学号: 专业: 姓名:
二.写出程序运行后的结果
1.下列程序运行后的输出结果是: 。
#include <stdio.h>
main( )
{static char b[ ]= "Goodbye";
char (chp=&b[7];
while (((chp>=b[0]) putchar((chp);
putchar(‘\n’);
}
2.下列程序运行后的输出结果是: 。
#include <stdio.h>
int a[ ]={1,5,7,9,11,13};
main( )
{int (p;
p=a+3; printf("%d,%d,%d,%d\n", (p, (p++, ((p(2), ((a+4) );
}
三.填空题
1.若有以下定义和语句,则下面各个符号的正确含义是:
(例如对于符号&a[2][1],应该写:是数组元素a[2][1]的地址)
int a[3][4], ((p)[4];
p=a;
( p+1 。
( ((p+2) 。
( ((p+1)+2 。
( (((p+2) 。
2.顺读和倒读都一样的字符串称为“回文”,如:LEVEL。下列程序判断输入的字符串是否为“回文”,若是“回文”,输出“YES”;否则输出“NO”。
#include <stdio.h>
#include <string.h>
main( )
{char s[81], cr, (pi, (pj;
int i, j, n;
gets(s); n=strlen(s);
pi=( ; pj=( ;
while ((pi==‘ ’) pi++;
while ((pj==‘ ’) pj((;
while ((( )&&( (pi==(pj)) { pi++; ( ; }
if (pi<pj) printf("NO\n");
else printf("YES\n");
}
习题九 学号: 专业: 姓名:
一.选择题(请选择正确答案)。
1.若有下列定义:struct aa
{float e[5];
double z;
}x;
则变量x在内存中所占的字节为:
A.4 B.8 C.12 D.28
2.若有下列定义:union bb
{float a,b;
char c[6];
}y;
则变量y在内存中所占的字节为:
A.4 B.6 C.10 D.14
3.若有下列定义:struct date
{int day;
int month;
int year;
};
struct person
{char name[12];
struct date birthday;
char sex;
};
struct person student;
则变量student在内存中所占的字节为:
A.15 B.16 C.19 D.20
4.若有下列定义:struct a
{char m[6];
int n;
float b;
char c;
};
struct a x[2]={ "Hello",4,5.6,‘A’};
请问:x[1]的值为( )。
A.不能确定。 B. x[1].m="Hello"; C. x[1].n=4;
x[1].b=5.6; x[1].c=‘A’;
习题九 学号: 专业: 姓名:
二.阅读下列程序,写出运行结果
1.#include <stdio.h>
main( )
{union Exa
{ struct
{int a;
int b;
}out;
int c;
int d;
}e;
e.c=1; e.d=2;
e.out.a=e.c(e.d;
e.out.b=e.c+e.d;
printf("%d %d",e.out.a,e.out.b);
}
运行结果:
2.#include <stdio.h>
struct score
{int math;
int eng;
int comp;
};
struct stu
{char name[12];
char sex;
long StuClass;
struct score sub;
};
main( )
{struct stu student1={"Li Ming",'M',990324,88,80,90};
struct stu student2;
student2=student1;
student2.name[0]='H';
student2.name[1]='u';
student2.StuClass=990325;
student2.sub.math=83;
printf("%s,%c,%ld,%d,%d,%d\n",student2.name,
student2.sex,student2.StuClass,student2.sub.math,
student1.sub.eng,student2.sub.comp);
}
运行结果:
3.
#include <stdio.h>
union memb
{float v;
int n;
char c;
};
main( )
{union memb tag,Sval;
tag.n=673;
Sval=tag;
printf("Sval is: %d",Sval.n);
}
运行结果:
习题九 学号: 专业: 姓名:
4.#include <stdio.h>
#include <conio.h>
struct person
{char name[12];
int age;
char sex;
char addr[40];
long telNo;
};
main( )
{struct person doctor;
printf("Please imput Name,Age,Sex,Addr,TelNo:\n");
scanf("%s%d%c%s%ld",doctor.name,&doctor.age,&doctor.sex,
doctor.addr,&doctor.telNo);
printf("%s,%d,%c,%s,%ld\n",doctor.name,
doctor.age,doctor.sex,doctor.addr,doctor.telNo);
}
运行后输入:Liming 18MEastRoad116 8375642
运行结果:
5.#include <stdio.h>
union memb
{
double v;
int n;
char c;
};
main( )
{
union memb tag;
tag.n=26;
tag.c='A';
tag.v=48.7;
printf("%6.2f\t %4d\t %c\t",tag.v,tag.n,tag.c);
}
运行结果:
习题十 学号: 专业: 姓名:
一.选择题
1.fgets(str, n, fp)函数从文件中读入一个字符串,以下叙述中正确的是( )。
A.字符串读入后不会自动加入'\0'
B.fp是file类型的指针
C.fgets函数将从文件中最多读入n (1个字符
D.fgets函数将从文件中最多读入n个字符
2.已知函数fread的调用形式为fread(buffer, size, count, fp),其中buffer代表的是( )。
A.存放读入数据项的存储区
B.一个指向所读入文件的文件指针
C.存放读入数据的地址或指向此地址的指针
D.一个整形变量,代表要读入的数据项总数
3.函数调用语句:fseek(fp,(10L ,2);的含义是( )。
A.将文件位置指针移到距离文件头10个字节处
B.将文件位置指针从当前位置向文件末尾方向移动10个字节
C.将文件位置指针从当前位置向文件末尾方向移动10个字节处
D.将文件位置指针从文件末尾处向文件头的方向移动10个字节处
二、填空题
1.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 ,否则为 。
2.函数调用语句:fgets(str , n, fp);从fp指向的文件中读入 个字符放到str字符数组中。函数值为 。
3.在C中,文件指针变量的类型只能是 。
4.为了从文本文件中读入数据,在打开文件时,应该指定的方式是 。
5.为了把新的数据加入一个二进制文件的末尾,在打开文件时,应该指定的方式是 。
6.用来把文件的位置指针移向文件的开头的函数是 。
7.文件结束标志EOF只可用于 文件。
习题十 学号: 专业: 姓名:
8.当结束对文件的输入、输出操作时,用来关闭文件的预定义函数是 。
9.下面程序用来统计文件中字符的个数,请填空。
#include<stdio>
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);
}
10.下面程序把从终端读入的文本(用@作为文本结束标志)复制到一个名为bi.dat的新文件中。请填空。
#include <stdio.h>
main( )
{
FILE (fp;
char ch;
if ((fp=fopen(( ))==NULL)
exit(0);
while ((ch=getchar( ))!='@')
fputc(ch,fp);
( ;
}
C习题2002
(参考答案)
习题一
一.填空题
1.0 4
2.0 3
3.18 18
4.25 25, 5, 15
5.0 36
6.double
7.3
二.选择题
1.C
2.B
3.C
4.B
5.C
6.A
7.D
8.D
习题二
一.写出下列程序的运行结果
1.D
2.B
3.A
4.B
5.C
6.A
7.B
8.C
二.填空题
1.;
2.37
3.65494
4.177777
5.main( )
习题三
1.0 0 1 1
2.1 1 1 1 1
3.0, 0, (1
4.2, 0, 1
5.0, 1
6.2, 1, 1
7.0, 0, 4
8.C
9.C
10.(1) W (2) (1 (3) 7 5
11.(4)
习题四
1.B
2.D
3.x>=0,x<amin
4.(1
5.16
6.D
7.852
8.D
9.A
10.n=1
s ( 2
习题五
1.C
2.D
3.B
4.C
5.C
6.( 全局,局部 ( 编译
7.(( (( (( ((
8.D
9.B
10.D
11.D
12.A
13.12
14.9
15.S=16
16.30
17.8 4
18.x=81
19.2226
20.n = 6
n = 8
21.4
22.i = 2, j = 2
i = 0, j = 3
i = 9, j = 3
习题六
一.选择题
1.B
2.C
3.C
4.D
5.D
6.D
7.c languge
8.A
9.B
二.填空题
1.880
2.5
3.3
3
5
4.x=5, y=9
x=9, y=5
5.V=1 V=2
习题七
一.选择题
1.D 2.D 3.A
二.阅读下列程序,写出运行结果。
1.1 2 3 4 5 6 7 8 9 10 2.357 3.x=120
4.max=10, row=2, colum=1
5.1234223455 6.I have a book 7.7531
How are you
8.open your book. 9.gfedcba 10.i=6
j=10
三.填空题
1.break;
2.(int a[],int b[] (b[i]=a[i]; (a[10];(或a[i];) (acopy(a,b);
3.(a[] (a[i]!=(999 (i++; (sum/10;(或sum/i;)
4.k=p; 5.name[i][0]==‘C’;
6.(i=0; i<10; i++ (i=9; i>=0; i((
习题八
一.选择题
1.A
2.D
3.C
4.C
5.B
6.A
7.C
8.C
9.C
10.B
11.C
12.B
13.B
14.D
15.B
16.D
17.B
二.写出程序运行后的结果
1.eybdooG 2.11,9,5,11
三.填空题
1.(是数组元素a[1][0]的地址
(是数组元素a[2][0]的地址
(是数组元素a[1][2]的地址
(是数组元素a[0][2]
2.( s ( s+n(1 ( pi<pj ( pj((
习题九
一.选择题
1.D 2.B 3.C 4.A
二.阅读下列程序,写出运行结果
1.4 8 2.Hu Ming,M,990325,83,80,90 3.Sval is: 673
4.Liming,18, ,MEastRoad116,8375642
5.48.70 — — (tag.n和tag.c的值为不可预料的)
习题十
一.选择题
1.C 2.C 3.D
二.填空题
1.1,0 2.n(1,str的首地址 3.FILE 4."w"
5."ab" 6.remind 7.文本 8.fclose()
9.(!feof()) 10.("bi.dat","w" (fclose()