C语言数组应用举例

【示例1】求一个整型数组中的最大值和最小值。
#include<stdio.h>
int main()
{int i,max,min,a[10]={0};
for(i=1;i<=9;i++)
scanf(“%d”,&a[i]); /从控制台获取用户输入并赋值给数组元素/
max=a[0];min=a[0]; /假设a[0]是最大值也是最小值/
for(i=1;i<=9;i++)
{if(a[i]>max)max=a[i];
if(a[i]<min)min=a[i];}
printf(“max=%d\n”,max); /* printf(“The max is %d, The min is %d\n”, max, min);/
printf(“min=%d\n”,min);
system(“pause”); /
getch();或者return 0;*/
}
运行结果:
2 123 45 100 575 240 799 710 10 90↙
The max is 799, The min is 2
这段代码有两点需要说明:

  1. 从控制台获取数组元素时,我们一次性输入10个整数才按下回车键,而不是每输入一个整数就按一次回车键,这正是利用了标准输入缓冲区。

  2. 要想求得数组中的最大值和最小值,就得循环比较数组中的所有元素,并设置两个变量 max 和 min 来接收。以最大值为例,开始循环之前,先假设第0个元素是最大值(当然你也可以假设第1、2、3 个元素),然后用 max 和数组中剩余的元素进行比较,如果某个元素的值比 max 大,就用这个元素的值替换 max 的值,等把所有元素遍历完了,max 中就是最大值了。
    关于排序和查找

学完了数组,有两个重要的知识点要求大家掌握,那就是排序(Sort)和查找(Search),比如:
给你 10 个打乱顺序的整数,要能够按照从小到大或者从大到小的顺序输出;
给定一个字符串 str1,以及一个子串 str2,要能够判断 str2 是否在 str1 中。
排序和查找的方法有很多种,我们把它们设置成了单独的一章进行讲解,请查看:C语言排序和查找
如果你希望更加深入和透彻地学习编程,请了解VIP会员(赠送1TB资料)或C语言一对一辅导。
用C语言来统计文件中单词的个数
C语言判断回文字符串
I/O(输入/输出)控制方式
C语言获取开机时间
gets()
输入/输出(I/O)设备分配与回收
系统调用
经典进程同步问题3:哲学家进餐问题
C语言输出2的N次幂
fputs()
#include<stdio.h>
int main()
{
int a[10] ;
int max, min;
int i,x;
int len=sizeof(a)/sizeof(int);
for (i=0;i<=9;i++)
{
scanf(“%d”,&x);
a[i]=x;
}
max=a[0];min=a[0];
for(i=1; i<len; i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
printf(“The max is %d, The min is %d\n”, max, min);
printf(“%d %d\n”,sizeof(a),sizeof(int));
system(“pause”);
}
简单的修改了一下 输入十个整数 输出最大数和最小数
2015年12月24日

C语言选择排序算法及代码
选择排序是排序算法的一种,这里以从小到大排序为例进行讲解。
基本思想及举例说明

选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。

在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。

下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。

第1轮 排序过程 (寻找第1小的数所在的位置)
3 2 4 1(最初, min_index=1即数3)
3 2 4 1(3 > 2, 所以min_index=2)
3 2 4 1(2 < 4, 所以 min_index=2)
3 2 4 1(2 > 1, 所以 min_index=4, 这时候确定了第1小的数在位置4)
1 2 4 3 (第1轮结果,将3和1交换,也就是位置1和位置4交换)

第2轮 排序过程 (寻找第2小的数所在的位置)
1 2 4 3(第1轮结果, min_index=2,只需要从位置2开始寻找)
1 2 4 3(4 > 2, 所以min_index=2)
1 2 4 3(3 > 2, 所以 min_index=2)
1 2 4 3(第2轮结果,因为min_index位置刚好在第2个位置,无需交换)

第3轮 排序过程 (寻找第3小的数所在的位置)
1 2 4 3(第2轮结果, min_index=3,只需要从位置2开始寻找)
1 2 4 3(4 > 3, 所以min_index=4)
1 2 3 4(第3轮结果,将3和4交换,也就是位置4和位置3交换)

至此,排序完毕。
总结及实现

选择排序对大小为N的无序数组R[N]进行排序,进行N-1轮选择过程。第i轮选取第i小的数,并将其放在第i个位置上。当第N-1次完成时,第N小(也就是最大)的数自然在最后的位置上。

下面给出选择排序的C语言实现。
#include<stdio.h>
#include<stdlib.h>
#define N 9
void select_sort(int a[],int n) /* 选择排序实现,n为数组a的元素个数*/
{ int i,j; /进行N-1轮选择/
for(i=0; i<n-1; i++)
{
int min_index = i; /找出第i小的数所在的位置/
for(j=i+1; j<n; j++)
{
if(a[j] < a[min_index])
{
min_index = j;
}
}
/将第i小的数,放在第i个位置;如果刚好,就不用交换/
if( i != min_index)
{
int temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
int main()
{
int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};int i;
select_sort(num, N);
for(i=0; i<N; i++)
printf(“%d “, num[i]);
printf(”\n”);
system(“pause”);
getch();
}
注意:选择排序是一种不稳定的排序算法,可能会打乱两个相同数字的原有顺序。

例如,序列 5 8 5 2 9, 按照从小到大排序,第一轮会将第1个数字5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序是一种不稳定的排序算法。

C语言输出2的N次幂
输出 2 的 N 次幂:1, 2, 4, 8, … 一直到 2^N。

设N=16,代码如下:
#include <stdio.h>
#define N 16
int main(void)
{
int n; /记录当前指数/
long int val = 1; /保存 2^n 的结果/

printf("\t  n  \t    2^n\n");
printf("\t================\n");

for (n=0; n<=N; n++)
{
printf(“\t%3d \t %6ld\n”, n, val);
val = 2*val;
}
system(“pause”);
getch();
}

输出结果:
n 2^n

0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
11 2048
12 4096
13 8192
14 16384
15 32768
16 65536

C语言判断回文字符串
输入一个字符串,判断其是否为回文。

所谓回文字符串,是指从左到右读和从右到左读完全相同的字符串。

主要涉及知识点:字符数组的输入输出,及相应的处理。

这个问题,可以从字符串的两头开始比较,即第1个字符和倒数第1个字符比较,第2个字符和倒数第2个字符比较,以此类推…如果出现字符不相等的情况,说明不是回文,如果全部相等,说明是回文。

代码如下:
#include <stdio.h>
#include <string.h>
#include <string.h>
void main(){
char s[100]; /存放输入的字符串/
int i, j, n;
printf(“enter character string:\n”);
gets(s);

n=strlen(s);
for(i=0,j=n-1;i<j;i++,j--)
    if(s[i]!=s[j]) break;
    if(i>=j)
        printf("It is palindrome list\n");/*是回文串*/ 
    else
        printf("It is not palindrome list\n");/*不是回文串*/
 printf("%s\n",s);
 system("pause");

getch();
}
运行结果:
输入字符串:abcdedcba
是回文串
或者:
输入字符串:www.coderbbs.com
不是回文串

用C语言来统计文件中单词的个数 ?
文本检索是软件最常用的一个功能,用C语言写一段程序,统计某个文件中单词的个数。

提示:单词是以空格为分隔的。

文本检索是软件最常用的一个功能,下面的代码将教你如果使用C语言统计单词的个数。

代码实现:
纯文本新窗口
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
/argc: 统计运行程序时命令行参数的个数/
/* argv[]: 储存每个参数的字符串指针,每一个元素对应一个参数/
int main (int argc,char argv[])
{
int ch,bian=0,count=0;
char find[50],temp[1000];
FILE pt; /文件指针/
/判断是否输入文件/
if (argc != 2){
printf(“请使用格式: %s 文件名”,argv[0]);
exit(1); /非正常退出/
}
/
判断能否成功打开文件
/
if ((pt = fopen(argv[1],“r”))== NULL){ /将argv[1]赋值给指针pt/
printf(“打开文件 %s 失败”,argv[1]);
exit(1);
}
printf(“请输入要查找的单词:”);
gets(find);
while((ch=getc(pt))!=EOF){ /EOF 表示文件结束/
if ((ch!=’ ‘)&&(ch!=’\n’)){
temp[bian]=ch;
bian++;
} else {
temp[bian]=‘\0’;
if ((strcmp(find,temp))==0) count++;
bian=0;
}
}
printf(“共在文件%s中查找到字符串”%s" %d 个\n",argv[1],find,count);
getch();
}

代码分析上面的程序,需要在 dos 命令行下运行。 首先 cd 到程序的编译目录,然后输入程序名和文件名,例如,笔者编译后的程序位于 E:\cDemo\Debug\cDemo.exe,那么运行方式如下:

这里需要简单介绍一下 main() 函数。main() 函数是程序的入口函数,代码内部无法向其传参,只能在程序运行时由系统在向其传参。一般情况下不需要向main()函数传参,但是如果希望程序启动时可以读取有用数据,进行初始化处理,那么可以这样来传参:
int main (int argc, char *argv[])
argc 表示参数的个数,argv[] 以数组形式保存传递的所有参数。

注意,当前程序会作为第一个参数传递,例如上面输入 cdemo.exe demo.txt,那么 argc =2,argc[0]=cdemo.exe,argc[1]=demo.txt

还有一种简单的传参方式,就是将文件(图标)拖到程序上,程序就会立即运行,并将该文件作为一个参数,效果与 cdemo.exe demo.txt 相同。

关于main()函数的更多介绍请查看:C语言mian()函数详解

最后说一下实现单词搜索的思路,这是本程序的关键,这部分代码位于while循环内。

用gets读取用户输入的单词并保存到变量find,while((ch=getc(pt))!=EOF) 对文件进行读取,直到文件结束。

用if对读取的进程进行判断:将每次读取到的单个字符ch依次放入字符串数组temp[]中,直到遇到空格符或者换行符,则这个单词结束,添加’\0’结束标记。用strcmp()函数与用户搜索的单词find进行比较,如果匹配,则返回0,计数器count加1。最后令bian置0。

注意:英语书写时以空格来分隔每个单词,故我们以空格作为单词结束的标志。而之所以要加上换行符,是因为如果没有检测换行符,当单词在行首(或行末)时,就会和上一行(或下一行)的最后一个单词连在一起,视为1个单词与find比较,导致统计结果缺失。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯并按条件打印笑脸 11.经典兔子问题 12.判断素数 13.水仙花数问题 14.正整数分解质因数 15.学习成绩划分 16.正整数求其最大公约数和最小公倍数 17.统计英文字母/空格/数字个数 18.求s=a+aa+aaa+aa...a的值 19.求解"完数" 20.球体自由落下物理问题 21.猴子吃桃问题 22.乒乓球比赛抽签问题 23.打印菱形图案 24.分数数列求和 25.求1+2!+3!+...+20!的和 26.利用递归方法求5! 27.将输入字符以相反顺序打印 28.岁数问题 29.求解正整数位数 30.判断回文数 31.星期几猜测游戏 32.改变文本颜色 33.学习gotoxy()与clrscr()函数 34.练习函数调用 35.设置文本颜色 36.求100之内的素数 37.对10个数进行排序 38.求3*3矩阵对角线元素之和 39.数字插入数组重新排序 40.将一个数组逆序输出 41.static定义静态变量用法 42.使用auto定义变量用法 43.使用static的另一用法 44.使用external的用法 45.使用register定义变量方法 46.宏#define命令练习(1) 47.宏#define命令练习(2) 48.宏#define命令练习(3) 49.#if #ifdef和#ifndef的综合应用 50.#include 的应用练习 51.学习使用按位与 & 52.学习使用按位或 | 53.学习使用按位异或 ^ 54.取一个整数从右端开始的4~7位。 55.学习使用按位取反~ 56.用circle画圆形 57.学用line画直线 58.用rectangle画方形 59.画图综合例子 60.画图综合例子2 61.打印杨辉三角形 62.学习putpixel画点 63.画椭圆ellipse 64.利用ellipse and rectangle画图 65.画个最优美的图案 66.输入3个数字按大小顺序输出 67.输入数组交换元素重新输出 68.多个整数后移位置问题 69.圆圈报数问题 70.计算一个字符串长度 71.编写输入/输出函数 72.创建链表 73.反向输出链表 74.连接两个链表 75.算一道简单题目 76.调用函数求1/2+1/4+...+1/n 77.填空练习(指向指针的指针) 78.找到年龄最大的人 79.字符串排序 80.海滩猴子分桃 81.已知公式条件求数字 82.八进制转换为十进制 83.求0-7所能组成的奇数个数 84.由两个素数之和表示的偶数 85.判断一个素数能被几个9整除 86.两个字符串连接程序 87.结构体变量传递 88.读取数字的整数值并打印出该值个数的* 89.数据加密 90.专升本一题 91.时间函数举例1 92.时间函数举例2 93.时间函数举例3 94.一个猜数游戏 95.家庭财务管理小程序 96.计算字符串中子串出现的次数 97.输入字符并保存到磁盘 98.字符串转换成大写字母并输出保存 99.文件操作应用1 100.文件操作应用2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨小杨先生

你的鼓励是我的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值