0
点赞
收藏
分享

微信扫一扫

期末复习_C\C++实验练习题


目录:

  1. 数据类型
  2. 选择结构
  3. 循环控制结构
  4. 函数
  5. 数组
  6. 字符串
  7. 结构体
  8. 指针
  9. 文件操作
  10. 面向对象(类)

小学期内容:

  1. 链表操作
  2. 多级菜单
  3. 迷宫游戏
  4. 贪吃蛇游戏
  5. 大作业_基于多态的职工管理系统
  6. 通讯录关系系统

经典例题导航

  1. 大小写字母转化
  2. 判断闰年
  3. 判定素数
  4. 费波纳基数列
  5. 递归求阶乘
  6. 冒泡排序
  7. 统计单词个数
  8. 候选人投票
  9. 选择排序
  10. 指针法排序
  11. 折半查找算法
  12. 杨辉三角
  13. 最大公约数
  14. 最小公倍数
  15. 偶数和
  16. 求位数
  17. 打印实心、空心菱形
  18. 百钱买百鸡
  19. 汉诺塔
  20. 水仙花数
  21. 求完全数

内容:

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;
}


举报

相关推荐

0 条评论