C语言期末复习

 求两个整数中较大者

#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 可执行文件

一个字节 (Byte)是8位(bit)二进制          操作系统把所有存储单元以字节为单位编号以字节为单位所作的编号也就是通常所说的存储器的地址单元

常量和变量

常量:在运算过程中其值不能被改变的量   

整型常量:如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 height; //变量定义也称声明变量 变量名 变量值 是两个不同的概念 变量名实际上是以一个名字代表的一个 存储地址
从变量中取值,实际上是通过变量名找到相应的内存地址, 从该存储单元中读取数据                  常变量:const int a=3;
标识符:一个对象的名字 大小写字母是不同的字符
C语言规定标识符只能由 字母 数字 下划线 3种 字符组成,且 第一个字符必须为字母或下划线    合法的标识符:如sum,average, _total, Class, day, BASIC, li_ling
 不合法的标识符:M.D.John,¥123,#33, 3D64,a>b
关键字:C语言事先定义的,有特别意义的 标识符 ,有时 又叫 保留字
auto double int struct break else  long switch case enum register typedef char extern return union const float short unsigned  continue for signed void default goto sizeof volatile do if static while   include define 不是关键字

数据类型 

整型数据: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

 运算符和表达式

按功能分:算术运算符、赋值运算符(=)、关系运算符、逻辑运算符、指针运算符(*和&)等    按运算对象分为:单目运算符、双目运算符和三目运算符
算术运算符 : + :正号运算符(单目运算符) - :负号运算符(单目运算符) * :乘法运算符 / :除法运算符 % :求余运算符 + :加法运算符 - :减法运算符    两整数相除的结果为整数     % 运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。  系统自动进行的类型转换: 不同数据类型混合运算数据范围小的类型向数据范围大的数据类型转换     强制类型转换: (类型名)(表达式)
复合的赋值运算符在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如+=,-=,*=,/=,%=,<<=,>>=,&=等      赋值表达式的末尾没有分号,而赋值语句有分号if((a=b)>0) max = a;
关系运算符 :<、<=、>、>=、==、!=       形式:表达式 1 关系运算符 表达式 2
关系表达式的真假   1为真,0为假     优先次序:前4种同级,高于后2种(后2种同级)
判定奇偶数                               z 为偶数,则 z%2==0 的值为 1
判断x与y某位数字是否相同      x%10==y%10 判断个位数上数字相同
                                                 x/10%10==y/10%10 判断十位数上数字相同
       不要用“==“比较两个浮点数是否相等。
逻辑运算符: && ( 逻辑与 ) || ( 逻辑或 ) ! ( 逻辑非)    优先级次序: !    &&    ||      逻辑表达式中的每个运算对象 值为0时为假 值非0时为真
判定某年分为闰年                    (year%4==0&&year%100!=0)||year%400==0
判断变量ch是否为数字字符       ch>=‘0’&& ch<=‘9’
判断变量 ch是否为英文字母     (ch>=‘a’&& ch<=‘z’)||(ch>=‘A’&& ch<=‘Z’)
判断变量 ch 是否为空格、回车  ch==‘ ‘ ch==‘\n’
条件运算符:“? :”  表达式1?表达式2:表达式3   
max=a>b?a:b; 等价于 if(a>b) max=a; else max=b;
自增运算符 ++使变量加1,自减运算--使变量减1
前缀运算是“先运算后使用”,即变量先加/减1,然后再将变量运用到表达式中。
后缀运算是“先使用后计算”,即将变量先参与表达式运算中,然后再对变量值加/减1。
运算符的优先级:先乘除后加减  逻辑非高于算术运算符高于关系运算符高于逻辑与逻辑或高于tia条件运算符高于赋值运算符    结合性:赋值运算符、条件运算符以及所有的单目运算符都是“自右至左”的结合方向,其余都是“自左至右”的结合方向。
‘A’的ASCII码为65   ‘a’的ASCII码为65+32

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;
}
输入矩形的两个边长,求矩形的面积, 为了防止误输入,如果输入的边长小于 或者等于 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;
}
1+3+5+…+99 之和
#include<stdio.h>
int main()
{
    int sum=0;
    int i=1;
    while(i<=99){
    	sum+=i;
    	i+=2;
	}
	printf("sum=%d",sum);
    return 0;
}
用户输入的整数数列求和:eg:  This program sums a series of integers. Enter integers (0 to terminate): 8 23 71 5 0 The sum is: 107    环次数不固定
#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;
}
用四分之Π=1-1/3+1/5-1/7+...公式求Π的近似值,直到最后一项的绝对值小于10负六次方为止
#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++;
}
三种循环 (while 循环、 do…while 循环和 for ) 可以互相嵌套              嵌套循环的内层和外层的循环控制变量 不应同名    循环嵌套 不能交叉 ,即一个循环体内必须完整地包 含另一个循环
打印 9 × 9 乘法表
#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;
}

break语句  提前退出其所在整个循环   只能用于循环switch结构中
计算 s=1+2+3+…+n ,直到累加到 s 大于 5000 为止,并输出 s n 的值
#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;
}
输入 6 个学生的成绩,把不及格的学生成绩输 出,并求及格学生的平均成绩
#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;
}
输出以下4*5的矩阵。
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
#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;
}
回顾练习题   求1-3+5-7+…-99+101的值
#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;
}

数据的输入输出

输入和输出操作是由C标准函数库中的函数来实现 的    printf和scanf不是C语言的关键字,而只是库函数 的名字
printf("%d",a)   %d输出int型数据   %ld输出long型数据   %c输出字符   %s输出字符串                  %f不指定数据宽度小数位数的小数(以宽度m输出实型数,小数位数为n位)   %e指数形式输出实数
scanf("%d",&a)  %f float型输入    %ld double型输入  %c字符输入  %d int型输入
使用时要注意输入格式与“”中一致
putchar   putchar函数输出一个字符   putchar(a);     putchar('\101')输出字符A  putchar('\'')输出'
getchar   getchar函数输入一个字符    a=getchar();
putchar(getchar());
从键盘输入一个大写字母,在显示屏上 显示对应的小写字母。
#include<stdio.h>
int main()
{
char c1,c2;
c1=getchar();
c2=c1+32;
putchar(c2);putchar('\n');
return 0;
}
puts、gets  用于输出输入字符串
字符串连接函数     strcat( 字符数组名 1, 字符数组名2) 将字符数组 2 中的内容连接到字符数组 1 后面
使用 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)

对两个字符串自左至右逐个字符相比 ( ASCII 码值大小比较 ) ,直到出现不同的字符 或者遇到 ’\0’为止      全部字符相同,则两个字符串相等, 若出现不相同的字符,则以第一个不相同 的字符的比较结果为准     两个字符串相等,函数值为 0 ;第一个字符 串大于第二个字符串,函数值大于 0 ,否则 函数值小于0  使用此函数要引用头文件 string.h
#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
字符大小写转换函数   strlwr( 字符数组名) 将字符串中的大写字母转换为小写字母
                                   strupr( 字符数组名) 将字符串中的小写字母转换为大写字母                            引用头文件 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 ] ;
定义数组时对数组元素赋初值 int a[6]={1,2,3,4,5,6}; a[ 0 ]=1,a[ 1 ]=2,a[ 2 ]=3,a[ 3 ]=4,a[ 4 ]=5,a[ 5 ]=6   
给数组的全部元素赋初值为 0 int a[6]={0,0,0,0,0,0}; 或者 int a[6]={0}; 不能写为 int a[6]=0 ; 错误
引用数组元素   数组名 [ 下标]     下标可以是整型常量或者整型表达式 下标最大值是数组长度-1          数组元素的输入输出 scanf("%c",&sa[i]);       printf("%c",sa[i]);
定义包含10个元素的整型 数组,利用循环给数组元 素赋值为 1,3,5,7,9,11, 13,15,17,19,然后输各 元素的值
#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");
}
从键盘上输入10个数,求出其中最大值并输出。
#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]={{1,2,3},{4,5,6}}; a[ 0 ][ 0 ]=1,a[ 0 ][ 1 ]=2,a[ 0 ][ 2 ]=3 a[ 1 ][ 0 ]=4,a[ 1 ][ 1 ]=5,a[ 1 ][ 2 ]=6
将所有数据写在一个花括号内 int a[2][3]={1,2,3,(给第一行元素赋值)4,5,6};
可以对部分元素赋初值int a[3][4]={{1},{0,6},{0,0,11}};二维数组全部初始化时不能省略第二维的长度
//二维数组的输入
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]);
将一个矩阵 a 2 × 3 转置存到另一个矩阵 b 3 × 2 中。
#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; 
}
3 × 4 矩阵中最大元素的值及其所在行和列号。
#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 );

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值