求两个整数中较大者
#include<stdio.h>
int main()//主函数
{
int max(int x,int y);//max函数定义在main函数之后需要声明
int a,b,c;
scanf("%d %d",&a,&b);
c=max(a,b);//a,b为实参
printf("the max is %d\n",c);
return 0;
}
int max(int x,int y)//max函数 x,y为形参
{
int z;
if(x>y)
z=x;
else
z=y;
return(z);//返回x y 中较大者给主函数
}
一个函数包括两个部分 1. 函数首部 int max ( int x, int y ) 若函数无参,在括弧中写void或空括弧 int main( void) 或 int main()
2.函数体 声明部分 函数中会用到的变量 执行部分 若干条语句 函数中会进行的操作 可以没有声明部分 也可以是空函数void dump(){}
---.c 源文件 ---.obj 目标文件(已编译) ---.exe 可执行文件
常量和变量
常量:在运算过程中其值不能被改变的量
整型常量:如1000,016,0x2a,-345 实型常量 十进制小数形式:如0.34 -56.79 0.0 指数形式:如12.34e3 (代表12.34*103) 字符常量:用单撇号括起来的一个字符,如’?’不存储字符本身,以其代码形式储存 转义字符:而C中定义了一些字母前加“\”来表示 常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了 字符串常量:利用双撇号把0或一个及以上个字符括起来。如”boy” 符号常量:用#define指令,指定一个符号名称代表一个常量。符号常量的值在其作用域内不能改变,也不能再被赋值。可以增强程序可以阅读性,还可以做到一改全改。
如: #define PI 3.1416 //注意行末没有分号
变量:在程序运行期间其值可以改变
数据类型
整型数据:int short int long int long long int 字符型数据:char c='?' 输出结果为63 ?字符是按其ASCII编码(整数)形式存储的 C99把字符型数据作为整数类型的一种
#include<stdio.h>
int main()
{
char c='?';
printf("%d %c\n", c,c)
}
浮点型数据:float型(单精度浮点型) double型(双精度浮点型)15位有效数字 long double 控制精度fabs(i)>0.001 精度控制在0.001内 用==或!=测试两个浮点数是否相等,正确方法是:fabs(x-1.1)<1e-4
运算符和表达式
后缀运算是“先使用后计算”,即将变量先参与表达式运算中,然后再对变量值加/减1。
c语句
选择结构程序设计 if语句 输入两个实数,按数值由小到大的顺序输出这两个数
#include<stdio.h>
int main()
{
double a,b,t;
printf("please enter a and b:");
scanf("%lf,%lf",&a,&b);
if(a>b)
{
t=a;
a=b;
b=t;
}
printf("%.2f,%.2f\n",a,b);
return 0;
}
#include<stdio.h>
void main()
{
double a,b,area;
printf("请输入矩形边长a和b:");
scanf("%lf,%lf",&a,&b);
if(a>0&&b>0)
{
area=a*b;
printf("面积=%f\n",area);
}
else
printf("边长必须大于0\n");
}
#include<stdio.h>
int main()
{float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
if(a>c)
t=a;
else
t=c;
else
if(b>c)
t=b;
else
t=c;
printf("%.2f\n",t);
return 0;
}
switch-case语句 可以用switch语句实现这种多分支选择结构,因为switch使程序更容易阅读,而且程序执行速度也比if快 格式 switch(表达式)整型(包括字符类型),不能为实型和字符串 不能为变量 {case 常量表达式1:语句1 ;break; case 常量表达式2:语句2 ;break; … … case 常量表达式n:语句n ;break; default: 语句n+1; break; } 按分级给出成绩
#include<stdio.h>
void main()
{
char grade;
printf("enter grade:");
scanf("%c",&grade);
switch(grade)
{
case'A':printf("85~100\n");break;
case'B':printf("74~85\n");break;
case'C':printf("60~69\n");break;
case'D':printf("<60\n");break;
default:printf("error\n");break;
}
}
循环结构 while语句 while (表达式) 语句 求1+2+3+…+100
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
while(i<101){
sum+=i;
i++;}
printf("1+2+3+...+100=%d",sum)
return 0;
}
#include<stdio.h>
int main()
{
int sum=0;
int i=1;
while(i<=99){
sum+=i;
i+=2;
}
printf("sum=%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
int n,sum;
printf("This program sums a series of integers.");
printf("Enter integers (0 to terminate):");
scanf("%d",&n);
while(n!=0){
sum+=n;
scanf("%d",&n);
}
printf("The sum is:%d\n",sum);
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{ double fm=1.0,t=1.0,pi=0;
int sign=1;
while(fabs(t)>=1e-6)
{
pi=pi+t; /*t为每项的值*/
fm+=2; /*分母*/
sign=-sign; /*符号位或(-1)*sign*/
t=sign/fm; /*构造新项*/
}
printf(“%f\n”,pi*4);
return 0;
}
do-while语句特点:先无条件地执行循环体,然后判断循环条件是否成立,即无论条件是否成立,至少要执行一次循环体do 循环体语句 while (表达式); 计算用户输入的整数的位数:
#include<stdio.h>
int main()
{
int digits=0;
int n;
printf("enter a nonnegative integer:");
scanf("%d",&n);
do{
n/=10;
digits++;
}
while(n>0);
printf("The number has %d digit(s).",digits);
return 0;
}
for语句 可用于循环次数确定的情况,也可用于循环次数不确定而给出循环结束条件的情况 完全可以代替while语句 for(表达式1;表达式2;表达式3) 语句 分号不能省略 三个表达式都可省略,形如for(;;) 可以为任意有效的C语言表达式 for(j=1,i=1;i<=100;i++,j++) k=i+j; 表达式2一般是关系表达式(如i<=100)或逻辑表达式(如a<b || x<y),但也可以是数值表达式或字符表达式,只要取值非零,就可执行循环体。 例如:for(i=0;i=1;i++) 又如:for(i=0;(c=getchar())!=‘\n’;i+=c) 若循环体中没有任何语句,则应该以分号结束(即空语句)例如: for(i=1;i<=100;sum+=i,i++);
for(n=1;n<=100;n++)
sum=sum+n;
//等价于
n=1;
while(n<=100)
{
sum=sum+n;
n++;
}
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++)
printf("%d*%d=%d\t",j,i,i*j);
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int i,j,k;
for(i=0;i<4;i++);
{ //输出空格,空格数与所在行值相同
for(j=0;j<=i;j++)
{
printf(" ");}
//输出*,*数递减,其值=7-2*i
for(k=0;k<7-i*2;k++);
{
printf("*");}
printf("\n");}
return 0;
}
#include<stdio.h>
int main()
{
int n,s;
s=0;
for(n=1;;n++)
{s+=n;
if(s>5000) break;
}
printf("s=%d,n=%d",s,n);
return 0;
}
continue语句 结束本次循环跳过本次循环中后续尚未执行的语句,进行下次是否执行循环的判断 输出100---200之间的不能被3整除的数
#include<stdio.h>
int main()
{
int i;
for(i=100;i<=200;i++)
{
if(i%3==0)
continue;
printf("%d ",i);
}
return 0;
}
#include<stdio.h>
int main()
{
float score,sum=0,avg;
int i,n=0;
for(i=1;i<=6;i++){
printf("score:");
scanf("%f",&score);
if(score<60){
printf("fail:%7.2f\n",score);
continue;
}
sum+=score;
n+=1;
}
avg=sum/n;
printf("n=%d,avg=%7.2f\n",n,avg);
return 0;
}
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=4;i++){
for(j=1;j<=5;j++){
printf("%d\t",i*j);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int sum=0,t=1,sign=1;
while(t<=101){
sum=sum+sign*t;
sign=-sign;
t+=2;
}
printf("%d\n",sum);
return 0;
}
#include<stdio.h>
int main()
{
int n,a,b,c;
printf("水仙花数有:");
for(n=100;n<1000;n++){
a=n/100;
b=n/10%10;
c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
printf("%5d\n",n);
}
return 0;
}
#include<stdio.h>
int main()
{
char ch;
int n=0;
for(;(ch=getchar())!='\n';)
{
if(ch>='a'&&ch<='z')
n++;
}
printf("lower letters have %d.\n",n);
return 0;
}
数据的输入输出
#include<stdio.h>
int main()
{
char c1,c2;
c1=getchar();
c2=c1+32;
putchar(c2);putchar('\n');
return 0;
}
使用 strcat 函数需要引头文件 string.h
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20],str2[6];
gets(str1);
gets(str2);
puts(str1);
puts(str2);
puts(strcat(str1,str2));
return 0;
}//程序运行结果
//I am
//happy
//I am
//happy
//I am happy
字符串复制函数 strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中 strncpy(字符数组1,字符串2,n) 将字符串2中前面n个字符复制到字符数组1中 引用头文件string.h
#include <stdio.h>
#include <string.h>
void main()
{
char str1[11]={"I am happy"};
char str2[ ]={"China"};
char str3[10]={"c program"};
strcpy(str1,str2);
strncpy(str3,str2,2);
puts(str1);
puts(str3);
}//运行结果
//China
//Chprogram
字符串比较函数 strcmp(字符数组1,字符数组2)
#include <stdio.h>
#include <string.h>
void main()
{
char str1[ ]={"Child"};
char str2[ ]={"Children"};
if(strcmp(str1,str2)>0)
printf("大于");
else if(strcmp(str1,str2)<0)
printf("小于");
else
printf("相等");
}//运行结果:小于
测字符串长度函数
strlen(
字符数组名)
函数的值为字符串的实际长度,不包括
’\0’
引用头文件
string.h
#include <stdio.h>
#include <string.h>
void main()
{
char str[ ]={"China"};
printf("str的长度为%d\n",strlen(str));
strlwr(str);
puts(str);
strupr(str);
puts(str);
}//运行结果:
//Str都长度为5
//china
//CHINA
数组
#include<stdio.h>
int main()
{
int a[10],i,max;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max) max=a[i];
printf("max=%d\n",max);
return 0;
}
(数组元素个数)
]
int
a
[
10
]
;
#include<stdio.h>
void main()
{
int i,a[10];
for(i=0;i<10;i++)
{
a[i]=2*i+1;
printf("%d\n",a[i]);
}
printf("\n");
}
#include<stdio.h>
int main()
{
int a[10],i,max;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max) max=a[i];
printf("max=%d\n",max);
return 0;
}
#define N 10
#include "stdio.h"
int main( )
{
int i,temp,a[N];
printf("请输入N个整数:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N/2;i++)
{
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("倒置以后的N个整数为:");
for(i=0;i<N;i++)
printf("%d,",a[i]);
printf("\n");
return 0;
}
//二维数组的输入
int a[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
//二维数组的输出
int a[2][3],i,j;
for( i=0; i<2; i++)
for( j=0; j<3; j++)
printf("%5d", a[i][j]);
#include "stdio.h"
int main( )
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2];
int i, j;
printf("array a:\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}printf("\n");
}
printf("array b:\n");
for(i=0; i<3; i++)
{
for( j=0; j<2; j++)
printf("%5d",b[i][j]);
printf("\n");
}
return 0;
}
#include <stdio.h>
main( )
{
int i, j, row=0, colum=0, max;
int a[3][4]={{1,2,3,4},{9,7,4,6},{-1,2,0,8}};
max=a[0][0];
for( i=0; i<=2; i++)
for(j=0; j<=3; j++)
if( a[i][j]>max)
{ max=a[i][j]; row=i; colum=j;}
printf("max=%d,row=%d,colum=%d\n",max,
row,colum);
} //运行结果为: max=9,row=1, colum=0
字符数组 char 数组名[常量表达式] char 数组名[常量表达式] [常量表达式] 对全部元素赋初值 char a[10]={'I',' ','a', 'm',' ','h','a','p','p','y'};对部分元素赋初值,没有被赋值的元素自动用空字符‘\0’赋值 char a[10]={'p','r','o','g','r','a','m'} C语言规定了一个“字符串结束标志”,以字符′\0′作为结束标 char c[ ]={"I am happy"}; 等价于 char c[ ]="I am happy"; 等价于 char c[11]={'I',' ','a', 'm',' ','h','a','p','p','y','\0'}; 用格式符“%c”将字符逐个输入和输出,用格式符“%s”将字符数组的内容一次性输入和输出使用printf函数的格式控制符%s可以输出字符串。与%s对应的是字符数组的名称或字符串常量。例如:
char str[]="string output";
printf("%s", str);
printf函数逐个读取字符串中的字符直到遇到空字符('\0')作为输出结束符为止。如果一个字符串中有多个'\0',则遇到第一个'\0'即认为字符串结束。'\0'本身作为结束符并不会被输出显示。
使用scanf以格式说明符%s输入字符串时,字符数组名不需要附加地址运算符&。scanf函数在字符串读入结束时自动在字符串末尾存储一个'\0'字符。例如:
char str[20];
scanf(“%s” ,str );