t=a[i];
a[i]=a[j];
a[j]=t;
}
}
main()
{
int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa,10);
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("n");
}
参考答案:sort函数的功能:对奇数单元的倒序排列。运行结果:9,2,7,4,5,6,3,8,1,10
20. 下列程序的运行结果是______________________。
#include
#include
main()
{
int a=1,b=4,c=2;
float x=10.5,y=4.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf(“%fn”,z);
}
参考答案:13.700000
21. 补全下列程序______________________。
已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年的程序如下:
main()
{
int year,leap;
scanf(“%d”,&year);
if ____________________
leap=1;
else leap=0;
if ______________________ printf(“是润年”);
else printf(“不是润年”);
}
参考答案:(year%4= = 0 && year%100 !=0)|| year%400= =0);(leap)
北交《C语言程序设计(专)》复习题解析A
七、 程序题
1. 简述字符常量和字符串常量的区别。
考核知识点解析:本题属于基本概念的考核。
答案:字符常量是用单引号括起来的一个字符,字符串常量是由一对双引号括起来的字符序列。字符常量用字符变量来存放,实际存放的是该字符在机器字符集中的ASCII码值,字符串常量是用一个字符数组来存储的,字符串在存储时末尾被系统自动加上转义字符" "。
2. 编程:输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。例如,a[5]={2,3,4,5,6},b[6]={3,5,7,9,10,-1},则输出3、5。
考核知识点解析:首先利用for循环为两个数组元素赋值,然后利用for循环的嵌套判断相同元素。
答案:
#include "stdio.h"
#define NA 6
#define NB 8
void main()
{ float a[NA],b[NB];
int i,j;
for(i=0;iscanf("%f",&a[i]);
for(i=0;iscanf("%f",&b[i]);
for(i=0;ifor(j=0;jif(a[i]==b[j])
{ printf("%fn",a[i]); break; }
}
3. 阅读以下程序
swap (int *p1,int *p2)
{ int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
swap (int *p1,int *p2)
{ int *p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
swap (int *p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p;
}
1)以上三个函数功能是否相同?请写出原因。
2)以上哪个函数可以实现两个数的交换?
3)对不能实现两个数交换的函数进行修改,使其能实现。
考核知识点解析:指针变量是地址变量,即存放地址的变量。本题应了解指针变量的定义方法和使用方法。
答案:
1)三个函数实现的功能都不同,第一个函数可以实现两个数值的交换;第二个函数不能正常实现两个数值的交换,因为函数中定义的局部指针变量p,没有指向确定的变量,因此p是不确定的值,当执行*p2=*p语句时不能得到预期结果;第三个函数不能实现两个数值的交换,因为main()中pa和pb作为实参分别传给swap()的形参p1和p2,在swap()函数中实现了p1和p2的交换,但是函数调用结束返回main()时,形式参数p1和p2均为释放,不能反向传递给pa和pb,所以不能实现a和b的值的交换。
2)第一个函数能够实现两个数的交换。
3)第二、三个函数均修改为如下程序可以实现两个数的交换。
swap (int *p1,int *p2)
{ int c;
int *p=&c;
*p=*p1;
*p1=*p2;
*p2=*p;
}
4. 下列程序的运行结果是____________。
#include
#include
main()
{
int a=1,b=4,c=2;
float x=10.5,y=4.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf(“%fn”,z);
}
考核知识点解析:本题应重点了解各种算术运算符的使用规则,以及优先级。同时了解sqrt函数以及强制类型转换符的使用方法。
答案:13.700000
5. 编写程序将一个数组中的数按逆序重新存放并输出(程序中数组的元素个数自定,逆序时不使用辅助数组)。如:输入5个数3、9、7、6、1,逆序存放后数组是1、6、7、9、3。
考核知识点解析:利用for循环实现数组元素的交换,重点是如何表示首尾对应的元素,如数组共10个元素,第1个元素的对应元素是第10个元素,第2个元素的对应元素是第9个元素,以此类推。
答案:
#include "stdio.h"
main()
{
int a[10],i,temp;
printf("请输入10个整数:n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("n 原始顺序:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
for(i=0;i<5;i++){
temp=a[i];
a[i]=a[9-i];
a[9-i]=temp;
}
printf("n 逆序后的顺序:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
北交《C语言程序设计(专)》复习题解析B
八、 程序题
1. 写出下列程序的输出结果。
#include
main()
{
int i,j,a[2][3]={1,2,3,4,5,6},b[3][2];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("n");
}
}
考核知识点解析:本题首先利用for循环的嵌套引用二维数组的元素,将a数组中的元素赋值给b数组中,然后利用for循环的嵌套输出b数组中的元素。
答案:
1 2 3
4 5 6
1 4
2 5
3 6
2. 阅读下列程序,回答下列问题。
main()
{
int i,n=0;
for(i=2;i<5;i++)
{
do{
if(i%3) continue;
n++;
printf("c");
}while(!i);
n++;
printf("d");
}
printf("n=%dn",n);
}
1)分别写出continue语句运行的次数、第一个n++运行的次数、第二个n++运行的次数。
2)写出程序的运行结果。
考核知识点解析:continue语句的作用是结束本次循环,即跳过循环体中下面未执行的语句,接着执行下一次是否执行循环的判定,而不是终止整个循环的执行。
答案:
1)continue语句运行的次数:第一个n++运行的次数是1,第二个n++运行的次数是3。
2)运行结果:n=4
3. 阅读程序,写出运行结果。
#include
func(int a,int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return (m);
}
main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%dn",p);
}
考核知识点解析:静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。
答案:8,17
4. 编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后调用该函数求1——n的偶数和并输出。
考核知识点解析:利用for循环和if语句的嵌套依次判断相应数值是否是偶数,如果是偶数则加入到和变量中。
答案:
#include
long sum(int n)
{
int i;
long sum=0;
for(i=1;i<=n;i++)
{
if(i%2==0)
sum=sum+i;
}
return sum;
}
main()
{
int n;
long s;
printf("nEnter n:");
scanf("%d",&n);
s=sum(n);
printf("The s is %ld",s);
}
5. 使用指针编写程序,输入一行字符,统计出其中字母、数字和其它字符的个数。
考核知识点解析:利用while循环遍历字符串,当出现" "字符时,字符串结束;否则依次取出字符,利用if语句判断字符是字母、数字还是其他字符,并用相应的变量计数。
答案:
#include "stdio.h"
main()
{
char ch[20],*p;
int letter=0,digit=0,other=0;
printf("请输入:");
scanf("%s",ch);
p=ch;
while(*p!=" "){
if((*p>="a"&&*p<="z")||(*p>="A"&&*p<="Z"))
letter++;
else if(*p>="0"&&*p<="9")
digit++;
else
other++;
p++;
}
printf("letter=%d,digit=%d,other=%d",letter,digit,other);
}