1、专升本c语言上机笔记 第一部分:能够熟练使用一种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
2、 光标在菜单上 按回车进入展开选项 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 obj l change dir 改变目录 run(运行)run edit(编辑命令) n ins按键插入 n del删除 n ctrl+y删除一行 n ctrl+n插入一行 n ^
3、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. 先编译
4、后运行程序代码检查无误,运行时总是说stido.h 有问题,此时需要检查[options]菜下的【directoried】【include directoried】。如查出路径不一致,需要将整个tuboc 文件夹复制到指定的【include directoried】下。 12. 程序运行后,如果代码出现问题,需要重新编辑时,可能会出现无法输入代码的现象,此时需要按f6进入编辑状态。(菜单里面选编辑项然后按 回车) 13. 退出 turbo c, quit (alt+x)记得随时保存 14. 注意改写和插入的转换用insert 实例1:输入圆的半径分别计算出远的面积area,圆的周
5、长c1,输出结果要有相应的文字说明。
#include
6、为1-10)面积大于100时停止。 [在(C:\Turbo_C\tc\INCLUDE)名为01] (注意getchar()才能显示)
#include
7、\CYuYan 2. 编译、生成可执行文件、运行能够分开操作,也可直接点击运行按钮。 Vc++6.0注意事项: 1. 开始 -> microsoft visual c++ (进入程序) 2. 文件->新建选项 ->新建窗口中(文件选项) -> c++source fiel -> 给文件起名,必须要写.c ->确定-> 代码编辑区-> 保存 3. 文件的存储路径要记住 4. 保存文件后,编辑文件,随时保存 5. 先编译、链接、再执行。 6. vc++中能够写汉字 第二部分:能够使用 if、switch 语句,while、do-while及for来解决实际问题的
8、程序代码 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
9、"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("被除数为零重新输入"
10、); exit(1);} /*注意exit 退出程序*/ a3=a1/a2;break; default:printf("重新输入");break; } printf("%f%c%f=%f",a1,opt,a2,a3); } While和do-while题:求1~n正整数和。Sum别忘记赋初值=0 While: #include "stdio.h" void main() { int i=1,n; long sum=0 ; scanf("%d",&n); while(i<=n)
11、{ 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,
12、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 50 main
13、)
{
int a[N],max,min,sum,i,n;
double ave;
printf("请输入要录入成绩的学生人数,不多于50个人!\n");
scanf("%d",&n);
printf("请输入%d个同学的成绩,成绩之间用空格分开:\n",n);
for(i=0;i 15、 for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
for(i=0;i<9;i++)
{
k=i;
for(j=k+1;j<10;j++) /*元素的比较最小*/
{
if(a[k]>a[j]) k=j;
}
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
printf("\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
} 16、
}
数组题:查找
#include "stdio.h"
#define N 50
main()
{
int a[N],i,n,score;
printf("请输入要录入成绩的学生人数,不多于50个人!\n");
scanf("%d",&n);
printf("请输入%d个同学的成绩,成绩之间用空格分开:\n",n);
for(i=0;i 17、i++)
{
if(a[i]==score)break;
}
if(i==n)
{
printf("no");
}
else
{
printf("yes");
}
}
第四部分:能够进行函数实参和形参的定义,以及参数的传递,能够使用函数的嵌套调用和递归调用,编写常见的的函数如:求和、阶乘、计算平均分、排序等问题。
函数题:利用函数调用求最大值、最小值、求和、求平均、排序(选择排序法做升序(小的在上))
选择排序:设定一个变量,存小的数在数组中的下标,n个数(外层循环控制比较 18、趟数 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 50
float max (float a[],int length);
float min (float a[],int length);
fl 19、oat sum (float a[],int length);
float average (float a[],int length);
void sort (float a[],int length);
main()
{
float score[N],ma,mi,s,ave;
int i,n;
printf("请输入学生的人数不能超过50人!\n");
scanf("%d",&n);
printf("请输入%d个学生的成绩输入的成绩用空格分开!\n",n);
for(i=0;i 20、
}
ma=max(score,n); /*数组能够不写[]里的*/
mi=min(score,n);
s=sum(score,n);
ave=average(score,n);
sort(score,n); /*排序函数没返回值不能用“=”*/
printf("最高分:%f\n",ma);
printf("最低分:%f\n",mi);
printf("总分是:%f\n",s);
printf("平均分:%f\n",ave);
}
21、float max (float a[],int length)
{
int i;
float max;
max=a[0];
for(i=1;i 22、i++)
{
if(min>a[i])
min=a[i];
}
return min;
}
float sum (float a[],int length) /*把最小值函数复制改min为sum >改为sum+=a[i]*/
{
int i;
float sum;
sum=a[0];
for(i=1;i 23、把最小值函数复制改函数名sum 为average return改为 return sum/length;*/
{
int i;
float sum;
sum=a[0];
for(i=1;i 24、 {
k=i; /*重点填空 k是基准*/
for(j=k+1;j 25、4.1f ",a[i]);
}
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); /*重要*/
26、 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 1 27、6 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=7
I=4 n=5时 n知道时/2知道换几次
2 4 6 16 14 12 10 8 18 20
*指针变量和普通变量搭建关系:
Int a=5,*p;//普通变量需要先定义后使用,指针变量必须先定义赋值后使用
P=&a;
*指针变量与一对数组搭建关系:
Int [a]={ 28、1,2,3,4,5},*p;
P=a;//p=&a[0] p=&a[2]
#include "stdio.h"
void main()
{
int a[10],i,p,num,*q1,*q2,temp;
printf("请输入十个已近按升序排序好的整数!\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("请输入指定的位置:");
scanf("%d",&p);
printf("请输入重新排序的数量:");
29、 scanf("%d",&num);
for(q1=&a[p-1],q2=&a[p-1+num-1];q1 30、型编写程序,输入一名同学的英语成绩和数学成绩,然后计算两科成绩的总和。 (结构体类型可不写)
#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*/
s 31、canf("%f %f",&sc1.eng,&sc1.math); //调用p->eng (*p).manth
p->sum=sc1.eng+(*p).math;
printf("%f",p->sum);
}
第七部分:文件的打开、关闭和复制操作。(书前三例题)
总结:(其文件名时注意扩展名)
一、 用字符型数组存放文件名,经过控制台输入文件名
1、 程序的默认路径 C:\JMSOFT\CYuYan\bin (控制台标题栏写的)
2、 读取的文件要放在默认的路径下,能够直接输入文件名称。
3、 如果读取的文件没有存放在默认路 32、径,需要写文件存放的全部路径,例如:C:\a.txt
(不好使时用试试 C:\\JMSOFT\\CYuYan\\aa.txt)
*注意存放文件名的数组的长度。
文件复制a 放b里题
#include "stdio.h"
main()
{
FILE *in,*out; //文件类型的指针变量,存文件的全称
char infile[50],outfile[50]; //一个存读,一个存写注意[]内的大小 20以上
scanf("%s",infile);
scanf("%s",outfile);
33、 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)) 34、 /*看看到没到尾部*/
fputc(fgetc(in),out); //读一个写一个
fclose(in); //关文件
fclose(out);
}
命令行传参
C++:
运行菜单->编译成目标文件->生成可执行文件
点击带参数运行 不在默认里需要写路径
VC++的命令行传参路径:
1. 先建obj
2. 创立exe
3. 工程菜单->设置->调试选项卡->程序变量中输入参数。
4. 按!按键运行(和c++实验系统不一样) 35、
*在编译后运行前输入参数
*复制的文本文件应该和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(argv[1],"r");
target=fopen(argv[2],"w");
while(!feof(so 36、urce)) /*只要不是文件尾就执行*/
{
c=getc(source);
putc(c,target);
}
fclose(source);
fclose(target);
}
}
第二次课
内存变量存最后一次值
// /* */ 都是注释符
数组:存相同类型的变量
结构体:存放不同类型的变量
重点算法:
1. 求和 (求平均就是和 / 个数)
sum= 0 或(第一个值)
For( )
{
Sum=sun+@ /*@可能是变量 37、 数组 结构体成员*/ sum+=
}
2. 求阶乘 (第归调用)
P=1
For()
{
P=p*@ p*=
}
3. 求极值 (循环 嵌套 分支 )
Max/min=一堆数中的第一个数
for
{
If(max/min > a[i] ) (max在尖那面,min在开口那面)
{
Max/min = a[i] (把if条件复制下变=)
}
}
4. 交换
(得有第三变量)
A,b,temp
Temp=a;
A=b;
B=temp;
5. 排序=两个for+极值+交 38、换
六个变量 两个累加器(i,j) 一个交换数的(temp) 一个换数组下标的 (k) 一个存比较数的数组a[n] 一个比较个数n
For (i=0;i<比较数的个数-1)
{
K=I;
For(j=k+1;j<比较数的个数;j++)
{
If(a[k]>a[j]) k=j;
}
Temp=a[i];
a[i]=a[k];
a[k]=temp;
}
编程:
一.求和
1. 求1-100和
/*1到100的和*/
#include 39、sum=0,i;
for(i=0;i<=100;i++) /*i=0 或i=1都能够 不要落下=*/
{
sum+=i;
}
printf("1到100的和为:%d",sum);
}
2. 从键盘输入十个数求和
/*从键盘输入十个数求和*/
#include 40、 }
printf("%d",sum);
}
3. 结构体求和 当填空不能运行
#include






