华南理工大学高级语言程序设计C++随堂练习(求答案谢谢)
3,B
4,D
5,C
6,A
7,B
8,C
9,C
10,A
11,D
12,C
13,D
14,A
15,B
16,B
17,D
18,C
19,A
20,D
C语言
第二章
一.bai选择题du
1.B 2.C 3.D 4.B 5.B 6.A 7.B 8.A 9.D 10.C C
11.B C 12.B 13.A 14.D B A 15.C
二.填空题
1.3,1
2.2
3.4
4.-264
5.n=1
三.简答题
1.字符zhi常量dao和字符串常量有何区别?
答:字符串常量和字符常量是不同的量。它们之间主要有以下区别:
(1)字符常量由单引号括起来的一个字符,字符串常量由双引号括起来字符序列。
(2)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。
(3)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。
2.简述转义字符的作用并举例加以说明。
使用转义符“\”与一些特殊字符构成转义字符。用以表示非图形字符,如退格、换行等,也可以表示成字符型常量。转义字符主要用来表示那些用一般字符不便于表示的控制字符。例如’\n’就是一个转义字符,用来表示“回车换行”。
3.简述数据类型转换规则并举例加以说明。
数据类型转换遵循如下规则:
a)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
b)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
c)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
d)char型和short型参与运算时,必须先转换成int型。
e)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
第三章
思考与习题
一、单选题 1.C2.D3.B4.B5.C
6.C7.B8.A9.D10.B
11.D12.C13.A14.D
二、填空题
答案:
1.顺序结构、选择结构、循环结构
2.scanf( )、printf( )
3.1
4.2
5.1
6.1
2
3
7.s=254
8.8
三、简答题
答案:
1.结构化程序设计的基本思想是:任何程序都可以通过顺序结构、选择结构、循环结构表示。复杂程序是经过这三种基本结构反复嵌套使用而构成的。结构化程序的优点是程序模块结构清楚,层次分明,易于读写。
2.关系运算是通过C语言提供的6种关系运算符对两个值的大小等关系进行比较。
逻辑运算既通过三种逻辑运算符对逻辑量进行与、或、非的运算即逻辑运算。
条件运算是通过条件运算符“?:”构造的条件表达式:表达式1 ? 表达式2 :表达式3,根据表达式1的值判断条件表达式的最终计算结果是取表达式2的值还是取表达式3的值。
3.不是,虽然空语句是什么也不执行的语句,但是在程序中空语句可用来构成循环结构中的空循环体。
4.如果某个量的值不为0时,则在逻辑运算中被判别为真;否则,如果其值为0时,被判别为假。
5.条件表达式和条件语句都可以根据给定的条件进入不同的分支执行语句。条件表达式语句简练,如果选择结构比较简单,可以采用条件表达式来实现。而通过条件语句,以及语句的嵌套,可以实现更复杂的选择结构。
四、设计题目
答案:
1.
#include "stdio.h"
void main()
{
int x=0
for(x=0x<=10x++)
printf("square(%d)=%d\n",x,x*x)
}
2.
# include "stdio.h"
void main()
{
int x, y, z, max, min
printf("Please input three integer number:")
scanf("%d %d %d", &x, &y, &z)
min = max = x
if(x==y &&y==z)
printf("x = y = z, max=min=%d\n", max)
Els
{
if (y>max)
max = y
if (z>max)
max = z
if (y<min)
min = y
if (z<min)
min = z
printf("max=%d, min=%d\n", max, min)
}
}
3.
# include "stdio.h"
void main()
{
char c, s[50]="", i=0
c=getchar()
while(c!='\n')
{
if(c<'0'|| c>'9')
{
s[i]=c
i++
}
c=getchar()
}
printf("%s\n", s)
}
4.
# include "stdio.h"
void main()
void main()
{
int i,j
for(i=1i<=9i++)
{
for(j=1j<=i&&j<=9j++)
printf("%d*%d=%d\t",i,j,i*j)
printf("\n")
}
}
5.
# include "stdio.h"
void main()
{
int x, i=1
int n=88
printf("please input a number.\n")
scanf("%d",&x)
while(i<10)
{
if(x!=n)
{
if(x >n)
printf("%d>n! Try again!\n", x)
else
printf("%d<n! Try again!\n", x)
scanf("%d",&x)
i++
}
else
{
printf("You are right, the number is %d\n",n)
break
}
printf("You are right, the number is %d\n",n)
break
}
}
if(i==10)
printf("You have tried 10 times. Game over!\n")
}
6.
#include "stdio.h"
void main()
{
int i=1
float j ,sum
sum=1.0
do
{
j=1.0/(i*(i+1))
sum=sum+j
i=i+1
}
while(j>=0.001||i<=20)
printf("sum=%f\n",sum)
}
7.
#include "stdio.h"
void main()
{
int k
float sum=0
for(k=1k<=100k++)
sum=sum+k
for(k=1k<=50k++)
sum=sum+k*k
for(k=1k<=10k++)
sum=sum+1.0/k
printf("sum=%f\n",sum)
}
8.
#include "stdio.h"
void main()
{
int k
int m,n,t
for(k=100k<=999k++)
{m=k/100
n=k/10%10
t=k%10
if(m*m*m+n*n*n+t*t*t==k)
printf("k=%d\n",k)
}
}
9.
#include "stdio.h"
void main()
{
int k
int m,n,t
for(k=1k<=3k++)
{
m=k*2-1
n=3-k
for(t=1t<=nt++)
printf(" ")
for(t=1t<=mt++)
printf("*")
printf("\n")
}
}
char *p="asdf"
printf("%c",*(p+strlen(p)));
答案是a
(p+strlen(p)是什么意思 strlen不是测试字符串长度么 答案为什么是a啊???
我的解释:答案是错误的,应该显示空格。
strlen(p)是返回字符串有效字符长度,所以应该为4,而非5
p为字符串指针,其值为字符串内存地址首地址,即指向'a'
p + strlen(p)会对指针p加上偏移量strlen(p),即p + 4*sizeof(char), 这时指向"asdf"后面一个字符,这个字符应为系统添加的那个字符串结束符'/0',屏幕显示应该为空格。
有以下程序
#include<stdio.h>
main()
{char s[]="159",*p
p=s
printf("%c",*p++)
printf("%c",*p++)
程序运行后的结果是_______
答案是15 怎么算的?????
我的解释:答案应该为15,
p=s// 首先字符串指针p指向字符串数组s首地址,即'1'
printf("%c",*p++)// 由于是后置++,此时p的值仍然为s首地址,
// 所以*解引用指针p,输出字符串第一个字符'1'
printf("%c",*p++)// 现在p的值已经增加了1*sizeof(char)了,同理是后置++
// 所以输出第二个字符'5',此函数运行完后,p的值再增加1*sizeof(char)
分别用十进制表示整形常量-ox1f为
答案是-31 怎么算的????
我的解释: -0x1f为16进制常量-1f(注意前面的0x表示16进制),转换为10进制:
-(1*16 + 15) = -31
以下由for语句构成的循环执行了______次
#include<stdio.h>
#difine N 2 // 定义宏常量N为2
#difine M N+1 // 定义宏M 为 N+1,即为3
#difine NUM(M+1)*N/2 //定义宏NUM 为(M+1)*N/2,即为4
main()
{int i,n=o;
for(i=1;i<=NUMi++)
{n++printf("%d",n)}
printf("\n")}
我的解释:
4次循环,输出结果为:
1
2
3
4
main()
{ int i,j
for(i=1i<5i++)
{ for (j=1j<ij++)printf("%c",' ')
printf("%c%c",'*','*')
for(j=1j<=9-i*2j++)printf("%c",' ')
printf("%c%c",'*','*')
printf("\n")}
}
二、填空如下:
a[i][j]=1
a[i][j]=0
三、完成程序如下(TURBO C下调试通过):
main(){
int a[10],i,j,min,t
for(i=0i<10i++) scanf("%d",&a[i])
for(i=0i<9i++){
min=i
for(j=i+1j<10j++)if(a[j]<a[min])min=j
if(i!=min){t=a[i]a[i]=a[min]a[min]=t}
}
for(i=0i<10i++) printf("%d ",a[i])
}