程序设计基础复习题答案
一、填空题
1、C语言所提供的实型变量分为两种类型,它们是float和double 。
2、一个C源程序中至少应包含一个主函数或main函数。
3.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’
4.在标准C
5.对以下说明:int  c[10] = {116, 125, 218, 312, 100, 40, 13, 67, 186};
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.下面程序是将键盘输入的英文字符全改为小写英文字符输出, 用换行符结束循环。请填空。c编程必背100题
#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]      );