程序设计基础习题及答案(3)

2019-02-15 15:42

c=B(a);

printf(\}

程序运行结果:c= 9.0 五、编程题

4.25写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

提示:最大公约数可以采用?辗转相除法?,最小公倍数将两数乘积除于最大公约数。?辗转相除法?:设两个数分别用m,n表示且m>n,临时变量t,t=m%n;m=n;n=t;直到n等于0。

4.26有3?3的矩阵A和3?2的矩阵B,编制一个函数,求C=AX?B。 提示:参照习题5.17,A,B,C三个数组作为函数参数。

4.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。

4.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。

提示:参照例题6.10。

4.29 定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。

提示:带参数宏,swap(a,b,t)....

4.30编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过?起泡算法?或?选择算法?;折半查找法先决条件是数据已经有序。

4.31用函数实现牛顿迭代法求一元三次方程的根。

解:牛顿迭代法的公式是:x=x0-f(x)/f’(x),设迭代误差小于10-5时结束。 参考源程序:

#include

float solut(float a,float b,float c,float d)

{ float x=1,x0,f,f1; do{

x0=x;

f=((a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1;

}while(fabs(x-x0)>=1e-5);

return(x); }

main()

{ float a,b,c,d;

printf(“请输入一元三次方程的系数a,b,c,c:\\n”); scanf(“%f,%f,%f,%f”,&a,&b,&c,&d); printf(“一元三次方程为:

11

%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0\\n”,a,b,c,d);

printf(“该方程的根为:x=%7.2f\\n”,solut(a,b,c,d)); }

4.32 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 解:参考源程序:

/*是素数返回1,否则返回0*/ int sushuis(int m)

{ int m;

int i=2,t; for(;i<=m;i++)

if(m%i==0&&i

main()

{ int a,s;

printf(\ scanf(\ s=sushuis(a);

if(s==1) printf(\是素数!\\n\ else printf(\不是素数!\\n\ }

printf(\ printf(\ }

4.33 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 1.程序分析: 2.程序源代码: #include \main() {

int i=5; void palin(int n); printf(\palin(i); printf(\}

void palin(int n) {

char next; if(n<=1) {

12

next=getchar();

printf(\ putchar(next);

}

else {

next=getchar(); palin(n-1); putchar(next);

}

}

4.34 在5*5格的棋盘上从点出发, 按日字跳马, 要求不重复地跳经所有方格。跳马方案。 参考程序:

#include\

int map[12][12], status[12][12],kp;

int c[8][2]={{2,1},{2,-1},{1,2},{1,-2},

{-2,1},{-2,-1},{-1,2},{-1,-2}}; void prt(int a[][12]) /* 打印棋盘状态 */ {int i,j,i2,j2; printf(\

for (i=2;i<=9;i++)

{ for (j=2;j<=9;j++) printf(\ printf(\ }

}

void status2(void) /* 计算棋盘各点条件数 */ { int i,j,k,i2,j2,kz; for(i=0;i<12;i++) for(j=0;j<12;j++) status[i][j]=100; for(i=2;i<=9;i++) for(j=2;j<=9;j++) {kz=0;

for (k=0;k<=7;k++) {i2=i+c[k][0];j2=j+c[k][1];

if (map[i2][j2]<50) kz++; }

status[i][j]=kz; } prt(status);

}

void sort1(int b1[],int b2[]) /* 对8个可能的方向按条件数排序 */ {int i,j,mini,t; /*b1[]记录状态值(升序),b2[]记录排序后的下标 */

13

求出所有 for (i=0;i<7;i++)

{mini=i;

for (j=i+1;j<=7;j++)

if (b1[j]

}

void init1(void) /* 初始化 */ {int i,j,k;

for(i=0;i<12;i++) for(j=0;j<12;j++) map[i][j]=100; for(i=2;i<=9;i++) for(j=2;j<=9;j++) map[i][j]=0;

status2(); }

void search(int i2,int j2) /* 利用递归回溯进行搜索 */ {int b1[8],b2[8],i,i3,j3; kp++;

if(kp==65)

{prt(map); exit(0); } for(i=0;i<=7;i++) {b2[i]=i;

b1[i]=status[i2+c[i][0]][j2+c[i][1]]; }

sort1(b1,b2); for(i=0;i<=7;i++)

{i3=i2+c[b2[i]][0]; j3=j2+c[b2[i]][1];

if (map[i3][j3]==0)

{ map[i3][j3]=kp; search(i3,j3); map[i3][j3]=0; } } kp--; } main() {

init1(); map[5][2]=1; kp=1; search(5,2); }

14

【习题5 指针与数组】

一、填空题

5.1 若有定义int a[3][5];则排列在数组中的第9个元素是( a[1][3] )。 5.2 strlen(\的值是( 12 )。

5.3 C语言中字符串结束的标志是( '\\0' )。

5.4 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是( float s[6]={0}; )。

5.5 strcmp(\的值是( 32 或>0 )。

5.6语句int a,*p=&a;的含义是(定义整型变量a,和整型指针变量p,并且p指向变量a。) 5.7定义语句int *f(); 和int (*f)();的含义分别是(int *f();表示函数返回一个整型指针;int (*f)( );表示f是函数指针,指向整型函数) 二、选择题

5.8 若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是( D ) A.1 B.2 C.3 D.4 5.9 对数组的描述正确的是( B )。

A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。 5.10 对字符串\进行完整赋值的操作是( B )。 A.char s[3] = {'B','o','y'}; B. char s[] = \ C.char s[3] = {\

D.char s[3]; s=\

5.11 在c语言中引用数组元素时,其数组下标的数据类型允许是( C )。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 5.12 对以下说明语句的正确理解是( B )。 int a[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5]

B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10]

D.因为数组长度与初值的个数不相同,所以此语句不正确 三、看程序写结果 5.13

main()

{ int a[5]={1,2,3,4,5}; int *p=&a[1];

printf(\ }

输出结果:4

5.14 main()

{ char a[]=\ char *p=a; p=p+2;

15


程序设计基础习题及答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:常用农机具使用与维护教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: