void main() { void printn(int x); int n;
printf(\"Input n=\"); scanf(\"%d\ if (n<0)
{n=-n;putchar('-');} printn(n); }
void printn(int x) /*反向输出整数x*/ {if (x>=0&&x<=9) /*若x为一位整数*/ printf(\"%d\ /*则输出整数x*/ else /*否则*/
{printf(\"%d\ /*输出x的个位数字*/
printn(x/10); /*将x中除个位数字外的全部数字形成新的x后,继续递归操作*/ } }
执行:Input n=12345 结果:54321
执行:Input n=-12479 结果:-97421
【讨论】Input n=123456 -6167
为什么:123456710=1 1110 0010 0100 00002
int类型的数实际只能存入16位,即1110 0010 0100 00002
第
1位为符号位,其余各位取反后再加1,得原码1001 1101 1100 0000 (真值-761610)
三、编程序并上机调试运行。
(1)写一个判别素数的函数,在主函数输人一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:17、34、2、l、0。分别输人数据,运行程序并检查结果是否正确。
(2)用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。 (3)用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意的整数。
(4) 编写程序,计算下面公式并输出结果。
Cmnn!
(nm)!m!要求:(1)编写一个函数计算n!
(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算。
(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。
(4)运行程序并计算
C、85C、72C1、8C7、7C08。
实验三 指针
实验目的 1、 了解指针参数的特殊性。
2、 掌握函数、指针、数组的用法。 实验要求 1 .复习指针的定义与使用方法。复习函数指针和指针数组的使用方法。 2 .编写程序,运行程序并记录运行结果。 实验内容
1 、想使指针变量 pt1 指向 a 和 b 中的大者, pt2 指向小者,以下程序能否实现此目的?
swap(int *p1,int *p2) {
int *p;
p=p1;p1=p2;p2=p; }
main() {
int a,b;
scanf(“%d,%d”,&a,&b); pt1=&a;pt2=&b;
if(aprintf(“%d,%d\\n”,*pt1,*pt2); }
上机调试此程序。如果不能实现题目要求,指出原因,并修改之。 • 2个学生各学 4 门课,计算总平均分,并输出第 n 个学生成绩 main()
{ void average(float *p,int n); void search(float (*p)[4],int n); float score[3][4]=
{{65,67,79,60},{80,87,90,81}, {90,99,100,98}}; average(*score,12); search(score,2); }
void average(float *p,int n) { float *p_end, sum=0,aver; p_end=p+n-1;
for(;p<=p_end;p++) sum=sum+(*p); aver=sum/n;
printf(\"average=%5.2f\\n\ }
void search(float (*p)[4], int n) { int i;
printf(\" No.%d :\\n\ for(i=0;i<4;i++)
printf(\"%5.2f \ }
写一个函数,从传入的 num 个字符串中找出最长的一个字符串,并通过形参指针 max 传回该串地址。(注意:用 **** 作为结束输入的标志。) #include \"stdio.h\" #include \"string.h\" #include \"conio.h\"
/* 函数 strlen() 用于求出字符串的长度,这个题中主要是 *max=p; 不能换成 max=&p ;如果用 maz=&p; 则只改变了 max 的指向,它不能传回给实参。因此我们要改变 max 指 向地址中的内容,这才能使得实参 ps 有正确的值。 */ fun(char (*a)[81], int num,char **max) { char *p=a[0];int i; for(i=1;istrlen(p)) p=a[i]; *max=p; }main()
{ char ss[10][81],*ps; int n,i=0; clrscr();
printf(\"enter string:\\n\"); gets(ss[i]); puts(ss[i]);
while(!strcmp(ss[i],\"****\")==0) { i++;
gets(ss[i]); puts(ss[i]); } n=i;
fun(ss,n,&ps);
printf(\"\\nmax=%s\\n\ }