C语⾔编程菜鸟练习100题(51-60)【练习51】矩阵转置
0. 题⽬:
矩阵的转置
1. 分析:
练习使⽤ for 循环嵌套,多维数组的表达。
2. 程序:
#include <stdio.h>
int main()
{
int inMatrix[10][10], outMatrix[10][10], rows, cols, i, j;
printf("输⼊矩阵的⾏与列(逗号分隔): ");
scanf("%d,%d", &rows, &cols);
// 存储矩阵的元素
printf("\n输⼊矩阵元素:\n");
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
{
printf("输⼊元素 inMatrix%d%d: ",i+1, j+1);
scanf("%d", &inMatrix[i][j]);
}
// 显⽰矩阵 inMatrix[][] */
printf("\n输⼊矩阵是: \n");
for(i=0; i<rows; ++i)
{
for(j=0; j<cols; ++j)
printf("%d\t", inMatrix[i][j]);
printf("\n");
}
// 转换
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
outMatrix[j][i] = inMatrix[i][j];
// 显⽰转换后的矩阵 outMatrix
printf("\n转换后矩阵是:\n");
for(i=0; i<cols; ++i)
{
for(j=0; j<rows; ++j)
printf("%d ",outMatrix[i][j]);
printf("\n");
}
return 0;
}
3. 输⼊输出:
输⼊矩阵的⾏与列(逗号分隔):2,3
输⼊矩阵元素:
输⼊元素 inMatrix11: 2
输⼊元素 inMatrix12: 3
输⼊元素 inMatrix13: 4
输⼊元素 inMatrix21: 5
输⼊元素 inMatrix22: 6
输⼊元素 inMatrix23: 4
输⼊矩阵是:
2 3 4
5 6 7
转换后矩阵是:
2 5
3 6
4 7
【练习52】使⽤指针访问数组元素
0. 题⽬:
使⽤指针访问数组元素
1. 分析:
指针提供⼀种以符号形式使⽤地址的⽅法。在C语⾔中,数组的名称代表数组的⾸地址。
2. 程序:
#include <stdio.h>
int main()
{
int data[5], i;
for(i = 0; i < 5; ++i)
{
printf("输⼊第 %d 个元素: ", i+1);
scanf("%d", data + i);
}
printf("你输⼊的是: \n");
for(i = 0; i < 5; ++i)
printf("%d\n", *(data + i));
return 0;
}
3. 输⼊输出:
输⼊元素: 1
3
5
7
9
你输⼊的是:
1
3
5
7
9
4. 解析:
指针加上⼀个数时,不是把指针当做⼀个整数计算结果,⽽是指针在内存中移动。例如,*(data + i) 是指从数组 data 的⾸地址向后移动 i个元素的地址中的值,也即 data[i]。
【练习53】使⽤引⽤循环替换数值
0. 题⽬:
对 a、b、c 三个变量,通过引⽤按顺序循环替换他们的值。
1. 分析:
指针是内存地址。通过传递指向指针的引⽤来实现指针的交换。
2. 程序:
#include<stdio.h>
void cyclicSwap(int *a,int *b,int *c);
int main()
{
int a, b, c;
printf("输⼊ a, b 和 c 的值(逗号分隔): ");c语言数组最大值最小值
scanf("%d %d %d",&a,&b,&c);
printf("交换前:\n");
printf("a = %d \nb = %d \nc = %d\n",a,b,c);
cyclicSwap(&a, &b, &c);
printf("交换后:\n");
printf("a = %d \nb = %d \nc = %d",a, b, c);
return 0;
}
void cyclicSwap(int *a,int *b,int *c)
{
int temp;
// 交换
temp = *b;
*b = *a;
*a = *c;
*c = temp;
}
3. 输⼊输出:
输⼊ a, b 和 c 的值(逗号分隔): 1,3,5
交换前:
a = 1
b = 3
c = 5
交换后:
a = 5
b = 1
c = 3
【练习54】判断最⼤值
0. 题⽬:
计算数组元素平均值
1. 分析:
简单地说,指针就是地址。⽤ * 来获取指针指向的数据。
C语⾔规定:数组名=数组⾸元素指针,所以直接可以⽤数组名的指针 *buf 来访问第⼀个元素,也可以使⽤ *(buf+n) 来访问第n个元素。
2. 程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, num;
float *data;
printf("输⼊元素个数(1 ~ 100): ");
scanf("%d", &num);
// 为 'num' 元素分配内存
data = (float*) calloc(num, sizeof(float));
if(data == NULL)
{
printf("Error 内存没有分配。");
exit(0);
}
printf("\n");
/
/ ⽤户输⼊
for(i = 0; i < num; ++i)
{
printf("输⼊数字 %d: ", i + 1);
scanf("%f", data + i);
}
// 循环出最⼤值
for(i = 1; i < num; ++i)
{
// 如果需要出最⼩值可以将 < 改为 >
if(*data < *(data + i))
*data = *(data + i);
}
printf("最⼤元素 = %.2f", *data);
return 0;
}
3. 输⼊输出:
输⼊元素个数(1 ~ 100): 5
输⼊数字 1: 12
输⼊数字 2: 32
输⼊数字 3: 6
输⼊数字 4: 56
输⼊数字 5: 21
最⼤元素 = 56.00
4. 解析:
1、*data 等价于 data[0],*data+i 等价于 data[i]。因此 *data = *(data + i) 等价于 data[0] = data[i],执⾏后 data[0] 的值发⽣了改
变。
2、calloc() 函数⽤来动态地分配内存空间。calloc(num, size) 在内存中动态地分配 num 个长度为 size 的连续空间,并将每⼀个
字节都初始化为 0。也就是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。
【练习55】删除字符串中的特殊字符
0. 题⽬:
删除字符串中的除字母外的字符。
1. 分析:
字符串的读取(fgets)和输出(puts)。
2. 程序:
#include<stdio.h>
int main()
{
char line[150];
int i, j;
printf("输⼊⼀个字符串: ");
fgets(line, (sizeof line / sizeof line[0]), stdin); //从指定的流中读取数据,每次读取⼀⾏
for(i = 0; line[i] != '\0'; ++i)
{
while (!( (line[i]>='a' && line[i]<='z') || (line[i]>='A' && line[i]<='Z') || line[i] == '\0') )
{
for(j = i; line[j] != '\0'; ++j)
{
line[j] = line[j+1];
}
line[j] = '\0';
}
}
printf("输出: ");
puts(line); // 输出⼀个字符串
return 0;
}
3. 输⼊输出:
输⼊⼀个字符串: run4#$str123
输出: runstr
4. 解析:
1、fgets(char *str, int n, FILE *stream)函数:从指定的流中读取数据,每次读取⼀⾏,并存储在str所指向的字符串内。
2、puts(char *p)函数:将字符串输出到终端,其参数是⼀个指向字符串的指针p 或其地址函数。puts()函数只能输出⼀个字符
串,字符串中可以包括转义字符。
【练习56】连接字符串
0. 题⽬:
连接两个字符串。
1. 分析:
使⽤ strcat() 连接两个字符串。
2. 程序:
#include <stdio.h>
int main()
{
char s1[100], s2[100], i, j;
printf("输⼊第⼀个字符串: ");
scanf("%s", s1);
printf("输⼊第⼆个字符串: ");
scanf("%s", s2);
// 计算字符串 s1 长度
for(i = 0; s1[i] != '\0'; ++i);
for(j = 0; s2[j] != '\0'; ++j, ++i)
{
s1[i] = s2[j];
}
s1[i] = '\0';
printf("连接后: %s", s1);
return 0;
}
3. 输⼊输出:
输⼊第⼀个字符串: Hello
输⼊第⼆个字符串: World!
连接后: HelloWorld!
4. 解析:
strcat(char *dest, const char *src) 函数:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。注意:src 和 dest 所指内存区域不能重叠,且dest必须有⾜够的空间来容纳 src 字符串。
【练习57】计算字符串长度
0. 题⽬:
计算字符串长度。
1. 分析:
使⽤ strlen() 计算字符串长度。
2. 程序:
#include <stdio.h>
#include <string.h>
int main()
{
char str[1000];
int len, i;
printf("输⼊字符串: ");
scanf("%s", str);
/
/使⽤ strlen() 获得字符串长度
len = strlen(str);
printf(" 1、字符串长度: %d", len);
//使⽤ for 循环获得字符串长度
for(i = 0; str[i] != '\0'; ++i); //注意该循环没有循环体语句
printf("\n 2、字符串长度: %d", i);
return 0;
}
3. 输⼊输出:
输⼊字符串: goodluck
1、字符串长度: 8
2、字符串长度: 8
4. 解析:
strlen()函数:来求字符串的长度(包含多少个字符)。从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值(长度不包含'\0')。
【练习58】查字符在字符串中出现的次数
0. 题⽬:
查字符在字符串中的起始位置(索引值从 0 开始)。
1. 分析:
使⽤ for 循环。
2. 程序:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论