C程序设计复习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计基础复习题答案
一、填空题
1、C语言所提供的实型变量分为两种类型,它们是float和double 。
2、一个C源程序中至少应包含一个主函数或main函数。
3.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’
4.在标准C
5;
c[4]的值为 100 。
6.在C语言中,引用数组元素时,引用数组元素时,其数组下标的数组类型允许是整型常量或整型表达式。
7.设y为int 型变量,请写出描述“y是偶数”的表达式 (y%2)==0 。
8.设int i=0,j=1,k=2,a=3,b=4; 执行表达式(a=i<j)&&(b=j>k)的值为 0 。
9.与表达式 a+=b 等价的另一书写形式是 a=a+b 。
10.有以下定义和语句
int a[3][2]={1,2,3,4,5,6,},*p[3];
p[0]=a[1];
则*(p[0]+1)所代表的数组元素是a[1][1] 。
11.代表一个反斜杠字符“\”的转义字符是'\\' 。
12.变量的指针就是变量的地址,存放变量地址的变量就是指针变量,它用来指向另一个变量。
13.++i和i++的不同之处在于i++是先使用i的值后,再执行i=i+1;而++i是先执行i=i+1后,再使用i的值。
14.设x、y和z是int 型变量,且x=3,y=4,z=5, 则表达式! ((x<y) && !z||1)值为0 。
15.已知函数int f(int k) { return ((k<0)?1:f(k-2)+2); }
则f(3)的值是 5 。
16.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
17.计算表达式:x=(i=4, j=10, k=24)后,x的值为24 。
18.若a和b均是int型变量,且a和b的初值均为5,则计算表达式a+=b++ 后,a的值为10 ,b的值为 6 。
19.设int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a; 则表达式*(p+8)的值是9 。
20.若有以下定义:
char a; int b;
float c; double d;
则表达式a*b+d-c值的类型为double 。
21.*(p++)和*(++p)作用不同,它们的意义分别是*(p++)先取*p的值,后使p加1,*(++p)
先使p加1,再取*p
二、程序理解题
请给出运行以下程序的输出结果:
1.
#include <stdio.h>
void main()
{ int u=24,v=16,w;
while(v)
{w=u % v; u=v ; v=w;}
printf("%d\n",u);
}
输出结果为: 8
2.
void main()
{ char s[]"Yes\n/No",*ps=s;
puts(ps+4);
*(ps+4)=0;
puts(s);
}
输出结果:/No
Yes
3.
main()
{ int p[7]={11,13,14,15,16,17,18};
int i=0,j=0;
while(i<7 && p[i]%2==1) j+=p[i++];
printf("%d\n",j);
}
输出结果:24 。
4
void main()
{ int arr_sum(int arr[],int n);
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p,total;
p=a[0];
total= arr_sum (p,12);
printf(“total=%d\n”,total);
}
int arr_sum(int arr[],int n)
{ int i,sum=0;
for(i=0;i<n;i++)
sum=sum+arr[i];
return(sum);
}
5. 给出以下程序的运行结果:
void main()
{ int a,b,c; a=25b=025;c=0x25;printf("%d, %d, %d\n",a,b,c);
}
运行结果:25, 21, 37
6. 给出有下面一段程序的运行结果。
void main()
{ int p[7]={11,13,14,15,16,17,18};
int i=0, ,j=0;
while(i<7 && p[i]%2==1) j+=p[i++];
printf("%d\n",j);
}
运行结果:24
7. 给出有下面一段程序的运行结果。
#include <stdio.h>
int fac(int n)
{
static int f=1;
f=f*n;
return(f);
}
void main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
答案:1!=1
2!=2
3!=6
4!=24
5!=120
8. 给出有下面一段程序的运行结果。
main()
{ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
int i=0,j=0,s=0;
while(i++<4)
{
if(i==2||i==4) continue;
j=0;
do{ s+= a[j]; j++; } while(j<4);
}
printf("%d\n",s);
}
运行结果:92
三、程序填空题
1.以下程序可判断输入的一个整数是否能被5或13整除,若能整除,输出“yes”并换行,否
则输出“no”并换行。
请填空。
#include <stdio.h>
void main()
{ int k;
printf(“Enter a int number:”);
scanf(“%d”,&k);
if____(k%5==0||k%13==0)__________
printf(“yes\n”);
else
printf(__“no\n”______);
}
2.下面程序是将键盘输入的英文字符全改为小写英文字符输出, 用换行符结束循环。
请填空。
#include <stdio.h>
void main()
{
char c;
while( (c=getchar())!='\n' )
{
if( c >='A'||c<='Z' )
c=c+32;
printf("%c",c);
}
printf("\n");
}
3.有一个一维数组score,内放10个学生成绩,求平均成绩,请填空。
#include<stdio.h>
float average(float array[10]);
void main()
{float score[10],aver;
int i;
printf("input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%f", &score[i] );
printf("\n");
aver=average(score);
printf("average score is %5.2f",aver);
}
float average(float array[10])
{int i;
float aver,sum=array[0];
for( i=1;i<10;i++ )
sum=sum+array[i];
aver=sum/10 ;
return aver ;
}
4.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。
请填空。
Void main()
{ int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++) scanf("%d", &a[i] );
for (i=0;i<20;i++)
{ if(a>0)
{ count++;
sum+= a[i] ;
}
}
printf("sum=%d,count=%d\n",sum,count);
}
5.下面程序可以逐行输出由language数组元素所指向的5个字符串。
请填空。
#include<stdio.h>
void main()
{ char * language[]={ “BASIC”, “FORTRAN”, “PROLOG”, “JAVA”,
“C++”};
char ** q ;
int k;
for (k=0;k<5;k++)
{ q= language+k ;
printf(“%s\n”,*q);
}
}
6.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。
#include<stdio.h>
void main()
{ char str[81],*sptr;
int i;
for(i=0;i<80;i++)
{ str[i]=getchar();
if(str[i]=='\n') break;
}
str[i]= '\0' ;
sptr=str;
while(*sptr) putchar(*sptr ++ );
}
7、程序的功能是用递归方法计算第五位学生的年龄,请填空。
递归公式如下:10 (n=1)
age(n)=
age(n-1)+2 (n>1)
程序:
int age(int n)
{
;
else
c= ;
return (c);
}
void main()
{ printf(“age:%d\n”, age(5));
}
8)下面程序的功能是在三个字符串中找出最小的,请填空:#include<stdio.h>
#include<string.h>
void main( )
{ char s[20],str[3][30];
int i;
for (i=0;i<3;i++) gets(str[i]);
strcpy ( s, (strcmp(str[0],str[1])<0?str[0]:str[1]) );
if (strcmp(str[2],s)<0) strcpy( s,str[2]);
print(“%s\n”, s ) ;
}
9)以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
请填空。
#include<stdio.h>
void main( )
{ int *a,*b,*c, num,x,y,z;
a=&x; b=&y; c=&z;
printf(“输入3个整数:”);
scanf(“%d%d%d”,a,b,c);
printf(“%d,%d,%d\n”, *a,*b,*c);
num=*a;
if (*a>*b) num=*b ;
if (num>*c) num=*c ;
printf(“输出最小整数:%d\n”, num);
}
10. C语言源程序文件的后缀是__.cpp_________,经编译后生成的文件的后缀是__.obj_______,连接后生成的文件的后缀是.exe。
11.从键盘输入一个大写字母,要求改用小写字母输出。
请填空:
#include <stdio.h>
void main()
{ char c1,c2;
c1= getchar() ;
printf(“%c, %d\n”,c1,c1);
c2=c1+32 ;
printf(“%c, %d\n”,c2,c2);
}
12.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。
请填空:
#include<stdio.h>
void main()
{ char str[81],*sptr;
int i;
for(i=0;i<80;i++)
{ str[i]=getchar();
if(str[i]=='\n') break;
}
str[i]= '\0' ;
sptr=str;
while(*sptr) putchar(*sptr ++ ;
}
13.输入三角形的三边长,求三角形面积。
请填空:
void main()
{ float a, b, c, s, area ;
scanf(“%f, %f, %f”, &a, &b, &c);
s=1.0/2*(a+b+c);
area = sqrt(s*(s-a)*(s-b)*(s-c)) ;
printf(“a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2f\n”,a,b,c,s);
printf(“area=%7.2f\n”,area);
}
14.判断m是否素数。
请填空:
#include <stdio.h>
#include <math.h>
void main()
{
int m, i, k;
scanf("%d", &m);
k=sqrt(m) ;
for(i=2;i<=k;i++)
if( m%i==0 ) break;
if( i>k ) printf("%d is a prime number\n",m);
else printf("%d is not a prime number\n",m);
}
15.以下程序对输入的一个小写字母,将字母循环后移5个位置后输出。
如’a’变成‘f’,’w’变成’b’。
请填空:
#include <stdio.h>
void main( )
{ char c;
c=getchar( );
if (c>=’a’ && c<=’u’) c=c+5 ;
else if (c>=’v’ && c<=z) c =c-21 ;
putchar(c);
}
16.输入三个整数x,y,z,请把这三个数由小到大输出。
请填空:
#include "stdio.h"
#include "conio.h"
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{ t=x;x=y;y=t; } /*交换x,y的值*/
if(x>z)
{ t=z;z=x;x=t; } /*交换x,z的值*/
if(y>z)
{ t=y;y=z;z=t; } /*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
17.求1!+2!+3!+4!+…+20!的值。
请填空:
#include <stdio.h>
void main()
{ float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n ;
s=s+t ;
}
printf("1!+2!+...+20!=%c\n",s);
}
18.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
请填空:#include "stdio.h"
#include "conio.h"
main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while( (c=getchar()) !='\n')
{
if( c>='a'&&c<='z'||c>='A'&&c<='Z' )
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}
19.以下程序是通过指针操作,找出三个整数中的最小值并输出。
请填空:#include<stdio.h>
void main( )
{ int *a,*b,*c, num,x,y,z;
a=&x; b=&y; c=&z;
printf(“输入3个整数:”);
scanf(“%d%d%d”,a,b,c);
printf(“%d,%d,%d\n”, *a,*b,*c);
num=*a;
if (*a>*b) num=*b ;
if (num>*c) num=*c ;
printf(“输出最小整数:%d\n”, num);
}
20.下面程序的功能是打印100以内个位数为6且能被3整除的所有数。
请填空。
#include <stdio.h>
void main()
{ int i,j;
for(i=0; i<10 ;i++)
{ j=i*10+6;
if( j%3!=0 ) continue;
p rintf(“%d ”,j);
}
}
四、编程题
1.给学生成绩,要求输出成绩等级‘A’‘B’‘C’‘D’‘E’。
90分以上为‘A’,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。
#include <stdio.h>
void main()
{
float score;
char grade;
printf("请输入学生成绩:");
scanf("%f",&score);
while(score>100||score<0)
{
printf("\n输入有误,请重输!");
scanf("%f",&score);
}
switch((int)(score/10))
{
case 10:
case 9: grade='A';break;
case 8: grade='B';break;
case 7: grade='C';break;
case 6: grade='D';break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: grade='E';
}
printf("成绩是%5.1f,相应的等级是%c.\n",score,grade);
}
2.输入一数组各元素值,将这个数组中的值按逆序重新存放(如原来顺序为5,4,3,2,1要求改为1,2,3,4,5)。
#include <stdio.h>
# define N 5
void main()
{
int a[N],i,temp;
printf("Enter array:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("array a:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
for(i=0;i<N/2;i++)
{temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("\n Now,arraw a:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}
3、将一个2×3的二维数组中行与列的元素互换并存到另一个二维数组中。
设原数组的初值为{{1,2,3},{4,5,6}}。
参考程序:
#include<stdio.h>
void main( )
{int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for (i=0;i<=1;i++)
{for (j=0;j<=2;j++)
{printf("%5d",a[i][j]);
b[j][i]= a[i][j]; /*行列元素互换*/
}
printf("\n");
}
printf("array b:\n");
for (i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
4.用选择法对10个数排序(由小到大)。
要求从键盘输入这10个数。
#include <stdio.h>
void main()
{
int i, j, min, temp, a[11];
printf(“enter data: \n”);
for(i=1;i<=10;i++)
{
printf(“a[%d]=”, i);
scanf(“%d”,&a[i]);
}
printf(‘\n”);
printf(“The orginal numbers:\n”);
for(i=1;i<=10;i++)
printf(“%5d”,a[i]);
printf(“\n”);
for(i=1;i<=9;i++)
{
min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j]) min=j;。