none
谭浩强课本习题7-15自解 RRS feed

  • 问题

  • 大家看看我自己编写的答案:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int main()
    {
    	int ip(char name[10][8],int serialnumber[10]);//输入函数
    	void op(char name[10][8],int serialnumber[10],int counto);//输出函数
    	void sortup(char name[10][8],int serialnumber[10],int counto);//从小到大排序
    	void sortdown(char name[10][8],int serialnumber[10],int counto);//从大到小排序
    	void searchname(char name[10][8],int serialnumber[10],int counto);//根据序号查找对应名称
    	void searchserialnumber(char name[10][8],int serialnumber[10],int counto);//根据名称查找序号
    	int del(char name[10][8],int serialnumber[10],int counto);//删除对应序号和名称
    	char name[10][8];
    	int serialnumber[10];
    	int i,counti=0;
    	int choice;
    	counti = ip(name,serialnumber);
    	printf("number 1 is default;\n");
    	printf("number 2 is sort up;\n");
    	printf("number 3 is sort down;\n");
    	printf("number 4 is search name;\n");
    	printf("number 5 is search serial number;\n");
    	printf("number 6 is delete corresponding serial number and name;\n");
    	printf("enter select function number:");
    	scanf("%d",&choice);//此语句必须单独写,不能写在if条件中“if (scanf("%d",&choice)==1)”这样的写法是错误的
    	if (choice==1)
    	{
    		op(name,serialnumber,counti);		
    	}
    	if (choice==2)
    	{
    		sortup(name,serialnumber,counti);
    		op(name,serialnumber,counti);
    	}
    	if (choice==3)
    	{
    		sortdown(name,serialnumber,counti);
    		op(name,serialnumber,counti);
    	}
    	if (choice==4)
    	{
    		searchname(name,serialnumber,counti);
    	}
    	if (choice==5)
    	{
    		searchserialnumber(name,serialnumber,counti);
    	}
    	if (choice==6)
    	{
    		counti = del(name,serialnumber,counti);
    		op(name,serialnumber,counti);
    	}
    	system("pause");
    	return 0;
    }
    int ip(char name[10][8],int serialnumber[10])
    {
    	int i,counto=0;
    	printf("input serial number and name:\n");
    	for (i=0;i<10;i++)
    	{
    		printf("enter sn:");
    		scanf("%d",&serialnumber[i]);
    		if (serialnumber[i]==-1)
    		{
    			counto = i;
    			break;
    		}
    		printf("enter name:");
    		getchar();//接受输入时的一个字符。例如空格或者回车。这样做就可以继续输入名称了。
    		gets(name[i]);
    	}
    	return counto;
    }
    void op(char name[10][8],int serialnumber[10],int counto)
    {
    	int i;
    	printf("output serial number and name:\n");
    	for (i=0;i<counto;i++)
    	{
    		printf("%d\t",serialnumber[i]);
    		puts(name[i]);
    		//printf("\n");
    	}
    }
    void sortup(char name[10][8],int serialnumber[10],int counto)//冒泡法适合从小到大排序
    {
    	int i,j,t;
    	char ts[8];
    	for (i=0;i<counto-1;i++)
    	{
    		for (j=0;j<counto-1-i;j++)
    		{
     			if (serialnumber[j]>serialnumber[j+1])
    			{
    				t = serialnumber[j];
    				serialnumber[j] = serialnumber[j+1];
    				serialnumber[j+1] = t;
    				strcpy(ts,name[j]);
    				strcpy(name[j],name[j+1]);
    				strcpy(name[j+1],ts);
    			}
    		}
    	}
    }
    void sortdown(char name[10][8],int serialnumber[10],int counto)//排序法适合从小到大和从大到小排序
    {
    	int i,j,t;
    	char ts[8];
    	for (i=0;i<counto-1;i++)
    	{
    		for (j=i;j<counto-1;j++)
    		{
    			if (serialnumber[i]<serialnumber[j+1])
    			{
    				t = serialnumber[i];
    				serialnumber[i] = serialnumber[j+1];
    				serialnumber[j+1] = t;
    				strcpy(ts,name[i]);
    				strcpy(name[i],name[j+1]);
    				strcpy(name[j+1],ts);
    			}
    		}
    	}
    }
    void searchname(char name[10][8],int serialnumber[10],int counto)
    {
    	int x;
    	int i,flag=0;
    	printf("enter serial number:");
    	scanf("%d",&x);
    	for (i=0;i<counto;i++)
    	{
    		if (serialnumber[i]==x)
    		{
    			printf("%d serial number corresponding name is %s\n",x,name[i]);
    			flag = 1;
    		}
    	}
    	if (flag==0)
    	{
    		printf("Don't find name!\n");
    	}
    }
    void searchserialnumber(char name[10][8],int serialnumber[10],int counto)
    {
    	char xs[8];
    	int i,flag=0;
    	printf("enter name:");
    	getchar();
    	gets(xs);
    	for (i=0;i<counto;i++)
    	{
    		if (strcmp(xs,name[i])==0)
    		{
    			printf("%s name corresponding serial number is %d\n",name[i],serialnumber[i]);
    			flag = 1;
    		}
    	}
    	if (flag==0)
    	{
    		printf("Don't find serial number!\n");
    	}
    }
    int del(char name[10][8],int serialnumber[10],int counto)
    {
    	int choice;
    	int x;
    	char xs[8];
    	int i,j,flag=0;
    	printf("number 1 is number;\n");
    	printf("number 2 is name;\n");
    	printf("enter select function number:");
    	scanf("%d",&choice);
    	if (choice==1)
    	{
    		printf("enter deleted serial number:");
    		scanf("%d",&x);
    		for (i=0;i<counto;i++)
    		{
    			if (x==serialnumber[i])
    			{
    				if (i==counto-1)
    				{
    					counto = counto-1;
    					flag = 1;
    					break;
    				}
    				else
    				{
    					for (j=i;j<counto-1;j++)
    					{
    						serialnumber[j] = serialnumber[j+1];
    						strcpy(name[i],name[i+1]);
    					}
    					counto = counto-1;
    					flag = 1;
    					break;
    				}
    			}
    		}
    	}
    	if (choice==2)
    	{
    		printf("enter deleted name:");
    		getchar();
    		gets(xs);
    		for (i=0;i<counto;i++)
    		{
    			if (strcmp(xs,name[i])==0)
    			{
    				if (i==counto-1)
    				{
    					counto = counto-1;
    					flag = 1;
    					break;
    				}
    				else
    				{
    					for (j=i;j<counto-1;j++)
    					{
    						serialnumber[j] = serialnumber[j+1];
    						strcpy(name[i],name[i+1]);
    					}
    					counto = counto-1;
    					flag = 1;
    					break;
    				}
    			}
    		}
    	}
    	if (flag==0)
    	{
    		printf("Don't find serial number or name!\n");
    	}
    	return counto;
    }
    

    大家有什么更好的建议可以和我交流


    煮酒论英雄
    2011年10月5日 10:01

答案

  • int ip(char name[10][8],int serialnumber[10])
    这样你就把数组的长度定死了,一般写成数组名+长度两个参数来表示
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年10月7日 8:08
    版主

全部回复

  • 代码写的很规范
    2011年10月6日 1:40
  • int ip(char name[10][8],int serialnumber[10])
    这样你就把数组的长度定死了,一般写成数组名+长度两个参数来表示
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年10月7日 8:08
    版主
  • 谢谢 呵呵 刚学C 以后请多指教
    煮酒论英雄
    2011年10月10日 10:25
  • 我用的是C,我一直想C能不能不把数组写死,但是我一直不会呢还,能不能具体举例给我看看?
    煮酒论英雄
    2011年10月10日 10:30