C语言程序设计(第五版)学习笔记

C语言程序设计(第五版)学习笔记1 最简单的 C 语言程序程序总是从 main 函数开始执行的在屏幕上输出 HelloWorld include stdio h intmain printf HelloWorld n return0 求两个整数之和 include stdio h intmain inta b sum a 12 b 28 stdio h stdio h

1 最简单的C语言程序

程序总是从main函数开始执行的

  • 在屏幕上输出Hello World!
#include 
  
    int main(){ printf("Hello World!\n"); return 0; } 
  
  • 求两个整数之和
#include 
  
    int main(){ int a,b,sum; a=12; b=28; sum=a+b; printf("sum=%d\n",sum); return 0; } 
  
  • 求两个数中的较大数
#include 
  
    int max(int a,int b); int main(){ int a,b,c; printf("请输入两个整数:\n"); scanf("%d%d",&a,&b); c=max(a,b); printf("两个数的较大数为:%d\n",c); return 0; } int max(int a,int b){ int z; z=(a>b)?a:b; return z; } 
  

2 顺序结构程序设计

简单的顺序程序设计

VC++6.0中,编译系统把所有的实数都当成双精度数处理

  • 计算华氏温度(公式为:c=5/9*(f-32))
#include 
  
    int main(){ float c; float f=64.0; c=5.0/9*(f-32); printf("f=%f\nc=%f\n",f,c); return 0; } 
  
  • 计算存款1年的本息和
#include 
  
    int main(){ float p0; //本金 float p1; //存款1年活期本息和 float p2; //存款1年定期本息和 float p3; //存款两次半年定期本息和 int a; printf("请输入想要存入的金额:"); scanf("%f",&p0); printf("请选择想要存款的方式:\n"); printf("1.存款1年活期,利息为0.0036\n"); printf("2.存款1年定期,利息为0.0225\n"); printf("3.存款两次半年定期,利息为0.0198\n"); scanf("%d",&a); switch(a){ case 1:printf("您选择的存款方式为:存款1年活期,利息为0.0036\n存款1年后本息和为:%f\n",p1=p0*(1+0.0036));break; case 2:printf("您选择的存款方式为:存款1年定期,利息为0.0225\n存款1年后本息和为:%f\n",p2=p0*(1+0.0225));break; case 3:printf("您选择的存款方式为:存款两次半年定期,利息为0.0198\n存款1年后本息和为:%f\n",p3=p0*(1+0.0198/2)*(1+0.0198/2));break; } return 0; } 
  

不同数据类型间的混合运算

  • 给定一个大写字母,要求用小写字母输出
#include 
  
    int main(){ char c1,c2; printf("请输入一个大写字母:"); scanf("%c",&c1); c2=c1+32; printf("您输入的大写字母为%c\n对应的小写字母为%c\n",c1,c2); return 0; } 
  

赋值语句

  • 给出三角形的三边长,求三角形面积
#include 
  
    #include 
   
     int main(){ double a,b,c,s,area; printf("请输入三角形的三条边长:"); scanf("%lf%lf%lf",&a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("三角形的面积为%lf\n",area); return 0; } 
    
  

数据的输入输出

  • 求ax2+bx+c=0方程的根。(假设b2-4ac>0)
#include 
  
    #include 
   
     int main(){ double a,b,c,disc,x1,x2; printf("Plese input a,b,c:"); scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; x1=(-b+sqrt(disc))/(2.0*a); x2=(-b-sqrt(disc))/(2.0*a); printf("x1=%lf,x2=%lf\n",x1,x2); return 0; } 
    
  
  • 保留双精度型的不同小数位数
#include 
  
    int main(){ double a; printf("Plese input a number:"); scanf("%lf",&a); printf("%f\n",a); printf("%lf\n",a); printf("%7.2f\n",a); printf("%20lf\n",a); return 0; } 
  

字符输入输出

  • 输入一个大写字母,显示其对应的小写字母
#include 
  
    int main(){ char c1,c2; c1=getchar(); c2=c1+32; putchar(c1); putchar(c2); putchar('\n'); return 0; } 
  

3 选择结构程序设计

选择结构和条件判断

  • 求ax2+bx+c=0的根
#include 
  
    #include 
   
     int main(){ double a,b,c,disc,x1,x2; printf("Please input a,b,c:"); scanf("%lf%lf%lf",&a,&b,&c); disc=b*b-4*a*c; if(disc<0) printf("该方程无实数根!\n"); else{ printf("x1=%f\n",x1=(-b+sqrt(disc))/(2*a)); printf("x2=%f\n",x2=(-b-sqrt(disc))/(2*a)); } } 
    
  

用if语句实现选择结构

  • 输入两个实数,按从小到大的顺序输出
#include 
  
    int main(){ float a,b,t; printf("Please input two numbers:"); scanf("%f%f",&a,&b); if(a>b){ t=a; a=b; b=t; } printf("%5.2f%5.2f\n",a,b); return 0; } 
  
  • 输入3个数,按从小到大输出
#include 
  
    int main(){ float a,b,c,t; printf("Please input three numbers:"); scanf("%f%f%f",&a,&b,&c); if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } if(b>c){ t=b; b=c; c=t; } printf("%5.2f\t%5.2f\t%5.2f\n",a,b,c); return 0; } 
  

条件运算符和条件表达式

  • 输入一个字母,若是大写字母,转换为小写后输出
#include 
  
    int main(){ char ch; printf("请输入一个字母:"); scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c\n",ch); return 0; } 
  

用switch语句实现多分支选择结构

  • 按考试等级输出分数段,A:85-100,B:70-84,C:60-69,D:< 60
#include 
  
    int main(){ char grade; printf("Please input your grade(A、B、C or D):"); scanf("%c",&grade); printf("Your score:"); switch(grade){ case 'A': printf("85-100");break; case 'B': printf("70-84");break; case 'C': printf("60-69");break; case 'D': printf("<60");break; default : printf("Enter data error!"); } printf("\n"); return 0; } 
  
  • 用switch语句处理菜单命令
#include 
  
    void action1(int,int); void action2(int,int); int main(){ int a=5,b=6; char ch; /*printf("Please input two numbers:"); scanf("%d%d",&a,&b); printf("Please select an actions(A/a or B/b):");*/ ch=getchar(); switch(ch){ case'a': case'A': action1(a,b);break; case'b': case'B': action2(a,b);break; default : putchar('\a'); } return 0; } void action1(int x,int y){ printf("x+y=%d\n",x+y); } void action2(int x,int y){ printf("x*y=%d\n",x*y); } 
  
  • 输入一个年份,判断是否为闰年
#include 
  
    int main(){ int month; printf("Please input a month:"); scanf("%d",&month); if(((month%4==0)&&(month%100!=0))||(month%400==0)) printf("%d年是闰年!\n",month); else printf("%d年不是闰年!\n",month); return 0; } 
  

4 循环结构程序设计

用while语句实现循环

  • 求1+2+3+···+100的和
#include 
  
    int main(){ int n=1,sum=0; while(n<=100){ sum+=n; n++; } /*do{ sum+=n; n++; }while(i<=100);*/ printf("sum=%d\n",sum); return 0; } 
  

用break语句提前终止循环

  • 在全系1000名学生中举行慈善募捐,当总数达到10万时结束,统计此时捐款的人数及平均没人捐款的数目
#include 
  
    #define SUM int main(){ float amount,ave,total; int i; for(i=1,total=0;i<=1000;i++){ printf("Please input amount:"); scanf("%f",&amount); total+=amount; if(total>=SUM) break; } ave=total/i; printf("num=%d\nave=%f\n",i,ave); return 0; } 
  

用continue提前结束本次循环

  • 输出100~200不能被3整除的数
#include 
  
    int main(){ int n; for(n=100;n<=200;n++){ if(n%3==0) continue; printf("%d ",n); } printf("\n"); return 0; } 
  
  • 输出一个4*5的矩阵
#include 
  
    int main(){ int i,j,n=0; for(i=1;i<=4;i++) for(j=1;j<=5;j++,n++){ if(n%5==0) printf("\n"); printf("%d\t",i*j); } printf("\n"); return 0; } 
  

5 利用数组处理批量数据

引用一维数组元素

  • 对10个数组元素依次赋值0-9,再逆序输出
#include 
  
    int main(){ int n,a[10]; for(n=0;n<10;n++) a[n]=n; for(n=9;n>=0;n--) printf("%d ",a[n]); printf("\n"); return 0; } 
  
  • 用数组来处理Flbonacci数列问题
#include 
  
    int main(){ int i; int a[20]={1,1}; for(i=2;i<20;i++) a[i]=a[i-2]+a[i-1]; for(i=0;i<20;i++){ if(i%5==0) printf("\n"); printf("%7d ",a[i]); } printf("\n"); return 0; } 
  

冒泡排序

每次比较相邻两个数,将小的调到前面

  • 输入10个数,将它们按从小到大排序输出(冒泡排序)
#include 
  
    int main(){ int i,j,t; int a[10]; printf("Please input 10 numbers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=0;j<9;j++) for(i=0;i<9-j;i++){ if(a[i]>a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); return 0; } 
  

引用二维数组

  • 输入一个2行3列的二维数组,将其行列交换位置后输出到另一个数组
#include 
  
    int main(){ int a[2][3]; int b[3][2]; int i,j; printf("Please input 6 numbers for array a:"); for(i=0;i<=1;i++) for(j=0;j<=2;j++) scanf("%d",&a[i][j]); printf("array a:\n"); for(i=0;i<=1;i++){ for(j=0;j<=2;j++){ printf("%d ",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for(i=0;i<=2;i++){ for(j=0;j<=1;j++) printf("%d ",b[i][j]); printf("\n"); } return 0; } 
  

打擂台法求最值

  • 输入一个3*4的矩阵,输出最大的元素及其行列号(打擂台法)
#include 
  
    int main(){ int a[3][4]; int i,j,row=0,colum=0; int max=0; printf("Please input 12 numbers:"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) for(j=0;j<4;j++){ if(a[i][j]>max){ max=a[i][j]; row=i; colum=j; } } printf("max=%d\nrow=%d\ncolum=%d\n",max,i,j); return 0; } 
  

引用字符数组中的元素

  • 输出一个菱形
#include 
  
    int main(){ int i,j; char a[][5]={ {' ',' ','*'}, {' ','*',' ','*'}, {'*',' ',' ',' ','*'}, {' ','*',' ','*'}, {' ',' ','*'} }; for(i=0;i<5;i++){ for(j=0;j<5;j++) printf("%c",a[i][j]); printf("\n"); } return 0; } 
  
  • 输入一行字符,统计其中有多少单词,单词之间用空格分开
#include 
  
    int main(){ char string[100]; int i,num=0,word=0; char c; gets(string); for(i=0;(c=string[i])!='\0';i++){ if(c==' ') word=0; else if(word==0){ word=1; num++; } } printf("There are %d words in this line.\n",num); return 0; } 
  

6 用函数实现模块化程序设计

实参和形参间的数据传递

  • 输入两个整数,输出其中较大者
#include 
  
    int max(int x,int y); int main(){ int a,b; printf("Please input two integer numbers:"); scanf("%d%d",&a,&b); printf("max is %d\n",max(a,b)); return 0; } int max(int x,int y){ int z; z=x>y?x:y; return (z); } 
  

函数原型

  • 输入两个实数,用一个函数求出它们之和
#include 
  
    float add(float,float); int main(){ float a,b,c; printf("Please input two numbers:"); scanf("%f%f",&a,&b); printf("sum=%.2f\n",c=add(a,b)); return 0; } float add(float x,float y){ return (x+y); } 
  

函数的嵌套调用

在调用一个函数的过程中,又调用另一个函数

  • 输入4个整数,找出其中最大的数
#include 
  
    int max4(int,int,int,int); int max2(int,int); int main(){ int a,b,c,d,max; printf("Please inout 4 integer numbers:"); scanf("%d%d%d%d",&a,&b,&c,&d); max=max4(a,b,c,d); printf("max=%d\n",max); return 0; } int max4(int a,int b,int c,int d){ return max2(max2(max2(a,b),c),d); } int max2(int a,int b){ return (a>=b?a:b); } 
  

函数的递归调用

在调用一个函数的过程中,又直接或间接调用该函数本身

  • 用递归方法求n!
#include 
  
    int f(int); int main(){ int n; printf("Please input an integer number:"); scanf("%d",&n); printf("%d!=%d\n",n,f(n)); return 0; } int f(int n){ int m; if(n<0) printf("n<0,data is error!\n"); else if(n==0||n==1) m=1; else m=n*f(n-1); return m; } 
  

数组元素作函数实参

  • 输入10个数,要求输出其中值最大的元素和该数是第几个数
#include 
  
    int max(int,int); int main(){ int a[10],m,n,i; printf("Please input 10 integer numbers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=1,m=a[0],n=0;i<10;i++) if(max(m,a[i])>m){ m=max(m,a[i]); n=i; } printf("The largest number is %d\nIt is the %dth number\n",m,n+1); return 0; } int max(int x,int y){ return x>y?x:y; } 
  

一维数组名作函数参数

  • 输入10个学生的成绩放入一维数组score中,求平均成绩
#include 
  
    float aver(float a[ ],int n); int main(){ float score[10]; int i; printf("Please input 10 scores:"); for(i=0;i<10;i++) scanf("%f",&score[i]); printf("The average score is %.2f\n",aver(score,10)); //函数调用数组时,直接用数组名 return 0; } float aver(float a[ ],int n){ float sum=a[0]; for(int i=1;i 
    
  

选择法排序

  • 用选择法对数组中的10个整数按由小到大排序
#include 
  
    void sort(int array[],int n); int main(){ int i,a[10]; printf("Please input 10 integer numbers:"); for(i=0;i<10;i++){ scanf("%d",&a[i]); } sort(a,10); return 0; } void sort(int array[],int n){ int i,j,t; for(i=0;i 
   
     array[j]){ t=array[j]; array[j]=array[i]; array[i]=t; } } } for(i=0;i 
     
    
  

多维数组名作函数参数

二维数组作形参时,第2维大小不能省略,且要与实参数组第2维大小相同

  • 输入一个3*4的矩阵,求所有元素中的最大值
#include 
  
    int max(int array[][4]); int main(){ int i,j,a[3][4]; printf("Please input 12 integer numbers:"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); printf("The a[3][4] is:\n"); for(i=0;i<3;i++){ for(j=0;j<4;j++) printf("%d\t",a[i][j]); printf("\n"); } printf("Max is %d\n",max(a)); return 0; } int max(int array[][4]){ int i,j; int max=array[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if(array[i][j]>max) max=array[i][j]; return (max); } 
  

全局变量

  • 有一个一维数组,内放10个学生的成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分
#include 
  
    float Max=0,Min=0; float aver(float array[],int n); int main(){ int i; float a[10],ave; printf("Please input 10 numbers:"); for(i=0;i<10;i++) scanf("%f",&a[i]); printf("Max=%.2f\nMin=%.2f\naverage=%.2f\n",Max,Min,aver(a,10)); return 0; } float aver(float array[],int n){ float ave; float sum=array[0]; int i; Max=Min=array[0]; for(i=1;i 
   
     Max) Max=array[i]; else if(array[i] 
     
    
  

全局变量与局部变量同名的情况

  • 调用函数比较两数的大小
#include 
  
    int a=3,b=5; int max(int,int); int main(){ int a; a=8; printf("max=%d\n",max(a,b)); return 0; } int max(int a,int b){ return a>b?a:b; } 
  

7 善于利用指针

简单使用指针变量

  • 通过指针变量访问整型变量
#include 
  
    int main(){ int a=100,b=10; int *p1,*p2; p1=&a; p2=&b; printf("a=%d\tb=%d\n",a,b); printf("p1=%d\tp2=%d\n",*p1,*p2); return 0; } 
  

引用指针变量

  • 输入a和b两个整数,用指针实现按先大后小的顺序输出a和b
#include 
  
    int main(){ int a,b; int *p1,*p2; printf("Please input two integer numbers:"); scanf("%d%d",&a,&b); p1=&a; p2=&b; if(a 
    
  

指针变量作为函数参数

  • 输入a和b两个整数,用指针作为函数参数,实现按先大后小的顺序输出a和b
#include 
  
    void swap(int *p1,int *p2); int main(){ int a,b; int *pointer1,*pointer2; printf("Please input two integer numbers:"); scanf("%d%d",&a,&b); pointer1=&a; pointer2=&b; swap(pointer1,pointer2); printf("a=%d\tb=%d\nmax=%d\n",a,b,*pointer1); return 0; } void swap(int *p1,int *p2){ int temp; if(*p1<*p2){ temp=*p1; *p1=*p2; *p2=temp; } } 
  

通过指针引用数组元素

  • 有一个整型数组a,有10个元素,用指针输出数组中的全部元素
#include 
  
    int main(){ int a[10],*p; printf("Please input 10 integer numbers:"); for(p=a;p<(a+10);p++) scanf("%d",p); for(p=a;p<(a+10);p++) printf("%d ",*p); printf("\n"); return 0; } 
  

9 用户自己建立数据类型

结构体变量的初始化和引用

  • 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息
#include 
  
    struct Student{ long int num; char name[20]; char sex; char addr[20]; }; int main(){ struct Student stu={,"LiaoYuanyang",'M',"淮工宋跳校区"}; printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",stu.num,stu.name,stu.sex,stu.addr); return 0; } 
  
  • 输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩
#include 
  
    int main(){ struct Student{ int num; char name[20]; float score; }stu1,stu2; printf("请输入第1个学生的学号、姓名和成绩:"); scanf("%d%s%f",&stu1.num,stu1.name,&stu1.score); printf("请输入第2个学生的学号、姓名和成绩:"); scanf("%d%s%f",&stu2.num,stu2.name,&stu2.score); printf("The higher score is:\n"); if(stu1.score>stu2.score) printf("%d %s %6.2f\n",stu1.num,stu1.name,stu1.score); else if(stu1.score 
    
  

用结构体变量和结构体变量的指针作函数参数

  • 有10个学生,每个学生的数据包括学号、姓名、3门课成绩,输入10个学生的数据,要求输出3门课的总平均成绩,以及最高分的学生的数据
#include 
  
    #define N 10 struct Student{ int num; char name[10]; float score[3]; float aver; }; void input(struct Student stu[]); struct Student max(struct Student stu[]); void print(struct Student stu1); int main(){ struct Student stu[N],*p; p=stu; input(p); print(max(p)); return 0; } void input(struct Student stu[]){ int i; printf("请输入各个学生的学号、姓名和3门课成绩:\n"); for(i=0;i 
   
     stu[m].aver) m=i; } return stu[m]; } void print(struct Student stu1){ printf("\n成绩最高的学生是:\n"); printf("学号:%d\n姓名:%s\n三门课成绩:%8.2f%8.2f%8.2f\n平均成绩:%8.2f\n", stu1.num,stu1.name,stu1.score[0],stu1.score[1],stu1.score[2],stu1.aver ); } 
    
  

10 基本的代码规范

程序版式

在这里插入图片描述在这里插入图片描述在这里插入图片描述

注释规范

命名规则

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222230.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:16
下一篇 2026年3月17日 下午4:16


相关推荐

  • vi中跳到文件的第一行和最后一行

    vi中跳到文件的第一行和最后一行

    2022年2月9日
    62
  • vue生命周期钩子函数的正确使用方式

    vue生命周期钩子函数的正确使用方式对于 vue 生命周期我们还是要先了解清楚 因为不同的生命期用不同的钩子函数 先上图 遇到的一个问题在我的项目中 常用的生命周期钩子函数一直都是 mounted 对于大部分情况 都是屡试不爽 捷报频传 但是在前几天却遭遇了一个意外 我在 mounted 中获取后台数据并更新 data 在 template 中把 data fullname 与一个 p 元素的 innerHTML 绑定 这是一个简单到不能再简单 普通到不

    2026年3月18日
    2
  • 合成控制法(SyntheticControlMethod)及Stata实现[通俗易懂]

    合成控制法(SyntheticControlMethod)及Stata实现[通俗易懂]原文链接:https://www.lianxh.cn/news/9e1bb97a57041.html目录1.背景介绍 2.合成控制法原理 3.合成控制法的Stata实现 3.1命令安装 3.2语法格式 3.3加州控烟案例 3.4房产税对产业转移的影响:来自重庆和上海的经验证据 4.安慰剂检验 4.1安慰剂检验一 4.2安慰剂检验二 5.参考资料推文介绍合成控制方法及其Stata的实现命令。合成控制方法(Syntheti

    2022年6月10日
    47
  • mysql的tinyint范围

    mysql的tinyint范围createtabletest( idbigint(20)notnull, user_typetinyint(4)notnull;)以上建表方式:user_type值为[-128,127]中的整数createtabletest( idbigint(20)notnull, user_typetinyint(4)unsignednotnull;)…

    2026年2月11日
    3
  • Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件

    Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件

    2021年6月3日
    129
  • 手机上编写Java程序的软件

    手机上编写Java程序的软件对于程序员来说,编写代码几乎都是在电脑上,但有时候在一些特殊情况下,没有电脑,或者不方便带电脑,这时就想,要是能在手机上写代码该多好啊。以前我也折腾过,找过许多软件,但感觉不如我意;但我并没有放弃,在浏览YouTube的时候,偶然发现了一款软件,好奇的我就下载来试了试,还真是好用,功能挺齐全的。下面就给大家推荐一下。Android系统由于本人用的是Android手机,就主要讲讲在Android…

    2022年6月9日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号