【练习41】字符串翻转

0. 题目:

字符串翻转

1. 分析:

学习递归思想和方法。

2. 程序:

方法一:

#include <stdio.h>
void reverseSentence(); int main()
{
printf("输入一个字符串(非中文): ");
reverseSentence(); return 0;
} void reverseSentence()
{
char c;
scanf("%c", &c); if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}

【 解析】 这个程序非常简单巧妙:通过递归方法,不断读入当前的字符,直到字符串结束(读到回车符),然后逐次输出最近读入的字符,实现输出翻转的字符串。

方法二 :

#include <stdio.h>
#include <string.h>
int main()
{
char cInput[40];
printf("请输入字符串:");
scanf("%[^\n]s",cInput);
int j=strlen(cInput);
printf("strlen = %d\n",j); do{
printf("%c",cInput[j-1]);
j--;
} while(j); return 0;
}

【 解析】 这个程序更容易理解。注意 scanf()会在遇到的第一个空白字符空格(blank)、制表符(tab)或者换行符(newline)处停止读取,使用 scanf("%[^\n]s",cInput) 可以设置只有在读入回车符时才终止读取。

3. 输入输出:

输入一个字符串(非中文): Hello world!

!dlrow olleH


【练习42】计算数组元素的平均值

0. 题目:

计算数组元素平均值

1. 分析:

使用 for 循环。

2. 程序:

#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum, loop;
float avg; sum = avg = 0; for(loop = 0; loop < 10; loop++) {
sum += array[loop];
} avg = (float)sum / loop; printf("平均值为 %.2f", avg); return 0;
}

3. 输入输出:

平均值为 4.50

【练习43】输出数组

0. 题目:

输出数组

1. 分析:

使用 for 循环输出数组。

2. 程序:

#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int loop; for(loop = 0; loop < 10; loop++)
{
printf("%d ", array[loop]);
} return 0;
}

3. 输入输出:

1 2 3 4 5 6 7 8 9 0

【练习44】计算数组元素之和

0. 题目:

计算数组元素之和

1. 分析:

使用 for 循环。

2. 程序:

#include <stdio.h>

int main() {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int sum=0, loop; for(loop = 9; loop >= 0; loop--)
{
sum = sum + array[loop];
} printf("数组元素的和为:%d", sum); return 0;
}

3. 输入输出:

数组元素的和为:45


【练习45】查找数组元素中的最大值

0. 题目:

查找数组元素中的最大值

1. 分析:

使用 for 循环。

2. 程序:

方法一:

#include <stdio.h>

int main() {
int array[10] = {3,2,1,4,7,6,5,8,0,9};
int loop, largest; largest = array[0];
for(loop=1; loop<10; loop++)
{
if( largest < array[loop] )
largest = array[loop];
} printf("数组的最大值为 %d", largest); return 0;
}

方法二:

#include <stdio.h>

int main() {
int array[] = {3,2,1,4,7,6,5,8,0,9};
int loop, largest; for(loop=0; loop<10; loop++)
largest=(array[loop] > largest)? array[loop] : largest; printf("数组的最大值为 %d", largest); return 0;
}

3. 输入输出:

数组的最大值为 9

4. 解析:

条件运算符?: 是三元运算符,语法为:条件表达式?表达式1:表达式2。该操作首先求出条件表达式的值(bool类型),true 执行表达式1,flase 执行表达式2。


【练习46】查找数组元素中的最小值

0. 题目:

查找数组元素中的最小值

1. 分析:

使用 for 循环。

2. 程序:

#include <stdio.h>

int main() {
int loop, nLen, nSmallest;
int array[] = {3,2,1,4,7,6,5,8,0,9}; nLen = sizeof(array)/sizeof(array[0]);
nSmallest = array[0]; for(loop = 1; loop < nLen; loop++)
{
if(nSmallest > array[loop])
nSmallest = array[loop];
} printf("数组的最小值为 %d", nSmallest); return 0;
}

3. 输入输出:

数组的最小值为 0

4. 解析:

使用关键字 sizeof 获取数组长度:用 sizeof 可以获得数据类型或变量在内存中所占的字节数,也可以获得整个数组在内存中所占的字节数。因为数组中元素的类型相同,在内存中所占的字节数也相同,所以数组总的字节数除以一个元素所占的字节数就是数组的长度。数组 array 是 int 型,每个元素占 4 字节,长度为 10 的数组在内存中所占的字节数就是 40。


【练习47】数组拆分

0. 题目:

将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组。

1. 分析:

使用 if...else...条件分支结构。

2. 程序:

#include <stdio.h>

int main() {
int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int even[10], odd[10];
int loop, e, d; e = d = 0;
for(loop = 0; loop < 10; loop++)
{
if(array[loop]%2 == 0)
{
even[e] = array[loop];
e++;
}
else
{
odd[d] = array[loop];
d++;
}
} printf(" 原始数组 --> ");
for(loop = 0; loop < 10; loop++)
printf(" %d", array[loop]); printf("\n 偶数 --> ");
for(loop = 0; loop < e; loop++)
printf(" %d", even[loop]); printf("\n 奇数 --> ");
for(loop = 0; loop < d; loop++)
printf(" %d", odd[loop]); return 0;
}

3. 输入输出:

原始数组 --> 0 1 2 3 4 5 6 7 8 9

偶数 --> 0 2 4 6 8

奇数 --> 1 3 5 7 9


【练习48】数组拷贝

0. 题目:

将一个数组复制给另外一个数组

1. 分析:

数组复制属于值传递,复制的数组具有新的地址,复制后原数组与新数组的变化互不影响。

2. 程序:

#include <stdio.h>

int main() {
int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int copied[10];
int loop; for(loop = 0; loop < 10; loop++)
{
copied[loop] = original[loop];
}
printf("原数组 -> 拷贝数组 \n"); for(loop = 0; loop < 10; loop++)
{
printf("%2d\t%2d\n", original[loop], copied[loop]);
} return 0;
}

3. 输入输出:

原数组 -> 拷贝数组

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

0 0


【练习49】计算标准偏差

0. 题目:

计算数组元素之和

1. 分析:

标准差(Standard Deviation)也称为标准偏差,反映一个数据集的离散程度。

2. 程序:

#include <stdio.h>
#include <math.h> float calSD(float data[],int nLen); int main()
{
int i,nLen;
float data[100]; printf("请输入数组长度: ");
scanf("%d", &nLen);
for(i=0; i < nLen; ++i)
{
printf("输入第 %d 个元素: ", i+1);
scanf("%f", &data[i]);
} printf("\n标准偏差 = %.6f", calSD(data,nLen)); return 0;
} float calSD(float data[],int nLen)
{
int i;
float sum, mean, standardDeviation; sum = 0.0;
for(i=0; i<nLen; ++i)
sum += data[i];
mean = sum/nLen; standardDeviation = 0.0;
for(i=0; i<nLen; ++i)
standardDeviation += pow(data[i] - mean, 2);
standardDeviation /= nLen; return sqrt(standardDeviation);
}

3. 输入输出:

请输入数组长度: 10

输入第 1 个元素: 1

输入第 2 个元素: 2

输入第 3 个元素: 3

输入第 4 个元素: 4

输入第 5 个元素: 5

输入第 6 个元素: 6

输入第 7 个元素: 7

输入第 8 个元素: 8

输入第 9 个元素: 9

输入第 10 个元素: 10

标准偏差 = 2.872281


【练习50】两个矩阵相加

0. 题目:

使用多维数组将两个矩阵相加。

1. 分析:

练习使用 for 循环嵌套,多维数组的表达。

2. 程序:

#include <stdio.h>

int main()
{
int rows, cols, a[100][100], b[100][100], sum[100][100], i, j; printf("输入行数 ( 1 ~ 100): ");
scanf("%d", &rows);
printf("输入列数 ( 1 ~ 100): ");
scanf("%d", &cols); printf("\n输入第一个数组的元素:\n");
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
{
printf("输入元素 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
} printf("输入第二个数组的元素:\n");
for(i=0; i<rows; ++i)
for(j=0; j<cols; ++j)
{
printf("输入元素 b%d%d: ",i+1, j+1);
scanf("%d", &b[i][j]);
} // 相加
for(i=0;i<rows;++i)
for(j=0;j<cols;++j)
sum[i][j] = a[i][j] + b[i][j]; // 显示结果
printf("\n二个数组相加结果: \n\n"); for(i=0;i<rows;++i)
{
for(j=0;j<cols;++j)
printf("%d\t",sum[i][j]);
printf("\n\n");
} return 0;
}

3. 输入输出:

输入行数 ( 1 ~ 100): 2

输入列数 ( 1 ~ 100): 3

输入第一个数组的元素:

输入元素 a11: 2

输入元素 a12: 3

输入元素 a13: 4

输入元素 a21: 5

输入元素 a22: 2

输入元素 a23: 3

输入第二个数组的元素:

输入元素 b11: -4

输入元素 b12: 5

输入元素 b13: 3

输入元素 b21: 5

输入元素 b22: 6

输入元素 b23: 3

二个数组相加结果:

-2 8 7

10 8 6


版权说明:

题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。

C语言编程 菜鸟练习100题(41-50)的更多相关文章

  1. C语言编程 菜鸟练习100题(21-30)

    [练习21]计算自然数的和 0. 题目: 计算自然数的和 1. 分析: 练习使用 for 循环结构.for 循环允许一个执行指定次数的循环控制结构. 2. 程序: #include <stdio ...

  2. C语言编程 菜鸟练习100题(51-60)

    [练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...

  3. C语言编程 菜鸟练习100题(31-40)

    [练习31]判断质数 0. 题目: 判断质数 1. 分析: 质数(prime number),指大于 1的.且除 1 和本身以外没有其他因数的自然数. 2. 程序: #include <stdi ...

  4. C语言编程 菜鸟练习100题(11-20)

    [练习11]计算 int, float, double 和 char 字节大小 0. 题目: 计算 int, float, double 和 char 字节大小 1. 分析: 使用 sizeof 操作 ...

  5. C语言编程 菜鸟练习100题(01-10)

    [练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...

  6. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  8. Go面试题精编100题

    Golang精编100题 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2.   [初级]定义一个包内全局字符串变量,下 ...

  9. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

随机推荐

  1. Chrome/Chromium的实验性功能+扩展推荐,让你的Chrome/Chromium起飞!

    1 实验性功能 Chrome/Chromium内置了一些很酷的实验性功能,打开 chrome://flags 即可访问.打开这些实验性功能后,浏览器的使用体验会更好,这里Chrome的版本为80.0. ...

  2. 对象的可见性 - volatile篇

    作者:汤圆 个人博客:javalover.cc 前言 官人们好啊,我是汤圆,今天给大家带来的是<对象的可见性 - volatile篇>,希望有所帮助,谢谢 文章如果有误,希望大家可以指出, ...

  3. 2021S软件工程——个人阅读作业2

    2021S软件工程--个人阅读作业2 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 了解并熟悉软件开发的具体流程, ...

  4. 仅用一句SQL更新整张表的涨跌幅、涨跌率

    问题场景 各大平台店铺的三项评分(物流.服务.商品)变化情况: 商品每日价格的变化记录: 股票的实时涨跌浮: 复现场景 表:主键ID,商品编号,记录时的时间,记录时的价格,创建时间. 问题:获取每个商 ...

  5. 3. Linux基本结构与终端打开方法,关闭方法。

    Linux基本机构: 应用程序 标准库 Linux操作系统内核 硬件 (上层依赖于下层) 终端工具: 打开方法: 1.点击图标 2.搜索命令:终端 退出终端: 1.exit<回车> 2.C ...

  6. 【JDK8】Java8 LocalDate操作时间和日期的API

    时间项目中的涉及到的时间处理非常多,犹豫SimpleDateFormat的不安全性以及Calendar等类在计算时比较复杂, 往往我们都会使用工具类来封装较多的日期处理函数, 但是JDK8中新增了操作 ...

  7. ZOJ3261并查集逆向处理

    题意:       给你一些点,还有一些边,每个点上都有一个权值,然后有一些询问,分为两种, query a 询问与a直接或者间接想连的点中最大权值的是那个点,输出那个点,如果那个点的权值小于等于a的 ...

  8. Win64 驱动内核编程-10.突破WIN7的PatchGuard

    突破WIN7的PatchGuard WIN64 有两个内核保护机制,KPP 和 DSE.KPP 阻止我们 PATCH 内核,DSE 拦截我们加载驱动.当然 KPP 和 DSE 并不是不可战胜的,WIN ...

  9. Win64 驱动内核编程-12.回调监控进线程创建和退出

    回调监控进线程创建和退出 两个注册回调的函数:PsSetCreateProcessNotifyRoutine   进程回调PsSetCreateThreadNotifyRoutine    线程回调分 ...

  10. Vue源码解析-调试环境-代码目录和运行构建

    目录 前言 1 代码结构 1.1 octotree插件 1.2 vue工程项目目录 1.3 主要代码目录src compiler core platforms server sfc shared 2 ...