一个C语言程序

作者&投稿:燕蒲 (若有异议请与网页底部的电邮联系)
一个完整的C程序由什么组成?~

C语言的构成如下:
1、数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
3、数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。
4、指针
如果一个变量声明时在前面使用*号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * 。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
5、字符串
C语言的字符串其实就是以'\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。它们不同于字符数组。使用这些函数需要引用头文件。
6、文件输入/输出
在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件中。
7、运算
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。

扩展资料:
1、语言简洁、紧凑,使用方便、灵活
C语言是一个很小的内核语言,只包括极少的与硬件有关的成分,C语言不直接提供输入和输出语句、有关文件操作的语句和动态内存管理的语句等(这些操作由编译系统所提供的库函数来实现的),C的编译系统相当简洁。
2、运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值和强制类型转换等都作为运算符处理,从而使C语言哟运算类型极其丰富,表达式类型多样化。
3、数据类型丰富
C语言提供的数据类型包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型等,C99又扩充了复数浮点类型、超长整型和布尔类型等。尤其是指针类型数据,使用十分灵活和多样化,能用来实现各种复杂的运算。
4、具有结构化的控制语句
如if…else语句、do…while语句、switch语句和for语句等。用函数作为程序的模块单位,便于实现程序的模块化。
5、语法限制不太严格,程序设置自由度大。
6、C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。C语言既具有高级语言的功能,又具有低级语言的许多功能,可用来编写系统软件。
7、用C语言编写的程序可移植性好。
8、生成目标代码质量高,程序执行效率高。
参考资料:百度百科-C语言

一个C程序由一个主函数和若干个其他函数组成。若干个的意思就是可以有0个及以上个。c语言的程序模块称为函数。
C 语言可以进行多种方式进行程序的设计,它是一种很有特色的高级语言通过若干个函数组成,它具备构成程序设计的 3 种基本结构顺序,选择和循环结构。C语言编辑简洁明了,运算符丰富且功能强大还有编译预处理功能。此语言的移植性好不同的处理器用不同的编译器编译指令达到移植的效果。

扩展资料:
C 语言普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了 34 种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和 32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以使用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
其三,结构完善。C 语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。

修订版:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int T;

// 打印数组
void Print(T* beg, T* end, const char* msg)
{
printf(msg);
while(beg != end)
printf("%d ", *beg++);
putchar('\n');
}

// 把元素向左移以覆盖重复元素
void MoveUp(T* dest, T* src, T* end)
{
while(src != end)
*dest++ = *src++;
}

// 去重
T* Unique(T* beg, T* end)
{
T* dupBeg = end;

if(end - beg <= 1)
return end;

while(++beg != end)
{
if(*(beg - 1) == *beg)
{
dupBeg = beg;
while(*++dupBeg == *(dupBeg - 1) && dupBeg != end);
if(dupBeg == end)
return beg;
else
{
MoveUp(beg, dupBeg, end);
end -= dupBeg - beg;
}
}
}

return end;
}

// 求差集
T* SetDiff(T* a, T* endOfA, T* b, T* endOfB, T* c)
{
T* p;
for(; a != endOfA; ++a)
{
for(p = b; p != endOfB; ++p)
if(*p == *a)
break;
if(p == endOfB)
*c++ = *a;
}
return c;
}

inline int Cmp(const void* lhs, const void* rhs)
{
return *(const T*)lhs - *(const T*)rhs;
}

int main()
{
// 只是个示例,元素个数很多的话可以用动态数组
T a[] = {12,23,18,15,12,13}, *endOfA = a + sizeof(a) / sizeof(a[0]);
T b[] = {4,12,26,23,14}, *endOfB = b + sizeof(b) / sizeof(b[0]);
T* c, *endOfC;

// 排序
qsort(a, endOfA - a, sizeof(T), Cmp);
qsort(b, endOfB - b, sizeof(T), Cmp);

// 去重
endOfA = Unique(a, endOfA);
endOfB = Unique(b, endOfB);
Print(a, endOfA, "Set A: ");
Print(b, endOfB, "Set B: ");

// c = a - b;
c = (T*)malloc(sizeof(T) * (endOfA - a));
endOfC = SetDiff(a, endOfA, b, endOfB, c);
Print(c, endOfC, "Difference of A & B: ");

free(c);
return 0;
}

这样的话用C++更简单,直接set_difference:
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;

int main()
{
int a[] = {12,23,18,15,12,13};
int b[] = {4,12,26,23,14};

list<int> la(a, a + 6);
list<int> lb(b, b + 5);
list<int> lc;

// 排序
la.sort();
lb.sort();

// 去重
la.unique();
lb.unique();

// 求差集,存在lc中
set_difference(la.begin(), la.end(), lb.begin(), lb.end(), back_inserter(lc));

// 打印
copy(lc.begin(), lc.end(), ostream_iterator<int>(cout, " "));
}

至于存储数据的数据结构,list,deque都是理想的选择,vector不太适合,因为你的数据量比较大,其他的就不用我说了吧,数据结构 + <algorithm> 就可以了,STL的算法和数据结构效率应该够高了吧,思路给你,具体的地方需要的话自己改一下。

如果嫌list是占用空间大的话可以用deque,但是unique和sort等方法就必须使用<algorithm>中的了,还有别忘了erase。

***************************我也来分析****************************

1,我们现来考虑“这么大的数组该怎么读,是否要在内存中为他们开辟空间?”
根据“ 由于A、B两个集合,每个集合的元素存在重复且很多(可能会有几万个,甚至更多)。”的要求,
可知道,这么多的数据,“可能会有几万个,甚至更多”,那么用数组行吗?
这么多数据我想,最好还是从其他文件读入。
但是这么多的数据,一下子全部读到内存里来,何况重复的数据是我们不需要,我们为何要把这么多的垃圾放到内存中来呢?
不要浪费内存啊!那么这样的话,数据长度不是更不确定了。怎么办?动态链表?好,那就动态链表吧。

2,上面第一条,我们已经说了不要把垃圾方进来?那么怎么才不让那些垃圾驻进内存呢?
对于用链表表示的,我只想到了,每读入一个不是垃圾的数据进对它进行排序,搜索前面以被认为不是垃圾的数据,如果没有与读入的相等,就读如它到内存中去,否则舍去。

我也来回答
int i,j,asize,bsize;
for(i=0;i<asize;i++)
{
for(j=i+1;j<asize;j++)
if(a[i]==a[j])a[i]=0;
}

for(i=0;i<bsize;i++)
{
for(j=i+1;j<bsize;j++)
if(a[i]==b[j])b[i]=0;
}

for(i=0;i<asize;i++)
{
for(j=0;j<bsize;j++)
if(a[i]==b[j]){a[i]=0;b[j]=0;}
}

j=0
for(i=0;i<asize;i++)
if(a[i]!=0){c[j]=a[i];j++;}

//把下边代码去了就只有A中的了
for(i=0;i<bsize;i++)
if(b[i]!=0){c[j]=a[i];j++;}

我也来说一下我的思路!至于程序代码我就不写了!
我们要考虑到这两个集合中的元素可能会很多,而且重复的也可能很多!所以分两步来完成这件事情!
第一步:去除两个集合中的相同元素,同时给两个集合中的元素排序.(由小到大顺序,在排序的时候去掉相同元素是很方便的)
第二步:对于A集合中的第i+1个元素Ai+1(i是初值为0整数),去和B集合的第j+1个元素Bj+1开始比较(j是初值为0整数),若Ai+1<Bj+1,则说明B集合中没有和Ai+1相同的元素(Ai+1比较结束),给i++;若Ai+1=Bj+1,则说明从B集合找到了和Ai+1相同的元素,所以此时删除Ai+1(Ai+1比较结束),给i++,j++;若Ai+1>Bj+1,则说明Ai+1和Bj+1不是相同的元素(Ai+1比较结束),给j++。重复第二步直到A集合中的所有元素比较完成!
这样至少我感觉程序的效率会是很高的!

有点意思

刚贴的答案居然发现有个bug!!!现紧急更正如下:

注:本程序不管A集还是B集,都只保留去了重号后大的集内的号(正好你模板答案就是此种情形)

-----------差集程序++6.0(企业级解决方案)-----内附精美图文说明.......

#include "iostream.h"

int k,kk=0;
int *qvchonghao(int m,int b[]) //去重号函数
{
int s,ss,r[50000];
for (s=0;s<m;s++){
for(ss=0;ss<m;ss++){
if (s!=ss && b[ss]==b[s]) goto conti;}
r[k++]=b[s];
conti:;
}
for (s=0;s<k;s++) b[s]=r[s];
return (b);
}

int *chaji (int m,int n,int a[],int b[],int c[])// 求差集程序
{
int s,ss;
if (m>=n){
for (s=0;s<m;s++){
for(ss=0;ss<n;ss++){
if (b[ss]==a[s]) goto contii;}
c[kk++]=a[s];
contii:;
}
}
if (m<n){
for (s=0;s<n;s++){
for(ss=0;ss<m;ss++){
if (a[ss]==b[s]) goto contii2;}
c[kk++]=b[s];
contii2:;
}
}
return (b);
}

int main()
{
int i,m,n,c[50000];
int a[10]={12,23,18,15,12,13,20,23,13,27};
int b[10]={14,12,26,23,14,15,12,26,23,56};
qvchonghao(10,a); //传达第一个数组大小及数组,去重号。
m=k;
k=0;
qvchonghao(10,b);//传达第二个数组大小及数组,去重号。
n=k;
chaji(m,n,a,b,c);//使用时这句不用动。当然a,b得是你的数据数组。
for (i=0;i<kk;i++) cout<<c[i]<<" "<<endl;//c的长度就是全局变量kk
return(0);
}


怎样用C语言编写一个简单的程序?
下面是一个简单的例子,它展示了如何手动输入 7 个元素,然后求这 7 个元素的和,并输出最大值和最小值。include <stdio.h> int main(){ int a[7]; \/\/ 建立一个 7 元素的数组 int i;int sum = 0;int max = a[0];int min = a[0];\/\/ 手动输入 7 个元素 for (i = 0; i ...

c语言的开发步骤有哪些
C语言程序开发的六个步骤,包括问题定义、算法设计、编码、调试、测试和维护。1、问题定义 在开始编写C语言程序之前,首先需要明确问题的定义和要求。这包括确定程序的输入和输出,分析问题的特点和约束条件,理解所需实现的功能。问题定义阶段还需要对问题进行分析和设计,确定解决问题所需的算法和数据结构。

一个完整的C程序由什么组成?
在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件<stdio.h>中。7、运算 C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉...

一个c语言的程序题?
然后,在main()函数中定义一个头节点指针,并用它来存储整个链表 请点击输入图片描述 接下来,实现从键盘输入五个整数并将它们尾插入链表中 请点击输入图片描述 最后,实现链表中的插入和删除操作,并输出链表中的所有元素 下面是一个可行的c语言程序,该程序实现了从键盘输入五个整数并存储在链表中,...

简述开发一个c语言程序的步骤
直到没有错误为止。3 链接。将目标文件链接成可执行文件。此步会对文件直接的关联进行检查。如果出错需要返回到1修改代码。直到没有错误。4 运行。这个是最后一步,也是C语言的最终目的。在运行结果与期望不符时,需要检查原因,修改代码,重新执行1,2,3直到程序没有问题。

vs怎么创建c语言项目
在Visual Studio中创建C语言项目,可以按照以下步骤进行: 1.打开Visual Studio程序,点击“创建新项目”。 2.在新弹出的界面中,选择“C++”选项,因为C语言是基于C++的。 3.进入Visual Studio主界面后,在右边的“解决方案管理器”中找到“源文件”,右键点击并选择"添加”,然后选择“新建项”。 4.在弹出的窗口中,...

一个C语言程序是由哪几个部分组成,每一个
1、头文件:头文件包含程序中要调用的库函数。例如#include<stdio.h> 2、main函数:程序的主体部分,是整个C程序中必不可少的一部分。3、若干个子函数。需要实现诸多功能,如果仅在mian()函数中编辑,会造成程序可读性变差。

怎么用C语言打开一个应用程序
注意:如果是软件工程的话,就要新建工程 第二步:打开构建-构建选项-选择编译,设置类别为c-language,在两个iso名称的选项框上打钩(如图),点击确定。第三步:开始编写程序,编写完成后,点击运行(快捷键为F5),然后看下面的构建表中是否有错误提醒,如果有错误,根据上面的提醒改掉错误,再次运行。

在计算机上运行一个C语言编写的程序,要经过怎样的处理过程
开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。C语言程序可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。1、编辑:输入源程序并保存(。C文件)。2、编译:将源程序翻译成目标文件(。OBJ文件)...

求一个c语言完整程序
知识扩展:编程是一种融汇贯通的东西,学会基础到后边就越来越简单了。而且可以向多种语言发展。 c语言 是一种可移植性和多系统平台的编程语言 java 是一种功能强大可移植性强的开发语言。HTML 是一种超文本标记语言,Java Script 是一种基于客户端的脚本语言 程序语言,顾名思义就是一种语言,是用于...

岳麓区13984273966: 编写一个简单的C语言程序 -
却冰伟特: #include "stdio.h"#include "string.h"#define N 300 void main(){ char a[N],sum='\0'; int i=0,k; printf("input the number:"); scanf("%s",a); k=strlen(a); printf("%d",sum); } 注:程序的思想不错,但是具体实现上有些问题,我的调试环境是VC++6.0,当和大于127时,由于奇偶校验码等原因,会超出上限,128会表示成-128,129表示成-127.所以算法在独立性上不是很好,楼主不妨试下将字符性的“5”换成整型的5这种办法,反而简单些

岳麓区13984273966: 求一个C语言程序 -
却冰伟特: #include#include#define N 50 //题数void main() { int b,c,s; int x=0,i=0,j;while(i<N){ srand((unsigned)time(NULL)); b...

岳麓区13984273966: 用C语言编写一个程序 -
却冰伟特: #include <stdio.h>#include <stdlib.h>/* 主函数main中输入一组(10个)C语言成绩值到数组score[ ]中,并输出如图所示的主菜单,根据不同的选择调用相应函数,编 写函数分别实现:1- 输出平均值2- 排序成绩3- 输出比平均值低的成绩和个数4- ...

岳麓区13984273966: 一个C语言程序 -
却冰伟特: #include void main() { int a[10000], i, j, cnt = 0, mark, m, b[10000];printf ("请输入你要对多少个数进行判断:\n"); scanf ("%d",&m); printf ("请输入你要进行判断的数:\n"); for (i = 0; iscanf ("%d",&a[i]); for (i = 0; i{ mark = 1;//mark...

岳麓区13984273966: 写一个C程序
却冰伟特: #include <stdio.h>void main() { int n; printf("输入n:"); scanf("%d",&n);while(n>0) { printf("%d",n%10); n/=10; } printf("\n"); }

岳麓区13984273966: C语言 编写一个程序 -
却冰伟特: #include void main( ) { char c; printf("input a letter:"); scanf("%c", if(c>='A'='Z') c=c+32; printf("%c"...

岳麓区13984273966: 求一个c语言完整程序 -
却冰伟特: #include <stdio.h> main() { int n,k=0,i,m,t=1; printf("请输入一个正整数(不超过5位):"); scanf("%d",&n); m=n; // 保存原始数据 if (n>=0 && n<100000) { // 确定是几位数 while (n) { k++; n/=10; } printf("%d是个%d位数\n",m,k); // 为...

岳麓区13984273966: 一个简单的C语言程序 -
却冰伟特: #include int main() { int num; char ch[100]; scanf("%d",&num); itoa(num,ch,2); printf("%s\n",ch); return 0; } typedef 声明,为现有类型创建一个新的名字.typedef int array[10]; 例如;array text; 语句表示text是一个整型数组有10个元素,等同...

岳麓区13984273966: 编写一个C语言程序!
却冰伟特: 写简单点 方法1: main() { int a,b,c,max; printf("请输入三个整数:"); scanf("%d%d%d",&a,&b,&c); if(a>b||a>c) max=a; else if(b>c||b>a) max=b; else if(c>a||c>a) max=c; printf("%d",max); } 方法2: main() { int a,b,c,max; printf("请输入三...

岳麓区13984273966: 编写一个c语言程序 -
却冰伟特: #include<stdio.h> int main() {int i,n;printf("请输入n:");scanf("%d",&n);for(i=n;i<=n+10;i++) // 取值范围{printf("%d\t", i);}//system("pause");return 0; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网