C语言的经典编程例子
发布时间:2025-05-13 15:21:18 发布人:远客网络
一、C语言的经典编程例子
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
for(i=1;i<5;i++)/*以下为三重循环*/
if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
==============================================================
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus=bonus1+(i-100000)*0.075;
bonus=bonus6+(i-600000)*0.015;
bonus=bonus10+(i-1000000)*0.01;
==============================================================
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
{ x=sqrt(i+100);/*x为加上100后开方后的结果*/
y=sqrt(i+268);/*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
==============================================================
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
default:printf("data error");break;
sum=sum+day;/*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
printf("It is the%dth day.",sum);}
==============================================================
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
printf("small to big:%d%d%d\n",x,y,z);
二、c语言的发展史
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。
C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年由肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。
后来于1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程序开发工具,一般都支持符合ANSI C的语法。
C语言是一个程序语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言也很适合搭配汇编语言来使用。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言最早是由丹尼斯·里奇为了在PDP-11电脑上运行的UNIX系统所设计出来的编程语言,第一次发展在1969年到1973年之间。之所以被称为“C”是因为C语言的很多特性是由一种更早的被称为B语言的编程语言中发展而来。早期操作系统的核心大多由汇编语言组成,随着C语言的发展,C语言已经可以用来编写操作系统的核心。1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。
1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序员称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色:
无符号整数(unsigned int)类型
把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道用户要处理i=-10还是i=- 10,使得处理上产生混淆。
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。
1989年,C语言被 ANSI标准化(ANSI X3.159-1989)。标准化的一个目的是扩展K&R C。这个标准包括了一些新特性。在K&R出版后,一些新特性被非官方地加到C语言中。
在ANSI标准化自己的过程中,一些新的特性被加了进去。ANSI也规定了一套标准函数库。ANSI ISO(国际标准化组织)成立 ISO/IEC JTC1/SC22/WG14工作组,来规定国际标准的C语言。通过对ANSI标准的少量修改,最终通过了 ISO 9899:1990。随后,ISO标准被 ANSI采纳。
传统C语言到ANSI/ISO标准C语言的改进包括:
函数原型允许在函数申明中指定参数类型
一些新的关键字,包括 const、volatile与 signed
对约定规则、声明和类型检查的许多小改动与澄清
WG14工作小组之后又于1995年,对1985年颁布的标准做了两处技术修订(缺陷修复)和一个补充(扩展)。下面是 1995年做出的所有修改:
3个新的标准库头文件 iso646.h、wctype.h和 wchar.h
几个新的记号与预定义宏,用于对国际化提供更好的支持
printf/sprintf函数一系列新的格式代码
大量的函数和一些类型与常量,用于多字节字符和宽字节字符
C99在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1995年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。
增加了对编译器的限制,比如源程序每行要求至少支持到 4095字节,变量名函数名的要求支持到 63字节(extern要求支持到 31)。
宏支持取可变参数#define Macro(...) __VA_ARGS__
使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。
支持//开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)
增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool
支持 long long, long double _Complex, float _Complex等类型
支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。声明时使用 int a[var]的形式。不过考虑到效率和实现,不定长数组不能用在全局,或 struct与 union里。
变量声明不必放在语句块的开头,for语句提倡写成 for(int i=0;i<100;++i)的形式,即i只在 for语句块内部有效。
允许采用(type_name){xx,xx,xx}类似于 C++的构造函数的形式构造匿名的结构体。
初始化结构的时候允许对特定的元素赋值,形式为:
struct{int a[3],b;} foo[]={ [0].a={1}, [1].a= 2};
struct{int a, b, c, d;} foo={.a= 1,.c= 3, 4,.b= 5}// 3,4是对.c,.d赋值的
格式化字符串中,利用\u支持 unicode的字符。
printf scanf的格式化串增加了对 long long int类型的支持。
浮点数的内部数据描述支持了新标准,可以使用#pragma编译器指令指定。
除了已有的 __line__ __file__以外,增加了 __func__得到当前的函数名。
允许编译器化简非常数的表达式。
修改了/%处理负数时的定义,这样可以给出明确的结果,例如在C89中-22/ 7=-3,-22% 7=-1,也可以-22/ 7=-4,-22% 7= 6。而C99中明确为-22/ 7=-3,-22% 7=-1,只有一种结果。
取消了函数返回类型默认为 int的规定。
允许 struct定义的最后一个数组不指定其长度,写做 []。
const const int i将被当作 const int i处理。
增加和修改了一些标准头文件,比如定义 bool的<stdbool.h>,定义一些标准长度的 int的<inttypes.h>,定义复数的<complex.h>,定义宽字符的<wctype.h>,类似于泛型的数学函数<tgmath.h>,浮点数相关的<fenv.h>。在<stdarg.h>增加了 va_copy用于复制...的参数。<time.h>里增加了 struct tmx,对 struct tm做了扩展。
输入输出对宽字符以及长整数等做了相应的支持。
三、c语言的发展历程
C语言的发展颇为有趣。它的原型ALGOL 60语言。(也成为A语言)
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Matin Richards对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1988年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准 3.C语言的主要特点。C语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如DBASEⅢ PLUS、DBASEⅣ都是由C语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,象PC- DOS、WORDSTAR等就是用这种方法编写的。