在阅读代码前,先说一下这本书的在版编目(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("写一个函数,使其能处理字符串中除字母(大