资源描述
专升本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. 光标在菜单上 按回车进入展开选项
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 ^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.1415
main()
{
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_C\tc\INCLUDE)名为01] (注意getchar()才能显示)
#include<stdio.h>
#define PI 3.1415
main()
{
int r;
double area;
for(r=1;r<=10;r++)
{
area=PI*r*r;
if(area>100)
break;
printf("%d %8.2f\n",r,area);
}
getchar();
}
C++
C和c++注意事项:
1. 保存的默认路径: C:\JMSOFT\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来解决实际问题的程序代码
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题:求1~n正整数和。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 50
main()
{
int a[N],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",&a[i]);/* 不能是数组名*/
}
max=min=sum=a[0]; /* 定义时不能连等 定以后能*/
for(i=1;i<n;i++)
{
if(max<a[i]) max=a[i];
if(min>a[i]) min=a[i];
sum+=a[i];
}
ave=(double)sum/n;
printf("最高分是:%d",max);
printf("最低分是:%d",min);
printf("总分是:%d",sum);
printf("平均分:%f",ave);
}
数组题:排序
#include "stdio.h"
main()
{
int a[10]={10,9,8,2,5,1,7,3,4,6},i,j,k,temp;
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]);
}
}
数组题:查找
#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<n;i++)
{
scanf("%d",&a[i]);
}
printf("请输入要查找的成绩:");
scanf("%d",&score);
for(i=0;i<n;i++)
{
if(a[i]==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 50
float 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 score[N],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",&score[i]);
}
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);
}
float max (float a[],int length)
{
int i;
float max;
max=a[0];
for(i=1;i<length;i++)
{
if(max<a[i])
max=a[i];
}
return max;
}
float min (float a[],int length) /*把最大值函数复制改max为min '<'改为'>'*/
{
int i;
float min;
min=a[0];
for(i=1;i<length;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<length;i++)
{
sum+=a[i];
}
return sum;
}
float average (float a[],int length) /*把最小值函数复制改函数名sum 为average return改为 return sum/length;*/
{
int i;
float sum;
sum=a[0];
for(i=1;i<length;i++)
{
sum+=a[i];
}
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(a[k]>a[j])
k=j; /*小的放k里*/
}
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
printf("从小到大排序为:");
for(i=0;i<length;i++)
{
printf("%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); /*重要*/
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=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]={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("请输入重新排序的数量:");
scanf("%d",&num);
for(q1=&a[p-1],q2=&a[p-1+num-1];q1<q2;q1++,q2--) /* p是int不是地址 */
{
temp=*q1;
*q1=*q2;
*q2=temp;
}
for(i=0;i<10;i++)
{
printf("%3d",a[i]);
}
}
第六部分:能够定义和使用结构体类型变量(结构体指针变量)。
结构体变量题:利用结构体类型编写程序,输入一名同学的英语成绩和数学成绩,然后计算两科成绩的总和。 (结构体类型可不写)
#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:\JMSOFT\CYuYan\bin (控制台标题栏写的)
2、 读取的文件要放在默认的路径下,能够直接输入文件名称。
3、 如果读取的文件没有存放在默认路径,需要写文件存放的全部路径,例如: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);
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. 先建obj
2. 创立exe
3. 工程菜单->设置->调试选项卡->程序变量中输入参数。
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(argv[1],"r");
target=fopen(argv[2],"w");
while(!feof(source)) /*只要不是文件尾就执行*/
{
c=getc(source);
putc(c,target);
}
fclose(source);
fclose(target);
}
}
第二次课
内存变量存最后一次值
// /* */ 都是注释符
数组:存相同类型的变量
结构体:存放不同类型的变量
重点算法:
1. 求和 (求平均就是和 / 个数)
sum= 0 或(第一个值)
For( )
{
Sum=sun+@ /*@可能是变量 数组 结构体成员*/ 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+极值+交换
六个变量 两个累加器(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<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,n[10];
for(i=0;i<10;i++)
{printf("请输入一个数:");
scanf("%d",&n); /*n得是地址*/
sum+=n;
}
printf("%d",sum);
}
3. 结构体求和 当填空不能运行
#include<stdio.h>
struct sru
{
char id[8];
char name[10];
int score;
}
void main()
{
int sum=0,i,;
for(i=0;i<5;i++)
{
sum=sum+a[i].score; 或 um=sum+a[i]->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*a[i];
三.极值
展开阅读全文