2023年专升本c语言上机笔记.doc
第一部分:可以纯熟使用一种c程序集成环境对c程序集成环境对c程序进行编辑、编译、连接和运营。 Tubro c c/c+实验系统 visual c+使用Turbo C注意事项1. 启动turbo c双击 tc. exe 图标 进入界面,不能用鼠标 (使用alt+enter实现窗口和 全屏方式的转换)2. 按下回车 或esc,清楚提醒窗口3. Tubro C与其它程序窗口切换 alt+tab 4. 主菜单->esc->编辑菜单->f6->信息窗口状态 主菜单<-f10<-编辑菜单<-f6<-信息窗口状态5. 光标在菜单上 按回车进入展开选项 6. 退出菜单 esc 7.file文献l loade:打开已有c源文献(f3)l new:新建c源文献l save:保存(ctrl+s不能用)(f2经常保存)l write to :当前另存为其他源文献l quit:退出l pick: 发开最近打开的源文献l compile 编译:compile to objl change dir 改变目录run(运营)runedit(编辑命令)n ins按键插入n del删除n ctrl+y删除一行n ctrl+n插入一行n Y删除当前行Compile(编译)l compile to obj 编译当前文献l likr exe file 链接生成可执行文献l makr exe file 连续完毕编译和连接option 默认途径的设立8. 在tuboc中汉字无法显示 ,文献途径、scanf、printf做输出时也不能用汉字。9. 在编写c程序时,该程序的所有变量一定要实现定义好,不要用到哪定义到哪,自己先分析程序。10. 在turbo c中运营程序后,一般是看不到结束的,需要在程序最后一个大括号前加 getch(); 才可以看见程序结果。11. 先编译后运营程序代码检查无误,运营时总是说stido.h 有问题,此时需要检查options菜下的【directoried】【include directoried】。如查出途径不一致,需要将整个tuboc 文献夹复制到指定的【include directoried】下。12. 程序运营后,假如代码出现问题,需要重新编辑时,也许会出现无法输入代码的现象,此时需要按f6进入编辑状态。(菜单里面选编辑项然后按 回车)13. 退出 turbo c, quit (alt+x)记得随时保存14. 注意改写和插入的转换用insert实例1:输入圆的半径分别计算出远的面积area,圆的周长c1,输出结果要有相应的文字说明。#include <stdio.h>#define PI 3.1415main() double area,c1; int r; printf("please input radins of a circle:"); scanf("%d",&r); area=PI*r*r; c1=2*PI*r; printf("The area of a circle id :%f",area); printf("The c1 of a circle id:%f",c1);实例2:输出园的面积(半径为1-10)面积大于100时停止。 在(C:Turbo_CtcINCLUDE)名为01 (注意getchar()才干显示)#include<stdio.h>#define PI 3.1415main()int r;double area;for(r=1;r<=10;r+) area=PI*r*r; if(area>100) break; printf("%d %8.2fn",r,area);getchar();C+C和c+注意事项:1. 保存的默认途径: C:JMSOFTCYuYan2. 编译、生成可执行文献、运营可以分开操作,也可直接点击运营按钮。Vc+6.0注意事项:1. 开始 -> microsoft visual c+ (进入程序)2. 文献->新建选项 ->新建窗口中(文献选项) -> c+source fiel -> 给文献起名,必须要写.c ->拟定-> 代码编辑区-> 保存3. 文献的存储途径要记住4. 保存文献后,编辑文献,随时保存5. 先编译、链接、再执行。6. vc+中可以写汉字第二部分:可以使用 if、switch 语句,while、do-while及for来解决实际问题的程序代码If题: 编写程序判断正整数即是3的倍数也是7的倍数,是输出yes ,否则输出 no。#include "stdio.h"void main() int x; scanf("%d",&x); if(x%3=0&&x%7=0) printf("yes"); else printf("no");Switch题:编写程序实现计算器的功能:读入两个数(a1和a2)及一个运算符(opt),计算表达式a1 opt a2 的值,其中opt可以是+、-、*、/四中运算符中的任何一种(用switch语句实现)#include "stdio.h"void main()float a1,a2,a3;char opt;printf("请输入要计算的式子:");scanf("%f %c %f",&a1,&opt,&a2); /*注意& 注意+*/switch(opt) case '+':a3=a1+a2;break; /*注意break*/ case '-':a3=a1-a2;break; case '*':a3=a1*a2;break; case '/':if(a2=0) printf("被除数为零重新输入"); exit(1); /*注意exit 退出程序*/ a3=a1/a2;break; default:printf("重新输入");break; printf("%f%c%f=%f",a1,opt,a2,a3);While和do-while题:求1n正整数和。Sum别忘掉赋初值=0 While:#include "stdio.h"void main() int i=1,n;long sum=0 ;scanf("%d",&n); while(i<=n) sum+=i; i+; printf("%d",sum);Do-while:#include "stdio.h"void main() int i=1,n,sum=0; scanf("%d",&n); do sum+=i; i+; while(i<=n); printf("%d",sum);For题:编写程序完毕用100元人民币换成1元、2元、5元的所有兑换方案。#include "stdio.h"void main() int i,j,k; for(k=0;k<=20;k+) for(j=0;j<=50;j+) i=100-k*5-j*2; if(i>=0) printf("100元人民币可换%d张1元,%d张2元,%d张5元n",i,j,k); 第三部分:可以运用好数组求和、求最大值、最小值、查找、排序等经典实际问题。数组题: 求最大值、最小值、求和、求平均#include "stdio.h"#define N 50main() int aN,max,min,sum,i,n; double ave; printf("请输入要录入成绩的学生人数,不多于50个人!n"); scanf("%d",&n); printf("请输入%d个同学的成绩,成绩之间用空格分开:n",n); for(i=0;i<n;i+) scanf("%d",&ai);/* 不能是数组名*/ max=min=sum=a0; /* 定义时不能连等 定以后能*/ for(i=1;i<n;i+) if(max<ai) max=ai; if(min>ai) min=ai; sum+=ai; ave=(double)sum/n; printf("最高分是:%d",max); printf("最低分是:%d",min); printf("总分是:%d",sum); printf("平均分:%f",ave); 数组题:排序#include "stdio.h"main() int a10=10,9,8,2,5,1,7,3,4,6,i,j,k,temp; for(i=0;i<10;i+) printf("%d",ai); for(i=0;i<9;i+) k=i; for(j=k+1;j<10;j+) /*元素的比较最小*/ if(ak>aj) k=j; temp=ai; ai=ak; ak=temp; printf("n"); for(i=0;i<10;i+) printf("%d",ai); 数组题:查找#include "stdio.h"#define N 50main() int aN,i,n,score; printf("请输入要录入成绩的学生人数,不多于50个人!n"); scanf("%d",&n); printf("请输入%d个同学的成绩,成绩之间用空格分开:n",n); for(i=0;i<n;i+) scanf("%d",&ai); printf("请输入要查找的成绩:"); scanf("%d",&score); for(i=0;i<n;i+) if(ai=score)break; if(i=n) printf("no"); else printf("yes"); 第四部分:可以进行函数实参和形参的定义,以及参数的传递,可以使用函数的嵌套调用和递归调用,编写常见的的函数如:求和、阶乘、计算平均分、排序等问题。函数题:运用函数调用求最大值、最小值、求和、求平均、排序(选择排序法做升序(小的在上))选择排序:设定一个变量,存小的数在数组中的下标,n个数(外层循环控制比较趟数 n-1,里层循环做每趟比较出一个最小数,控制比较次数)64 48 59 72 97 34第一趟(5次) 34 48 59 72 97 64第二趟(4次)(不动)48 59 72 97 64第三趟(3次) (不动)59 72 97 64第四趟(2次) (不动)64 97 72第五趟(1次) (不动)72 97#include "stdio.h"#define N 50float max (float a,int length);float min (float a,int length);float sum (float a,int length);float average (float a,int length);void sort (float a,int length);main() float scoreN,ma,mi,s,ave;int i,n;printf("请输入学生的人数不能超过50人!n");scanf("%d",&n);printf("请输入%d个学生的成绩输入的成绩用空格分开!n",n);for(i=0;i<n;i+)scanf("%f",&scorei); ma=max(score,n); /*数组可以不写里的*/ mi=min(score,n); s=sum(score,n); ave=average(score,n); sort(score,n); /*排序函数没返回值不能用“=”*/ printf("最高分:%fn",ma); printf("最低分:%fn",mi); printf("总分是:%fn",s); printf("平均分:%fn",ave);float max (float a,int length) int i; float max; max=a0; for(i=1;i<length;i+) if(max<ai) max=ai; return max;float min (float a,int length) /*把最大值函数复制改max为min '<'改为'>'*/ int i; float min; min=a0; for(i=1;i<length;i+) if(min>ai) min=ai; return min;float sum (float a,int length) /*把最小值函数复制改min为sum >改为sum+=ai*/ int i; float sum; sum=a0; for(i=1;i<length;i+) sum+=ai; return sum;float average (float a,int length) /*把最小值函数复制改函数名sum 为average return改为 return sum/length;*/ int i; float sum; sum=a0; for(i=1;i<length;i+) sum+=ai; return sum/length;void sort (float a,int length) /*排序没返回值*/ int i,j,k; float temp; for(i=0;i<length-1;i+) k=i; /*重点填空 k是基准*/ for(j=k+1;j<length;j+) /*j是基准点k后面的数*/ if(ak>aj) k=j; /*小的放k里*/ temp=ai; ai=ak; ak=temp; printf("从小到大排序为:"); for(i=0;i<length;i+) printf("%4.1f ",ai); printf("n");函数题:阶乘(递归调用:一定要在自定义函数中不断地调用自己)举例 : int ff(int n) S=ff() #include "stdio.h"int fac(int m) /*递归调用*/ int s; if(m<0) printf("错误的数据请重新输入"); else if (m=0|m=1)s=1; else s=m*fac(m-1); /*重要*/ return s; main()int n,y;printf("请输入一个正整数:");scanf("%d",&n);y=fac(n);printf("%d!=%d",n,y); /*!阶乘符号 5的阶乘等于120*/ 第五部分:可以用指针实现对一维数组的编程。指针题:设有一个数列,包含10个数(一堆数组),已经按升序排好。规定编写程序,把从指定定位置开始的n个数按逆序重新排列并输出新的完整数列(一堆数组)。进行逆序解决时规定使用指针方法。(例如:数列为2 4 6 8 10 12 14 16 18 20,若规定把第4个数开始数(第i个数,下标i-1) 排序(5个数的下标3+5-1,数出n个数,最后一个数的下标)第i个数开始数:这个数的下标是i-1数n个数,最后一个数的下标是i-1+n-1 第4个数开始数:这个数的下标是3数出5个数,最后一个数的下标:4-1+5-1=7I=4 n=5时 n知道时/2知道换几次2 4 6 16 14 12 10 8 18 20*指针变量和普通变量搭建关系:Int a=5,*p;/普通变量需要先定义后使用,指针变量必须先定义赋值后使用P=&a; *指针变量与一对数组搭建关系:Int a=1,2,3,4,5,*p;P=a;/p=&a0 p=&a2#include "stdio.h"void main() int a10,i,p,num,*q1,*q2,temp; printf("请输入十个已近按升序排序好的整数!n"); for(i=0;i<10;i+) scanf("%d",&ai); printf("请输入指定的位置:"); scanf("%d",&p); printf("请输入重新排序的数量:"); scanf("%d",&num); for(q1=&ap-1,q2=&ap-1+num-1;q1<q2;q1+,q2-) /* p是int不是地址 */ temp=*q1; *q1=*q2; *q2=temp; for(i=0;i<10;i+) printf("%3d",ai); 第六部分:可以定义和使用结构体类型变量(结构体指针变量)。结构体变量题:运用结构体类型编写程序,输入一名同学的英语成绩和数学成绩,然后计算两科成绩的总和。 (结构体类型可不写)#include "stdio.h"void main() struct score /score是结构体类型就像 int,该类型可以定义变量、指针变量 float eng; float math; float sum; sc1,*p; /sc1是score类型的变量 p=&sc1; /*p要想调用成员,必需和结构体变量搭建关系sc1.eng sc1.math sc1.sum*/ scanf("%f %f",&sc1.eng,&sc1.math); /调用p->eng (*p).manth p->sum=sc1.eng+(*p).math; printf("%f",p->sum);第七部分:文献的打开、关闭和复制操作。(书前三例题)总结:(其文献名时注意扩展名)一、 用字符型数组存放文献名,通过控制台输入文献名1、 程序的默认途径 C:JMSOFTCYuYanbin (控制台标题栏写的)2、 读取的文献要放在默认的途径下,可以直接输入文献名称。3、 假如读取的文献没有存放在默认途径,需要写文献存放的所有途径,例如:C:a.txt (不好使时用试试 C:JMSOFTCYuYanaa.txt)*注意存放文献名的数组的长度。文献复制a 放b里题#include "stdio.h"main() FILE *in,*out; /文献类型的指针变量,存文献的全称 char infile50,outfile50; /一个存读,一个存写注意内的大小 20以上 scanf("%s",infile); scanf("%s",outfile); if(in = fopen(infile, "r")=NULL) /*打开infile outfile两个文献*/ printf("Cannot open infle.n"); /没开成功 exit(0); if(out = fopen(outfile, "w")=NULL) printf("Cannot open outfile.n"); exit(0); while(!feof(in) /*看看到没到尾部*/ fputc(fgetc(in),out); /读一个写一个 fclose(in); /关文献 fclose(out);命令行传参C+:运营菜单->编译成目的文献->生成可执行文献点击带参数运营 不在默认里需要写途径 VC+的命令行传参途径:1. 先建obj2. 创建exe3. 工程菜单->设立->调试选项卡->程序变量中输入参数。 4. 按!按键运营(和c+实验系统不同样) *在编译后运营前输入参数*复制的文本文献应当和c的源程序文献放在同一个途径下。#include "stdio.h"#include "stdlib.h"FILE *source,*target;void main(int argc,char *argv) char c; if(argc!=3) printf("error!n"); else source=fopen(argv1,"r"); target=fopen(argv2,"w"); while(!feof(source) /*只要不是文献尾就执行*/ c=getc(source); putc(c,target); fclose(source); fclose(target); 第二次课内存变量存最后一次值 / /* */ 都是注释符数组:存相同类型的变量结构体:存放不同类型的变量 重点算法:1 求和 (求平均就是和 / 个数)sum= 0 或(第一个值)For( )Sum=sun+ /*也许是变量 数组 结构体成员*/ sum+=2 求阶乘 (第归调用)P=1For()P=p* p*=3 求极值 (循环 嵌套 分支 ) Max/min=一堆数中的第一个数 forIf(max/min </> ai ) (max在尖那面,min在开口那面)Max/min = ai (把if条件复制下变=) 4 互换(得有第三变量)A,b,tempTemp=a;A=b;B=temp;5 排序=两个for+极值+互换六个变量 两个累加器(i,j) 一个互换数的(temp) 一个换数组下标的 (k) 一个存比较数的数组an 一个比较个数nFor (i=0;i<比较数的个数-1) K=I;For(j=k+1;j<比较数的个数;j+) If(ak>aj) k=j; Temp=ai; ai=ak; ak=temp;编程:一求和1. 求1-100和/*1到100的和*/#include<stdio.h>void main() int sum=0,i; for(i=0;i<=100;i+) /*i=0 或i=1都可以 不要落下=*/ sum+=i; printf("1到100的和为:%d",sum);2. 从键盘输入十个数求和/*从键盘输入十个数求和*/#include<stdio.h>void main() int sum=0,i,n10; for(i=0;i<10;i+) printf("请输入一个数:"); scanf("%d",&n); /*n得是地址*/ sum+=n; printf("%d",sum);3. 结构体求和 当填空不能运营#include<stdio.h>struct sruchar id8;char name10;int score;void main() int sum=0,i,; for(i=0;i<5;i+) sum=sum+ai.score; 或 um=sum+ai->score /*这里是程序填空*/ 二求阶乘1. #include "stdio.h"void main() int p=1,i; for(i=1;i<=5;i+) /*i<n 1到几的阶乘就是几;注意int的范围*/ p=p*i; printf("%d",p);2. 求数组里的数的阶乘 就改 p=p*ai;三极值