函数
(1) 求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。
①不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输人,并传送给函数l,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。
②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。
(2)写一个函数,输入一个n进制数m,输出相应的十进制数。
例如:当n=5,m=3204时,则调用该函数输出429。因为(3*53+2*52+0*51+4*50=429)。
当n=2,m=10100时,则调用该函数输出20。 int n2dec (int n, int m) {… } (3)编写程序求:1K+2 K +3 K +…+n K ,假定n为6,k为4。要求使用函数的嵌套调用。设计一个主函数main( )完成数据的输出,设计一个求m n的函数,设计一个求1K+2 K +3 K +…+n K之和的函数。
(4) 用递归法求n阶勒让德多项式,递归公式为:
1 (n=0) Pn(x)= x (n=1) ((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n (n>1)
(5)写一函数convert,使给定的一个二维数组(3* 3)转置。
void convert(int x[3][3]) {… }
*(6)已知abc+bcc=1333,其中 a、b、c均为一位整数,编写一个函数,求出a、b、c分别代表什么数字。
提示:对于a、b、c取值范围(0-9)内任意的组合,设计一个函数,判断给定方程abc+bcc=1333是否成立。
实验8 指针
一、 实验目的
1、通过实验进一步掌握指针的概念,会定义和使用指针变量;
2、能正确使用数组的指针和指向数组的指针变量; 3、能正确使用字符串的指针和指向字符串的指针变量;
二、实验内容和步骤 1、改错
(1)指出下面程序错误的原因. main( ) {
int x=10,y=5,*px,*py; px=py; px=&x; py=&y;
printf(\}
(2)下面的程序试图有如下运行结果:
which style you want to :
Capital ( c ) or uncapital ( a ):c ↙ COMPUTER
Which sytle you want to :
Capital ( c ) or uncapital ( a ) : u↙ computer
请调试下面的程序,使其有如上执行结果. #include main () {
char s*; char c;
printf(\printf(\
c=getchar();
if(c='c')strcpy(s,\else strcpy(s,\put(s); }
分析出错原因。
(3)下面的程序能获得上述运行结果吗 main() {
char *S=\char c;
printf(\printf(\c=getchar(); if(c='c') put(s); else {
s=\puts(s); } }
分析出错原因.
(4)设计一个C程序,用以测试下列各表达式的运算. (1) y=*px++ (2) y=*++py (3) y=(*py)++ (4) y=--*ppx++
(5)想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的 swap(int *p1,int *p2) {
int *p;
p=p1;p1=p2;p2=p; }
main()
{
int a,b;
scanf(\pt1=&a;pt2=&b; if(a
printf(\}
上机调试此程序.如果不能实现题目要求,指出原因,并修改之.
2、程序填空:
(1)一维数组和指针。分别采用下标法、数组名法和指针法访问数组元素,求出10 个数中的最大值。
下标法:
# include
{ int a[10],i,max; for ( )
scanf (“%d”, ); for ( ) if ( ) max=a[i]; printf (“MAX=%d\\n”,max); }
数组名法:
#include
{ int a[10],i,max; for ( ) scanf (“%d”, a+i); for ( ) if ( ) max=*(a+i); printf (“MAX=%d\\n”,max); }
指针法:
#include