您的位置:首页 > 编程语言 > C语言/C++

c语言练习-2

2010-11-29 13:16 148 查看
昨天晚上写好的,结果本子没电了,就没来得及发表上来~今天中午补上。

2-1.
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。


#include "stdio.h"
void read(int b[10])
{
int i,*p1,x;
for (p1=b;p1<(b+10);p1++)
{
scanf("%d",&x);
*p1=x;
}
}
void work(int b[10])
{
int max,min,*p2,t;
max=b[0];min=b[0];
for (p2=b+1;p2<(b+10);p2++)
{
if (*p2>max)
max=*p2;
if (*p2<min)
min=*p2;
}
t=b[0];b[0]=min;min=t;
t=b[9];b[9]=max;max=t;
}
void output(int b[10])
{
int *p4;
for (p4=b;p4<(b+10);p4++)
printf("%d ",*p4);
}
int main()
{
int a[10];
printf("Please input the 10 numbers/n");
read(a);
work(a);
printf("The new order is");
output(a);
getch();
return 0;
}


这个发现的问题就是, 定义了 int *max,*min 之后,系统并没有给分配空间, 如果写成 *max=*p2 ,就会出错。 用一个普通的整型变量代替就更好点。

2-2.
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。


#include "stdio.h"
length(char *p)
{
int n=0;
while (*p!=0)
{
n++;
p++;
}
return n;
}
int main()
{
int len;
char *str[20];
printf("Please input the string./n");
scanf("%s",str);
len=length(str);
printf("The length of the string is %d./n",len);
getch();
return 0;
}


有个问题就是, 定义了指针数组长度为20,但是输入的字符超过20个,程序依然能执行,而且计算出个数来,有点不明白。。

2-3.
用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。


#include "stdio.h"
void px(int **p, int n)
{
int i,j,*temp;
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
if (**(p+i)<**(p+j))
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
int main()
{
int i,n,a[20],**p,*pstr[20];
printf("Please input how many the numbers are./n");
scanf("%d",&n);
for (i=0;i<n;i++)
pstr[i]=&a[i];
printf("Please input the numbers with the 'space' among them./n");
for (i=0;i<n;i++)
scanf("%d",pstr[i]);
p=pstr;
px(p,n);
printf("The new order is:");
for (i=0;i<n;i++)
printf("%d ",*pstr[i]);
getch();
return 0;
}


练习的是指向指针的指针。。有点晕,还得多练练, 题目也不难, 用着一个冒泡。 有点累赘就是需要先输入 准备要几个数,然后再输入相应个数的数。 后来想想吧,应该是直接输入进来,然后编一个函数先计算个数n,然后再执行后面的, 用起来就方便了。。

最后想问个问题就是, 看书上的例题什么的,都是先写出主函数, 然后再写其他用到的函数。 我是习惯先把要用什么函数都写出来, 最后再写主函数。 这个有什么顺序没? 还是想咋就咋。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: