《C语言程序设计教程》(主编黄迪明、余勤)第六章课后习题答案

       在阅读代码前,先说一下这本书的在版编目(CIP)数据:C语言程序设计教程/黄迪明、余勤主编.--北京:国防工业出版社,2006.5    ISBN 7-118-04516-0

       所有代码均在 VS2013 中成功运行。第一次写博客,若有不妥之处,非常欢迎您提出问题,若能提出改进意见,不胜感激!



6.1  写一个函数,使其能将一个二维数组(5*3)中的数据进行行列互换。

#include <stdlib.h>
#include<stdio.h>
void main()
{
	printf(" 写一个函数,使其能将一个二维数组(5*3)中的数据进行行列互换。\n\n");
	int nrows = 0, ncolumns = 0;
	int i, l;
	printf("请输入数组的行数:");
	scanf("%d", &nrows);
	printf("请输入数组的列数:");
	scanf("%d", &ncolumns);
	//为输入的数组分配行数    
	int **array1 = malloc(nrows * sizeof(*array1));//注意分配的是整形指针的数量 每行元素是个整形指针
	//对每行分配数组个数(就是二维数组的列数)
	for (i = 0; i < nrows; i++)
	{
		printf("数组第 %d 行的数分别为:", i + 1);
		array1[i] = (int*)malloc(ncolumns * sizeof(int));
		for (l = 0; l<ncolumns; l++)
		{
			scanf("%d", &array1[i][l]);
		}
		printf("\n");

	}
	//************************

	//为中间数组分配行数   
	int **array2 = malloc(ncolumns * sizeof(*array2));
	for (i = 0; i < ncolumns; i++)
	{
		array2[i] = (int*)malloc(nrows * sizeof(int));
		for (l = 0; l<nrows; l++)
		{
			array2[i][l] = '\0';
		}
	}
	//数组转置
	for (i = 0; i < ncolumns; i++)
	{
		for (l = 0; l < nrows; l++)
		{
			array2[i][l] = array1[l][i];
		}
	}
	//************************
	printf("转置后的数组为:\n");
	for (i = 0; i < ncolumns; i++)
	{
		for (l = 0; l < nrows; l++)
		{
			printf("%5d", array2[i][l]);
		}
		printf("\n");
	}


	free(array1);
	free(array2);

	getch();

}


6.2  写一个函数,使其能通过主调函数通过实参传来的字符串,对其中的字母、空格、数字分别计数(要求在主函数中输入字符串及统计结果)。

#include<stdio.h>
int countchr(char* str);
int countspace(char* str);
int countnumber(char* str);
void output(int chr, int number, int space);
int countchr(char* str)
{
	int chr = 0;
	while (*str!='\0')
	{
		if ((*str >= 'a'&&*str <= 'z') || (*str >= 'A'&&*str <= 'Z'))
		{
			chr = chr + 1;
		}
		str++;
	}
	return chr;
};
int countspace(char* str)
{
	int chr = 0;
	while (*str != '\0')
	{
		if (*str==' ')
		{
			chr = chr + 1;
		}
		str++;
	}
	return chr;
};
int countnumber(char* str)
{
	int chr = 0;
	while (*str != '\0')
	{
		if (*str >= '0'&&*str <= '9')
		{
			chr = chr + 1;
		}
		str++;
	}
	return chr;
};
void output(int chr, int number, int space)
{
	printf("\n字符串中字母的个数为:%d",chr);
	printf("\n字符串中数字的个数为:%d", number);
	printf("\n字符串中字母的个数为:%d", space);
};
void main()
{
	printf("写一个函数,使其能通过主调函数通过实参传来的字符串,对其中的字母、空格、数字分别计数(要求在主函数中输入字符串及统计结果)。");
	char c[100];
	printf("请输入一个字符串:");
	gets(c);
	int chr = 0, number = 0, space = 0;
	char *str = &c;
	chr = countchr(str);
	number = countnumber(str);
	space = countspace(str);
	output(chr,number,space);
	getch();
}


6.3  写一个函数,使其能处理字符串中除字母(大小写)、数字外的其他ASCII码,对多余一个连在一起的相同字符,使其缩减至仅保留一个。

#include<stdio.h>
void chr(char* str1, char* str2);
void output(char* str2);
void chr(char* str1, char* str2)
{
	int k = 0;
	while (*str1 != '\0')
	{
		if ((*str1 >= 'a'&&*str1 <= 'z') || (*str1 >= 'A'&&*str1 <= 'Z') || (*str1 >= '0'&&*str1 <= '9'))
		{
			k = 0;
			*str2 = *str1;
			str2++;
		}
		else
		{
			if (k != 1)
			{
				k = 1;
				*str2 = *str1;
			}
		}
		str1++;
	}
}
void output(char* str2)
{
	printf("转换后的字符串为:");
	while (*str2 != '\0')
	{
		printf("%c", *str2);
		str2++;
	}
}

void main()
{
	printf("写一个函数,使其能处理字符串中除字母(大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值