- 编写一个C程序,运行时输人a,b,c三个值,输出其中值最大者
解题思路:
1-先对前两个数进行比较,把较大值赋给最大值
2-把最大值和第三个数比较,较大者赋给最大值
#include<stdio.h>
int main()
{
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
max=a>b?a:b;
if(max<c)
{
max=c;
}
printf("the max is:%d",max);
return 0;
}
- 求两个整数中的较大者
解题思路:
1-用一个函数实现比较得出两者中的较大者
2-在main函数调用此函数并输出结果
#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
#include<string.h>
#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<num;i++){
if(num%i==0) //能被整除的不是素数
break;
}
if(i==num) //到最后也未被整除的添加到数组中
IsPrime[ptr++]=num;
}
printf("%d以内的素数为:",n);
for(i=0;i<ptr;i++){
printf("%d\t",IsPrime[i]);
}
printf("\n素数个数为:%d",ptr);
return 0;
}
- //求1-1/2+1/3-1/4+…+1/99-1/100
1-注意分数数据类型
#include<stdio.h>
#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("数值和为:%f\n",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<stdio.h>
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-->%c\tB-->%c\tC-->%c\n",i,j,k);
}
}
}
- //现对N个数进行排序
解题思路
1-用一个数组存储输入的数据
2-用函数实现从小到大排序
3-实现从大到小和从小到达两种输出
#include<stdio.h>
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<stdio.h>
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<stdio.h>
#include<math.h>
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=%f\n",-c/b);
else if(d>=0)
{
x1=(b+sqrt(d))/(-2*a);
x2=(b-sqrt(d))/(-2*a);
printf("方程的根为:\nx1=%f\nx2=%f\n",x1,x2);
}
else
printf("the numbers are error!");
}
- //给出三角形的三边长,求三角形面积
解题思路
1-定义三条边长变量、面积变量s
2-用海伦公式求出面积并存在面积变量s并输出
#include<stdio.h>
#include<math.h>
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=%f\tb=%f\tc=%f\n",a,b,c);
printf("三角形的面积为:%f",s);
}
else
printf("the number is error!");
return 0;
}
- putchar()函数的功能是输出字符
#include<stdio.h>
void main()
{
char a='B',b='O',c='Y';
putchar(a);
putchar(b);
putchar(c);
// putchar('\n');
}
- //给出三角形的三边长,求三角形面积
解题思路
1-定义三条边长变量、面积变量s
2-用海伦公式求出面积并存在面积变量s并输出
3-注意判断三边长是否构成三角形
#include<stdio.h>
#include<math.h>
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=%f\tb=%f\tc=%f\n",a,b,c);
printf("三角形的面积为:%f",s);
}
else
printf("the number is error!");
return 0;
}
- //用函数实现1!+2!+3!+……+N!
解题思路
1-用函数实现功能阶乘
2-在循环中调用函数
#include<stdio.h>
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<stdio.h>
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<stdio.h>
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("%lf\n",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<stdio.h>
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<stdio.h>
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<stdio.h>
void main()
{
char x;
x=getchar();
if(x>='A'&&x<='Z')
x=x+32;
putchar(x);
}
- //大写字母,把它转换位小写字母,然后用putchar函数输出该小写字母
#include<stdio.h>
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<stdio.h>
void main()
{
char ch;
ch=getchar();
switch(ch)
{
case 'A':printf("the grade :85-100\n");break;
case 'B':printf("the grade :70-84\n");break;
case 'C':printf("the grade :60-69\n");break;
case 'D':printf("the grade :60以下\n");break;
default:printf("the data is error");
}
}
- //输入3个整数,按由小到大的顺序输出
解题思路
1-使用选择排序算法
2-使用冒泡排序算法
#include<stdio.h>
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<stdio.h>
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<stdio.h>
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("总价格应为%lf\n",sum);
}
- //有一阶跃函数y={-1(x<0);0(x=0);1(x>0),编译程序,输入一个x值,要求输出相应的y值
解题思路
1-用if语句进行判断
#include<stdio.h>
void main()
{
int x,y;
scanf("%d",&x);
if(x<0)
y=-1;
else if(x==0)
y=0;
else
y=1;
printf("x=%d\ty=%d",x,y);
}
- //输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于数的本身
解题思路
1-定义一个变量存储这个三位数
2-定义三个变量存储这个三位数的各位数字
3-进行判断
#include<stdio.h>
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("%d\t",s);
}
}
- //计算出1000以内的质数(第1版)
解题思路
1-一个大于1的自然数,除了1和本身,不能被其他自然整数整除
2-if筛选范围
3-循环结构遍历,选出质数
#include<stdio.h>
#define NUM 1000
void main()
{
int num,i,ptr=0;
for(num=2;num<=NUM;num++)
{
for(i=2;i<num;i++)
{
if(num%i==0) //存在除1和本身能整除的数,结束内循环,进行外循环
break;
}
if(i==num) //直到最后也未被整除
{
printf("%4d",i);
ptr+=1;
}
}
puts("\n质数个数:") ;
printf("\n%d",ptr);
}
- //计算2行3列矩阵的和
解题思路
1-定义三个2行3列二维数组
2-用rand()函数对前两个数组初始化
3-把前两个矩阵相加的值存储在第三个矩阵
#include<stdio.h>
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<stdio.h>
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("%d\t",z[i][j]);
}
printf("\n");
}
}
- //输入5名学生的分数并显示它们的总分和平均分
解题思路
1-用i统计人数,sum统计总分,grade记录分数。avg表示平均分;
2-用for循环实现
#include<stdio.h>
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<stdio.h>
#include<math.h>
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<stdio.h>
void main()
{
int i=1,sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
}
2-用do-while结构实现
#include<stdio.h>
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<stdio.h>
#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<stdio.h>
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("最大公约数:%d\n",m);
printf("最小公倍数:%d\n",p/m);//原始m*n值除以最大公约数就是最小公倍数
}
return 0;
}
- //把数组中的全部元素赋值到另一个数组中
解题思路
1-定义两个数组,给第一个数组赋随机值
2-直接进行元素拷贝
#include<stdio.h>
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]=%d\t",i,a[i]);
}
printf("\n");
i=0;
while(i<5)
{
b[j++]=a[i];
i++;
}
for(j=0;j<5;j++)
{
printf("b[%d]=%d\t",j,b[j]);
}
}
- //输入5名学生的分数并显示出60分以上的一览表
解题思路
1-定义两个数组,一个存放所有学生分数,一个存放及格学生分数下标
2-for语句遍历数组,if语句比较
#include<stdio.h>
#define NUM 5 //学生人数
void main()
{
int i,j=0;
int sum=0;//及格学生人数
int a[NUM],b[NUM];
for(i=0;i<NUM;i++)
{
printf("输入%d号学生分数;",i+1);
scanf("%d",&a[i]);
if(a[i]>=60)
{
b[j++]=i;//记录及格学生下标
}
}
printf("及格学生分数一览表:\n");
for(i=0;i<j;i++)
{
printf("%d号(%d分)\t",b[i]+1,a[b[i]]);
}
}
- //输入5名学生的分数并显示出其中的最高分和最低分
解题思路
1-定义一个数组存放五名学生分数
2-用for语句比较得出最大值、最小值
#include<stdio.h>
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(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
printf("最高分为:%lf\n最低分为:%lf",max,min);
}
- //把数组中的全部元素倒序赋值到另一个数组中
解题思路
1-从数组中按下标从小到大取元素值,赋给零一数组中下标从大到小赋值
#include<stdio.h>
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<stdio.h>
void main()
{
int a[5],i,j;
for(i=0;i<5;i++)
{
a[i]=rand()%100+1;
printf("a[%d]=%d\t",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]=%d\t",i,a[i]);
}
}
- //依次把1,2,3,4,5赋值给数组每个元素并显示
解题思路
1-定义一个数组
2-用for循环结构实现连续输入
#include<stdio.h>
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]=%2d\t",a[i]);
i++;
}
//用for语句
for(i;i<5;i++)
{
printf("a[%d]=%2d\t",i,a[i]);
}
}
- 创建一个链表并初始化
#include<stdio.h>
#include<stdlib.h>
// 创建一个链表
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;i<n;i++){
node=(LinkList *)malloc(sizeof(LinkList));
scanf("%d",&node->score);
end->next=node;
end=node;
}
end->next=NULL;//结束创建
return head;
}
- //输入一个整数,转化为字符串输出
解题思路
1-采用递归会简单些
#include<stdio.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
int m;
void hanoi(int n,char a,char b,char c){
m++;//移动次数
if(n==1) //一定要设置结束条件
printf("%c-->%c\n",a,c);
else{
hanoi(n-1,a,c,b);//n-1个塔移到B,C做辅助塔
printf("%c-->%c\n",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("循环次数:%d\n",m);
}
return 0;
}
- Strlen()函数
#include<stdio.h>
#include<string.h>
int main(){
char str1[] = "1234567890";
char str2[] = "china";
int l1 = strlen(str1);
int l2 = strlen(str2);
int l3;
strncpy(str1, str2, 5);
printf("%s\n", str1);
l3 = strlen(str1);
printf("%d %d %d\n", l1, l2, l3); // 输出10,5,10,不包括'\0'符号
return 0;
}
- //输出杨辉三角形
//杨辉三角形各元素的值是(a+b)^n的各项系数
解题思路
1-第一列和对角线为1
2-其余元素为上一行依次两个元素的和
3-二维数组存储各元素的值
#include<stdio.h>
#define LINE 10
int main(){
int a[LINE][LINE],i,j;
for(i=0;i<LINE;i++){
a[i][0]=1; // 使第一列元素值为 1
a[i][i]=1; // 使对角线元素值为 1
}
for(i=2;i<LINE;i++) //从第三行开始处理
for(j=1;j<i;j++){ //从第二列开始处理
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<LINE;i++){
for(j=0;j<=i;j++){
printf("%-5d",a[i][j]);
}
printf("\n");//换行输出
}
return 0;
}
- //预定义宏
__DATE__当前日期,一个以 “MMM DD YYYY” 格式表示的字符常量。__TIME__当前时间,一个以 “HH:MM:SS” 格式表示的字符常量。__FILE__这会包含当前文件名,一个字符串常量。__LINE__这会包含当前行号,一个十进制常量。__STDC__当编译器以 ANSI 标准编译时,则定义为 1。s
#include<stdio.h>
void main(){
printf("File:%s\n",__FILE__);
printf("Date:%s\n",__DATE__);
printf("Time:%s\n",__TIME__);
printf("Line:%d\n",__LINE__);
printf("ANSI:%d\n",__STDC__);
}
- //编写函数,交换两个字符串,要求形参以指针形式出现
△注意和交换两个数字不太一样
#include<stdio.h>
#include<string.h>
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<stdio.h>
//递归函数
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<stdio.h>
#include<string.h>
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]='\0';
puts(w);
}
- 用指针和数组两种方法实现如下功能:将一个字符串逆序存放
要求:- 主函数中完成输入和输出字符串
- 逆序功能用子函数完成
#include<stdio.h>
#include<string.h>
#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<stdio.h>
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<stdio.h>
void main(){
char str[20]="C Language",c;
int i=0;
while((c=str[i])!='\0')
{
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<stdio.h>
#define N 10
int j=0;
//删除函数
void delete(int arr[],int n){
int i,k;
for(i=0;i<N-j;i++)
if(arr[i]==n){
for(k=i;k<N-j-1;k++)
arr[k]=arr[k+1];
j++;
i--;//很重要,不能忽略,否则会跳过一个数没比较
}
}
int main(){
int arr[10],i,n;
for(i=0;i<N;i++)
scanf("%d",&arr[i]);//当输入的数个数超过数组元素时,会被当作下面要输入的比较值 ,所以要按规范输入
for(i=0;i<N;i++)
printf("%2d",arr[i]);
printf("\n");
printf("输入数值:");
scanf("%d",&n);//
delete(arr,n);
for(i=0;i<N-j;i++)
printf("%2d",arr[i]);
return 0;
}
- 结构体变量引用
#include<stdio.h>
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("%d\n%d",++pt->x,*pt->y);
}
- //编程求1!+2!+。。。+50!
#include<stdio.h>
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;
}

336

被折叠的 条评论
为什么被折叠?



