一、判断题(每小题1分,共15分)
1.标准C中,只有数值型数据才能进行4则混合运算。
2.标准C中,_a是合法的自定义标识符。
3.有定义:float f表达式f+=(int)3.6%2”不符合C语言语法。
4.标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。
6.以下运算符排列顺序满足按照优先级从高到低的排列:‘&&’、‘!’、‘==’、‘-’。
7.语句for()是非法的。
8.在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。
9.while和do-while的主要区别是后者至少无条件执行一次。
10.数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。
11.当函数没有返回值类型时,表示函数类型为void。
12.C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。
13.一个函数中只允许有一条return语句。
14.在C语言中,如果没有说明变量的存储类型是auto类型的。
15.由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。
二、填空题(每空1分,共15分)
1. 若a=4b=5,c=6则表达式c==(b=-a)中c的值是 (1) 。
2. 计算表达式的值:
4&&-4的值: (2) ;
设int a=3,b=4,c=5,则表达式a||b+c&&b==c的值: (3) ;
设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值: (4) ;
设a=12,则表达式a*=a/5的值: (5) ;
3. 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}
则循环语句执行完后,z值为 (6) 。
4. 变量的指针就是指该变量的 (7) 。
5. 若有定义int (*p)[4],则标识符p是 (8) ;若有定义int *p[4],则标识符p是 (9) ;
6. 已有定义:char *p[ ]={“France”,“Chinese”,“Russia”,“America”};则语句printf(“%s”,p[2]);printf(“%c”,*(p[1]+2));printf(“%c”,*(*(p+1)+1));
的输出结果分别为: (10) 、 (11) 、 (12) 。
7. 已有定义: int x=65若格式化输出结果为“A, 65”,则对应的格式化输出语句为printf(“ (13) , (14) ”, x, x)。
8. 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]= (15) 。
三、简答题(每题4分,共12分)
1、简述选择语句if和else语句对与switch语句的区别。
2、简述在循环语句中,break和continue的区别。
3、若int a[5],*p=a;简述*p++和(*p)++的区别。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
七、编程题(8分)
编译程序,其功能是比较字符串的大小( 不允许 用系统提供的字符串比较函数strcmp)。要求是:
(1) 通过主函数调用一个函数strcompare来实现。
(2) 要求函数strcompare实现两个字符的比较:如第一个字符小于第二个字符则返回一个负值;如两个字符相等则返回0值;如第一个字符大于第二个字符则返回一个正值。
(3) 并输出两个字符串中相同部分的子串。
《C语言程序设计基础》试卷参考答案
一、判断题(每小题1分,共15分)
1~5 ; 6~10 ; 11~15
二、填空题(每空1分,共15分)
(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6
(7)地址 (8) 行指针,指向有四个元素的一维数组
(9)指针数组名,该数组有四个元素,每个元素都是指针
(10)Russia (11)i (12)h (13) %c (14) %d (15)7
三、简答题(每题4分,共12分)
1、if总是判断其后面的表达式的值是否为非零值,如是非零值则执行其后面的语句或由{}括起来的复合语句,否则执行else后面的语句。而switch语句则根据其后面表达式的可数值来判断,执行switch语句体内与其中的一个case:常量值相等语句后面的语句。执行break语句后,跳出switch语句体。
2、break是终止整个循环过程;continue是终止本次循环。
3、*p++首先取a[0]的值,然后p指向a[1];(*p)++使得a[0]的值自增1,但p保持不变。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4 分,共16分)
1、 (1)缺#include ; (2)scanf(“%f”,a)改为 scanf(“%f”,&a)
2、 (1)缺sum=0(2)for(i=1i<=3i++) 改为for(i=0i<3i++)
3、 (1)p1=p2 改为 *p1=*p2 (2)swap(&a, *p) 改为swap(&a, p)
4、 (1)在if(m<0)语句后添加else if(m==0) a=1(2) 添加 return(a)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
1、 (1)x=0(2)if(n==x) (3)s++或s=s+1
2、 (4)&num[i] (5)max<num[i]? (6)num[i]!=0
3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp
4、 (10)count=0(11)n%10 (12)n>0或n!=0或n
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
1、 #*#*#*
2、 main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
七、编程题(8分)
#include
main()
{
int i,j, flag=0
char str1[90],str2[90]
gets(str1)
gets(str2)
i=0
do{
flag=strcompare(str1[i],str2[i])
i++
}while(str1[i]!=’’ &&str2[i]!=’’ &&flag=0)
if(flag<0)printf(“%s小于%s ”,str1,str2)
else if(flag==0) printf(“%s 等于%s ”,str1,str2)
else printf(“%s大于%s ”,str1,str2)
printf(“两个字符串中相同的字串为:”)
j=0
i--后3句可用str1[i]=’’printf(“%s”,str1)代替//用str2也可以。
while(j<i){printf(“%c”,str1[i])j++} span=""></i){printf(“%c”,str1[i])j++}>
}
int strcompare(char c1,char c2)
{
int v
v=c1-c2
return v
}
习题1参考答案一、选择题 1. A 2. D
二、填空题
1. BASIC、FORTRAN、AL_GOL60和COBOL 2. 8
3. 关键字
4. 编辑、编译、链接和运行
三、简答题 1.答:
(1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。
(2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。 (3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。
(4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。
(5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。 (6)C语言与汇编语言相比,可移植性好。
(7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。
2.答:运行一个C语言程序,一般需要经过如下几个步骤:①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。 3.答:
(1)操作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。
《C语言程序设计》作业与思考题解答
说明:习题中P119:2.7 表示《C/C++上机实践及习题选解》中第119页的2.7题,其它以此类推,书后有解答。非《C/C++上机实践及习题选解》中的习题提供习题参考答案。
习题解答
作业一
1.合法的标识符: a12 A21 sum2 _fun C_program
不合法的标识符:f(x) $a21 21a while [email protected]
2.
main( )
{ int i, j, s
i=2j=3
s=i*j
printf(“ %d %d=%d”,i,j,s)
}
作业二
1.指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?
正确的整型(int)常量:0 -325 128 03456
正确的实型(float)常量: 0.0 2. 1.2e-3 5e2
正确的字符型(char)常量: ‘b’ ‘104’ ‘108’ ‘ ’ ‘8’
2.表达式的结果 (1) 1
(2) 0
(4) 0
(5) 9.5
(9) ‘A’
(11) 2
(12) 4.5
3. Y=sin(2*x)+(a+b)/(a*b)/(1+a/b)+*a*a/2
4.设m为整数,用逻辑表达式表示:能同时被3与7整除或者被5除余2且小于100的整数。
m%3= =0 &&m%7= =0 || m%5= =2 &&m<100
作业三
1.华氏温度通过公式C=5/9(f-32)转换成摄氏温度。试编程并上机调试运行:从键盘上输入华氏温度,利用公式计算后输出摄氏温度(要求:保留一位小数;记录调试过程中遇到的问题及解决方法)。
#include
main( )
{ float f,c
scanf(“%f”,&f)
c=5.0/9*(f-32)
printf(“c=%.1f”,c)
}
2.
用IF语句:
#include
#include
main( )
{ float x,y
scanf(“%f”,&x)
if (x<0) y=fabs(x)
else if (x<10) y=x
else if (x<20) y=3-x/5
else if (x<40) y=3*x-10
else y=0
printf(“y=%f’,y)
}
用switch 语句:
#include
#include
main( )
{ float x,y
scanf(“%f”,&x)
if (x<0) y=fabs(x)
else switch ( int(x/10) )
{ case 0: y=xbreak
case 1: y=3-x/5break
case 2,3: y=3*x-10break
defaut y=0
}
printf(“y=%f’,y)
}
3. 解答见P151
4.程序如下:
#include
#include
main()
{
int i=0
char ch
ch=getchar()
while (ch!=' ')
{ if (ch=='(') i++
if (ch==')') i--
if (i<0) break
ch=getchar()
}
if (i==0) printf("(与)匹配")
else if (i<0) printf(" 缺) ")
else printf("缺少)")
}
5. 程序如下:
#include
main()
{
int i,j,k,m=0
for (i=1i<10i++)
for (j=1j<20j++)
{ k=100-i*10-j*5
if (k>0) { printf(" i=%-3dj=%-3dk=%-3d",i,j,k)
m++
if (m%4==0) putchar(' ')
}
}
printf(" m=%d ",m)
}
6. 在横线上填写合适语句,完善程序,使之完成如下功能:从键盘上输入一个不多于7位的正整数,统计其中2的个数,并求各位数字中的最小数。
#include
main( )
{int count,min,temp
long n
min=9count=0
scanf( “%ld” ,&n)
do
{ temp= n % 10
if (temp= =2) count++
if (min>temp) min=temp
n=n/10
}while ( n )
printf(“count=%d,min=%d”,count,min)
}
作业四
1.p128: 4.6 解答见p156
2. p128: 4.11 解答见p158
3.编写一递归函数计算mn ,并从键盘输入m,n的值(如4,3),求mn 的值(上机调试)。
funm_n(int m,int n)
{
int y
if (n==1) y=m
else y=m*funm_n(m,--n)
return y
}
main()
{int m,n,y
printf("Input integer(m,n):")
scanf("%d,%d",&m,&n)
y=funm_n(m,n)
printf(" %d^%-d=%-d",m,n,y)
}
4.P128: 4.12 (3)答案:12345678
5.求3-100中的素数,要求编写一函数来判断某数是否为素数。
main()
{
int prime,i,n=0
for (i=3i<=100i++)
{ prime=prime_num(i)
if (prime) { if (n%10==0) printf(" ")printf("%4d",prime)n++}
}
}
prime_num(int m)
{ int k=2,r
do {
r=m % k
if (r==0) break
k++
}while(k<m)p=""></m)>
if (r!=0) return m
else return 0
}
6. 结果如下:
main0:x=12,y=2
fun: x=6,y=25
main:x=12,y=2
fun:x=7,y=26
main:x=12,y=2
作业五
1.从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。
#include
#include
main()
{
int i=0,c[52]={0},m=0
char str[80]
printf("Input a string:")
scanf("%s",str)
while (str[i])
{ if (str[i]>='A' &&str[i] <='Z') c[str[i]-'A']++
if (str[i]>='a' &&str[i] <='z') c[str[i]-'a'+26]++
i++
}
for (i=0i<26i++)
if (c[i]){ if (m%8==0) putchar(' ')m++
printf("%c:%-d ",i+'A',c[i])
}
for (i=0i<26i++)
if (c[i+26]){if (m%8==0) putchar(' ')m++
printf("%c:%-d ",i+'a',c[i+26])
}
}
2. P132: 5.15 程序见p167
3.从键盘上输入8个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。
#include
#include
main()
{
int data[8],i,*p1,*p2,temp
p1=data
printf("Input 8 numbers:")
for (i=0i<8i++)
{ scanf("%d",p1)/* 或 &(*p1) */
p1++
}
for (p1=datap1<data+8-1p1++) p=""></data+8-1p1++)>
for (p2=p1+1p2<data+8p2++) p=""></data+8p2++)>
if (*p1<*p2){ temp=*p1*p1=*p2*p2=temp}
for (i=0,p1=datai<8i++,p1++)
printf("%6d",*p1 )
}
4.从键盘上输入一个4 4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。
#include
#include
main()
{
int d[4][4],i,j,temp
printf("Input 16 numbers:")
for (i=0i<4i++)
for (j=0j<4j++)
scanf("%d",&d[i][j])
for (i=0i<4i++)
for (j=0j<ij++) p=""></ij++)>
if (d[i][j]>d[j][i]) d[j][i]=d[i][j]
for (i=0i<4i++)
{ printf(" ")
for (j=0j<4j++)
if (j>=i) printf("%6d",d[i][j] )
else printf("%6c",' ')
}
}
5.盘上输入两个字符串a,b,下面程序将a,b的对应字符中的较大者存放在数组c的对应位置上,填空完善之。
#include
#include
main( )
{int k=0
char a[80],b[80],c[80]={‘’},*p,*q
p=aq=b
gets(a)gets(b)
while (*p!=0 || * q!=0 )
{ if ( *p!=0 ) c[k]=*p
else c[k]=*q
p++q++k++
if ( *p !=0 ) strcat(c,p)
else strcat(c,q)
puts(c)
}
作业六
1.P134:6.5 程序见p178
2.P135:6.7 程序见p181
3.P134:6.18 程序见p196