1127作业8(2)

8.写一个 宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) ? (A) : (B))
另外,当你写下面代码时会发生什么事? least = MIN(*p++,b);
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:((*p++) <= (b) ? (*p++) : (b)) 这个表达式会产生副作用,指针p会作两次++自增操作。

9.找出题中错误,并解释

	void test1()
	{
		char string[10];
		char* str1 = "0123456789"//错误处
		strcpy(string, str1);
	}//char *strl 定义了一个字符型指针变量,string[10]只存放10 个字符,字符串“0123456789”有11个字符,包括“\0”,数组下标越界。

10.找出题中错误,并解释

	void GetMemory( char *p )  
	{  
		p = (char *) malloc( 100 );  
	}   //原来的函数只传递了p的内容而没有传递地址导致空间分配给p之后并未影响到str,str依旧没有空间可以用
//void GetMemory2(char **p) { *p=(char*)malloc(100); }
	void Test( void )   
	{  
		char *str = NULL;  
		GetMemory( str );   
		strcpy( str, "hello world" );  
		printf("%s", str);  
	}

11.输入一段字符串,无论是否有重复字母出现,都只打印出现过的小写字母,并按照小写字母顺序打印。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Sorted(char strl[],int len)
    {
    int i , j;
    char c;
    for (i = 0;i < len - 1; i++)
        {
        for (j = 0;j < len - i -1;j++)
            {
            if (strl[j] > strl[j+1])
                {
                c = strl[j];
                strl[j] = strl[j+1];
                strl[j+1] = c;
                }
            }
        }
    }


void List(char *str,int length)
    {
    char strl[100];
    int i = 0,j = 0,k , l;
    int len;
    while ((str[i]!='\0')&&i < length)
        {
            strl[j] = '\0';
        if (str[i] >= 'a' && str[i] <= 'z')
            {
            for(k = 0 ; k < j ; k++)
            {
                for (l = 0 ; l < j ; l++)
                {
                    if(strl[k] == strl[l])
                    {
                        goto loop;
                    }
                }
            }
loop:          strl[j] = str[i];
               ++i;
               ++j;
            }
        else
            i++;
            strl[j] = '\0';
            
        }

    len = strlen (strl);
    Sorted(strl, len);
    puts(strl);

    }

int main(void)
    {

    char strl[100]={'\0'};
    int len;
    printf ("plz input sth:\n");
    gets (strl);
    len = strlen (strl);
    List (strl,len);
    return 0;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值