目录:
- 数据类型
- 选择结构
- 循环控制结构
- 函数
- 数组
- 字符串
- 结构体
- 指针
文件操作面向对象(类)
小学期内容:
- 链表操作
- 多级菜单
- 迷宫游戏
- 贪吃蛇游戏
- 大作业_基于多态的职工管理系统
- 通讯录关系系统
经典例题导航
- 大小写字母转化
- 判断闰年
- 判定素数
- 费波纳基数列
- 递归求阶乘
- 冒泡排序
- 统计单词个数
- 候选人投票
- 选择排序
- 指针法排序
- 折半查找算法
- 杨辉三角
- 最大公约数
- 最小公倍数
- 偶数和
- 求位数
- 打印实心、空心菱形
- 百钱买百鸡
- 汉诺塔
- 水仙花数
- 求完全数
内容:
ch1: 数据类型
起步代码:
#include<iostream>
using namespace std;
int main()
{
cout<<"This is a c program."<<endl;
return 0;
}
---------------------------------
//三个数比较大小
#include<iostream>;
using namespace std;
int main()
{
int max(int x,int y);
int a,b,c;
cin>>a>>b;
c=max(a,b);
cout<<"max="<<c<<endl;
return 0;
}
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
-----------------------------------
//打印多行
#include<iostream>;
using namespace std;
int main()
{
cout<<"**************************"<<endl;
cout<<" * С小小计算机 * "<<endl;
cout<<"**************************"<<endl;
return 0;
}
-------------------------------------------------
1-100偶数和
//c++
#include <iostream>
using namespace std ;
int main( )
{
int sum = 0;
for( int i = 1 ; i <= 100 ; i ++)
if( ( i % 2) == 0 ) sum=sum+i;
cout << "1到100的偶数和="<< sum << endl ;
return 0;
}
//for循环
#include<iostream>
using namespace std;
int main()
{
int i,sum=0;
for(i=2;i<=100;i=i+2){
sum=sum+i;
}
cout<<"1-100偶数和="<<sum<<endl;
return 0;
}
/*
#include<iostream>
using namespace std;
int main()
{
int i=2,sum=0;
while(i<=100){
sum=sum+i;
i=i+2;
}
cout<<"1-100的偶数和="<<sum;
}
*/
/*do-while循环
#include<iostream>
using namespace std;
int main()
{
int i=2,sum=0;
do{
sum=sum+i;
i=i+2;
}
while(i<=100);//不要忘了加‘;‘
cout<<"1-100的偶数和="<<sum;
return 0;
}
*/
/*C
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()//1-100之间的偶数和
{
int i=1;
int sum=0;
for(i=1;i<=100;i++)
{
if(i%2==0) sum+=i;
}
return sum;
}
*/
--------------------------------
#include<iostream>
using namespace std;
int main()
{
int i=1,sum=0;
while(i<=100){
sum=sum+i;
i++;
}
cout<<"循环求得1加到100的结果="<<sum<<endl;
return 0;
}
/*
#include<iostream>
using namespace std;
int main()
{
int i=1,sum=0;
do{
sum=sum+i;
i++;
}
while(i<=100);
cout<<"sum="<<sum<<endl;
return 0;
}
*/
----------------------------------------
#include<iostream>
using namespace std;
int main()
{
cout<<"ab c\t de\rf\tg\n";
cout<<"h\ti\bj k\n";
}
-----------------------
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d;
unsigned u;
a=12;
b=-24;
u=10;
c=a+u;
d=b+u;
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
return 0;
}
-------------------------------------------
//short变量溢出
include<iostream>
using namespace std;
int main()
{
short a,b;
a=32767;
b=a+1;
cout<<"b="<<b<<endl;
}
--------------------------------------------
//浮点数的舍入误差
#include<iostream>
using namespace std;
int main()
{
float a,b;
a=123456.789e5;
b=a+20;
cout<<"b="<<b<<endl;
}
---------------------------------------------
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
a=123;
b=456;
c=b-a;
cout<<"b-a="<<c<<endl;
return 0;
}
-------------------------------------------------------
//宏变量
#define PRICE 15
#include<iostream>//使用标识符给常量命名,一改全改
using namespace std;
int main( )
{
int li_num,zhao_num,li_total,zhao_total;
char mychar;//定义字符变量
mychar='a';//把字符a副职给mychar
li_num=10;
zhao_num=12;
li_total=li_num*PRICE;
zhao_total=zhao_num*PRICE;
cout<<"li total="<<li_total<<endl;
cout<<"zhao total="<<zhao_total<<endl;
}
-----------------------------------------------------------
//C++输出格式控制
#include <iostream>//无运算子头文件
using namespace std;
int main()
{
float f=2.0/3.0,f1=0.000000001,f2=9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl;//正常输入
cout.setf(ios::showpos);//强制加+号
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpos);
cout.setf(ios::showpoint);//强制显示小数点后无效的0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpoint);
cout.setf(ios::scientific);//科学计数法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::scientific);
cout.setf(ios::fixed);//按点输出显示 精度为6所以f1为0.000000
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::fixed);
cout.precision(10);//精度为10,正常为6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.precision(6);//精度恢复为6
}
/*关于浮点数的格式
#include <iostream>
#include <iomanip> 有云算子头文件
using namespace std;
void main()
{
double f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<"\t"<<f1<<"\t\t"<<f2<<endl; //正常输出
cout<<setiosflags(ios::showpos); //强制在正数前加+号
cout<<f<<"\t"<<f1<<"\t\t"<<f2<<endl;
cout<<resetiosflags(ios::showpos); //取消正数前加+号 positive
cout<<setiosflags(ios::showpoint); //强制显示小数点后的无效0
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::showpoint); //取消显示小数点后的无效0
cout<<setiosflags(ios::scientific); //科学记数法
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::scientific); //取消科学记数法
cout<<setiosflags(ios::fixed); //按点输出显示
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<resetiosflags(ios::fixed); //取消按点输出显示
cout<<setprecision(10); //精度为10,正常为6
cout<<setiosflags(ios::fixed);
cout<<f<<"\t"<<f1<<"\t"<<f2<<endl;
cout<<setprecision(6); //精度恢复为6
}
------------------------------------------------------------------------
#include <iostream>
using namespace std;//当不用<iomanip>
int main()
{
cout<<"第一章"<<endl;//先输出
cout<<" ";//输出一个tab
cout.setf(ios::left);//设置左对齐
cout.width(7);//宽度为7
cout<<"1.1";
cout<<"什么是c++";
cout.unsetf(ios::left);//取消左对齐 ,为右对齐
cout.fill('.');
cout.width(30);
cout<<1<<endl;
cout<<" ";//一个tab
cout.width(7);//符号位也算一个
cout.setf(ios::left);
cout.fill('#');
cout<<"1.11";
cout<<"c语言历史";
cout.unsetf(ios::left);
cout.fill('%');
cout.width(30);
cout<<58<<endl;
cout.fill('^') ;
cout<<"第二章"<<endl;
}
/*#include <iomanip>
#include <iostream>
using namespace std;
void main()
{
cout<<"第一章"<<endl;
cout<<" ";
cout<<setiosflags(ios::left)<<setw(7); //设置宽度为7,left对齐方式
cout<<"1.1";
cout<<"什么是C语言";
cout<<resetiosflags(ios::left); //取消对齐方式
cout<<setfill('.')<<setw(30)<<1<<endl; //宽度为30,填充为’.’输出
cout<<setfill(' '); //恢复填充为空格
cout<<" ";
cout<<setw(7)<<setiosflags(ios::left); //设置宽度为7,left对齐方式
cout<<"1.11";
cout<<"C语言的历史";
cout<<resetiosflags(ios::left); //取消对齐方式
cout<<setfill('.')<<setw(30)<<58<<endl; //宽度为30,填充为’.’输出
cout<<setfill(' ')<<"第二章"<<endl;
}*/
---------------------------------------------------
#include<iostream>
using namespace std;
int main()
{
int a=31;
cout.width(8);//设置字段宽度
cout.fill('*');// 填充空白
cout.unsetf(ios::dec);//取消十进制整数
cout.setf(ios::hex);//设置十六进制整数
cout<<a<<endl;
cout.setf(ios::dec);//设置十进制整数
cout<<10<<endl;
cout<<showpos<<showbase<<uppercase<<showpoint<<hex<<fixed<<a<<endl;
/*显示正负号 前面加多少进制符号 强制大写字母 显示小数点 以十六进制表示
将符点数按照普通定点格式处理(非科学计数法)
*/
cout<<scientific<<30.0<<endl;//
}
--------------------------------------------
//c格式输入、出scanf和printf
#include<stdio.h>
int main()
{
char ch='a';
printf("%c\n",ch);
printf("%5c\n",ch);//输出字符a
printf("%s\n","CHINA");//书橱字符串
double b=1.0;
printf("%f\n",b/3);//%f 只能得到6位小数
printf("%20.15f\n",1/3);//指定宽度和小数位数(宽度就是总长度几位)
printf("%.0f\n",10000/3.0); //指定无小数位
}
-----------------------------------
//putchar()、getchar()
/*
#include<stdio.h>
int main()
{
//int a=66,b=79,c=89; 换成这个也可以
char a='B',b='O',c='Y';
putchar(a);
putchar(b);
putchar(c);
putchar('\n');//输出换行符
return 0;
}
*/
#include<stdio.h>
int main()
{
char a,b,c;
a=getchar();
b=getchar();
c=getchar();
putchar(a);
putchar(b);
putchar(c);
return 0;
}
---------------------------
//求三角形面积
/*
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
scanf("%lf,%lf,%lf",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%f\t,b=%f\t,c=%f\n",a,b,c);
printf("area=%f\n",area);
return 0;
}
*/
//c++语法
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a,b,c,s,area;
cin>>a>>b>>c;
s=(a+b+c)/2;
cout<< a<< b<<c<< s<<endl;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<area<<endl;
return 0;
}
/*
#include<stdio.h>
#include<math.h>//调用数学函数
int main()
{
double a,b,c,s,area;//定义双精度变量
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));//海伦公式
printf("a=%f\t b=%f\t c=%f\n",a,b,c);//\t为制表符,后面加空格。另外它们之间可以不加逗号 ,加空格也可以
printf("area=%f\n",area);
return 0;
}
下面用c++的方式求三角形面积
*/
#include<iostream>
#include<cmath>//c++的函数头文件一般在c的基础上前面加c
using namespace std;
int main()
{
double a,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<a<<endl<<b<<endl<<c<<endl;//输出的可以连着,换行不能用\n而用<<endl,\t也不能用,加空格也不能显示
cout<<area<<endl;
}
#include<iostream>
#include<cmath>
using namespace std;
int main ()
{
double a,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
cout<<"area="<<area<<endl;
}
------------------------------------------
//数据类型转换
/*
#include<stdio.h>
int main()
{
char c1,c2;//定义字符变量
c1='A';//单引号一个字符是字符常量
c2=c1+32;
printf("c1=%d\n",c1);
printf("c1=%c\n",c1);
printf("c2=%d\n",c2);
printf("c2=%c",c2); //97对应字符常量'a'
return 0;
}
*/
//下面用c++语法
#include<iostream>
using namespace std;
int main()
{
char c1,c2;
c1='a';
c2=c1-32;
cout<<c1<<endl<<c2<<endl;
cout.unsetf(ios::dec); //设置十进制整数
cout<<(int)c1<<endl<<(int)c2<<endl;//强制转换为int型
}
------------------------------------------------------
大小写字母转化
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
char c1,c2;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
cout<<c1<<endl;
cout<<c2<<endl;
}
----------------------
//向字符数组赋整数的值
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
char c1,c2;
c1=97;
c2=98;
cout<<c1<<" "<<c2<<endl;//中间加个制表
cout<<int(c1)<<" "<<int(c2)<<endl;
}
ch2: 选择结构
/*
#include<iostream>
using namespace std;
int main()
{
float x;
cin>>x;
if(x==0)
cout<<"零";
else if(x>0)
cout<<"正数";
else
cout<<"负数";
}
*/
#include<stdio.h>
int main()
{
float x;
scanf("%f",&x);//引号要注意
if(x==0)
printf("零",x);
else if(x>0)
printf("正数",x);
else
printf("负数",x);
return 0;
}
--------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
int grade;
cin>>grade;
if(grade>=90 && grade<=100) cout<<"A\n";
else if(grade>=80 && grade<90) cout<<"A\n";
else if(grade>=70 && grade<80) cout<<"C\n";
else cout<<"error\n";
}
*/
#include<iostream>
#include<conio.h>//使用getch()的头文件
using namespace std;
int main()
{
char grade;
grade=getch();//用getch()不用回车从键盘输入字符
switch(grade){
case'A':cout<<"90---100\n";break;
case'B':cout<<"80---90\n";break;
case'C':cout<<"70---80\n";break;
default:cout<<"error\n";
}
}
--------------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
float a,b,t;
cin>>a>>b;//输入的时候空格 不要逗号
if(a>b){
t=a;
a=b;
b=t;
cout<<a<<"\t"<<b<<endl; //这个写外边里边都行
}
else
cout<<b<<"\t"<<a; //又加的
}
*/
#include<stdio.h>
int main()
{
float a,b,t;
scanf("%f,%f",&a,&b);//忘记取址符 逗号
if(a>b){
t=a;
a=b;
b=t;
printf("%f\t,%f",a,b);//里外都行
}
else
printf("%f\t%f",a,b);
return 0;
}
--------------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
float a,b,c,t;
cin>>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;
}
cout<<a<<"\t"<<b<<"\t"<<c<<endl;
}
*/
#include<stdio.h>
int main()
{
float a,b,c,t;
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("%f,%f,%f",a,b,c);
}
---------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
int a,t;
cin>>a;
if(a>0){
a++;
t=a*3;
}
else{
a--;
t=-a*3;
}
cout<<a<<"\t"<<t<<endl;
}
*/
#include<stdio.h>
int main()
{
float a,t;
scanf("%f",&a);
if(a>0){
a++;
t=a*3;
}
else{
a--;
t=a*3;
}
printf("%f\t%f",a,t);
return 0;
}
-----------------------------------------
/*
#include<stdio.h>
int main()
{
int a;
a=3;
if(a>0){
printf("正数\n");
printf("没错");
}
else{
return 0;
}
}
*/
#include<stdio.h>
int main()
{
int a;
a=-3;
if(a>0)
printf("正数\n");//当是正数都一样,负数就执行 第二个printf
printf("没错");
return 0;
}
------------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a>=90)
cout<<"优";
else if(a>=80)
cout<<"良";
else if(a>=70)
cout<<"中";
else if(a>=60)
cout<<"差";
else
cout<<"不及格";
}
*/
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a>=90)
printf("优秀");
else if(a>=80)
printf("良");
else if(a>=70)
printf("中");
else if(a>=60)
printf("差");
else
printf("不及格");
}
---------------------------------------------
#include<iostream>
using namespace std;
int main()
{
int a=2,b=3;
if(a=b)//条件为赋值,一般都会成功
cout<<"success"<<endl;
else
cout<<"failure"<<endl;
}
------------------------------------------------------
#include<iostream>
using namespace std;
int main()
{
int grade;
cin>>grade;
cout<<"你的分数";
switch(grade/10){//一般为整类 (包括字符型)
case 10:cout<<"优"<<endl;break;
case 9:cout<<"优"<<endl;break;
case 8:cout<<"良"<<endl;break;
case 7:cout<<"中"<<endl;break;
case 6:cout<<"差"<<endl;break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:cout<<"不及格"<<endl;break;
default:cout<<"成绩输入有误"<<endl;
}
}
------------------------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
float x;
cout<<"输入x\n";
cin>>x;
if(x<=0){//注意这要变成大于等于
if(x==0)
cout<<"y=0";
else
cout<<"y=-1";
}
else
cout<<"y=1";
}
*/
#include<stdio.h>
int main()
{
float a;
scanf("%f",&a);
if(a<=0)
if(a==0)//先搞特殊情况,然后else
printf("y=0");
else
printf("y=-1");
else
printf("y=1");
return 0;
}
---------------------------------------------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
char ch;
cin>>ch;
if((ch>='A')&&(ch<='Z'))
ch=ch+32;
cout<<ch<<endl;
}
*/
#include<stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
ch= ((ch>'A')&&(ch<'Z'))?(ch += 32):ch;
printf("%c",ch);
return 0;
}
ch3: 循环控制结构
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=10;++i){//此处i++和++i均可
cout<<"10个Hello\t";
}
}
--------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=100;i++)
sum=sum+i;
cout<<sum<<endl;
}
*/
/*
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=100;i>=0;i--)
cout<<sum+i<<endl,//for后可以逗号隔开多个操作,这个是输出每次的sum
sum=sum+i;
cout<<"100倒过来加到1=\n"<<sum<<endl;
}
*/
//更简单的方法
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1; i<=100; )
sum += i++;
cout<<sum<<endl;
}
-------------------------------------
#include<iostream>
using namespace std;
int main()
{
int sum=0,i=1;
while(i<=100)
{
sum += i++;
//sum=sum+i;
//i=i+1;
}
cout<<sum<<endl;
}
-----------------------------------
/*
#include<iostream>
using namespace std;
int main()
{
int n=1;//1为ture,是一个常量,不因程序的运行而改变 ,后边给出了break
while(1)
if(n*n-6*n-13>0)
break;
else
++n;
cout<<n<<endl;
}
*/
/*
#include<iostream>
using namespace std;
int main()
{
int n=1;
for( ;n*n-6*n-13>0;++n);
cout<<n<<endl;
}
*/
#include<iostream>
using namespace std;
int main()
{
int n=1;
for( ; ; )
if(n*n-6*n-13>0)//不加大括号
break;
else
n=n+1;
cout<<n<<endl;
}
----------------------------------------------------
#include<iostream>
using namespace std;
int main()
{
int sum=0,i=1;
do{
sum += i++;//大括号也能省掉
}while(i<=100);
cout<<sum<<endl;
}
/*这是一个错误的案例,i的定义必须在do外边
#include<iostream>
using namespace std;
int main()
{
int sum=0;
do{
int i=1;
sum += i;
i ++;
}
while(i<=100);
}
*/
--------------------------------------
循环设计图形
#include<iostream>
using namespace std;
int main()
{
/*
for(int i=1;i<=10;++i){
for(int j=1;j<=i;++j)
cout<<"M";
cout<<endl;
}
cout<<endl;
for(int i=1;i<=10;++i){
for(int j=1;j<i-1;++j)
cout<<" ";
for(int k=1;k<=21-2*i;++k)
cout<<"M";
cout<<endl;
}
cout<<endl;
*/
for(int i=1;i<=10;++i){
for(int j=1;j<=10-i;++j)
cout<<" ";//输出若干空格
for(char ch='A';ch<='A'+2*i-1;++ch)
cout<<ch;//输出若干字符
cout<<"\n";//换行
}
}
---------------------------------------
//易忽略
#include<iostream>
using namespace std;
int main()
{
int a=8,b=5,c;
c=a/b+0.4;//1.6整形为1
cout<<c<<endl;//输出c的结果为1
}
判断闰年
#include<iostream>
using namespace std;
int main()
{
int year,leap;
cout<<"输入你要判断的年份:";
cin>>year;
if((year%4)==0)//最外层基本条件 取余4 ,假就不用往下层判断
if((year%100)==0)//第二层 取余100,假为闰年,若为真进一步判断
if((year%400==0))//第三层,取余400,真为闰年
leap=1;
else
leap=0;
else
leap=1;
else
leap=0;
if(leap)
cout<<"是闰年";
else
cout<<"不是闰年";
}
判断位数
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d;
cout<<"请输入一个三位以内正整数(包括三位):";
cin>>a;
if(a<=99){
if(a<=9)
cout<<"一位数\n"<<a<<endl;
else{
cout<<"两位数\n";
b=a/10;
c=a-10*b;
cout<<b<<"\t"<<c<<endl;
}
}
else{
cout<<"三位数\n";
b=a/100;
c=(a-100*b)/10;
d=(a-100*b-10*c);
cout<<b<<"\t"<<c<<"\t"<<d<<endl;
}
}
缩短二进制
/*
#include <bits/stdc++.h>
using namespace std;
int main() {
int val = 1234;
printf("%#o %#X\n", val, val);
printf可以使用使用格式控制串“%o”、“%X”
分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
return 0;
}
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int val = 1234;
cout.setf(ios::showbase | ios::uppercase);
cout << oct << val << " " << hex << val << endl;
return 0;
}
2的n次方
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int a,b;
cin>>a;
getchar();
cin>>b;
a=pow(2,a);
b=pow(2,b);
cout<<a<<endl;
cout<<b;
return 0;
}
循环+选择判断字母
#include<iostream>
using namespace std;
int main()
{
char a;
while(cin>>a){
if(int(a)>65 && int(a)<90)
cout<<"YES"<<endl;
else if(int(a)>97 && int(a)<122)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
--------------------------------
输出矩阵
#include<iostream>
using namespace std;
int main()
{
int i,j,k;
for(i=1;i<=4;i++){
for(j=1;j<=5;j++){
k=i*j;
cout<<k<<"\t";
}
cout<<"\n";
}
return 0;
}
------------------------------------
#include<iostream>
using namespace std;
int main()
{
int n;
for(n=100;n<=200;n++) {
if(n%3==0)
continue;
else
cout<<n<<"\t";
}
return 0;
}
费波纳西数列
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int f1=1,f2=1,f3;
int i;
cout<<setw(12)<<f1<<"\n"<<setw(12)<<f2<<endl;
for(i=1;i<=38;i++){
f3=f1+f2;
cout<<setw(12)<<f3<<endl;
f1=f2;
f2=f3;
}
return 0;
}
--------------------------
译密码
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
char c;
c=getchar();
while(c!='\n'){
if((c>='a' && c<='z') || (c>='A' && c<='Z')){
if((c>='w' && c<='z') || (c>='W' && c<='Z'))
c=c-22;
else
c=c+4;
}
cout<<c;
c=getchar();
}
return 0;
}
------------------------------
求累加和
#include<iostream>
using namespace std;
int main()
{
int a,n,i;
long s=0,x;
cout<<"请输入a的值:\n"<<"请输入n的值:";
cin>>a>>n;
x=a;
for(i=1;i<=n;i++){
s=s+x;
x=x*10+a;
}
cout<<"s的值为:"<<s<<endl;
return 0;
}
------------------
给出项数求累加和
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,t,number=50;
float a=2,b=1,s=0;
for(n=1;n<=number;n++){
s=s+a/b;
t=a;
a=a+b;
b=t;
}
cout<<"和是:"<<setiosflags(ios::fixed)<<setprecision(10)<<s;
return 0;
}
求完全数
#include<iostream>
using namespace std;
int main()
{
int a=1,m,sum;
while(a<=1000){
sum=0;
for(m=1;m<a;m++){
if(a%m==0){
sum=sum+m;
}
}
if(sum==a)
cout<<a<<"是完整数!\n";
a++;
}
return 0;
}
求水仙花数
#include<iostream>
using namespace std;
int main()
{
int n=100;
for(;n<1000;n++){
int g=n%10;
int s=n/10%10;
int b=n/100;
if(n==g*g*g+s*s*s+b*b*b)
cout<<n;
}
return 0;
}
判断素数
#include<iostream>
using namespace std;
int main()
{
int n,i;
cout<<"n=?";
cin>>n;
for(i=2;i<=n-1;i++){
if(n%i==0) break;
}
if(i<n)
cout<<n<<"is not\n";
else
cout<<n<<"is\n";
return 0;
}
------------------------------
200以内的素数
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j;
for(int i=1;i<=200;i++){
int t=1;
for(int j=2;j<i;j++){
if (i%j==0){
t=0;
break;
}
}
if(t==1)
cout<<i<<"\t";
}
}
----------------------
调用函数判断
#include<stdio.h>
#include<math.h>
int sushu(int x)
{
int i;
for(i=2;i<sqrt(x);i++){
if(x%i==0)
break;
}
if(i<=sqrt(x)){
return 1;
}
else
return 0;
}
//主函数
int main()
{
int a,c;
scanf("%d",&a);
c=sushu(a);
if(c==0 || a<=3)
printf("%d是素数",a);
else
printf("%d不是素数",a);
}
打印空心、实心菱形、九九乘法表
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j,n;
cout<<"输入行数:";
cin>>n;
for(i=-n;i<=n;i++){
for(j=1;j<=2*n+1;j++){
if(j==abs(i)+1 || j+abs(i)==2*n+1)
cout<<"*";
else
cout<<" ";
}
cout<<endl;
}
}
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int r=-3,i=1;
while(r<=3){
while(i<=7){
if(i==max(abs(r)+1,7-abs(r)) || i==min(abs(r)+1,7-abs(r))){
cout<<"*";
}
else
cout<<" ";
i++;
}
cout<<endl;
r++;
i=1;
}
return 0;
}
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j,n;
cout<<"输入数n:(得到2n-1行)";
cin>>n;
//上半部分
for(i=1;i<=n;i++){ //控制行数
cout<<" ";//每一行前面都加这么多空格
for(j=1;j<=2*n;j++){//两头堵
if(j==(n-i+1) || j==(n-1+i)) //对称输入第i(i>=2)行的 "*"
cout<<"*";
else
cout<<" ";//保证第i(i>=2)行中间输入i-1个空格,开头输n-i个空格
}
cout<<endl;
}
//下半部分 n-1行
for(i=1;i<n;i++){
cout<<" ";
for(j=1;j<=2*n;j++){
if(j==(i+1) || j==(2*n-i-1))
cout<<"*";
else
cout<<" ";
}
cout<<endl;
}
return 0;
}
--------------------
实心菱形
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int x=-3,y=-3;
while(x<=3){
while(y<=3){
if(abs(x)+abs(y)<=3)//abs()求绝对值函数
cout<<"*";
else
cout<<" ";
y++;
}
y=-3;
cout<<endl;
x++;
}
return 0;
}
------------------
#include<stdio.h>
int main()
{
int i,j,result;
for(i=1;i<10;i++){
for(j=1;j<i+1;j++){
result=i*j;
printf("%d*%d=%-3d",i,j,result);//-3d表示左对齐,占3位
}
printf("\n");
}
return 0;
}
三种循环的组合、n++与++n
```c
#include<iostream>
using namespace std;
int main()
{
int a=10,b=5,c=5,d=5,i=0,j=0,k=0;
for(;a>b;++b) i++;{//这个大括号可有可无
while (a>++c) j++;
}
do k++;
while(a>d++);
cout<<i<<"\t"<<j<<"\t"<<k;
}
#include<stdio.h>
int main()
{
int i,j;
float s;
for(i=6;i>4;i--){
s=0.0;
for(j=i;j>3;j--)
s=s+i*j;
}
printf("%f\n",s);
}
辗转相除求最大公约数
#include<stdio.h>
int main()
{
int x,y,r,temp;
printf("请输入两个正数:");
scanf("%d%d",&x,&y);
r=x%y;
temp=y;
while(r!=0){
x=y;
y=r;
r=x%y;
}
printf("x模y的值为:%d\n",r);
printf("最大公约数:%d\n",y);
printf("最小公倍数:%d\n",x*temp/y);
return 0;
}
#include<stdio.h>
int main(void)
{
int x,y,temp;
int r;
printf("请输入两个正数:");
scanf("%d %d",&x,&y);
r=x%y;
temp=y;
while(r!=0)
{
x=y;
y=r;
r=x%y;
}
printf("最大公约数:%d\n",y);
printf("最小公倍数:%d\n",x*temp/y);
return 0;
}
-------------------------------
调用函数来求最大公约、最小公倍数
#include<stdio.h>
//求两数最大公约数函数(辗转相除法)
int zuida(int x,int y)
{
int tmp;
if(x>y){
tmp=x%y;
while(tmp!=0){
x=y;
y=tmp;
tmp=x%y;
}
return y ;
}
else{
tmp=y%x;
while(tmp!=0){
y=x;
x=tmp;
tmp=y%x;
}
return x;
}
}
//求最小公倍数
int zuixiao(int x,int y)
{
int tmp;
int i;
for(i=1;i<1000000;i++){
if(i%x==0 && i%y==0) break;
}
return i;
}
//主函数
int main()
{
int a,b,yue,bei;
printf("输入两个数:\n");
scanf("%d%d",&a,&b);
yue=zuida(a,b);
bei=zuixiao(a,b);
printf("%d,%d的最大公约数是%d,最小公倍数是%d",a,b,yue,bei);
}
百钱买百鸡
#include<stdio.h>
int main()
{
int nCock;
int nHen;
int nChick;
for(nCock=0;nCock<=100;nCock++){
for(nHen=0;nHen<=100;nHen++){
for(nChick=0;nChick<=100;nChick++)
if((5*nCock+3*nHen+nChick==100) && (nCock+nHen+3*nChick==100))
printf("公鸡:%d只\t母鸡:%d只\t小鸡:%d只\n",nCock,nHen,3*nChick);
}
}
return 0;
}
ch4: 数组
存入10个数,倒着打印
#include<iostream>
using namespace std;
int main()
{
int i,j,a[10];
for(i=0;i<=9;i++){
a[i]=i;
}
for(j=9;j>=0;j--){
a[j]=j;
cout<<a[j]<<"\t";
}
cout<<endl;
return 0;
}
用数组处理 费波纳列
#include<iostream>
using namespace std;
int main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++){
f[i]=f[i-2]+f[i-1];
}
for(i=0;i<20;i++){
if(i%5==0)
cout<<"\n";
cout<<f[i]<<"\t\t";
}
return 0;
}
二维数组行和列元素互换
#include<iostream>
using namespace std;
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2];
int i,j;
cout<<"array a:\n";
for(i=0;i<=1;i++){
for(j=0;j<=2;j++){
cout<<a[i][j]<<"\t";
b[j][i]=a[i][j];
}
cout<<"\n";
}
return 0;
}
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for (i=0;i<=1;i++){
for (j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
}
求矩阵中最大值
#include<iostream>
using namespace std;
int main()
{
int i,j,row=0,col=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
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;
col=j;
}
}
cout<<"max="<<max<<endl;
cout<<"row="<<row<<endl;
cout<<"col="<<col<<endl;
}
--------------------------
冒泡排序
#include<iostream>
using namespace std;
int main(void)
{
int a[10];
int i,j,t;
cout<<"输入十个数字:";
for(i=0;i<10;i++) cin>>a[i];
cout<<"\n";
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;
}
cout<<"从小到大排序后:";
for(i=9;i>=0;i--)
cout<<"\t"<<a[i];
return 0;
}
#include<stdio.h>
int main()
{
int a[10]; int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++) scanf("%d",&a[i]);
printf("\n");
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;
}
printf("the sorted numbers :\n");
for(i=0; i<10; i++) printf("%d ", a[i]);
printf("\n");
}
#include<stdio.h>
int main()
{
int a[10];
int i,j,t;
printf("输入十个数(重复的也可以):");
for(i=0;i<10;i++) scanf("%d",&a[i]);
printf("\n");
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;
}
printf("从小到大排序后:\n");
for(i=9;i>=0;i--)
printf("%d\t",a[i]);
return 0;
}
------------------------
多若干个整数排序
#include<stdio.h>
int main()
{
int a[1000];
int i,j,n,t;//n为输入数的个数 ,t为了互换排序
char b;
printf("请输入若干整数(不多于1000个):");
for(i=0;i<1000;i++){
scanf("%d",&a[i]);//数值初始化
n=i+1;//n为输入整数的个数
scanf("%c",&b);//回车结尾跳出循环
if(b=='\n') break;
//注意:执行完上面的全部语句才有 i=i+1
}
//数组从大到小排序
for(j=0;j<n-1;j++){//对n个数冒泡排序,需要走n-1趟
for(i=0;i<n-1-j;i++){//第i趟排序需要进行n-1-第几趟j
if(a[i]<a[i+1]){
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
//输出排序后的数组
printf("排序后;\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
return 0;
}
-------------------
指针的冒泡排序
#include<stdio.h>
int paixu(int *p,int n)
{
int i,j,tmp;
for(j=1;j<n;j++){//冒泡排序,需要确定9个数的位置 ,9轮 ,每轮把最大的数沉到最后
for(i=0;i<n-j;i++){//每轮就是从a[0]开始
if(*(p+i) > *(p+i+1)){//每个数位置的确定,就要从a[0]、a[1]、a[2]向后两两比较
tmp = *(p+i);
*(p+i) = *(p+i+1);
*(p+i+1) = tmp;//把最大数值向后传递
}
}
}
}
int main()
{
int a[10] = {2,5,8,9,1,6,5,8,0,6};
int i;
printf("原数组为:\n");
for (i=0;i<10;i++){
printf("%d\t",a[i]);
}
paixu(a,10);
printf("\n排序后的指针为:\n");
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
}
--------------------
#include<stdio.h>
int paixu(int *p,int n)
{
int i,j,tmp;
for(j=1;j<n;j++){//冒泡排序,需要确定9个数的位置 ,9轮 ,每轮把最大的数沉到最后
for(i=0;i<n-j;i++){//每轮就是从a[0]开始
if(*(p+i) > *(p+i+1)){//每个数位置的确定,就要从a[0]、a[1]、a[2]向后两两比较
tmp = *(p+i);
*(p+i) = *(p+i+1);
*(p+i+1) = tmp;//把最大数值向后传递
}
}
}
}
int main()
{
int a[10] = {2,5,8,9,1,6,5,8,0,6};
int i;
printf("原数组为:\n");
for (i=0;i<10;i++){
printf("%d\t",a[i]);
}
paixu(a,10);
printf("\n排序后的指针为:\n");
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
}
矩阵转置及相关
#include<stdio.h>
int main()
{
int i,j;
int a[3][4],b[4][3];
printf("请输入12个数:");
for(i=0;i<3;i++){
for(j=0;j<4;j++){
scanf("%d",&a[i][j]);
}
}
printf("这是转置前的:\n");
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d\t",a[i][j]);
if((j+1)%4==0){//也可换成直接在第一层循环里加换行
printf("\n");
}
b[j][i]=a[i][j];//注意这里的赋值
}
}
//下面是转置
printf("这是转置后的:\n");
for(i=0;i<4;i++){
for(j=0;j<3;j++){
printf("%5d",b[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int score[3][4],b[4][3];
int i,j;
printf("Please input 12 numbers:");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&score[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%4d ",score[i][j]);
// if((j+1)%4==0)
// {
// printf("\n");
// }
b[j][i]=score[i][j];
}
printf("\n");
}
printf("这是转置后的:\n");
for(i=0;i<4;i++){
for(j=0;j<3;j++){
printf("%5d",b[i][j]);
}
printf("\n");
}
return 0;
}
--------------------------------------
输入3x3的矩阵,求对角线元素的和
#include<stdio.h>
int main()
{
int sum1,sum2;
int i,j;
int a[3][3];
printf("请输入9个数,构成一个3*3的矩阵:");
//循环读入数据
for(i=0;i<3;i++){
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
//显示矩阵
printf("这是你的矩阵:\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
//计算两条对角线的元素的和
sum1=a[0][0]+a[1][1]+a[2][2];
sum2=a[2][0]+a[1][1]+a[0][2];
printf("sum1=%d\nsum2=%d",sum1,sum2);
return 0;
}
给一个有序数组,插入一个整数,保证仍然有序
#include<stdio.h>
int main()
{
int a[11]={1,6,11,16,21,26,31,36,41,46};//最后一个数组为0
int m,i,t;
printf("请输入一个数(在1-46之间):");
scanf("%d",&m);
for(i=0;i<10;i++){
if(m<a[i]){//判断输入数的位置上
t=i; //用 t记录一下位置
break;
}
}
for(i=9;i>=t;i--)
a[i+1]=a[i];//把t之后的数据全部右移一位
a[t]=m;//把新数据放在t位置
printf("输入的数为;%d",m);
printf("插入后的排序:\n");
for(i=0;i<11;i++){
printf("%d\t",a[i]);
}
return 0;
}
二维数组实现杨辉三角
//MyCode1.打印杨辉三角
#include<stdio.h>
#define n 11
int main()
{
int i,j;
int a[11][11];
for(i=1;i<=n;i++){
for(j=i;j>=0;j--){
if(i==j || j==0){
a[i][j]=1;
}
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(j=i;j>=0;j--){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
ch5:函数
调用函数
#include<stdio.h>
void printstar()//定义printfstar函数
{
printf("****************\n");
}
void print_message()//定义print_message函数
{
printf("How do yo do!\n");
}
int main(void)//主函数
{
printstar();//调用
print_message();
printstar();//调用 无参函数
}
--------------------------
有参函数调用
#include<stdio.h>
int max(int num1,int num2)
{
int z;
z=(num1>num2)?num1:num2;
return (z);
}
int main(void)
{
int a,b,c;
scanf("%d %d",&a,&b);
c=max(a,b);
printf("Max=%d\n",c);
}
实参求值顺序
#include<stdio.h>
int f(int a,int b)
{
int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}
int main(void)
{
int i=2,p,j;
// p=f(i,++i);不要这样写
j=i++;
p=(i,j);
printf("%d\n",p);
}
-------------------
函数参数传递简单例子
#include<stdio.h>
void add(int x,int y)
{
x=x+10;
y=y*2;
}
int main(void)
{
int a=2,b=3;
add(a,b);
printf("%d\t%d",a,b);
}
#include<stdio.h>
int add(int x,int y)
{
x=x+10;
y=2*y;
return x;
}
int main()
{
int a=2,b=3,c;
c=add(a,b);
printf("%d",c);
}
----------------------------------------------------
函数返回值
#include<stdio.h>
int getresult(int x)
{
// if(x<0) y=-1;
// if(x==0) y=0;
// if(x>0) y=1;
// return y;
if(x<0) return -1;
if(x==0) return (0);
if(x>0) return 1;
}
int main()
{
int a,b;
scanf("%d",&a);
b= getresult(a);
printf("%d",b);
}
--------------------
返回值类型与函数类型不同
#include<stdio.h>
int max(float x, float y)
{
float z;
z=x>y?x:y;
return(z);
}
int main(void)
{
float a,b;
float c;
// int c; 返回值类型与函数类型不同
scanf("%f%f",&a,&b);
c=max(a,b);
printf("Max=%f\n",c);
}
/*现在主函数声明,在主函数下年在定义
#include<stdio.h>
int main()
{
int max(float x,float y);//这里是先声明(这里的变量x和y也可先省略)
float a,b;
float c;
scanf("%f%f",&a,&b);
c=max(a,b);
printf("Max=%f\n",c);
}
定义要用的函数
int max(float x,float y)
{
float z;
z=x>y?x:y;
return(z);
}
*/
#include<stdio.h>
int max(float x,float y)
{
float z;
z=x>y?x:y;
printf("测试");//这个会在max is 之前输出
return (z);
}
int main(void)
{
float a,b;
float c;
scanf("%f%f",&a,&b);
c=max(a,b);
printf("Max is %f\n",c);
}
------------------
函数能返回多个结果
#include<stdio.h>
int max_min(int x,int y)
{
int result,*min;
if(x>y){
result=x;
*min=y;
}
else{
result=y;
*min=x;
}
return result;
}
int main()
{
int a,b,max,min;
scanf("%d%d\n",&a,&b);
max=max_min( a,b);
m=*min;
printf("最大值=%d,最小值=%d\n",max,m);
}
汉诺塔
#include<stdio.h>
int c=0;
void move(char,int,char);
void hanoi(int,char,char,char);
int main(){
hanoi(4,'a','b','c');
}
void move(char x,int n,char z)
{
printf("第%d步:移动盘子%d从%c到%c\n",++c,n,x,z);
}
void hanoi(int n,char x,char y,char z)
{
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
}
函数调用实现字符串的复制
#include<stdio.h>
#define N 30
int main()
{
char *copy(char *p1,char *p2);
char ch1[30] = {"Python从入门到放弃!\0"};
char ch2[30]={};
char *pointer_1 =ch1;
char *pointer_2 =ch2;
printf("这是字符串1:%s",pointer_1);//这必须放在调用函数之前 ,放在之后不能输出
copy(pointer_1,pointer_2); //字符型指针变量做实参
printf("\n");
printf("复制之后为:%s",pointer_2);
}
char *copy(char *p1,char *p2)//字符型指针变量做形参
{
int i;
for(i=0;i<N;i++){
if(*(p1+i) != '\0'){
*(p2+i) = *(p1+i);
}
}
*(p2+i) = '\0';
return (p2,p1);
}
函数局部变量与全局变量同名
#include<stdio.h>
int a=3,b=5;
int main (void)
{
int a=8;
int max(int a,int b);
printf("%d",max(a,b));
}
int max(int a,int b){
int c;
c=a>b?a:b;
return(c);
}
定义递归函数求阶乘
#include<stdio.h>
int jiecheng (int n)
{
int result;
if(n==0 || n==1)
return 1;
else
return (n*jiecheng(n-1));
}
int main()
{
int a,b;
scanf("%d",&a);
b=jiecheng(a);
printf("%d的阶乘是%d",a,b);
}
#include<stdio.h>
int jiecheng(int n)
{
int i,result =1;
for(i=1;i<=n;i++)
result *=i;
return result;
}
int main()
{
int b;
scanf("%d",&b);
int a=jiecheng(b);
printf("%d的阶乘是%d",b,a);
}
------------
递归求5人年龄
#include<stdio.h>
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
int main()
{
printf("%d",age(5));
}
参数传递值案例
普通
#include<stdio.h>
void exchange(int x,int y)
{
int z;
z=x;
x=y;
y=z;
printf("x=%d,y=%d\n",x,y);
}
int main()
{
int a=3,b=9;
printf("a=%d,b=%d\n",a,b);
exchange(a,b);
printf("a=%d,b=%d\n",a,b);
}
指针
#include<stdio.h>
void exchange(int *x,int *y)
{
int z;
z= *x;
*x= *y;
*y= z;
}
int main(){
int a=3,b=9;
printf("a=%d,b=%d\n",a,b);
exchange(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
静态局部变量的值
#include<stdio.h>
int f(int a)
{
auto int b=0;
static int c =3;
b=b+1;
c=c+1;
return(a+b+c);
}
int main()
{
int a=2,i;
for(i=1;i<=3;i++){
printf("%d\t",f(a));
}
}
------------------------
使用寄存器变量
#include<stdio.h>
long fac(long n)
{
register long i,f=1;//每次乘的结果都保存
for(i=1;i<=n;i++){
f=f*i;
}
return (f);
}
int main()
{
long i,n;
scanf("%ld",&n);
for(i=1;i<=n;i++)
printf("%ld!=%ld\n",i,fac(i));
}
折半法将数组中的元素倒着排放
#include<stdio.h>
int main()
{
int inv(int x[],int n);
int i;
int a[10] = {1,3,5,7,9,11,13,15,17,19};
printf("原始的数组为:\n");
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
printf("\n");
//调用函数
inv (a,10);
printf("对这些元素按相反顺序排放后:\n");
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
return 0;
}
int inv(int x[],int n)
{
int tmp,i,j;
int m=(n-1)/2;
for(i=0;i<m;i++){
j=n-1-i;
tmp=x[i];
x[i]=x[j];
x[j]=tmp;
}
}
ch6: 字符串
字符数组输出菱形
#include<stdio.h>
int main()
{
char diamond[5][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%c",diamond[i][j]);
}
printf("\n");
}
return 0;
}
------------------
递归法将一个整数转为字符串
#include<stdio.h>
#include<string.h>
//调用递归函数
void exchange(int n)
{
int i;
if((i=n/10)!=0)//
exchange(i);
putchar(n%10+'0');
}
//主函数
int main()
{
void exchange(int i);
int n;
printf("Please enter an integer\n");
scanf("%d",&n);
printf("The correct is:\n");
if(n<0){
putchar('-');
n=-n;
}
exchange(n);
printf("\n");
}
----------------
字符数组循环输出成字符串
#include<stdio.h>
int main()
{
char c[15]={'I',' ','a','m',' ','s','t','u','d','e','n','t','.'};
int i;
for(i=0;i<15;i++){
printf("%c",c[i]);
}
return 0;
}
-------------
找最大的字符串
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][10];
char string[10];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\n最大的是:\n%s\n",string);
return 0;
}
-----------
不使用strcmp比较两个字符串
#include<stdio.h>
#include<string.h>
int main()
{
char ch1[10],ch2[10];
int i,tmp=1;
scanf("%s%s",ch1,ch2);
printf("你输入的两个字符串为:\n%s\t%s\n",ch1,ch2);
int chang1=strlen(ch1);
int chang2=strlen(ch2);//保证空格不会计入
// gets(ch1);
// gets(ch2);
// puts(ch1);
// puts(ch2);
for(i=0;i<chang1;i++){
int a=int(ch1[i]),b=int(ch2[i]);
if(a!=b){
tmp=0;//做标记
break;
}
}
if(tmp==1)
printf("这两个字符串相同");
else
printf("这两个字符串不相同");
}
统计单词个数
#include<stdio.h>
#include<string.h>
int main()
{
char string[81],c;
int i,num=0,word=0;
gets(string);
for(i=0;(c=string[i])!='\0';i++){//输入多少个字符,以字符串后的'\0'为结束
if(c==' ') //空格代表一个单词的结束 ,word从0到1为一个单词
word=0;
else if(word==0){//一个空格记一次数,直到这个单词结束出现空格,word从1到0
word=1;
num++;
}
}
printf("%d words\n",num);
return 0;
}
-----------------------
统计数组中单词的个数
#include<stdio.h>
#include<string.h>
int main()
{
char ch[20];
int i,chang,num=0;
gets(ch);
chang=strlen(ch);
for(i=0;i<chang;i++){
int a=int(ch[i]);
if((a>97 && a<122) || (a>65 && a<90))
num++;
}
printf("输入的字符串中英文字母有:%d个",num);
}
删除指定字符然后循环输出字符数组
#include<stdio.h>
#include<string.h>
int main()
{
char ch[20];
gets(ch);
int i,chang,tmp;
chang=strlen(ch);
for(i=0;i<chang;i++){
tmp=1;
if(int(ch[i])==int('i')){
tmp=0;
}
if(tmp==1)
printf("%c",ch[i]);
}
}
ch7: 结构体
结构体变量的初始化
#include<stdio.h>
int main()
{
struct student{
long int num;
char name[20];
char sex;
char addr[20];
} a={6666,"xiaosi",'M',"123kaifeng"};
printf("No:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr);
}
统计票数小程序
#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char leader_name[20];//最多20人
struct person
{
char name[20];
int count;
}leader[3]={"li",0,"zhang",0,"si",0};
for(i=1;i<=10;i++){//共10票
scanf("%s",leader_name);
for(j=0;j<3;j++){
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
}
printf("\n");
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
return 0;
}
求成绩最小的哪个人
#include<stdio.h>
#include<string.h>
struct student
{
char name[30];
int grade;
};
struct student minGrade(struct student s[],int n)
{
int i,site=0;
for(i=1;i<n;i++){
if(s[i].grade<s[site].grade)
site=i;
};
return s[site];
}
int main()
{
struct student min,a[3]={{"李四",65},{"张三",76},{"王五",89}};
min=minGrade(a,3);
printf("成绩最低的为:%s\n",min.name);
return 0;
}
-----------------
结构体、调用函数、输入多门成绩信息求平均分
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 3
struct student
{
int num;
char name[20];
float china;
float math;
float english;
};
int main()
{
int i,j;
float sum,avg;
struct student stu[n];
printf("请按格式输入:\n学号\t姓名\t语文\t数学\t英语\n");
for(i=0;i<n;i++){
scanf("%d",&stu[i].num);
getchar();//从缓冲区消除空格
scanf("%s",stu[i].name);//遇见空格就断,读取字符后会舍弃最后的回车符
scanf("%f%f%f",&stu[i].china,&stu[i].math,&stu[i].english);
}
printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
//求总分和平均分
for(j=0;j<n;j++){
sum=stu[j].china+stu[j].math+stu[j].english;
avg=sum/3.0;
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",stu[j].num,stu[j].name,stu[j].china,stu[j].math,stu[j].english,sum,avg);
printf("\n");
}
}
-------------------------------
编写m个人的成绩,求出不及格人数,将低于平均分的分数放在指定数组
#include<stdio.h>
#include<string.h>
# define m 4
int main()
{
int i,j,sum=0,t=0;
float avg;
//定义结构体储存信息和成绩
struct Score
{
int num;
char name[20];
int score;
};
struct Score stu[m]={{1,"张三",60},{2,"李四",70},{3,"王五",80},{4,"麻子",90}};
//求平均分
for(i=0;i<4;i++){
sum +=stu[i].score;
}
avg=sum/4.0;
//求低于平均分的人数
for(j=0;j<4;j++){
if(stu[j].score<avg)
t++;
}
printf("低于平均分的人数有:%d\n",t);
for(j=0;j<4;j++){
if(stu[j].score<avg){
printf("学号:%d\t姓名:%s\t低于平均分的分数:%d\n",stu[j].num,stu[j].name,stu[j].score);
}
}
}
ch8:指针
指针变量的引用
#include<stdio.h>
int main()
{
int *p1,*p2,*p;
int a,b;
printf("输入两个整数(重新输出大的在前):\n");
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if(a<b){//若a的值小于,互换指向a,b的指针
p=p1;
p1=p2;
p2=p;
}
printf("a=%d\tb=%d\n",a,b);//a,b的值并未改变
printf("a=%d\tb=%d",*p1,*p2);
}
--------------------
#include<stdio.h>
int main()
{
char *string = "I love China!";
printf("%s\n",string);
return 0;
}
--------------------------
两个整数按从大到小输出
#include<stdio.h>
//调用函数,互换的是a和b
int swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;
*p1=*p2;
*p2=tmp;
}
//主函数
int main()
{
int swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
printf("请输入整数a和b的值:\n");
scanf("%d%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)//a小于b,就互换a和b的值
swap(pointer_1,pointer_2);
printf("max=%d\tmin=%d",a,b);//a保证总是大数
return 0;
}
----------------
#include<stdio.h>
int main()
{
int max(int,int);
int (*p)(int,int);
int a,b,c;
p=max;
printf("Please enter a and b:\n");
scanf("%d%d",&a,&b);
c=(*p)(a,b);
printf("%d,%d,max = %d\n",a,b,c);
return 0;
}
int max(int x,int y)
{
int z;
x>y?z=x:z=y;
return z;
}
-------------
字符串不用strcpy实现复制,然后输出
#include<stdio.h>
int main()
{
char a[] = "I am a student.",b[20];
int i;
for(i=0;*(a+i) != '\0';i++){
*(b+i) = *(a+i);
}
*(b+i) = '\0';
printf("string a is : %s\n",a);
printf("string b is :\n");
for(i=0;b[i] != '\0';i++)
printf("%c",b[i]);
printf("\n");
return 0;
}
------------------
访问数组的三种方式
#include<stdio.h>
int xiabiao()//数组下标访问每个元素
{
int i;
int a[10] = {1,3,5,7,9,11,13,15,17,19};
for(i=0;i<10;i++){
printf("%d\t",a[i]);
}
printf("\n");
}
//数组名+地址递增访问每个元素
int shuzuming_jia()
{
int i;
int a[10] = {1,3,5,7,9,11,13,15,17,19};
for(i=0;i<10;i++){
printf("%d\t",*(a+i));
}
printf("\n");
}
//指针访问每个数组
int zhizhen()
{
int *p;
int a[10] = {1,3,5,7,9,11,13,15,17,19};
for(p=a;p<(a+10);p++){
printf("%d\t",*p);
}
printf("\n");
return 0;
}
//主函数
int main()
{
xiabiao();
shuzuming_jia();
zhizhen();
}
----------------
指针的指针
#include<stdio.h>
int main()
{
int a[5] = {1,3,5,7,9};
int *num[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};//指针数组
int **p,i;
p=num;
for(i=0;i<5;i++){
printf("%d ",**p);
p++;
}
printf("\n");
return 0;
}
字符串顺序输出(选择法)
#include<stdio.h>
#include<string.h>
int main()
{
int sort(char *name[],int n);
int print(char *name[],int n);
char *name[] = {"Follow","Great","FORTRAN","Computer"};
int n=4;
sort(name,n);
print(name,4);
return 0;
}
//排列函数
int sort(char *name[],int n)
{
char *tmp;
int i,j,k;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(strcmp(name[k],name[j])>0)
k=j;
}
if(k != i){
tmp=name[i];
name[i]=name[k];
name[k]=tmp;
}
}
}
//打印函数
int print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
定义函数实现折半查找算法
#include<stdio.h>
#define num 5
int main()
{
int zb_search(int *p,int n,int x);
int a[num] = {};
int i,x;
printf("请输入一个长度为5的数组:\n") ;
for(i=0;i<num;i++){
scanf("%d",&a[i]);
}
printf("请输入要查找的元素:\n");
scanf("%d",&x);
zb_search(a,num,x);
}
//自定义函数
int zb_search(int *p,int n,int x)
{
int mid = n / 2;
int low,high;
int j,tmp = 0;
for(j=0;j<n;j++){
if( *(p+j) ==x){
tmp=1;
break;
}
}
if(tmp == 0){
printf("Not exit.");
}
else{
if(*(p+mid)==x)
printf("%d 在数组中的位置为 %d",x,mid +1);
else if(*(p+mid)<x){
do{
low=mid;
high=n;
mid=(low + high) / 2;
}
while(*(p+mid) != x);
printf("%d 在数组中的位置为 %d",x,mid+1);
}
else{
do{
high=mid;
low=0;
mid=(low + high) /2;
}
while(*(p+mid) != x);
printf("%d 在数组中的位置为 %d",x,mid+1);
}
}
}
指向结构体数组的指针
#include<stdio.h>
int main()
{
struct student
{
int num;
char name[20];
char sex;
int age;
};
struct student stu[3]={
{10101,"Lilin",'M',18},{10102,"ZhangFun",'M',19},{10104,"WangMing",'F',20}
};
struct student *p;
printf("No:\tName\t sex\tage\n");
for(p=stu;p<stu+3;p++)
printf("%-8d %-10s %2c %4d\n",p->num,p->name,p->sex,p->age);
}
------------
指向结构体变量的指针
#include<stdio.h>
#include<string.h>
int main()
{
struct student
{
long num;
char name[20];
char sex;
float score;
};
struct student stu_1;
// struct student stu_1 = {
// 89101,
// "Lilin",
// 'M',
// 89.5,
// };
struct student *p;
p = &stu_1;
stu_1.num = 89101;
strcpy(stu_1.name,"Lilin");
stu_1.sex = 'M';
stu_1.score = 89.5;
printf("No. :%ld\n name :%s\n sex : %c\n score :%.2f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
printf("No. :%ld\n name :%s\n sex : %c\n score :%.2f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
}
小学期
链表操作
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
//节点结构体
struct student
{
int num;
int score;
struct student *next;
};
//主函数
int main()
{
struct student *create(int n);//创造一个节点数为n的链表
int print_1(struct student *head);//打印链表
struct student *del(struct student *head,int num);//删除某个节点
struct student *insert(struct student *head,struct student *stud);// 插入某个节点
struct student *head,*stud;//定义两个头指针变量
int n,del_num;
printf("请输入链表节点个数:");
scanf("%d",&n);
head = create(n);
print_1(head);
printf("\n请输入要删除的节点号:");
scanf("%ld",&del_num);
head = del(head,del_num);
printf("\n删除后的:\n");
print_1(head);
printf("\n创建一个新节点,插入链表中:\n");
stud = create(1);
head =insert(head,stud);
print_1(head);
}
//创建初始链表函数
struct student *create(int n)
{
struct student *head,*p1,*p2;//头指针变量 及 新节点、尾结点
int i;
head =NULL;//开始头指针变量指为空
for(i=1;i<=n;i++){
p1=(struct student*)malloc(LEN);//为结构体节点申请空间
printf("Number:");
scanf("%ld",&p1->num);
printf("Score:");
scanf("%d",&p1->score);
if(i==1)
head = p1;//第一次创建节点,就把节点地址赋值给 头指针变量
else
p2->next = p1;//不是第一次创建节点,尾节点的指针 指向此节点
p2=p1;//只要创建了节点,就是新尾节点
}
p2->next = NULL; //尾节点的指针为空
return (head);//返回头指针变量
}
//打印函数
int print_1(struct student *head)
{
struct student *p;
p=head;//p指向头指针变量的地址
printf("Number Score\n");
while(p!=NULL){
printf("%ld %5d",p->num,p->score);//当有节点存在时,打印
p=p->next;//p指向下一个新节点的地址
printf("\n");
}
}
//删除节点函数
struct student *del(struct student *head,int num)
{
struct student *p1,*p2;//定义两个结构体指针变量
p1=head;//p1指向头指针变量head的地址 ,也就是首元节点,
while(p1!=NULL){//循环从元节点找节点
if(p1->num == num){//若找到了
if(p1 == head)//判断此时p1是不是第一个节点
head = p1->next;//p1是第一个节点,把当前p1对应的节点删除,p1下一个节点由head指向
else
p2->next=p1->next; //p1不是第一个节点,则原本指向p1的p2跳过p1指向原p1指向的节点
}
p2=p1;//标记
p1=p1->next;//向后面遍历 ,
//p2为p1前一个节点
}
return (head);
}
//创建新链表插入函数
struct student *insert(struct student *head,struct student *stud)
{
int print_1(struct student *head);
struct student *p0,*p1,*p2;
p1=head; //p1开始指向head就是指向根链表首元节点
p0=stud;//p0指向 添加节点
if(head==NULL){ /*空链表*/
head=p0;//head指向新增节点
p0->next=NULL;
}
else{/*非空链表*/
while( (p0->num > p1->num) && (p1->next!=NULL) ){
p2=p1;//标记为p1的前节点
p1=p1->next;//遍历
}
//退出while循环,一定满足下面条件之一,要么找到了要插入的位置,要么到遍历到终点也没找到
//找到了插入的位置,标记为p1
if( p0->num < p1->num ){
if( head==p1 )
head=p0;//添加节点设置为首元节点
else
p2->next=p0; //插在p1此时指向的节点前面
p0->next=p1;
}
//遍历到了最后一个节点 ,被添加节点为尾结点
else {
p1->next=p0;
p0->next=NULL;
}
}
return (head);
//print_1(head);
}
多级菜单
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int FirstMenu();//一级菜单函数 ,由主函数调用
int SecondMenu(int i);//二级菜单函数,由一次菜单函数调用,参数i调用一级函数传入的,返回到二级菜单
void Write();//写入函数,由二级菜单函数 经switch调用
void Search(); //搜索函数,由二级菜单函数 经switch调用
//定义结构体,并起别名Stu
typedef struct Student{
char sNumber[9];
char sName[20];
char sSex[3];
int iGrade[4];
} Stu;
//主函数
int main()
{
int flag = 0;
while(flag !=3){
system("cls");//每次调用一级菜单函数就清屏
flag = SecondMenu(FirstMenu());
}
}
//一级菜单函数
int FirstMenu()
{
int i;
cout<<"======================================================="<<endl;
cout<<"= ="<<endl;
cout<<"= 1 录入学生成绩 ="<<endl;
cout<<"= 2 查询学生成绩 ="<<endl;
cout<<"= 3 退出 ="<<endl;
cout<<"= ="<<endl;
cout<<"======================================================="<<endl;
cout<<"请选择你要进行的操作(输入数字):";
cin>>i;
return i; //返回参数,传入二级菜单(不同功能)函数
}
//二级菜单函数
int SecondMenu(int i)//根据参数 判断执行调用那些功能函数
{
system("cls");
switch(i){
case 1:{
Write();
break;
}
case 2:{
Search();
break;
}
case 3:{
cout<<"程序已经退出!"<<endl;
break;
}
}
return i;
}
//写入函数
void Write()
{
FILE *fp;//涉及文件操作
Stu s,*p;//定义一个结构体变量,结构体指针变量
char s1;
char s2 = 'n';
p = &s;//p指向这个结构体变量,可访问结构体成员
if((fp = fopen("学生信息.dat","ab")) == NULL){
if((fp = fopen("学生信息.dat","wb")) == NULL){
cout<<"打开文件时出错!"<<endl;
exit(1);
}
}
do{
cout<<"请输入学生的信息:"<<endl;
cout<<"学号:";
cin>>s.sNumber;
cout << "姓名:";
cin >> s.sName;
cout << "性别:";
cin >> s.sSex;
cout << "请输入成绩,要求输入非负整数:" << endl;
cout << "数学:";
cin >> s.iGrade[0];
cout << "英语:";
cin >> s.iGrade[1];
cout << "计算机:";
cin >> s.iGrade[2];
cout << "体育:";
cin >> s.iGrade[3];
cout<<"是否确定?(输入:y/n)"<<endl;
cin>>s1;
if(s1 == 'y'){
fwrite(p,sizeof(Stu),1,fp);
//p是输入数据的地址(起始内存)
//sizeof(Stu) 是结构体的大小字节数
//1 是要进行写1个 sizeof(Stu) 的数据项
//fp 文件型指针
system("cls");
cout<<"录入成功,是否继续录入?(y/n)"<<endl;
cin>>s2;//根据s2判断是否退出录入循环
system("cls") ;
}
}while(s2 == 'y');
fclose(fp);
}
//搜索函数
void Search()
{
FILE *fp;
Stu s,*p;
char sNumber1[9];
int option;//判断输出那些成绩
p = &s;
cout<<"请输入学号:";
cin>>sNumber1;
if((fp = fopen("学生信息.dat","rb")) == NULL){
cout<<"打开文件时出错!";//文件如果不存在报错
exit(1);
}
else{
int k;
do{
fread(p,sizeof(Stu),1,fp);//文件存在就读文件
}while(strcmp (p->sNumber,sNumber1)!= 0 && feof(fp) == 0);
//feof 判断文件结束符
if(strcmp ( p->sNumber,sNumber1) != 0){
//那就是文件结束也没找到
cout<<"无此学生的信息!"<<endl;
cout<<"按任意键确定。";
getch();
return;
}
cout<<endl;
cout<<endl;
cout << "++++++++++++++++++++++" << endl;
cout << "+ 1 输出数学成绩 +" << endl;
cout << "+ 2 输出英语成绩 +" << endl;
cout << "+ 3 输出计算机成绩 +" << endl;
cout << "+ 4 输出体育成绩 +" << endl;
cout << "+ 5 输出所有成绩 +" << endl;
cout << "++++++++++++++++++++++" << endl;
cout<<"请选择:";
cin>>option;
cout<<endl;
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<endl;
cout<<p->sNumber<<"\t"<<p->sName<<"\t"<<p->sSex<<endl;
switch(option){
case 1:{
cout<<"数学"<<endl<<p->iGrade[0]<<endl;
break;
}
case 2:{
cout<<"英语"<<endl<<p->iGrade[1]<<endl;
break;
}
case 3:{
cout<<"计算机"<<endl<<p->iGrade[2]<<endl;
break;
}
case 4:{
cout<<"体育"<<endl<<p->iGrade[3]<<endl;
break;
}
case 5:{
cout<<"数学"<<"\t"<<"英语"<<"\t"<<"计算机"<<"\t"<<"体育"<<"\t"<<endl;
for(k = 0;k<4;k++){
cout<<p->iGrade[k]<<"\t";
}
cout<<endl;
break;
}
}
cout<<"按任意键确定:";
getch();//无确定读入字符
}
}
迷宫游戏
#include<iostream>
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
//文件操作要包含此头文件
using namespace std;
//把文件中的信息读入到数组中
void ReadFile(char ch1[9][24]);
//读取数组中的字符,指针变量传参 ,传递的为引用 ,否则目标物位置不能修改
void ReadArray(char ch1[9][24],int *a,int *b);
int main()
{
int a,b;
//记录目标物的位置
char ch;
char ch1[9][24];
ReadFile(ch1) ;
ReadArray(ch1,&a,&b);
while(1)
{
ch = getch();
switch(ch)
{
case 'w':
case 'W':
{
//位置上方为空位
if(ch1[a-1][b] == '3'){
char c;
c = ch1[a-1][b];
ch1[a-1][b] = ch1[a][b];
ch1[a][b] = c;
ReadArray(ch1,&a,&b);
}
break;
}
case 'a':
case 'A':
{
if(ch1[a][b-1] == '3'){
char c;
c = ch1[a][b-1];
ch1[a][b-1] = ch1[a][b];
ch1[a][b] = c;
ReadArray(ch1,&a,&b);
}
break;
}
case 's':
case 'S':
{
if(ch1[a+1][b] == '3'){
char c;
c = ch1[a+1][b];
ch1[a+1][b] = ch1[a][b];
ch1[a][b] = c;
ReadArray(ch1,&a,&b);
}
break;
}
case 'd':
case 'D':
{
if(ch1[a][b+1] == '3'){
char c;
c = ch1[a][b+1];
ch1[a][b+1] = ch1[a][b];
ch1[a][b] = c;
ReadArray(ch1,&a,&b);
}
break;
}
}
if(ch1[5][22] == '2'){
cout<<"恭喜获胜!"<<endl;
break;
}
}
ch = getch();
}
//读文件到数组函数,参数为字符数组首地址
void ReadFile(char ch1[9][24])
{
int i = 0,j = 0;
FILE *fp;
char ch;
if((fp = fopen("Maze.txt","r")) == NULL){
cout<<"打开文件错误";
exit(1);
}
//从指定文件读取一个字符
ch = fgetc(fp);
while(ch != EOF)
{
//先读墙
if(ch == '1'){
ch1[i][j] = ch;
j++;
//读完一行到行尾
if(j == 24){
i++;
j = 0;
}
}
//目标位置
else if(ch == '2'){
ch1[i][j] = ch;
j++;
if(j == 24){
i++;
j = 0;
}
}
//空白位置
else if(ch == '3'){
ch1[i][j] = ch;
j ++;
if(j == 24){
i++;
j = 0;
}
}
//其他情况就是换行
else{
ch1[i][j] = ch;
i++;
j = 0;
}
ch = fgetc(fp);
}
fclose(fp);
}
//读数组打印物体,时刻刷新数组,目标物位置
void ReadArray(char ch1[9][24],int *a , int *b)
{
int i,j;
system("cls");
for( i = 0;i < 9 ;i++){
for(j =0 ; j< 24 ;j++){
if(ch1[i][j] == '1')
cout<<"■";
else if(ch1[i][j] == '2'){
cout<<"★";
//记录目标位置
*a = i;
*b = j;
}
else if(ch1[i][j] == '3')
cout<<"□";
else
//把每行末尾的换行符或结束符原样输出
putchar(ch1[i][j]);
}
cout<<endl;
}
}
贪吃蛇游戏
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<iostream>
using namespace std;
//定义地图
typedef struct
{
int arr[100][100];
int maxrow;
int maxcol;
char dir;
} MAP;
//定义一个点
typedef struct
{
int row;
int col;
}POINT;
//定义蛇
typedef struct
{
POINT arr[100];//结构体的嵌套 ,蛇的成员为 结构体数组变量,
//结构体数组包含多个点 ,点的参数为row,col
int len;
}SNAKE;
//定义食物
typedef struct
{
int row;
int col;
}FOOD;
//声明 功能函数
void readmap(SNAKE,MAP,FOOD);
int move(SNAKE*,MAP*,FOOD*) ;
int gameover = 1;
int score = 0;
int main()
{
int i,j;
//创建结构体变量
MAP map;
SNAKE snake;
FOOD food;
srand( (int)time(0) );
food.row = rand() %15;
food.col = rand() %15;
map.maxrow = 15;
map.maxcol = 15;
snake.arr[0].row = 7;//arr[0]为蛇头
snake.arr[0].col = 7;
snake.arr[1].row = 7;//arr[1]为紧邻的蛇身
snake.arr[1].col = 6;
snake.len = 2;//初始只有两节
map.dir = 'd';//初始设置蛇运动方向
while(gameover)
{
system("cls");
readmap(snake,map,food); //读取位置
move(&snake,&map,&food);//修改位置
_sleep(200); //屏幕刷新速度,200ms,可以控制蛇的移动速度
}
}
void readmap(SNAKE snake,MAP map,FOOD food)
{
int i,j,k,flag = 0;
cout<<"■■■■■■■■■■■■■■■■■"<<endl;
for(i =0;i<map.maxrow;i++){
//外循环是行循环
cout<<"■";
for(j =0;j<map.maxcol;j++){
//内循环是列循环
flag = 0;//表示该行没有蛇;
//找蛇循环
for(k = 0;k<snake.len;k++){
//遇到蛇身子
if(i == snake.arr[k].row && j ==snake.arr[k].col)
{
if(k == 0) cout<<"●";//输出蛇头
else cout<<"○" ;//不是蛇头就是蛇尾
flag = 1;//已经找到蛇
break;
//输出完整个蛇就跳出 找蛇循环,剩下的都是不含蛇的行和列
}
}
if(flag == 0)
{
if(food.row ==i && food.col == j)
{
cout<<"★";
continue;
}
else
cout<<" ";
}
}
cout<<"■";
putchar('\n');
}
cout<<"■■■■■■■■■■■■■■■■■"<<endl;
}
int move (SNAKE *snake,MAP *map,FOOD *food)
{
char c;
int i;
for(i = snake->len -1;i > 0;i--)
snake->arr[i] = snake->arr[i-1];
if(kbhit())
{
c= getch();
if(c == 27) exit(1);
//设置转向,不能相反方向转
if(map->dir != 'd' &&c=='a')
map->dir = c;
else if(map->dir != 'a' &&c=='d')
map->dir = c;
else if(map->dir != 'w' &&c=='s')
map->dir = c;
else if(map->dir != 's' &&c=='w')
map->dir = c;
}
//根据按键,确定蛇头位置
if(map->dir == 'd')
{
snake->arr[0].col++;//若按下,则蛇头点对应得列加一
if(snake->arr[0].col >= map->maxcol )
snake -> arr[0].col -= 15;
}
if(map->dir == 'a')
{
snake->arr[0].col--;//若按下,则蛇头点对应 列减一
if(snake->arr[0].col < 0 )
snake -> arr[0].col += 15;
}
if(map->dir == 's')
{
snake->arr[0].row++;//若按下,则蛇头点对应 行加一
if(snake->arr[0].row >= map->maxrow )
snake -> arr[0].row -= 15;
}
if(map->dir == 'w')
{
snake->arr[0].row--;//若按下,则蛇头点对应 行减一
if(snake->arr[0].row < 0 )
snake -> arr[0].row += 15;
}
//当蛇的长度大于4才可能游戏结束;如果蛇头与身上任一个节点位置相同,就结束
for(int k=4;k<snake->len;k++)
{
if(snake->arr[0].row == snake->arr[k].row && snake->arr[0].col == snake->arr[k].col)
gameover =0;
}
//吃到食物,蛇身增加
if(food->row == snake->arr[0].row && food->col == snake->arr[0].col)
{
//保证增长的部位在蛇尾
snake->arr[snake->len].col = food->col;
snake->len++;
food->row = rand() %15;
food->col = rand() %15;
score += 10;
}
cout<<"score = "<<score;
}
通讯录管理系统
#include <iostream>
using namespace std;
#include <string>
#define MAX 1000
//设计联系人结构体
struct Person
{
//姓名
string m_Name;
//性别 1 男 2 女
int m_Sex;
//年龄
int m_Age;
//电话
string m_Phone;
//住址
string m_Addr;
};
//设计通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人数组
struct Person personArray[MAX];
//通讯录中当前记录联系人个数
int m_Size;
};
//1、添加联系人
void addPerson(Addressbooks * abs)
{
//判断通讯录是否已满,如果满了就不再添加
if (abs->m_Size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{
//添加具体联系人
//姓名
string name;
cout << "请输入姓名: " << endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name = name;
//性别
cout << "请输入性别: " << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女" << endl;
int sex = 0;
while (true)
{
//如果输入的是1 或者 2 可以退出循环,因为输入的是正确值
//如果输入有误,重新输入
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[abs->m_Size].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄: " << endl;
int age = 0;
cin >> age;
abs->personArray[abs->m_Size].m_Age = age;
//电话
cout << "请输入联系电话: " << endl;
string phone;
cin >> phone;
abs->personArray[abs->m_Size].m_Phone = phone;
//住址
cout << "请输入家庭住址:" << endl;
string address;
cin >> address;
abs->personArray[abs->m_Size].m_Addr = address;
//更新通讯录人数
abs->m_Size++;
cout << "添加成功" << endl;
}
}
//2、显示所有联系人
void showPerson(Addressbooks * abs)
{
//判断通讯录中人数是否为0,如果为0,提示记录为空
//如果不为0,显示记录的联系人信息
if (abs->m_Size == 0)
{
cout << "当前记录为空" << endl;
}
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名: " << abs->personArray[i].m_Name << "\t";
cout << "性别: " << ( abs->personArray[i].m_Sex == 1 ?"男":"女" ) << "\t";
cout << "年龄: " << abs->personArray[i].m_Age << "\t";
cout << "电话: " << abs->personArray[i].m_Phone << "\t";
cout << "住址: " << abs->personArray[i].m_Addr << endl;
}
}
}
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录 参数2 对比姓名
int isExist(Addressbooks * abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
//找到用户输入的姓名了
if (abs->personArray[i].m_Name == name)
{
return i; //找到了,返回这个人在数组中的下标编号
}
}
return -1;//如果遍历结束都没有找到,返回-1
}
//3、删除指定联系人
void deletePerson(Addressbooks * abs)
{
cout << "请输入您要删除的联系人" << endl;
string name;
cin >> name;
//ret == -1 未查到
//ret != -1 查到了
int ret = isExist(abs, name);
if (ret != -1)
{
//查找到人,要进行删除操作
for (int i = ret; i < abs->m_Size; i++)
{
//数据前移
abs->personArray[i] = abs->personArray[i + 1];
}
abs->m_Size--; //更新通讯录中的人员数
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
}
//4、查找指定联系人信息
void findPerson(Addressbooks * abs)
{
cout << "请输入您要查找的联系人" << endl;
string name;
cin >> name;
//判断指定的联系人是否存在通讯录中
int ret = isExist(abs, name);
if (ret != -1) //找到联系人
{
cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
cout << "性别: " << abs->personArray[ret].m_Sex << "\t";
cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
cout << "住址: " << abs->personArray[ret].m_Addr << endl;
}
else //未找到联系人
{
cout << "查无此人" << endl;
}
//任意键按下后 清屏
}
//5、修改指定联系人信息
void modifyPerson(Addressbooks * abs)
{
cout << "请输入您要修改的联系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) //找到指定联系人
{
//姓名
string name;
cout << "请输入姓名: " << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
//性别
cout << "请输入性别: " << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
//输入正确 退出循环输入
abs->personArray[ret].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄: " << endl;
int age = 0;
cin >> age;
abs->personArray[ret].m_Age = age;
//电话
cout << "请输入联系电话: " << endl;
string phone;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
//住址
cout << "请输入家庭住址: " << endl;
string address;
cin >> address;
abs->personArray[ret].m_Addr = address;
cout << "修改成功!" << endl;
}
else //未找到联系人
{
cout << "查无此人" << endl;
}
}
//6、清空所有联系人
void cleanPerson(Addressbooks * abs)
{
abs->m_Size = 0; //将当期记录联系人数量置为0,做逻辑清空操作
cout << "通讯录已清空" << endl;
//按任意键后清屏
}
//菜单界面
void showMenu()
{
cout << "***************************" << endl;
cout << "***** 1、添加联系人 *****" << endl;
cout << "***** 2、显示联系人 *****" << endl;
cout << "***** 3、删除联系人 *****" << endl;
cout << "***** 4、查找联系人 *****" << endl;
cout << "***** 5、修改联系人 *****" << endl;
cout << "***** 6、清空联系人 *****" << endl;
cout << "***** 0、退出通讯录 *****" << endl;
cout << "***************************" << endl;
}
int main()
{
//创建通讯录结构体变量
Addressbooks abs;
//初始化通讯录中当前人员个数
abs.m_Size = 0;
int select = 0; // 创建用户选择输入的变量
while (true)
{
//菜单调用
showMenu();
cin >> select;
switch (select)
{
case 1: // 1、添加联系人
addPerson(&abs); //利用地址传递,可以修饰实参
break;
case 2: // 2、显示联系人
showPerson(&abs);
break;
case 3: // 3、删除联系人
//{
// cout << "请输入删除联系人姓名: " << endl;
// string name;
// cin >> name;
// if (isExist(&abs, name) == -1)
// {
// cout << "查无此人" << endl;
// }
// else
// {
// cout << "找到此人 " << endl;
// }
//}
deletePerson(&abs);
break;
case 4: // 4、查找联系人
findPerson(&abs);
break;
case 5: // 5、修改联系人
modifyPerson(&abs);
break;
case 6: // 6、清空联系人
cleanPerson(&abs);
break;
case 0: // 0、退出通讯录
cout << "欢迎下次使用" << endl;
return 0;
break;
default:
break;
}
}
return 0;
}