栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

002 谭浩强主要习题代码练习汇总

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

002 谭浩强主要习题代码练习汇总

    编写一个C程序,运行时输人a,b,c三个值,输出其中值最大者

解题思路:
1-先对前两个数进行比较,把较大值赋给最大值
2-把最大值和第三个数比较,较大者赋给最大值

#include
int main()
{
	int a,b,c,max;
	scanf("%d,%d,%d",&a,&b,&c);
	max=a>b?a:b;
	if(max 
    求两个整数中的较大者

解题思路:
1-用一个函数实现比较得出两者中的较大者
2-在main函数调用此函数并输出结果

#include
int max(int x,int y)
{
	return x>y?x:y;
 } 
 
int main()
{
	int a,b,c;
	scanf("%d,%d",&a,&b);
	c=max(a,b);
	printf("The max mum is:%d",c);
}
    求多项式1-1/2+1/3-1/4…+1/99-1/100

解题思路
1-分别定义分子、分母、符号、和数
2-分母为偶数时分子为负数

#include
int main()
{
	int sign=1;
	double term,demo,sum=1.0;
	for(demo=2.0;demo<=100;demo++)
	{
		sign = -sign;
		term=sign/demo;
		sum=sum+term;
		}	
	printf("the sum is:%lf",sum);
	return 0;
}
    //求两个整数之和

解题思路
1-定义三个变量a,b,sum;注意sum要初始化
2-通过调用函数scanf进行数值输入
3-sum存放两个整数之和

#include
int main()
{
	int a,b,sum=0;
	scanf("%d",&a);
	scanf("%d",&b);
	sum=a+b;
	printf("The sum is:%d",sum); 
	return 0;
 }
    求12345

解题思路
1-用函数实现该功能
2-在主函数调用并输出

#include
int  factorial(int i)
{
	int j,sum=1;;
	for( j=1;j<=i;j++)
	{
	
		sum *= j;
	}
	return sum;
}

int main()
{
	int x,sum=0;
	scanf("%d",&x);
	sum = factorial(x);
	printf("%d",sum);
	return 0;
}
    质数筛选

解题思路
1-素数: 指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
2-只用判断奇数是否为素数
3-得到的素数存储在一个数组中

//Q:输入n,输出不大于n的素数及个数

#include
#include

#define max 100 
int main(){
	int n,i,num;
	int IsPrime[max],ptr=0;
	puts("输入一个正整数:");
	scanf("%d",&n);
	IsPrime[ptr++]=2;
	
	for(num=3;num<=n;num+=2){//只判断奇数是否为素数 
		for(i=2;i 
    //求1-1/2+1/3-1/4+…+1/99-1/100
1-注意分数数据类型 
   
#include
#define NUM 100
int main(){
   float sum=0,i,flag=-1;//
   for(i=1;i<=NUM;i++){
   	flag=flag*(-1);
   	sum=sum+(flag*(1/i)) ;//假设i设置为int型数据时,1/i在i为1时结果为1,i>1时表达式结果为0 
   }
   printf("数值和为:%fn",sum);
   return 0;
}
    两乒乓球队进行比赛,各处三人。甲队为A,B,C三人,乙队为X,Y,Z三。以抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程找出3赛手的名单

解题思路
1-c只能和y比
2-A可以和Y,Z比
3-B可以和任何一人比

#include

void main()
{
	char i,j,k;//分别为ABC三人对手
	for(k='X';k<='Z';k++)
	{
		if(k!='X'&&k!='Z')
		{
			for(i='X';i<='Z';i++)
			if(i!='X')
			for(j='X';j<='Z';j++)
				if(i!=j&&i!=k&&j!=k)//保证三人对手不重复 
					printf("A-->%ctB-->%ctC-->%cn",i,j,k);

		}
	 } 
	
}
    //现对N个数进行排序

解题思路
1-用一个数组存储输入的数据
2-用函数实现从小到大排序
3-实现从大到小和从小到达两种输出

#include
int fun(int a[10])
{
	int i,j,t;
	for(i=0;i<9;i++)
		for(j=i+1;j<10;j++)
			if(a[i]>a[j])
		{
			t=a[i];a[i]=a[j];a[j]=t;
		}
	   千万注意if中的花括号   
}

int main()
{
	int a[10],i;
	printf("原数据顺序:n");
	for(i=0;i<10;i++)
	{
		a[i]=rand()%10;
	printf("%3d",a[i]);
	}
	printf("n"); 
	fun(a);
	printf("从小到大输出:n");
	for(i=0;i<10;i++)
	{
		printf("%3d",a[i]);
		if(i==9)
			printf("n");
	}
	printf("从大到小输出:n");
	for(i=9;i>=0;i--)
		printf("%3d",a[i]);
		 
}
    //根据输入年、月,判断该月有多少天

解题思路

    对输入月份进行判断,正确则继续执行,否则结束运行判断输入年份是否为闰年;
    - 闰年2月份为29天
    - 否则2月份为28天
#include

void main()
{
	int month,year;
	printf("input the year and month:");
	scanf("%d%d",&year,&month);
	if(month<13&&month>0)
	{
		switch(month)
		{
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				printf("31天");
				break;
			case 4:
			case 6:
			case 9:
			case 11:
			printf("30天");break;
			case 2:
				if((year%4==0&&year%100!=0)||year%400==0)
					printf("29天");
				else
					printf("28天");
				break;
		}
	}
 }
    //求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac>0

解题思路
1-注意进行b^2-4ac>=0的判断
2-利用math.h中的函数求解

#include
#include

void main()
{
	float a,b,c,d,x1,x2;
	printf("enter three numbers!n");
	scanf("%f%f%f",&a,&b,&c);
	d=b*b-4*a*c;
	   注意进行a是否为0的判断   
	if(a==0)
		printf("x1=x2=%fn",-c/b);		
	else if(d>=0)
	{
		x1=(b+sqrt(d))/(-2*a);
		x2=(b-sqrt(d))/(-2*a);
		printf("方程的根为:nx1=%fnx2=%fn",x1,x2);
	}
	else
		printf("the numbers are error!");
		
 }
    //给出三角形的三边长,求三角形面积

解题思路
1-定义三条边长变量、面积变量s
2-用海伦公式求出面积并存在面积变量s并输出

#include
#include

int main()
{
	float a,b,c,sum=0.0,s;
	printf("输入三个数!n");
	scanf("%f%f%f",&a,&b,&c);
	
	if(a+b>c && a+c>b && b+c>a)
{
	sum=(a+b+c)/2;
	s=sqrt(sum*(sum-a)*(sum-b)*(sum-c));
	printf("a=%ftb=%ftc=%fn",a,b,c);
	printf("三角形的面积为:%f",s); 
}
	else
		printf("the number is error!");
	return 0;
}
    putchar()函数的功能是输出字符
#include
void main()
{
	char a='B',b='O',c='Y';
	putchar(a);
	putchar(b);
	putchar(c);
//	putchar('n');
	
 }
    //给出三角形的三边长,求三角形面积

解题思路
1-定义三条边长变量、面积变量s
2-用海伦公式求出面积并存在面积变量s并输出
3-注意判断三边长是否构成三角形

#include
#include

int main()
{
	float a,b,c,sum=0.0,s;
	printf("输入三个数!n");
	scanf("%f%f%f",&a,&b,&c);
   如果不进行判断,输入一些数据会得到错误的数值    
	if(a+b>c && a+c>b && b+c>a)
{
	sum=(a+b+c)/2;
	s=sqrt(sum*(sum-a)*(sum-b)*(sum-c));
	printf("a=%ftb=%ftc=%fn",a,b,c);
	printf("三角形的面积为:%f",s); 
}
	else
		printf("the number is error!");
	return 0;
}
    //用函数实现1!+2!+3!+……+N!

解题思路
1-用函数实现功能阶乘
2-在循环中调用函数

#include

int fac(int x)
{
	int i,sum=1;
	for(i=1;i<=x;i++)
	{
		sum=sum*i;
	}
	return sum;
 } 
 void main()
 {
 	int i,n,sum=0;
 	scanf("%d",&n);
 	for(i=1;i<=n;i++)
 	{
 		sum=sum+fac(i);
	 }
	 printf("%d",sum);
 }
    //给定一个大写字母,要求要小写字母输出
#include

int main()
{
	char x,y;
	printf("please enter a char from A to Z!n");
	scanf("%c",&x);
	y=x+32;
	printf("输入的字母转化为小写字母为:%c",y);
	return 0;
}
    计算存款利息。有1000元,想存一年。有3种方法可选:
    (1)活期,年利率为r1,0.0036;
    (2)一年期定期,年利率为r2,0.0225;
    (3)存两次半年定期,年利率为r3,0.0198;
    请分别计算出一年后按3种方法所得到的本息和
#include
double sum(double x)
{
	int num;
	double sum,r1=0.0036,r2=0.0225,r3=0.0198;
	printf("input the num between 1 to 3!n");

	printf("%lfn",x*(1+r1));
	scanf("%d",&num);
	switch(num)
	{
		case 1:sum=x*(1.0+r1); break;
		case 2:sum=x*(1+r2);break;
		case 3:sum=2*((x/2.0)*(1+r3)); break;
		default:printf("please input a right num!");
	}
	return sum;
}
int main()
{
	double i=1000;
	double cash_and_benfit;
	cash_and_benfit=sum(i);
	printf("the sum is:%lf",cash_and_benfit);
	return 0;
 }
    //进行华氏度到摄氏度的转换

解题思路
1-注意变量类型

#include
int main()
{
	double c,f;
	scanf("%lf",&f);
	c=5.0/9*(f-32);
	printf("c=%lf",c);
	return 0;
 }
    //写一函数,将一个3*3整数矩阵转置

解题思路
1-用一个二位数组存放矩阵;
2-交换矩阵行和列存放在另一个数组中
3-输出这个数组

#include
void main()
{
	int a[3][3],b[3][3];
	int i,j;
	printf("原本的矩阵n");
	for(i=0;i<3;i++)
	{
	for(j=0;j<3;j++)
		{
			a[i][j]=rand()%10;	
			printf("%2d",a[i][j]);
			
		}
	printf("n");	
	}
	for(j=0;j<3;j++)
	{
		for(i=0;i<3;i++)
		{
			b[i][j]=a[j][i];
		}
	}
	printf("转置后的矩阵n");
	for(j=0;j<3;j++)
	{
		for(i=0;i<3;i++)
		{
			printf("%2d",a[i][j]);
		}
	printf("n");
	}
}
    //输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
#include
void main()
{
	char x;
	x=getchar();
	if(x>='A'&&x<='Z')
		x=x+32;
	putchar(x);
}
    //大写字母,把它转换位小写字母,然后用putchar函数输出该小写字母
#include
 
void main()
{
	char x,y;
	x=getchar();
	y=x+32;
	putchar(y);
}
    //要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70-84分,C等为60-69分,D等为60分以下。成绩的等级由键盘输入//

解题思路
1-用switch结构进行选择输出

#include
void main()
{
	char ch;
	ch=getchar();
	switch(ch)
	{
		case 'A':printf("the grade :85-100n");break;
		case 'B':printf("the grade :70-84n");break;
		case 'C':printf("the grade :60-69n");break;
		case 'D':printf("the grade :60以下n");break;
		default:printf("the data is error"); 
	} 				
}
    //输入3个整数,按由小到大的顺序输出

解题思路
1-使用选择排序算法
2-使用冒泡排序算法

#include
void main()
{
	float a[3];
	int i;
	printf("输入三个数:");
	for(i=0;i<3;i++)
		scanf("%f",&a[i]);
	for(i=0;i<3;i++)
		printf("%5.2f",a[i]);


//1-使用选择排序算法 ,3个数比较两次 
	for(i=0;i<2;i++)
	{
		int j,t;
		for(j=i+1;j<3;j++)
		if(a[i]>a[j])
			{
				t=a[i];a[i]=a[j];a[j]=t;
			}
	}

   	

//2-使用冒泡排序算法。3个数,比较两次 
for(i=0;i<3-1;i++){
	int j,t;
	//大的数放后面 
	for(j=0;j<2-i;j++){
		if(a[j]>a[j+1]){
			t=a[j];
			a[j]=a[j+1];
			a[j+1]=t;
		}
	}
} 

   
	
//输出 
printf("n");
for(i=0;i<3;i++)
	printf("%5.2f",a[i]);
}
    //写一程序,判断某一年是否为闰年

解题思路
1-能整除4不能整除100 || 能整除400 的为闰年
2-用if结构进行判断输出

#include
void main()
{
	int year;
	printf("input a year :");
	scanf("%d",&year);
	if((year%4==0 && year%100!=0)||year%400==0)
		printf("%d是闰年n",year);
	else
		printf("%d不是闰年n",year);
 } 
    运输公司对用户计算运输费用。路程越远,运费越低。标准如下。

S<250 没有折扣250<=s<500 2%折扣500<=s<1000 5%折扣1000<=s<2000 8%折扣2000<=s<3000 10%折扣3000<=s 15%折扣

解题思路
1-用if结构进行选择

#include
void main()
{
	double s,p,w,d,sum;
	printf("input the price,weight,s :");
	scanf("%lf%lf%lf",&s,&p,&w);
	if(s<250)
		d=0;
	else if(s>=250 && s<500)
		d=2;
	else if(s>=500 && s<1000)
		d=5;
	else if(s>=1000 && s<2000)
		d=8;
	else if(s>=2000 && s<3000)
		d=10;
	else
		d=15;
	sum=p*w*s*(1-d/100);
	printf("总价格应为%lfn",sum);
		
 }
    //有一阶跃函数y={-1(x<0);0(x=0);1(x>0),编译程序,输入一个x值,要求输出相应的y值

解题思路
1-用if语句进行判断

#include
void main()
{
	int x,y;
	scanf("%d",&x);
	if(x<0)
		y=-1;
	else if(x==0)
		y=0;
	else
		y=1;
	printf("x=%dty=%d",x,y); 
}
    //输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于数的本身

解题思路
1-定义一个变量存储这个三位数
2-定义三个变量存储这个三位数的各位数字
3-进行判断

#include

void main()
{
	int s ,x,y,z;
	printf("The figures are:");
	for(s=100;s<=999;s++)
	{
		x=s/100;
		y=(s/10)%10;
		z=s%10;
		if(x*x*x+y*y*y+z*z*z==s)
			printf("%dt",s);
	}
 }
    //计算出1000以内的质数(第1版)

解题思路
1-一个大于1的自然数,除了1和本身,不能被其他自然整数整除
2-if筛选范围
3-循环结构遍历,选出质数

#include
#define NUM 1000
void main()

{
	int num,i,ptr=0; 
	for(num=2;num<=NUM;num++)
	{
		for(i=2;i 
    //计算2行3列矩阵的和

解题思路
1-定义三个2行3列二维数组
2-用rand()函数对前两个数组初始化
3-把前两个矩阵相加的值存储在第三个矩阵

#include
void main()
{
	int a[2][3],b[2][3],c[2][3];
	int i,j;
	puts("第一个矩阵");
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		{
			a[i][j]=rand()%9+1;
			b[i][j]=rand()%9+1;
			printf("%2d",a[i][j]); 
		}
	printf("n");	
	}	
	puts("第二个矩阵");
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%2d",b[i][j]);
		}
		printf("n");
	}
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)
		{
			c[i][j]=a[i][j]+b[i][j];
		}
	puts("矩阵和"); 
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)
		{
			printf("%3d",c[i][j]);
			if(j==2)
			{
				printf("n");
			}
		}
}
    //计算矩阵x和y的积

解题思路
1-定义三个二维数组

#include

void main()
{
	int x[2][3]={{1,2,3},{4,5,6}},y[3][2]={{1,5},{5,3},{8,1}};
	int z[2][2]={0},i,j;
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		{
			
			z[i][0]+=x[i][j]*y[j][0]; //不同元素乘积和 
			z[i][1]+=x[i][j]*y[j][1];
		}
	}
	//输出乘积矩阵 
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			printf("%dt",z[i][j]);
		}
		printf("n");
	}
 }
    //输入5名学生的分数并显示它们的总分和平均分

解题思路
1-用i统计人数,sum统计总分,grade记录分数。avg表示平均分;
2-用for循环实现

#include
void main()
{
	int i;
	double sum=0,grade,avg;
	for(i=1;i<=5;i++)
	{
		printf("请输入%d号分数:",i);
		scanf("%lf",&grade);
		sum=sum+grade;
	}
	avg=sum/i;
	printf("总分为:%lf,平均分为:%lf",sum,avg);
}
    //用公式(Π/4)=1-1/3+1/5-1/7+…求Π近似值,直到某一项绝对值小于10^6
#include
#include


int main(){
	double PI,num=0,i;
	int flag=-1;
	for(i=1;fabs(flag*(1/i))>=1e-6;i+=2){
		flag=flag*(-1);
		num+=flag*(1/i);
	}
	PI=num*4;
	printf("%10.8f",PI);
	return 0;
}
    //求1+2+3+…+100
1-用while实现   

#include

void main()
{
	int i=1,sum=0;
	while(i<=100)
	{
		sum=sum+i;
		i++;
	}
	printf("%dn",sum);
}
   

   
2-用do-while结构实现 
   

#include
void main()
{
	int i=1,sum=0;
	do{
		sum=sum+i;
		i++;
	}while(i<=100);
	printf("%d",sum);
 } 
    //在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款人数以及平均每人捐款的数目。

解题思路
1-分别定义人数x,捐款数目amount、捐款总额total,平均每人捐款数目avg
2-用for循环解决累加

#include
#define SUM 100000
void main()
{
	int x;
	double total=0,amount,avg;
	for(x=1;x<=1000;x++)
	{
		printf("please input amount :");
		scanf("%lf",&amount); 
		total+=amount;
		if(total>=SUM)
			break;//跳出并结束循环 
	}
	avg=total/x;
	printf("捐款人数为:%d,平均每人捐款的数目:%lf",x,avg);
 }
    //辗转相除法

解题思路
//输入n和m,输出n和m的最大公约数和最小公倍数:

#include

int main(){
	int n,m,r,p;
	int temp;
	

while(1){	//要实现程序不中断的连续判断,输入语句需要放进循环中,否则会陷入死循环 
	//输入数值
	scanf("%d%d",&n,&m);
	//判断两数大小,大数做被除数
	if(n<=m){
		temp=m;
		m=n;
		n=temp;
	}
	p=m*n;
	
	//求最大公约数,辗转相除法 
	while(1){
		r=n%m;
		if(r!=0){
			n=m;
			m=r;
		}
		else 
			break;
	}
	printf("最大公约数:%dn",m);
	printf("最小公倍数:%dn",p/m);//原始m*n值除以最大公约数就是最小公倍数 
	
}	
	
	return 0;
	 
}
    //把数组中的全部元素赋值到另一个数组中

解题思路
1-定义两个数组,给第一个数组赋随机值
2-直接进行元素拷贝

#include

void main()
{
	int a[5],b[5]; 
	int i=0,j=0;
	for(i;i<5;i++)
	{
		a[i]=rand()%100+1;//获得一个1-100的伪随机数,赋给数组元素 
		printf("a[%d]=%dt",i,a[i]);
	 }
	 printf("n");
	 i=0;
	 while(i<5)
	 {
	 	b[j++]=a[i];
	 	i++;
	  }
	  for(j=0;j<5;j++)
	  {
	  	printf("b[%d]=%dt",j,b[j]);
	   } 
 }
    //输入5名学生的分数并显示出60分以上的一览表

解题思路
1-定义两个数组,一个存放所有学生分数,一个存放及格学生分数下标
2-for语句遍历数组,if语句比较

#include

#define NUM 5	//学生人数

void main()
{
	int i,j=0;
	int sum=0;//及格学生人数
	int a[NUM],b[NUM];
	for(i=0;i=60)
		{
			b[j++]=i;//记录及格学生下标 
		}
	 } 
	 printf("及格学生分数一览表:n"); 
	 for(i=0;i 
    //输入5名学生的分数并显示出其中的最高分和最低分

解题思路
1-定义一个数组存放五名学生分数
2-用for语句比较得出最大值、最小值

#include
void main()
{
	int i,j;
	double a[5];
	for(i=0;i<5;i++)
	{
		printf("输入%d号学生分数:",i+1);
		scanf("%lf",&a[i]);
	}
	double max=a[0],min=a[0];
	for(i=0;i<5;i++)
	{
		
		if(maxa[i])
			min=a[i];
	}
	printf("最高分为:%lfn最低分为:%lf",max,min);
}
    //把数组中的全部元素倒序赋值到另一个数组中

解题思路
1-从数组中按下标从小到大取元素值,赋给零一数组中下标从大到小赋值

#include

void main()
{
	int a[]={1,2,3,4};
	int b[4],i;
	for(i=0;i<4;i++)
	{
		b[i]=a[3-i];
	}
	i=0;
	while(i<4)
	{
		printf("%2d",b[i]);
		i++;
	}
}
    //对数组中的全部元素进行倒序排列

解题思路
1-定义一个数组,并初始化
2-利用for语句实现倒叙排列

#include

void main()
{
	int a[5],i,j;
	for(i=0;i<5;i++)
	{
		a[i]=rand()%100+1;
		printf("a[%d]=%dt",i,a[i]);
	}
	printf("n");
	for(i=0;i<(5/2);i++)
	{
		int j=a[i];
		a[i]=a[4-i];
		a[4-i]=j;
	}
	for(i=0;i<5;i++)
	{
		printf("a[%d]=%dt",i,a[i]);
	}
 }
    //依次把1,2,3,4,5赋值给数组每个元素并显示

解题思路
1-定义一个数组
2-用for循环结构实现连续输入

#include

void main()
{
	int a[5],i;
	for(i=0;i<5;i++)
	{
		printf("请输入a[%d]:",i);
		scanf("%d",&a[i]);
	}
	i=0;
   
while(i<5)
	{
		printf("a[%d]=%2dt",a[i]);
		i++;
	}
   	

//用for语句

	for(i;i<5;i++)
	{
		printf("a[%d]=%2dt",i,a[i]);
	 } 
}
    创建一个链表并初始化
#include
#include 

// 创建一个链表
typedef struct student{
	int score;
	struct student *next;
}linkList;	//此时定义结构体变量时,可以直接用linkList定义变量 

linkList *creat(int n); //原型声明 

void main()
{
	
	 
}
//初始化一个链表,n为链表节点个数
 linkList *creat(int n){
 	linkList *head,*node,*end;//定义头结点、普通结点 、尾结点
	 head=(linkList *)malloc(sizeof(linkList));
	 end=head;//若是空链表则头尾结点一样 
	 int i;
	 for(i=0;iscore);
	 	end->next=node;
	 	end=node;
	 } 
	 end->next=NULL;//结束创建
	 return head; 
 } 
    //输入一个整数,转化为字符串输出

解题思路
1-采用递归会简单些

#include
void change(int n){
	if(n/10==0){
		printf("转化后字符串为:%c",n%10+'0');
	}
	else{
		change(n/10) ;
		printf("%c",n%10+'0');	//此输出语句不可少,否则只输出最高位对应字符 
	}
 		
	
	
}
int main(){
	int n;
	while(1){  //让程序可以一直运行 
		printf("n输入一个整数:");
		scanf("%d",&n); 
		if(n<0)
			puts("重新输入"); 
		else{
			change(n);	
		}
		
	}
	return 0;
}
    Strcnpy函数
#include
#include

void main(){
	char str1[10]="12345",str2[10]="6788";
	strncpy(str1,str2,2);
	puts(str1);
//str2的前两个字符替换str中的前两个
	
}
    //汉诺塔递归:n个盘子从A移动到C,一次只能移动一个,大盘在下,小盘在上

解题思路
1-先将n-1个盘子从A移到B
2-然后可以将第n个盘子从A移动到C move(n,A,C)
3-我们再将n-2个盘子从B移到A
4-第n-1个移到C
5-重复上面步骤

#include
int m;
void hanoi(int n,char a,char b,char c){
	m++;//移动次数 
	if(n==1)		//一定要设置结束条件 
		printf("%c-->%cn",a,c);
	else{
		hanoi(n-1,a,c,b);//n-1个塔移到B,C做辅助塔  
		printf("%c-->%cn",a,c);//A柱上第n个盘子 直接移到C柱 ,此输出语句不能少 
		hanoi(n-1,b,a,c);//把B柱上n-1个盘子移到C柱 
	}
	
	
}
int main(){
	int n;
	while(1){
		m=0; 
		printf("输入塔数:");
		scanf("%d",&n);
		if(n<=0)
			printf("the data error!n");
		else
			
			hanoi(n,'A','B','C');//n个塔移到C,B做辅助塔  
		printf("循环次数:%dn",m);
		
	}
	return 0; 
}
    Strlen()函数
#include
#include

int main(){
    char str1[] = "1234567890";
    char str2[] = "china";
    int l1 = strlen(str1);
    int l2 = strlen(str2);
    int l3;
    strncpy(str1, str2, 5);
    printf("%sn", str1);
    l3 = strlen(str1);
    printf("%d %d %dn", l1, l2, l3);   // 输出10,5,10,不包括''符号 
    return 0;
}
    //输出杨辉三角形
    //杨辉三角形各元素的值是(a+b)^n的各项系数

解题思路
1-第一列和对角线为1
2-其余元素为上一行依次两个元素的和
3-二维数组存储各元素的值

#include
#define LINE 10
int main(){
	int a[LINE][LINE],i,j;
	for(i=0;i 
    //预定义宏

__DATE__ 当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量。__TIME__ 当前时间,一个以 “HH:MM:SS” 格式表示的字符常量。__FILE__ 这会包含当前文件名,一个字符串常量。__LINE__ 这会包含当前行号,一个十进制常量。__STDC__ 当编译器以 ANSI 标准编译时,则定义为 1。s

#include

void main(){
	printf("File:%sn",__FILE__);
	printf("Date:%sn",__DATE__);
	printf("Time:%sn",__TIME__);
	printf("Line:%dn",__LINE__); 
	printf("ANSI:%dn",__STDC__);
}
    //编写函数,交换两个字符串,要求形参以指针形式出现

△注意和交换两个数字不太一样

#include
#include
void change(char *a,char *b){
	char p[100];
	strcpy(p,a);
	strcpy(a,b);
	strcpy(b,p);
	//不能用赋值符直接赋值
	puts("交换后的字符串如下"); 
	puts(a);
	puts(b);
}

int main(){
	char a[100],b[100];
	gets(a);
	gets(b);
	change(a,b);
	return 0;
}
    //递归求函数值
#include

//递归函数

int total(int n){
	int c; 
	if(n==1)
		c=1;
	else 
		c=total(n-1)+n+1;
} 

int main(){
	int n;
	scanf("%d",&n);
	printf("%d",total(n));
	return 0;
}
    二维数组
#include
#include

int main()
{
	char w[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"};
	int i;
	for(i=0;i<5;i++)
	{
		w[i]=a[i][strlen(a[i])-1];
	}
		w[5]='';
		puts(w);
}
    用指针和数组两种方法实现如下功能:将一个字符串逆序存放
    要求:
      主函数中完成输入和输出字符串逆序功能用子函数完成
#include
#include
#define N 20
//指针法
 
//void revert(char *i_pointer,int n);



//逆序函数(指针法)
   
void revert(char *i_pointer,int n){
	char *i,*j,temp;
	for(i=i_pointer,j=i_pointer+n-1;i<=j;i++,j--){
		temp=*i;*i=*j;*j=temp;
	}

}  
    

//逆序函数(数组法)
void revert(char str[]   此处可以不确定个数   ,int n){
	int i,j,temp;
	for(i=0,j=n-1;i<=j;i++,j--){
		temp=str[i];
		str[i]=str[j];
		str[j]=temp;
	}
	
} 

//主函数,实现输入、输出 
int main(){
	char str[N];
	gets(str);//输入时遇到空格不会结束 
	revert(str,strlen(str));
	puts(str);
	return ;
}
    交换两个数值
#include
void fun(int *p,int *q)
{
	int t;
	t=*p;*p=*q;*q=t;
	*q=*p;
}
void main()
{
	int a=0,b=9;
	fun(&a,&b);
	printf("%d%d",a,b);
 }
    预定义指令
#define LEFTTER 1
#include

void main(){
	char str[20]="C Language",c;
	int i=0;
	while((c=str[i])!='')
	{
		i++;
		#ifdef LEFTTER		// 判断某个宏是否被定义,若已定义,执行随后的语句 
			if(c>='a'&&c<'z')
				c=c+1;
			else if (c=='z')
				c=c-25;
		#else		// 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
		
			if(c>='B'&&c<='Z')
				c=c-1;
			else if(c=='A')
				c=c+25;
		#endif			//  #if, #ifdef, #ifndef这些条件命令的结束标志.
		printf("%c",c);
	}
}
    一个数组十个元素,编写程序删除所有值为n的元素
    要求:

主函数完成n的输入,数组元素的输入以及删除后的数组输出删除功能用子函数完成

#include
#define N 10
int j=0;
//删除函数 
void  delete(int arr[],int n){
	int i,k;
	for(i=0;i 
    结构体变量引用
#include
void main()
{
	struct st
	{
		int x;int *y;
	}*pt;
	int a[]={1,2},b[]={3,4};
	struct st c[2]={10,a,20,b};
	pt=c; 
	printf("%dn%d",++pt->x,*pt->y);
}
    //编程求1!+2!+。。。+50!
#include

int main(){
	double i,sum=0,n=1;
	for(i=1;i<=50;i++){
		n=n*i;
		sum=sum+n;
	}
	printf("%d",sum);
	
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718062.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号