共 31篇 前 7 页:    每页5篇 下一页  

c语言学习

今天编一个求阶乘的c程序,我想在课本的基础上,再把程序功能扩展一下,使之能求一定范围内任意整数的阶乘。于是又添加了一些内容,感觉写的挺对的,可结果老是等于0。我郁闷了,难道学了这么长时间的c,还编不对一个小程序,冷静的看了两边,原来是在输入函数scanf的地址列表中把地址符号"&"丢掉了。默认的输入变量的值为0,难怪无论输任何值都为零呢?所以再提醒一下自己.
lunzi   2005-03-18 02:31:55 阅读:2115  评论:3  引用:0

#include<stdio.h>
#include<ctype.h>
main()
{
char b='b';
char c;
int i;
i=islower(b);
if(i==8)
{c=toupper(b);
putchar(c);
printf("ok");
}
else {printf(
"no");}
}
lunzi   2005-09-08 20:13:50 阅读:1906  评论:0  引用:0

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
      情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
#include
"stdio.h"
#include
"conio.h"
main()
{
int day,month,year,sum,leap;
printf(
"\nplease input year,month,day\n");
scanf(
"%d,%d,%d",&year,&month,&day);
switch(month)
/*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf(
"data error");break;
}
sum=sum+day;
/*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))
/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)
/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf(
"It is the %dth day.",sum);
getch();
}
lunzi   2005-03-20 05:08:20 阅读:2557  评论:2  引用:0

#define N 10
main()
{
int i,a[N];
for(i=0;i<N;i++)
{
printf(
"a[%d]=",i);
scanf(
"%d",&a<i>);
}

for(i=N-1;i>=0;i--)
{
printf(
"a[%d]=",i);
printf(
"%d ",a<i>);
}
}
lunzi   2005-03-20 04:48:34 阅读:1826  评论:0  引用:0

1)顺序结构

这种结构的程序比较简单,就是按照语句的排列顺序依次执行的机制。顺序结构的执行顺序是自上而下,依次执行,因此编写程序也必须遵守这一规定,否则你的程序执行结果就不对。

例如;a = 3,b = 5,现交换a,b的值,正确的程序为:

c = a;

a = b;

b = c;

执行结果是a = 5,b = c = 3如果改变其顺序,写成:

a = b;

c = a;

b = c;

则执行结果就变成a = b = c = 5,不能达到预期的目的,这是初学者常犯的错误。

顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径R,计算S = 3.14159*R*R,输出圆的面积S。而大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的块体、循环结构中的循环体等。

C语言自学方法(2)


(2) 分支结构

分支结构与顺序结构不同,其执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。

分支结构适合于带有逻辑条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。

学习分支结构不要被分支嵌套所迷惑,只要弄清基本的分支结构,嵌套结构也就不难了。嵌套只不过是分支块体中又包括分支语句而已,不是新知识,只要你基础知识扎实,分支嵌套也难不住你,下面我们重点讨论几种基本的分支结构的学习方法。

①If(条件)

{



}

这种分支结构中的块可以是一条语句,此时“{

}”可以省略,也可以是多条语句。它有两条分支路径可选,一条是条件为真,执行块,另一条是条件不满足,跳过块。

如,计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0)

x=-x;

if(条件)

{块1}

else

{块2}

这是典型的分支结构,如果条件成立,执行块1,否则执行块2,块1和块2都有1条或若干条语句构成。

如:求ax^2+bx+c=0的根

分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:

d=b*b-4*a*c;

if(d>=0)

{x1=(-b+sqrt(d))/2a;

x1=(-b-sqrt(d))/2a;

printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);

}

else

{r=-b/(2*a);

i =sqrt(-d)/(2*a);

printf(“x1=%8.4f+%8.4fi\n”r, i);

printf(“x2=%8.4f-%8.4fi\n”r,i)

}

③多路分支:其语句格式为:

if(条件1) {块1};

else if(条件2) {块2}

else if(条件3) {块3}

……

else if(条件n) {块n}

else {块n+1}

switch语句:

switch

语句也是多分支选择语句,又称为多路开关语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同ifelse 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。

(3)循环结构:

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do ?Cwhile循环和for循环。

四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提昌用goto循环,所以下面我们重点讲解另外的三种循环。

常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,大家好好看一下书中三种循环的格式和执行顺序,如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。

注意:在whiledowhile循环体内和for

循环中的第3语句中,应包含趋于结束的语句(如I++,I--),否则就可能成了一个死循环,这也是初学者的一个常见错误。

下面我们来讨论下这三种循环的异同之处:

whiledowhile循环时,循环变量的初始化的操作应在循环体之前,而for循环是在语句1中进行的;while

循环和for循环都是先判断表达式,后执行循环体,而dowhile循环是先执行循环体后判断表达式,也就是说dowhile的循环体最少被执行一次,而while

循环和for就不一定了。这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,不能用break

continue语句进行控制。

这三种结构并不是彼此孤立的,在循环中可能出现分支、顺序结构,分支中也可能出现循环、顺序结构而把循环、分支看成一个语句,它又是构成顺序结构的一个元素,因此这三种结构相互结合,就能实现各种算法,设计出解题程序,但若是很大的题目,这样编出的程序往往很长,重复结构多,并且可阅读性差,因此我们常将C程序设计成模块化结构。

(4)模块化程序结构

C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个合法的C函数,然后用主函数调用函数及函数调用函数实现一大C程序:C程序=主函(main)+若干个函数。

在程序设计中,常将一些常用的功能模块写成函数,也可以将大程序段分割成若干函数,前者目的在于减少重复编写程序段的工作量,后者目的在于缩短模块长度,以便程序阅读方便。

一个源程序文件由一个或多个函数组成,它是一个编译单位,而一个C程序由一个或多个源程序文件组成。对较大的程序,往往分成多个文件,这样可以分别编写、分别编译,提高高调试效率,一个源程序文件可以被多个C程序公用。

C程序的的执行是从main()函数开始,调用其它函数后流程回到main函数,在main中结束整个函数运行,main函数的称是系统规定的,用户可以修改其内容即函数体,但不能修改其名称和参数,一个C程序必须有一个main函数,也只能有一个main函数。

所有函数都是平行的,即在定义函数时是互相独立的一个函数度不从属于另一个函数,即函数不能嵌套定义,但可以互相调用,但不能调用main函数。

函数分成两类,即标准函数和用户自定义函数,标准函数又称库函数,由系统提供,用户可直接调用,C语言提供了丰富的库函数,请考生在编写C程序时查阅教材后的函数说明,这可节省你的编程工作量;用户自定义函数由编程者自己编写.
lunzi   2005-03-17 03:09:59 阅读:2526  评论:6  引用:0
自从工作以后,上网的时间更多了,想把自己以前学过的计算机语言学熟练一些,于是经常抱这种想法去网上资料,我发现互联网上的资料太丰富了,充分了解了她,采取正确的方法,查找自己需要的资料就能起到事半功倍的效果!对自己的进一步学习非常有帮助,我也越来越感觉到学习方法和学习方式的重要性,我很喜欢采用案例学习,也很欣赏鲁讯先生的“拿来主义”这种观点,鲁讯先生提出“拿来主义”是为了唤醒国民,振兴中华,值得发扬。我发现“拿来主义”应用在学习过程中也有很大的作用,也应该发扬!
lunzi   2005-03-15 06:19:42 阅读:1878  评论:5  引用:0
 冯?诺依曼型计算机的一个特点――存储程序,决定了计算机需要程序设计语言。

  机器语言 程序是机器指令的序列,入乡随俗,使用机器指令编写程序,是人们最初和最自然的选择。机器指令的集合就是机器语言。机器语言是二进制的,不易被人理解,太难掌握;而且因机器而异,程序不易移植。

  汇编语言 将每条机器指令配上一个助记符,如Add,Jump等就形成简单汇编语言。简单汇编语言中的语句与机器指令一一对应。将简单汇编中的与机器相关部分分离出去,由系统完成,就形成宏汇编。现在所说汇编语言,一般都指宏汇编。汇编语言比机器语言容易一些,但仍然很难掌握;而且因机器而异,程序不易移植。

  Fortran 第一个高级程序设计语言,50年代由IBM发明,主要用于科学计算,现在仍有人使用。

  COBOL 主要数据处理,现在仍在大型数据库等应用中广泛使用。

  BASIC 主要用于初级计算机教育,在微机发明后,得到大发展。微软公司靠他起步。

  ALGOL 建立在坚实理论基础上的程序设计语言,60年代被认为最有前途的,现在已经很少有人使用了。

  PASCAL 专为计算机教育而发明的程序设计语言,对于促进结构化程序设计方法的普及有很大作用,现在仍有多人在学。

  C/C C与Unix操作系统结伴而生,BELL实验室发明,目标代码效率高,可以用来编系统软件。C也是BELL实验室发明,是在C上增加了面向对象特性,是现在使用最广泛的程序设计语言。

  Java 最新的面向对象程序设计语言,面向internet,Sun公司发明,可以一次编程,到处运行。
lunzi   2005-03-14 23:49:33 阅读:1670  评论:0  引用:0
取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。需要注意的是指针运算符*和指针变量说明中的指针说明符* 不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。
main(){
int a=5,*p=&a;
printf (
"%d",*p);
}
......
表示指针变量p取得了整型变量a的地址。本语句表示输出变量a的值。
lunzi   2005-03-14 00:34:10 阅读:3590  评论:0  引用:0

C语言提供了丰富的字符串处理函数, 大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。 使用这些函数可大大减轻编程的负担。用于输入输出的字符串函数, 在使用前应包含头文件
"stdio.h" ; 使用其它字符串函数则应包含头文件"string.h"。 下面介绍几个最常用的字符串函数。
1.字符串输出函数 puts 格式: puts (字符数组名) 功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串
#include
"stdio.h"
main()
{
static char c[]=
"BASIC\ndBASE";
puts(c);
}
static char c[]=
"BASIC\ndBASE";
puts(c);
  从程序中可以看出puts函数中可以使用转义字符, 因此输出结果成为两行。puts函数完全可以由printf函数取代。 当需要按一定格式输出时,通常使用printf函数。
2.字符串输入函数gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。 本函数得到一个函数值,即为该字符数组的首地址。
#include
"stdio.h"
main()
{
char st[15];
printf(
"input string:\n");
gets(st);
puts(st);
}
  可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志, 而只以回车作为输入结束。这是与scanf函数不同的。
3.字符串连接函数strcat 格式: strcat (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。
#include
"string.h"
main()
{
static char st1[30]=
"My name is ";
int st2[10];
printf(
"input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
}
static&nbsp;char st1[30]=
"My name is ";
int st2[10];
printf(
"input your name:\n");
gets(st2);
strcat(st1,st2);
本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。 要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串
4.字符串拷贝函数strcpy 格式: strcpy (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
#include
"string.h"
main()
{
static char st1[15],st2[]=
"C Language";
strcpy(st1,st2);
puts(st1);printf(
"\n");
}
static char st1[15],st2[]=
"C Language";
strcpy(st1,st2);
本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。
5.字符串比较函数strcmp 格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串2〉字符串2,返回值〉0;
字符串1〈字符串2,返回值〈0。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
#include
"string.h"
main()
{ int k;
static char st1[15],st2[]=
"C Language";
printf(
"input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf(
"st1=st2\n");
if(k>0) printf(
"st1>st2\n");
if(k<0) printf(
"st1}
{ int k;
static char st1[15],st2[]=
"C Language";
printf(
"input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf(
"st1=st2\n");
if(k>0) printf(
"st1>st2\n");
if(k<0) printf(
"st1}
  本程序中把输入的字符串和数组st2中的串比较,比较结果返回到k中,根据k值再输出结果提示串。当输入为dbase时,由ASCII 码可知“dBASE”大于“C Language”故k〉0,输出结果“st1>st2”。
6.测字符串长度函数strlen 格式: strlen(字符数组名) 功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。
#include
"string.h"
main()
{ int k;
static char st[]=
"C language";
k=strlen(st);
printf(
"The lenth of the string is %d\n",k);
}
lunzi   2005-03-12 01:17:50 阅读:3288  评论:2  引用:0

一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
课程 成绩姓名 Math C DBASE
张      80  75 92
王      61  65 71
李      59  63 70

赵      85  87 90
周      76  77 85
  可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量l为全组各科总平均成绩。编程如下:
void main()
{
int i,j,s=0,l,v[3],a[5][3];
printf(
"input score\n");
for(i=0;i<3;i++){
for(j=0;j<5;j++)
{ scanf(
"%d",&a[j]<i>);
s=s+a[j]<i>;}
v<i>=s/5;
s=0;
}
l=(v[0]+v[1]+v[2])/3;
printf(
"math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);
printf(
"total:%d\n",l);
} [code]<
lunzi   2005-03-12 00:58:25 阅读:1734  评论:0  引用:0
Copyright@2004-2010 powered by YuLog