《明解C语言》第三版 (入门篇) 第九章练习答案

练习9-1

#include <stdio.h>

int main()
{
    char str[] = "ABC\0DEF";        

    printf("字符串str为\"%s\"。\n", str);    /* 显示 */

    return 0;
}

练习9-2

/*---让该初始化赋值得到的字符串s变成空字符串:char s[] = "ABC"---*/
 
#include <stdio.h>
 
int main ()
{
	char s[] = "ABC";
	
	s[0] = '\0';//*str = 0;
	
	printf("字符串s为:%s",s);
	
	return 0;
}

练习9-3 

#include<stdio.h>

#define NUM 3

int main(void)
{
    int i;
    char s[NUM][128];
    for (i = 0; i < NUM; i++)
    {
        printf("s[%d]:", i);
        scanf("%s", s[i]);
        if (strcmp(s[i], "$$$$$") == 0)
            break;
    }
    for (i = 0; i < NUM; i++)
    {
        if (strcmp(s[i], "$$$$$") == 0)
            break;
        else
            printf("s[%d] = \"%s\"\n", i, s[i]);
    }

    return 0;
}

练习9-4

#include<stdio.h>

void null_string(char s[]) 
{
    *s = 0;//s[0]='\0';
}
int main() 
{
    char s[] = "asd";
    null_string(s);
    printf("%s", s);

    return 0;
}

练习9-5

#define num 128
int str_char(const char s[],int c)
{
	int i;
	for(i = 0;i < num;i++)
	{
		if(s[i] == 'c')// *s++ == 'c'
		{
			break;     // return i;
		}
	}
	return i;          // return -1;
}

int main()
{
	char arr[num];
	printf("输入字符串:");
	scanf("%s", arr);
	printf("%s ", arr);
	printf("%d", str_char(arr, 'c'));
	
	return 0;
}

练习9-6

#define num 128
int str_char(const char s[],int c)
{
	int i;
	int cnt = 0;
	for(i = 0;i < num;i++)
	{
		if(s[i] == 'c')// *s++ == 'c'
		{
			cnt++;     
		}
	}
	return cnt;          
}

int main()
{
	//char c = 'c';
	char arr[num];
	printf("输入字符串:");
	scanf("%s", arr);
	printf("%s ", arr);
	putchar('\n');
	printf("%d", str_char(arr, 'c'));
	
	return 0;
}

练习9-7

#define num 128

void put_stringn(const char s[], int n) 
{
    int i=0;
    int j;
    for (j = 0; j < n; j++) 
	{
        while (s[i]) 
		{
            putchar(s[i++]);
        }
        i = 0;
    }
}
int main() 
{
    
    char x[num];
    int n;
    printf("请输入字符串:");   
    scanf("%s", x);
    printf("%s", x);
	
    printf("显示次数:");
    scanf("%d", &n);
    putchar('\n');

    put_stringn(x, n);
    return 0;
}

练习9-8

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

int put_stringr(const char s[])
{
	int i;
	int j;
	j=strlen(s)-1;
	for(i=0;i<strlen(s);i++)
    {
		putchar(s[j-i]);
	}
}

int main()
{
	char ch[128];
    int i;
	printf("请输入字符串: ");
    scanf("%s", ch);
	put_stringr(ch);
    return 0;
}

练习9-9

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

int rev_string(char s[])
{
	int i;
	int j;
	j=strlen(s)-1;
	char temp[128];
	for(i=0;i<=j;i++)
    {
		temp[i]=s[j-i];
	}
	for(i=0;i<=j;i++)
    {
		s[i]=temp[i];
	}
}

int main()
{
	char ch[128];
    int i;
	printf("请输入字符串: ");
    scanf("%s", ch);
	rev_string(ch);
	printf("更新后的字符串: %s",ch);
    return 0;
}

练习9-10

#include <stdio.h>
#define num 128
void del_digit( char s[]) 
{
    int i=0;
    while(s[i] != '\0') {
        if (s[i] >= '0' && s[i] <= '9') 
        {
            s[i++];
        }
        else
        {
            putchar(s[i]);
            i++;
        }
    }
 }

int main() 
{
    char s[num];
    printf("输入字符串:");
    scanf("%s", s);
    printf("%s\n", s);
    del_digit(s);
    return 0;
}

练习9-11

#include <stdio.h>
#define num 5
#define number 6
/*--- 显示字符串数组 ---*/
void put_strary(const char* s[number], int n)
{
    int i;
    for (i = 0; i < n; i++) {
        if (strcmp(s[i], "$$$$$") == 0) {
            break;
        }
        printf("s[%d] = \"%s\"\n", i, s[i]);        
    }
}

int main(void)
{
    char* cs[number] = { "Turbo", "NA", "DOHC","$$$$$","EWGEWGE" };

    put_strary(cs, num);

    return 0;
}

练习9-12

这个题目没有思路,网上抄的,网上有很多种写法,个人认为这个写法不错。

#include <stdio.h>

void rev_string(char s[][128], int n) {
    int i, j;
    for (i = 0; i < n; i++) {
        int j = 0;
        int g = strlen(s[i]);
        printf("s[%d]=\"", i);
        while (s[i][j])
        {        
            putchar(s[i][(g - (j++) - 1)]);
        }puts("\"");
    }
}

int main() {
    int n;
    printf("将字符串逆向显示的个数:");
    scanf("%d", &n);
    char s[][128] = { "asdg","abc","cba","gfdaa" };
    rev_string(s,n);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏洞嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值