=14
C. a>10 && a<15 D. !(a<=10) && !(a>=15)
(17) 设 f是实型变量,下列表达式中不是逗号表达式的是 D 。
A. f= 3.2, 1.0 B. f>0, f<10 C. f=2.0, f>0 D.
f=(3.2, 1.0)
(18) 设ch是 char型变量,其值为 'A',则下面表达式的值是 B 。
ch=(ch>='A'&& ch<='Z')? (ch+32):ch
A. A B. a C. Z D. Z
(19) 以下运算符中,结合性与其他运算符不同的是 A 。
---WORD格式--可编辑--
A. ++ B. % C. / D. +
(20) 以下用户标识符中,合法的是 B 。
A. int B. nit C. 123 D. a+b
(21) C 语言中,要求运算对象只能为整数的运算符是 % 。
A. % B. / C. > D. *
(22) PC 机中,'n'在内存占用的字节数是 A 。
A. 1 B. 2 C. 3 D. 4
(23) 字符串"ABC"在内存占用的字节数是 B 。
A. 3 B. 4 C. 6 D. 8
(24) 要为字符型变量 a赋初值,下列语句中哪一个是正确的
B 。
A. char a="3"; B. char a=’3’; C. char a=%; D. char
a=*;
(25)下列不正确的转义字符是 C 。
A. B. ' C. 074 D. 0
2. 填空题
(1) C 语言中的逻辑值“真”是用 非0 表示的,逻辑值“假”是用 0 表示的。
(2) 符号常量的定义方法是 #define N 10 。
(3) 无符号基本整型的数据类型符为 unsigned int ,双精度实型数据类型符为 double ,字符型数据类型符为 char 。
(4) 设 c='w',a=1,b=2,d=-5, 则表达式 'x'+1>c, 'y'!=c+2,
-a-5*b<=d+1, b==a=2的值分别 为 1 、 0 、
1 、 表达式错误 。
(5) 设 float x=2.5,y=4.7; int a=7;,表达式
x+a%3*(int)(x+y)%2/4的值为 2.5 。
(6) 判断变量 a、b 的值均不为 0 的逻辑表达式为
(a!=0)&&(b!=0) 。
(7) 求解赋值表达式 a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 4,4,10,6 。
(8) 求解逗号表达式 x=a=3,6*a 后,表达式值、x、a 的值依次为
18,3,3 。
(9) 数学式a/(b*c)的 C语言表达式 a/(b*c) 。
---WORD格式--可编辑--
第3章 顺序结构程序设计习题
1. 选择题
(1) printf("f=%3.2f%%",3.478);的输出结果是 A 。
A. f=3.48% B. f=3.5% C. f=3.48% % D. f=347.8%
(2) printf("%c,%d",'a', 'a');的输出结果是 A 。
A. a,97 B. a 97 C. 97,a D. 97 a
(3) scanf("%c",&a);若要给变量输入大写字母 A,则以下正确的输入是 B 。
A. 'A' B. A C. "A" D.
以上都不对
(4) 若一个 int 类型的数据占 2 字节,则程序段:int
x=-1;printf("%u,%d",x,x);的输出结果是 A 。
A. 65535, -1 B. -1,65535 C. 32767, 32768 D.
32768,32767
(5) 在 TC 中,getchar、putchar、printf、scanf 四个函数,均包含在头文件 B
中。
A. math.h B. stdio.h C. stbio.h D.
stdlib.h
(6) 复合语句是用 C 括起来的语句组。
A. ( ) B. [ ] C. { } D. < >
(7) 下列格式符中,哪一个可以用于以八进制形式输出整数
C 。
A. %d B. %8d C. %o D. %ld
(8) 下列格式符中,哪一个可以用于以十六进制形式输出整数
B 。
A. %16d B. %8x C. %d16 D. %d
(9) a 是int类型变量,c是字符变量,下列输入语句中哪一个是错误的 B 。
A. scanf("%d,%c",&a,&c); B. scanf("%d%c",a,c);
C. scanf("%d%c",&a,&c); D. scanf("d=%d,c=%c",&a,&c);
(10) 要使double x; long a;的数据能正确的输出,输出语句应是
D 。
A. printf("%d, %f",a, x); B. printf("%d, %1f",a,
---WORD格式--可编辑--
x);
C. scanf("%1d, %1f",&a, &x); D. printf("%1d, %lf",a,
x);
2. 程序改错题(以下各个程序段均有 5 个错误,请先找出错误的位置,然后再改正)
(1) 以下程序的功能是,从键盘输入一个字符并鸣笛输出。
#include "stdio.h"
mian() //main()
{ char c //char c;
getchar(c);//c = getchar();
putchar('007') ; /*鸣笛*/
c=putchar(); //putchar(c);
//}
(2) 以下程序的功能是,输入长方形的两边长(边长可以取整数和实数),输出它的面积和周长。
main //main()
{
int a,b,s,l; //double a,b,s,l;
scanf("%d,%d",&a,&b); //scanf("%lf,%lf",&a,&b);
s=a*b;
l=a+b; //l=(a+b)*2;
printf("l=%f,s=%fn",l); //printf("l=%lf,s=%lfn",l,s);
}
3. 写出程序运行结果
(1)
main()
{
int a,b;
scanf("%2d%*2s%2d",&a,&b);
printf("%dn",a+b);
}
运行时输入:12345678 //输出:68
(2)
---WORD格式--可编辑--
main()
{
int a=3,b=5,x,y;
x=a+1,b+6;
y=(a+1,b+6);
printf("x=%dny=%dn",x,y);
}
输出:x=4
y=11
第4章 选择结构程序设计习题
1. 单项选择题
(1) 选择结构程序设计的特点是___B____。
A. 自上向下逐个执行 B. 根据判断条件,选择其中一个分支执行
C. 反复执行某些程序代码 D. 以上都是
(2) 假定所有变量均已正确定义,下列程序段运行后x 的值是__B_。
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
(3) 下面的程序片段所表示的数学函数关系是_ A____。
if(x<0) y= -1;
else if(x>0) y=1;
else y=0;
(4) 下列各语句序列中,能够且仅输出整型变量a、b 中最大值的是( C )。
A. if(a>b) printf("%dn",a); printf("%dn",b);
B. printf("%dn",b); if(a>b) printf("%dn",a);
C. if(a>b) printf("%dn",a); else printf("%dn",b);
D. if(a
(5) 以下程序段的输出结果是 A
int x=5;
if(x>0) y=1;
-------
---WORD格式--可编辑--
else if(x==0) y=0;
else y= 1;
printf("%d",y);
A. 1 B. 5 C. 0 D. 2
(6) 程序段int x=5,y=8,max; max=(x>y)?x:y; printf("%d",max);的输出结果是 B 。
A. 5 B. 8 C. 3 D. 13
(7) 程序段 int x=3,a=1;switch(x) {case 4: a++;case 3:
a++;case 2: a++;case 1: a++;} printf ("%d",a);的输出结果是
D 。
A. 1 B. 2 C. 3 D. 4
(8) 下列语句应将小写字母转换为大写字母,其中正确的是( B )。
(ch>='a'&ch<='z') ch=ch-32;
(ch>='a'&&ch<='z')ch=ch-32;
=(ch>='a'&&ch<='z')?ch-32:’’;
=(ch>'a'&&ch<'z')?ch-32:ch;
2. 阅读程序,写出运行结果
(1) {
void main () int x=100, a=10, b=20,
{ ok1=5, ok2=0;
int a=10, b=4, c=3; if(a
if(a
if(a printf("%d, %d, %dn", a, else x=-1;
b, c) ; printf("%dn", x);
} }
输出:10,4, 3
(2) 输出:-1;void main ( )
(3) printf("%d",k);
int k,a=1,b=2; 输出:3
k=(a++==b) ? 2:3; (4)
---WORD格式--可编辑--
void main()
{
int s=1,k=0;
switch (s)
{
case 1: k+=1;
case 2: k+=2;
default: k+=3;
}
printf(“%d”,k);
}输出:6
(5)
void main()
{
int s=1,k=0;
switch (s)
{
case 1: k+=1;break;
case 2: k+=2;break;
default: k+=3;
}
printf(“%d”,k);
}
输出:1
第5章 循环结构程序设计习题
1. 单项选择题
(1)for(i=1;i<9;i+=1);该循环共执行了 B 次。
A. 7 B. 8 C. 9 D. 10
(2)int a=2;while(a=0) a--;该循环共执行了 A 次。
A. 0 B. 1 C. 2 D. 3
(3)执行完循环 for(i=1;i<100;i++);后,i 的值为 B 。
A. 99 B. 100 C. 101 D. 102
(4)以下 for语句中,书写错误的是 D 。
A. for(i=1;i<5;i++); B. i=1;for(;i<5;i++);
C. for(i=1;i<5;) i++; D. for(i=1,i<5,i++);
(5) C 语句,在循环条件初次判断为假,还会执行一次循环体。
A. for B. while C. do-while D. 以上都不是
(6)循环结构的特点是 C 。
A. 从上至下,逐个执行 B. 根据判断条件,执行其中一个分支
C. 满足条件时反复执行循环体 D. 以上都对
---WORD格式--可编辑--
(7) i、j已定义为 int 类型,则以下程序段中内循环体的执行次数是 A 。
for(i=5;i;i--)
for(j=0;j<4;j++){…}
A. 20 B. 24 C. 25 D. 30
(8) C 语言 while 语句中,用于条件的表达式是 D 。
A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式
(9) int a=1, x=1; 循环语句while(a<10) x++; a++; 的循环执行
D 。
A. 无限次 B. 不确定次 C. 10 次 D. 9 次
(10)下列程序段执行后 s 的值为 A 。
int i=1, s=0; while(i++) if(!(i%3)) break ; else s+=i ;
A. 2 B. 3 C. 6 D. 以上均不是
2. 填空题
(1)三种循环语句是 等价 价的。
(2)当循环体中的switch语句内有break语句,则只跳出 swicth 语句。同样,当switch语句中有循环语句,内有 break 语句,则只跳出 循环 语句。
(3)循环体执行遇到continue 语句时 跳过本次循环进入下次循环 。
(4)下列程序的功能是输入一个正整数,判断是否是素数,若为素数输出 1,否则输出 0,请为程序填空。
void main( )
{
int i, x, y=1;
scanf("%d", &x);
for(i=2; i<=x/2; i++)
if ( x%i==0 ) { y=0; break; }
printf("%dn",y);
}
(5)输入 N个实数,输出其中的最大值、最小值。
#include
---WORD格式--可编辑--
void main( )
{
int n,i;
float no1,nmax,nmin;
scanf("%d",&n); scanf("%f",&no1);
nmax=no1;
nmin=no1 ;
for(i=2;i<=n;i++)
{
scanf("%f", &no1 );
if(no1>nmax) nmax=no1;
if(no1 }
printf("MAX=%f MIN=%fn",nmax,nmin);
}
(6)输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。
#include
void main( )
{
char ch;
int s1=0,s2=0 ;
while(( ch=getchar() )!='n')
{
if(ch>='0'&&ch<='9') s1++;
if(ch>='a'&&ch<='z' || ch>=’A’||ch<=’Z’) s2++;
}
}
3. 阅读下列程序,写出程序运行的输出结果
(1) { printf("%d", --y);
void main( ) continue;}
{ int y=9; }
for( ;y>0; y--) 输出:852
if(y%3==0) (2)main()
---WORD格式--可编辑--
{
int k,n,m;
n=10;m=1;k=1;
while(k++<=n)
m*=2;
printf("%dn",m);
}
输出:1024
(3)
void main ( )
{ int i=5;
do
{switch (i%2)
break;
continue;
}
",
i);
} while(i>0);
}
输出:i=3 i=1 i=-1
void main( )
{
do
{
switch(c++)
{
case 'A': k++;
break;
case 'B': k--;
case 'C': k+=2;
break;
break;
break;
default: k=k/3;
}
k++;
}while(c<'G');
printf("k=%dn", k);
}
输出:8
(5)输入数据:2,4
#include
void main( )
{
int s=1,t=1,a,n;
int i;
scanf("%d,%d",&a,&n);
for(i=1;i t=t*10+1; s=s+t;
}
s*=a;
printf("SUM=%dn",s);
}
输出:2468
case 'D': k=k%2;
case 'E': k=k*10;
{case 4: i--;
case 6: i--;
i-- ; i-- ;
printf("i=%d
(4)#include
int k=0; char c='A';
---WORD格式--可编辑--
4. 程序改错
(1) 以下程序是显示[200,300]所有能被 7 整除的数,每行显示 5 个数,此程序有 5处错。
main()
{
int i,n=0; /*n用来记录每行已打印数的个数*/
while(i<300) //while((i <= 300)&&(i >= 200))
{ //i++;
if(i%7==0) //if(i%7!=0)
break; //continue;
printf("%5d",i);
n=n+1;
if(n=5)/*满5个换行*/ //if(n == 5)
{
printf("n");
n=0;
}
}
}
(2) 以下程序是求 1!+2!+3!+4!+5!+6!+7!的值,其中有 3 处错误。
main()
{
int i,s,t=0; //long s = 0,t = 1;
//int i;
for(i=1;i<=7;i++)
{
s=0; //去掉该语句
t=t*i;
s=s+t;
}
printf("sum=dn",s); //printf(“sum=%ld”,s);
}
第6章 函数习题
---WORD格式--可编辑--
1. 单项选择题
(1)C 语言总是从 A 函数开始执行。
A. main B. 处于最前的 C.处于最后的 D. 随机选一个
(2)函数在定义时,省略函数类型说明符,则该函数值的类型为
A 。
A. int B. float C. long D. double
(2)以下 B 函数,真正地没有返回值。
A. int a(){int a=2;return (a);} B. void
b(){printf("c");}
C. int a(){int a=2;return a;} D. 以上都是
(3)在 C 语言中,有关函数的说法,以下正确的是 C 。
A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用
C. 函数不可嵌套定义,但可嵌套调用 D. 函数不可嵌套定义,也不可嵌套调用
(4)以下函数调用语句中,含有实参的个数为 B 。
fun((2,3),(4,5+6,7));
A. 1 B. 2 C. 5 D. 6
(5)函数调用可以在 D 。
A. 函数表达式中 B. 函数语句中 C. 函数参数中
D. 以上都是
(6)被调函数返回给主调函数的值称为 C 。
A. 形参 B. 实参 C. 返回值 D. 参数
(7) D ,可以不进行函数类型说明。
A. 被调函数的返回值是整型或字符型时 B. 被调函数的定义在主调函数定义之前时
C. 在所有函数定义前,已在函数外预先说明了被调函数类型 D.
以上都是
(8)被调函数通过 D 语句,将值返回给主调函数。
A. if B. for C. while D. return
(9)被调函数调用结束后,返回到 B 。
A.主调函数中该被调函数调用语句处
B.主函数中该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句
D.主调函数中该被调函数调用语句的后一语句
---WORD格式--可编辑--
(10)以下对 C语言函数的有关描述中,正确的是 A 。
A. 在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B. C函数既可以嵌套定义又可递归调用
C. 函数必须有返回值,否则不能使用函数
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中
(11)C 语言中函数的隐含存储类型是 A 。
A. auto B. static C. extern D. 无存储类型
(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是 A 。
A. return 这两个数 B. 形参用两个元素的数组
C. 形参用两个这种数据类型的指针 D. 用两个全局变量
2. 填空题
(1) 变量的作用域主要取决于变量 定义的位子 ,变量的生存期既取决于变量 存储类型 ,又取决于变量 存储方式 。
(2) 说明变量时,若省略存储类型符,系统默认其为 整形 存储类别,该存储类别的类型符为: int 。
(3) 静态型局部变量的作用域是 静态局部变量定义的复合语句或函数体内 ,生存期是 整个程序运行期内 。
(4) 函数中的形参和调用时的实参都是数组名时,传递方式为 地址传递 ,都是变量时,传递方式为 值传递 。
(5) 函数的形式参数的作用域为 整个函数体内 ,全局的外部变量和函数体内定义的局部变量重名时, 函数体内定义的局部
变量优先。
(6) 若自定义函数要求返回一个值,则应在该函数体中有一条
return 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 void 。
(7) 若函数的形式参数是指针类型,则实参可以是 数组名 、 地址 或 指针变量 。
(8) 函数的参数为 char *类型时,形参与实参结合的传递方式为
地址传递 。
(9) 函数的实参为常量时,形参与实参结合的传递方式为 值传递 。
(10) 对数组按值从大到小的顺序排序后输出,请填空。
#include
---WORD格式--可编辑--
void main()
{
float a[7]={2,6,3,8,3,12,9};
int i ;
void sort(float*,int);
sort(a,7) ;
for(i=0;i<7;i++) printf("%f ",a[i]);
printf("n");
}
void sort( float *p, int n )
{
int i,j,k; float t;
for(i=0;i {
k=i;
for(j=i+1;j if( p[k]
if(k != i)
{ t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; }
}
}
(11) 下列函数在 n 个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。
#include
void find(float *p, float *max, float *min, int n)
{
int k;
float t;
*max=*p; *min = *p;
for(k=1;k {
t=*(p+k);
if( t>*max ) *max=t;
if(t<*min) *min=t;
}
}
---WORD格式--可编辑--
3. 写出下列程序运行结果:
(1)
main()
{
int i=1,p;
p=fun(i,i+1);
printf("%dn",p);
}
int fun(int a,int b)
{
int f;
键盘输入 abcdef
#include
void fun( )
{
char c ;
fun( ) ;
putchar(c);
}
void main( )
{ fun( ); }
输出:fedcba
(3)
#include
#define C 5
int x=1,y=C;
void main( )
{
int x;
x,y);
if(x>4)
{ int x ; x=++y;
if(a>b)
f=1;
else if(a==b)
f=0;
else
f=-1;
return f;
}
输出:-1printf("%d %dn",x,y) ; }
x+=y--;
printf("%d %dn",x,y);
}
(4)
#include
int c , a=4 ;
func(int a , int b)
{ c=a*b ; a=b-1 ; b++ ;
return (a+b+1) ; }
void main( )
{
int b=2 , p=0 ; c=1 ;
p=func(b , a) ;
printf("%d,%d,%d,%dn",
a,b,c,p) ;
}
输出:4,2,8,9
(5)
{
unsigned k=1;
{ k*=num%10; num/=10; }
while(num);
(2) if((c=getchar( ))!='n')
unsigned fun6(unsigned num)
x=y++; printf("%d %dn",
do
---WORD格式--可编辑--
return k;
}
void main( )
{
unsigned n=26;
printf("%dn", fun6(n));
}
输出:12
输出:5 6
7 7
12 6
第7章 数组习题
1. 单项选择题
(1) int a[4]={5,3,8,9};其中 a[3]的值为( D )。
A. 5 B. 3 C. 8 D. 9
(2) 以下 4 个字符串函数中,( A )所在的头文件与其他 3 个不同。
A. gets B. strcpy C. strlen D. strcmp
(3) 以下 4 个数组定义中,( D )是错误的。
A. int a[7]; B. #define N 5 long b[N]; C. char c[5];
D. int n,d[n];
(4) 对字符数组进行初始化,( B )形式是错误。
A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123;
C. char c3[ ]={ '1', '2', '3', '0'}; D. char
c4[ ]="123";
(5) 在数组中,数组名表示( A )。
A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址
C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址
(6) 若有以下数组说明,则数值最小的和最大的元素下标分别是( B )。
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
(7) 若有以下说明,则数值为 4 的表达式是( D )。
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]
(8) 设有定义:char s[12] = "string" ; 则printf( "%dn",strlen(s)); 的输出是( A )。
A. 6 B. 7 C. 11 D. 12
---WORD格式--可编辑--
(9) 设有定义:char s[12] = "string"; 则printf("%dn ",
sizeof(s)); 的输出是( B )。
A. 6 B. 7 C. 11 D. 12
(10) 合法的数组定义是( A )。
A. char 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};
(11) 合法的数组定义是( B )。
A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4};
C. int a[2][3]={0,1,2,3,4,5,6}; D. int
a[2][3]={0,1,2,3,4,5,};
(12) 下列语句中,正确的是 ( D )。
A. char a[3][ ]={'abc', '1'}; B. char a[ ][3] ={'abc', '1'};
C. char a[3][ ]={'a', "1"}; D. char a[ ][3] ={ "a", "1"};
(13) 下列定义的字符数组中,输出 printf("%sn", str[2]) ;的输出是( C )。
static str[3][20] ={ "basic", "foxpro", "windows"};
A. basic B. foxpro C. windows D. 输出语句出错
(14) 下列各语句定义了数组,其中哪一个是不正确的( C )。
A. char a[3][10]={"China","American","Asia"}; B. int
x[2][2]={1,2,3,4};
C. float x[2][ ]={1,2,4,6,8,10}; D. int
m[][3]={1,2,3,4,5,6};
(15) 数组定义为 int a[3][2]={1,2,3,4,5,6},值为6的数组元素是( B )。
A. a[3][2] B. a[2][1] C. a[1][2] D.
a[2][3]
2. 填空题
(1) C 语言中,数组的各元素必须具有相同的 类型 ,元素的下标下限为 0 ,下标必须是正整数、0、或者 常量 。但在程序执行过程中,不检查元素下标是否 越界 。
(2) C 语言中,数组在内存中占一片 连续 的存储区,由 数组名 代表它的首地址。数组名是一个 常量,不能对它进行赋值运算。
(3) 执行 static int b[5], a[ ][3] ={1,2,3,4,5,6}; 后,b[4] =
0 ,a[1][2] = 6 。
---WORD格式--可编辑--
(4) 设有定义语句 static int a[3][4] ={{1},{2},{3}}; 则
a[1][0]值为 2 ,a[1][1] 值为 0 ,a[2][1]的值为 0 。
(5) 如定义语句为 char a[ ]= "windows",b[ ]= "2000";,语句
printf("%s",strcat(a,b));的输出结果为 windows2000 。
(6) 输入 20 个数,输出它们的平均值,输出与平均值之差的绝对值为最小的数组元素。请填空。
#include s=fabs(a[0]-pjz);
#include for(i=1;i<20;i++)
void main( ) if(fabs(a[i]-pjz)
{ float a[20],pjz=0,s,t; int {
i,k; s=fabs(a[i]-pjz);
for(i=0; i < 20; i++) t=a[i];
scanf(“%f”,&a[i]); }
for(i=0;i<20;i++)
pjz+=a[i]; printf(“%f,%f”,pjz,t);
pjz/=20; }
(7) 以下程序以每行 10个数据的形式输出 a 数组,请填空。
void main( )
{
int a[50],i;
printf("输入50个整数:");
for(i=0; i<50; i++) scanf( "%d", &a[i] );
for(i=1; i<=50; i++)
{ if( i%10==0 )
printf( "%3dn" , a[i-1] ) ;
else printf( "%3d",a[i-1]);
}
}
(8) 下面程序的功能是输出数组 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]) k = p ;
printf("%dn" ,k);
}
---WORD格式--可编辑--
3. 阅读程序,分析程序的功能。
(1)
#include
#include
void main( )
{
char s[80];
int i ;
for(i=0; i<80; i++)
{ s[i]=getchar( );
if(s[i]=='n') break;
}
s[i]='0'; i=0;
while(s[i])
putchar(s[i++]);
putchar(‘n’);
}
结束,并将其原样输出。
(2)
(3)
#include
#include
void main( )
{
char a[10][80], c[80];
int i, j, k;
for(i=0; i<10; i++)
gets(a[i]);
#include
#include
void 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){strcpy(c,str[i]); }
printf( "%sn", c);
printf( "%dn", strlen
(c));
}
分析:输入10个字符串,输出10个字符串中最长的字符串和它的长度。
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)
{
分析:输入一个字符串,以回车
---WORD格式--可编辑--
strcpy(c,a[i]) ;
strcpy(a[i], a[k]);
strcpy(a[k],c);
} // 字符串交换
}
for(i=0; i<10; i++)
阅读程序,写出运行结果。
#include
void main( )
;
int
b[6]={27,13,4,25,23,16},i,j;
for(i=0;i<6;i++)
{ for(j=0;j<6;j++)
if(a[i]==b[j])
break;
if(j<6)
printf("%d ",a[i]);
}
printf("n");
}
分析:按数组a中元素顺序输出与数组b中元素相同的数。
输出:4,25,27,16
阅读程序,写出运行结果。
#include
void main( )
{
char a[8],temp; int j,k;
for(j=0;j<7;j++)
a[j]='a'+j; a[7]='0';
for(j=0;j<3;j++)
{
temp=a[6];
puts(a[i]);
}
分析:输入10个字符串,用选择排序算法将10个字符串按从小到大顺序排列并输出。 for(k=6;k>0;k--)
a[k]=a[k-1];
a[0]=temp;
printf("%sn",a);
}
}
分析:将字符串的最后的3个元素移到字符串首位。
输出:efgabcd
(4)
{int a[6]={12,4,17,25,27,16}(5)
---WORD格式--可编辑--
(6) 阅读下列程序,写出程序运行的输出结果。
#include
#include
void main( )
{
char str1[ ]="*******";
for(int i=0;i<4;i++)
{
printf("%sn",str1);
str1[i]=' ';
str1[strlen(str1)-1]='0';
}
}
输出:*******
*****
***
*
第8章 指针习题
1. 单项选择题
(1) 指针 pstr所指字符串的长度为 D 。char
*pstr="t"1234abcdn"
A. 15 B. 14 C. 13 D. 12
(2) 对于 char *pstr;,以下正确的是 B 。
A. *pstr="Hi" B. pstr="Hi" C. *pstr=" Hi" D.
**pstr="Hi"
(3) 以下程序段的输出结果为 B 。
char astr[5]="1234";
char *pstr=astr;
printf("%c",pstr[1]-'0');
A. 1 B. 2 C. ASCII码值为 1 的字符 D.
ASCII 码值为 2 的字符
(4) 下述程序段的输出结果为 D 。
char astr[]="abcde";
---WORD格式--可编辑--
char *pstr=&astr[5];
while(--pstr>=astr)
putchar(*pstr);
putchar('n');
A. abc B. cba C. abcde D. edcba
(5) 若有定义 int a=1,*b,c;,以下不正确的是 A 。
A. b=a B. b=&a C. b=&a,c=*b D. c=a
(6) 以下程序段的运行结果为 C 。
int num[]={1,2,3,4,5,6,7,8,9},*pnum=&num[2];
pnum++;
++pnum;
printf("%dn",*pnum);
A. 3 B. 4 C. 5 D. 6
(7) 以下程序段的运行结果为 B 。
char *pstr="My name is Tom";
int n=0;
while(*pstr++!='0')
n++;
printf("n=%dn",n);
A. 12 B. 14 C. 16 D. 不确定
(8) 以下程序段的运行结果为 B 。
int num[9]={1,2,3,4,5,6,7,8,9},*p;
p=num;
*(p+1)=0;
printf("%d,%d,%dn",*p,p[1],(*p)++);
A. 2,0,1 B. 1,0,1 C. 2,2,2 D. 1,1,1
(9) 以下程序段的运行结果为 C 。
int a=5,*p=&a,b,*q;
a=10;
*p=15;
q=p;
*q=20;
b=*q;
p=&b;
---WORD格式--可编辑--
printf("a=%d,b=%d,*p=%d,*q=%dn",a,b,*p,*q);
A. a=5,b=10,*p=15,*q=20 B.
a=20,b=15,*p=10,*q=5
C. a=20,b=20,*p=20,*q=20 D.
a=15,b=15,*p=15,*q=15
(10) 已知 char *p,*q;,以下语句正确的是 C 。
A. p*5; B. p/=q; C. p+=5; D. p+=q;
第9章 结构体共用体习题
1. 填空题
(1) 定义结构体的关键字是 struct ,定义共用体的关键字是 union 。
(2) 结构体和共用体的相同点是 都是构造类型 ,不同点是 共用体在同一时间只能使用一个成员 。
(3) 若有以下定义和语句,则sizeof(a)的值是 12 ,而sizeof(b)的值是 20 。
struct tu
{ int m; char n; int y;}a;
struct
{ float p; char q; struct tu r} b;
(4) 设有下面结构类型说明和变量定义,则变量a在内存所占字节数是 32 。如果将该结构改成共用体,结果为
16 。
struct stud
{ char num[6]; int s[4]; double ave; } a;
(5) 下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20]; double score; };
main()
{ struct st ex ; printf("ex size: %dn",sizeof( ex )); }
(6) 下面定义的结构体类型拟包含两个成员,其中成员变
---WORD格式--可编辑--
量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。
struct node
{ int info; struct node * link; }
(7) 以下程序执行后输出结果是 A 。
main()
{ union { unsigned int n; unsigned char c; } u1;
u1.c='A'; printf("%cn",u1.n); }
(8) 变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。
root
sp next data
struct list
{ char *sp ; struct list *next ; int data ; } root;
2. 阅读下面的程序,写出程序结果
(1)
struct info
{ char a,b,c;};
main()
{ struct info
s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int
t;
t=(s[0].b-s[1].a)+(s[1].c-s[0].b);
printf("%dn",t); }
输出:2
(2)
void main()
{ union { char i[2]; int k; } stu;
-------
---WORD格式--可编辑--
stu.i[0]='2'; stu.k=0;
printf("%s,%dn",stu.i,stu.k);
}
输出:,0
(3)
union myun
{ struct{ int x, y, z; } u; int k; } a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;
printf(“%dn",a.u.y); }
输出:0
发表评论