一.填空题
1、宏
阅读下面程序并写出键盘输入15时的运行结果:(只写结果,不写输入)
参考答案
result=3
二.简答题
swap函数
请用地址传递方式编写一个函数void swap(int *,int *);,主程序提供两个整型变量的地址作为实参,该函数能使这两个变量的值互相交换。请编写主程序验证该函数。(直接显示结果,不要任何提示文字)
参考答案
/*
时间:2021-5-9
作者:童话
环境:Win 10 、 VC++ 6
*/
#include <stdio.h>
void swap(int* p1, int* p2)
{
int t = *p1;
*p1 = *p2;
*p2 = t;
}
void main()
{
int a = 520;
int b = 1314;
swap(&a,&b);
printf("%d %d",a,b);
}
三. 程序题
1、HEX转DEC
请编写一个函数getadec能接收一位十六进制字符的参数,返回对应的十进制整数,若是接收的是非法16进制符号则返回-1。例如,getadec(‘F’)或getadec(‘f’)可以返回15,getadec(‘9’)可以返回9,getadec(‘g’)返回-1。利用该函数,编写程序能将键盘输入的一串十六进制字符转换为十进制并输出显示。(结果直接显示不要回车,不要有任何提示文字)
例如:输入aBc,显示结果2748
参考答案
/*
时间:2021-5-9
作者:童话
环境:Win 10 、 VC++ 6
*/
#include <stdio.h>
int getadec(char ch)
{
if(ch>='0' && ch<='9')
{
return ch-'0';
}
else if(ch>='A' && ch<='F')
{
return ch-'A'+10;
}
else if(ch>='a' && ch<='f')
{
return ch-'a'+10;
}
else
{
return -1;
}
}
int main()
{
char hex[30];
int i,j,n,res,pow;
scanf("%s",hex);
for(n=0;hex[n]!='\0';++n);
res=0;
for(i=0;i<n;i++)
{
if(getadec(hex[i]) != -1)
{
pow = 1;
for(j=0;j<n-i-1;j++)
{
pow *=16;
}
res += (pow * getadec(hex[i]));
}
else
{
return -1;
}
}
printf("%d\n",res);
return 0;
}
2、河内塔
编程计算河内塔问题,写出n个盘子从A柱借助C柱移动到B柱的移动过程,n为键盘输入的整数(n>=1)。要求显示第几次从哪根柱移动到哪根柱。例如,输入3,结果显示如下:
1:A->B
2:A->C
3:B->C
4:A->B
5:C->A
6:C->B
7:A->B
参考答案
/*
时间:2021-5-9
作者:童话
环境:Win 10 、 VC++ 6
书P117
*/
#include <stdio.h>
int i = 1;
void hanoi(int n,char sour,char dest,char tran)
{
if(n==1)
{
printf("%d:%C->%c\n",i,sour,dest);
i++;
}
else
{
hanoi(n-1,sour,tran,dest);
printf("%d:%C->%c\n",i,sour,dest);
i++;
hanoi(n-1,tran,dest,sour);
}
}
void main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
}