C语言谭浩强版代码

目录

 字母大小写问题

比较大小问题

成绩问题

 简单数问题

 复杂数问题

摄氏温度问题

 三角形问题

 其他图形问题

一元二次方根问题

分段函数问题

水仙花数问题

金字塔问题

 猜数游戏问题

 猴子吃桃问题

闰年问题

斐波那契数列问题

素数问题

逆序数问题

 百鸡问题

完全数问题

同构数问题

最大公约数问题

九九乘法口诀表问题

回文数

起泡法 

杨辉三角形 

 偏问题


  •  字母大小写问题

//读取一个字符并输出该字符及其 ASCII 值,同时还尝试将字符转换为大写形式(假设输入的是小写字母)
#include<stdio.h>
void main()
{
char c;
printf("请输入一个字符:");
scanf("%c",&c);
printf("%c,%d\n",c,c);
printf("%c,%d\n",c-32,c-32);//小写字母减上32就是大写字母,且字符的是%c
}
  • 比较大小问题

//求两个整数的较大值
#include <stdio.h>
void main()
()
{
int max(int x,int y);//被调用函数max的声明,三个函数都是int开头
int a,b,c;//先定义变量,a,b是两个数,然后c是较大的数
scanf("%d,%d",&a,&b);//然后输出变量,并把它们取地址到a,b中
c=max(a,b);//调用max函数,使得将输出的较大值赋予c
printf("max=%d\n",c);//打印输入c并换行
return 0;//如果输出无误,就返回0

}
int max(int x,int y)
{
	int z;
	if(x>y)z=x;
	else z=y;
	return(z);
}
//对四个输入的整数进行从小到大排序
#include<stdio.h>
void main()
{
	int a,b,c,d,t;
	printf("请输入四个整数:");
	scanf("%d,%d,%d,%d",&a,&b,&c,&d);
	if(a>b){t=b,b=a,a=t;}//在这种不是一个语句,而是有多条语句构成用花括号括起来
	if(a>c){t=c,c=a,a=t;}
	if(a>d){t=d,d=a,a=t;}
	if(b>c){t=c,c=b,b=t;}
	if(b>d){t=d,d=b,b=t;}
    if(c>d){t=d,d=c,c=t;}
	printf("该数从小到大排列是:%d,%d,%d,%d\n",a,b,c,d);
}
//编一程序,从键盘输入10个整数并保存到数组,求出该10个整数的最大值、最小值及平均值。
#include<stdio.h>
main()
{
int i,max,min,a[10];
float ave=0;

for(i=0;i<10;i++)scanf("%d",&a[i]);

max=min=a[0];
for(i=1;i<10;i++)

{if(a[i]>max) max=a[i];

/*{if(max<a[i])
t=max;
max=a[i];
a[i]=t;}千万不要这么写,数组寻找最大值不要用中间变量来做,直接谁大就直接互换*/



if(a[i]<min) min=a[i];
ave+=a[i];
}
ave=ave/10;
printf("%d,%d,%f",max,min,ave);
}
//在N行M列的二维数组x中,找出数组的最大值以及此最大值所在的行、列下标。 
#define N   2
#define M   3
#include "stdio.h"
void main()
{int i,j,x[N][M],max,line,col;
 printf("input array numbers:\n");
 for(i=0;i<N;i++)
 for(j=0;j<M;j++) 
	 scanf("%d",&x[i][j]);
 max=x[0][0]; line=col=0;
 for(i=0;i<N;i++)
 for(j=0;j<M;j++)
 if(max<x[i][j]) 
{max=x[i][j];line=i;col=j;} 
printf("\nmax=%d\tline=%d\tcol=%d\n",max,line,col);
}
//编一程序,从键盘输入10个整数并保存到数组,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
#include<stdio.h>
main()
{
int i,a[10],t,min,m;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=a[0];m=0;
for(i=1;i<10;i++)
if(a[i]<min){min=a[i];m=i;}
t=a[0];a[0]=a[m];a[m]=t;
printf("%d,%d",min,m);
}

  • 成绩问题

//有50个学生,要求输出成绩在80分以上的学生的学号和成绩
#include<stdio.h>
void main()
{
int a,b;//声明变量,a表示学号(第一名学生就是学号1这种),b表示成绩
for(a=1;a<=50;a++)//这里面有个易错的部分就是for循环要做scanf函数之外,一般我们做题就是先定义在输入,但是我们不能随便输入,给他一个限定条件那就是只在1-50之间
{
scanf("%d,%d",&a,&b);
if(b>=80)
printf("%d,%d\n",a,b);
}
}
//从键盘输入四门课程的(整数)分数,输入成绩信息,计算并输出平均分数,要求输入输出有一定提示,输出的平均分数保留二位小数
#include<stdio.h>
void main()
{
  int a,b,c,d;
  printf("请输入四门课的成绩:");
  scanf("%d,%d,%d,%d",&a,&b,&c,&d);
  printf("四门课的成绩是:%d,%d,%d,%d\n",a,b,c,d);
  printf("平均分数为:%.2f\n",(a+b+c+d)/4.0);//输出两位小数的是%.2f
}
//编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90 分以上为:'A’;80~89 分为'B’;70~79 分为℃’;60-69 分为'D';60 分以下为E’
#include<stdio.h>
main()
{int score;
scanf("%d",&score);
switch(score/10)
{
case 9:case 10:putchar('A');break;
case 8:putchar('B');break;
case 7:putchar('C');break;
case 6:putchar('D');break;
default:putchar('E');
}
}
//将10个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分数段的人数存到b数组中:成绩为60到69的人数存到b[0]中,成绩为70到79的人数存到b[1],成绩为80到89的人数存到b[2],成绩为90到99的人数存到b[3],成绩为100的人数存到b[4],成绩为60分以下的人数存到b[5]中。 

#include<stdio.h>
main()
{
	int a[10],b[6]={0},i;
	for(i=0;i<10;i++)
	{
scanf("%d",&a[i]);
switch(a[i]/10)
{
case 6:b[0]++;break;
case 7:b[1]++;break;
	case 8:b[2]++;break;
		case 9:b[3]++;break;
			case 10:b[4]++;break;
				default:b[5]++;

}
	}
for(i=0;i<6;i++) printf("%d",b[i]);
}

  •  简单数问题

//输入两个整数并计算它们的除法结果和余数
#include<stdio.h>
void main()
{
   int a,b;
   printf("请输入两个数:");
   scanf("%d,%d",&a,&b);
   printf("%f,%d\n",1.0*a/b,a%b);//%d是整形,%f是浮点型
}
//编写程序判断输入的正整数是否既是5又是7的整数倍。若是则输出“yes”,否则输出“no”
#include<stdio.h>
main()
{
int x;
scanf(" %d, ",&x);
if(x%5==0&&x%7==0) printf("Yes");
else printf("No.");
}
//将输入的浮点数分解为整数部分和小数部分
#include<stdio.h>
void main()
{
float x,y;
int z;
printf("请输入一个小数:");
scanf("%f",&x);
z=int(x);
y=x-z;
printf("其整数部分是%d,其小数部分是%f\n",z,y);
}
//判断并输出该整数是否能被 5 和 7 同时整除
#include<stdio.h>
void main()
{
 int i;
 printf("请输入一个数:");
 scanf("%d",&i);
 if(i%5==0&&i%7==0)
 {printf("行\n");}
 else 
 {printf("不行\n");}
}
//根据输入的整数判断是正数还是负数
#include<stdio.h>
void main()
{
	int i;
	printf("请输入一个整数:");
	scanf("%d",&i);
	if(i>0)printf("正数\n");
	else if(i==0) printf("该数为0\n");//犯了不只一次错误,两个数判断是否相等用==好!!!
		else printf("负数\n");
}
// 求300以内能被17整除的所有整数
#include<stdio.h>
main()
{
int x,k;
for(x=1;x<=300;x++)
{
if(x%17!=0)continue;
printf("%d\t",x);
}
}
//1*2*3*4*5的值
#include<stdio.h>
void main()
{
int a,b;
a=1;
for(b=2;b<=5;b++)//注意,每个语句后都以分号结尾,但是for循环后不加分号
a=a*b;
printf("结果是%d\n",a);

}
//有一个数组,内放10个学生的英语成绩,写一个函数,求出平均分,并且打印出高于平均分的英语成绩。
#include<stdio.h>
float ave(int a[])
{float sum=0,average: int i;
for(i=0;i<10;i++)
sum+=a[i];
average=sum/10;
teturn average;
}
main()
{int a[10],i;
float x;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
x=ave(a);
printf("%f",x);
for(i=0;i<10;i++)
if(a[i]>x)printf("%d ",a[i])
}

//编写一个函数计算任一输入的整数的各位数字之和。主函数包括输入输出和调用该函数。
#include<stdio.h>
int sum(int x)
{
	int s=0;
	while(x>0)
	{s=s+x%10;x=x/10;}
	return s;
}
main()
{
	int x;
	scanf("%d",&x);
	printf("%d",sum(x));
}

 复杂数问题

// 假设x、y是整数,编写程序求x的最后3位数,要求x、y从键盘输入。
#include<stdio.h>
main()
{
int i,x,y;
int last=1;
printf("Input x, y:");
scanf("%d,%d",&x,&y);
for (i=1;i<=y;i++)
   last=last*x;
printf("The 3 digits:%d,%d,%d\n",last/100,last/10%10,last%10);
}
//求所有满足 ABC+CBA=1333 条件的三位数
#include<stdio.h>
main()
{int x,a,b,c,sum=0;
for(x=100;x<999;x++)
{
a=x/100;b=x/10%10;c=x%10;
if(x+c*100+b*10+a==1333){printf("%d ",x);sum++;}
}
printf("共有%d",sum);
}
//求出200~300之间所有满足三个数字之积为42,三个数字之和为12的整数;程序要求使用多重循环结构实现。
#include<stdio.h>
main()
{
int a,b;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
if(2*a*b==42&&2+a+b==12)
printf("%d ",2*100+a*10+b);
}
// 用0--9这十个数字可以组成多少无重复的三位数?
#include<stdio.h>
main()
{
int x,a,b,c,sum=0;
for(x=100;x<=999;x++)
{
	a=x/100;b=x/10%10;c=x%10;
	if(a!=b&&a!=c&&b!=c)
	{
		printf("%d ",x);
		sum++;
	}
}
printf("sum=%d",sum);
}
//  统计从键盘输入的一行字符的个数(以回车键作为输入结束标记)
#include<stdio.h>
main()
{
char c;int num=0;
c=getchar();
while(c!='\n')
{
	num++;
	c=getchar();
}
printf("%d",num);
}
// 输入一行字符)分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
main()
{ char c;
  int letter=0,space=0,digit=0,other=0;
  printf("请输入一行字符:\n");
  while((c=getchar())!='\n')
  { if(c>='a'&&c<='z'||c>='A'&&c<='z')  letter++;
    else if(c==' ')  space++;
    else if(c>='0'&&c<='9')  digit++;
    else  other++;
  }
  printf("字母数=%d, 空格数=%d, 数字数=%d, 其他字符数\
=%d\n",letter,space,digit,other);
}
//计算并输出用户输入的一行字符的字符数(不包括换行符)
#include<stdio.h>
void main()
{
	char c;//定义一段字符串
	int count=0;//初始字符数为0个
	printf("请输入一段字符串(按回车结束):");
	c=getchar();//读取第一个字符,第一个c != '\n'用于在计数时排除换行符。
	do//do while结构是一种循环控制结构,do块中的代码会先执行一次,然后检查while中的条件。
	{
		if(c!='\n')
		{count++;
	}
			c=getchar();//读取下一个字符,第二个c != '\n'用于控制循环的终止条件,确保在读取到换行符时结束循环。
	}while(c!='\n');
printf("字符数量是:%d\n",count);
}
//求1-1/2+1/3-1/4+...+1/99-1/100
#include<stdio.h>
void main()
{
	float s,sign,term,deno;//s表示最后的和,sign表示分子,deno表示分母,term表示整个分数
	s=1;sign=-1;
	for(deno=2;deno<=100;deno++)
	{term=1.0*sign/deno;//乘以1.0是为了让他变成浮点型
	s=s+term;sign=-sign;	
	}
printf("最后结果为:%f\n",s);
}
  • 摄氏温度问题

//输入华氏温度,我会转换成摄氏温度,摄氏温度=5/9*(华氏温度-32)
#include<stdio.h>
void main()
{
float h,s;
printf("请输入华氏温度:");
scanf("%f",&h);
s=5*(h-32)/9;
printf("摄氏温度为:%f\n",s);
}
  •  三角形问题

//编写一个程序,要求有键盘输入三个数,计算以这三个数位边长的三角形的面积,用海伦公式。
#include<stdio.h>
#include<math.h>
main()
{
float a,b,c,area,p;
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>b&&a+c>b&&b+c>a)
{
p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%f",area);
}else printf("not");
}
//  输入三个数,判断能否构成三角形?能构成三角形,是等边三角形、等腰三角形还是它三角形?
#include<stdio.h>
main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{printf("yes");
if(a==b&&b==c)printf("等边");
else if(a==b||b==c||a==c)
printf("等腰");
else printf("other");
}
else printf("no");
}
  •  其他图形问题

//输入圆的半径r和一个整形数k,但k=1时,计算圆的面积,但k=2时,计算圆的周长,但k=3时,既要求周长又要求面积
#include<stdio.h>
main()
{float r,s,c;
int k;
printf("请输入半径:");
scanf("%f",&r);
printf("请输入k:");
scanf("%d",&k);
s=3.14*r*r;
c=3.14*2*r;
switch(k)
{
case 1:printf("%f",s);break;
case 2:printf("%f",c);break;
case 3:printf("%f,%f",s,c);
}
}
//求一个长方形的周长和面积
#include<stdio.h>
void main()
{
	int z,s,c,k;
	printf("请输入长方形的长和宽");
	scanf("%d,%d",&c,&k);
	z=(c+k)*2;
	s=c*k;
	printf("周长是%d,面积是%d\n",z,s);
}

  • 一元二次方根问题

//编写程序,求方程a*x*x+b*x+c=0的解x
#include<stdio.h>
#include<math.h>
main()
{
	float a,b,c,t,x1,x2;
	scanf("%f,%f,%f",&a,&b,&c);
	t=b*b-4*a*c;
	if(t>0)
	{
x1=(-b+sqrt(t))/(2*a);
x2=(-b-sqrt(t))/(2*a);
printf("%f,%f",x1,x2);
	}
	else if(t==0)
	{x1=x2=-b/(2*a);
	printf("x1=x2=%f",x1);
	}else printf("无实数根");
}
  • 分段函数问题

/*   |x     (x<1)
  y=|2x-1  (1<=x<10)
      |0     (10<=x<100)
      |3x-11 (X>=100)        根据输入的浮点数x计算相应的y值*/

#include<stdio.h>
void main()
{
float x,y;
printf("请输入x的值:");
scanf("%f",&x);
if(x<1)y=x;
else if(x<10)y=2*x-1;
else if(x<100)y=0;
else if(x>=100)y=3*x-11;//else if后面要加条件句,当else后不需要
printf("%f\n",y);
}
/*   |-1 (x<0)
   y=|0  (x=0)
     |1  (x>0)  用switch编程实现该函数关系*/
#include <stdio.h>//根据输入的整数x的值判断其是负数、零还是正数,并将对应的值赋给 y
void main()
{
 int x,y,m;
 printf("请输入一个整数:");
 scanf("%d",&x);
 if(x<0)m=-1;//// 判断 x 的值并设置 m
 else if(x==0)m=0;//关于等于号一定要注意==是判断左边是否等于右边,而=是赋值的意思!!!
 else m=1;
 switch(m)// 根据 m 的值使用 switch 语句设置 y
 {
 case -1:y=-1;break;
 case 0:y=0;break;
 case 1:y=1;
}
printf("%d\n",y);
}

  • 水仙花数问题

//求所有水仙花数 ABC=A^3+B^3+C^3,他考察的就是分离的问题,和逆序数有异曲同工之妙
#include<stdio.h>
main()
{int x,a,b,c,sum=0;
for(x=100;x<=999;x++)
{
a=x/100;b=x/10%10;c=x%10;
if(a*a*a+b*b*b+c*c*c==x){printf("%d ",x);sum++;}
}
printf("共有%d",sum);
}
  • 金字塔问题

/*打印一个高度为4的金字塔

   *
  ***
 *****
*******   */

#include<stdio.h>
void main()
{
int i,j,k;
for(i=1;i<=4;i++)// 控制打印的行数,这里是4行。
{
	for(j=1;j<=4-i;j++)
		printf(" ");// 负责打印空格。随着行数 i 的增加,空格的数量减少。
	for(k=1;k<=2*i-1;k++)
		printf("*");//控制每一行打印的星号数量。每一行的星号数量是 2 * i - 1,即第一行1个,第二行3个,第三行5个,以此类推。
	printf("\n");
}
}
/*打印一个特定的数字金字塔形状
        1
       121
      12321
     1234321
    123454321
   12345654321
  1234567654321
 123456787654321
12345678987654321   */
#include<stdio.h>
void main()
{
	int i,j,k;//i,表示行数,j表示空格
	for(i=1;i<=9;i++)
	{for(j=1;j<=9-i;j++)
	printf(" ");//打印空格
	for(k=1;k<=i;k++)
		printf("%d",k);//打印上坡的所有的数字
	for(k=i-1;k>=1;k--)
		printf("%d",k);
	printf("\n");//打印所以下坡的所有的数字
	}
}
  •  猜数游戏问题

// 猜数游戏:任意设置一个整数,请用户从键盘上输入数据猜想设值的数是什么,告诉用户是猜大了还是小了。10次以内猜对,用户获胜。否则,告诉用户设置的数据是什么。
#include "stdio.h"
void main()
{int num=123,x,n;
printf("hint:0<number<1000\n"); /*给出数据范围的提示信息*/
for(n=1;n<=10;n++)
{printf("guess:");
scanf("%d"
,&x);
if(x==num) {printf("Win!\n");break;}
if(x>num) printf("bigger!\n");
if(x<num) printf("smaller!\n");
}
if(n==11) printf("Lost!the number is %d\n",x);
}
  •  猴子吃桃问题

/*猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第 10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少桃子。*/
#include <stdio.h>
void main()
{
    int x = 1, day;
    for(day = 9; day >= 1; day--) // 从第10天向前推
        x = (x + 1) * 2; // 当前桃子数为前一天剩下的一半加一
    printf("第一天一共摘的%d个桃\n", x);
}
/*每个苹果0.8元,的一天买了2个苹果;从第二天开始,每天买前一天的两倍,直到每天购买的苹果个数达到不超过100的最大值,编写程序求每天平均花多少钱。*/
#include<stdio.h>
main()
{
int day=0,num=2;
float sum=0.0,ave;
while(num<=100)
{
sum+=0.8*num;
day++;num*=2;
}
ave=sum/day;
printf("\nave=%5.2f",ave);
}
/*一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10 次落地时,共经过多少米?第10次反弹多高?*/
#include <stdio.h>
main()
{float h,s;
int i;
h=100;s=100;
for(i=2;i<=10;i++)
{
h=h/2;s=s+h*2;
}
h=h/2;
printf("%f,%f",s,h);
}
  • 闰年问题

//判断2000-2500年中的每一天是否为闰年,并将结果输出(闰年的判断条件如下:年份能被4整除且不能被100整除,或者年份能被400整除。)
#include <stdio.h>
void main()
{
int a;
for(a=2000;a<=2500;a++)
if(a%4==0&&a%100!=0||a%400==0)//不等于是!=,而不是!==,==是判断是否相等,但=是赋值的意思
printf("闰年是%d\n",a);
}
  • 斐波那契数列问题

/*特定的数列的前10项的累加和 ,循环基于斐波那契数列进行变化
s=2/1-3/2+5/3-8/5...求前10项之和*/
#include <stdio.h>

void main() {
    float s = 0, t, fenzi = 2, fenmu = 1, sign = 1;
    int i;

    // 循环计算数列的前10项
    for (i = 1; i <= 10; i++) {
        t = sign * fenzi / fenmu; // 计算当前项
        s = s + t; // 累加到总和
        sign = -sign; // 切换符号
        float x = fenmu; // 保存当前分母
        fenmu = fenzi; // 更新分母
        fenzi = x + fenzi; // 更新分子,新的分子是前一个分母加前一个分子
    }

    // 输出结果
    printf("s = %f\n", s);
}
//计算并输出斐波那契数列的前30个数。斐波那契数列的定义是:前两个数为1,后续每个数都是前两个数的和。
#include<stdio.h>
void main()
{
  int f1,f2,f3,i;
  f1=f2=1;
  printf("%d\n", f1); // 输出第一个数
  printf("%d\n", f2); // 输出第二个数
  for(i=3;i<=30;i++)
  {
	  f3=f1+f2;
	  printf("%d\n",f3);
  f1=f2;f2=f3;// 更新前两个数
  }
}
//利用数组,求斐波拉契数列的前10项
#include<stdio.h>
main()
{
int a[10],i;
a[0]=a[1]=1;
for(i=2;i<10;i++)
a[i]=a[i-1]+a[i-2];//注意:右边千万不要弄成a[i]=a[1]+a[0],这步就是该代码的核心。
//输出
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
//编程求裴波那契(Fibonacci)数列(1,1,2,3,5,8,…,)第10项的值。
#include<stdio.h>
int fib(int n)
{
	int res;
	if(n==1||n==2) res=1;
	else res=fib(n-1)+fib(n-2);
	return res;
}
main()
{int n,y;
scanf("%d,&n");
y=fib(n);
printf("%d",y);
}
  • 素数问题

//输入一个数,判断他是否为素数(除了1和该数本身之外,不能被其他任何数整除的数)但实际上,只需检查到根号n即可,因为n有因子a和b(n=a*b),必然有个因子会小于或等于根号n
#include<stdio.h>
#include <math.h>//要使用底下的sqrt()函数必须要调用math数据库
void main()
{
int n,i;
printf("请输入一个数:");
scanf("%d",&n);
for(i=2;i<=sqrt(n);i++)//sqrt(n)就是根号n的意思
if(n%i==0)break;
if(i>sqrt(n))
printf("是素数\n");
else printf("不是素数\n");
}
  • 逆序数问题

//给一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字。
#include<stdio.h>
main()
{
int x,a,b,c,d;
scanf("%d",&x);
a=x/1000;b=x/100%10;c=x/10%10;d=x%10;
if(a!=0)printf("4:%d%d%d%d",d,c,b,a);
else if(b!=0) printf("3:%d%d%d",d,c,b);
else if(c!=0) printf("2:%d%d",d,c);
else if(d!=0)printf("1:%d",d);
}
//此方法比较麻烦,不推荐使用
//将输入的整数 y 的每一位数字从右到左打印出来
#include<stdio.h>
void main()
{
int i,j;
printf("请输入一个数字:");
scanf("%d",&i);
 while(i!=0)
{j=i%10;
 printf("%d",j);
 printf(" ");
 i=i/10;
 }
}
//一般我们推荐使用这种求逆序数问题
//输入10个整数分别按顺序和逆序输出。
#include<stdio.h>
main()
{
	int a[10],i;
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	for(i=0;i<=10;i++)
		printf("%3d",a[i]);
	printf("\n");
	for(i=9;i>=0;i--)
		printf("%3d ",a[i]);
}

  •  百鸡问题

//中国古代数学家张丘建提出的“百鸡问题”:一只大公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现在有100个钱,要买100只鸡,是否可以?若可以,给出一个解
#include<stdio.h>
main()
{
int a,b,c;
for(a=1;a<=20;a++)
for(b=1;b<=33;b++)
{
c=100-a-b;
if(a*5.0+b*3.0+c/3.0==100.0)
printf("%d,%d",a,b,c);
}
}
//某旅行团有男人、女人和小孩共30人,在纽约一家小饭馆里吃饭,该饭馆按人头收费,每个男人收3美元,每个女人收2美元,每个小孩收1美元,共收取50美元。共有多少组解?
#include<stdio.h>
void main()
{ int i,j,k,n=0;
  for(i=1;i<=16;i++)
      for(j=1;j<=25;j++)
          {k=30-i-j;
           if(i*3+j*2+k==50)
           {n++;    printf("男人:%d,女人:%d,小孩:%d\n",i,j,k);}
            }
   printf("共有%d组解。",n);
   }

  • 完全数问题

#include <stdio.h>
main()
{ int m,s,i;
  for(m=2;m<1000;m++)
  { s=0;
    for(i=1;i<m;i++)
      if((m%i)==0) s=s+i;
    if(s==m)
    { printf("%d Its factors are ",m);
      for(i=1;i<m;i++)
        if(m%i==0)printf("%d,",i);
      printf("\b \n");
    }
  }
}
  • 同构数问题

/*试编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如5是25的右边数,25是625的右边数,所以5和25都是同构数。*/
#include<stdio.h>
main()
{
int i;
for(i=1;i<100;i++)
if(i*i%10==i|| i*i%100==i)/最重要的就是这一句话
printf("%3d",i);
}
  • 最大公约数问题

//输入两个正整数n和m,求其最大公约数和最小公倍数,用辗转相除法。 
#include <stdio.h>
main()
{ int p,r,n,m,t;//这里的n是被除数,m是除数,t是中间变量,r是余数
  printf("请输入两个正整数n,m:");
  scanf("%d,%d",&n,&m);


  if(n<m)
  { t=n; n=m; m=t; }        /*把大数放在n中,小数放在m中*/
  p=n*m;         /*先将n和m的乘积保存在p中,以便求最小公倍数时用*/

 /*求n和m的最大公约数*/
  while(m!=0)  //保证除数不为零即可                 
  { r=n%m;
    n=m;//将除数赋值给被除数
    m=r;//将余数赋值给除数
  }
  printf("它们的最大公约数为:%d\n",n);//最后n是最大的公约数
  printf("它们的最小公倍数为:%d\n",p/n);   /*P是原来两个整数的乘积*/
}
  • 九九乘法口诀表问题

//请编写一程序,打印出九九乘法口诀表(例:1*1=1)。
#include<stdio.h>
main()
{
int i,j;
for(i=1;i<=9;i++)
{
	for(j=1;j<=i;j++)//凡是三角形,第二个for循环永远都是内嵌套的,且他总是要设两个变量,j永远都是小于i的
		printf("%d*%d=%-3d ",i,j,i*j);
printf("\n");
}
}
  • 回文数问题

/*判断任意整数x是否为回文数
(回文数:顺读与反读都一样的数)*/


#include<stdio.h>
main()
{long   x;       int i,j,n,d[20];   
scanf("%ld",&x);
n=0;
do{d[n]=x%10;x=x/10;n++;
    }while(x!=0);
 for(i=0,j=n-1;i<j;i++,j--)
  if(d[i]!=d[j])  break;
if(i<j)  printf("NOT");
else  printf("YES");
}
#include<stdio.h>
#include<string.h>//这里面引用的gets函数
main()
{
char x[80];//定义八十个空间
int i,j;//i,j都表示下标
 gets(x);//输入字符串,这里把数字当成字符串看待
 i=0;j=strlen(x)-1;//i表示第一个字符,j表示最后一个字符,举个例子,长度为八,但数组的下标却是从0到7,所以要减一
 while(i<j)//也不能等于,只能左边比右边小
 {
if(x[i]!=x[j])break;//则说明他不是回文数
i++;j--;}
if(i<j) printf("no");//如果在他们还没相遇是就退出说明他不是回文数
else printf("yes");
}
  • 起泡法问题

//输入5个数,用“起泡法”对5个数由从小到大排序
#include<stdio.h>
main()
{
	int a[5],i,j,t;//无论什么代码第一步都是定义,再使用,只有在显示时有行有列才会用到二维数组,起泡法用不上,i表示的是轮数,j表示数组下标,t是中间变量。

	for(i=0;i<5;i++)
		scanf("%d",&a[i]);//这步相当于输入五个数字给五个相连的数组,注意要加上一个&


	for(i=1;i<5;i++)//他一共有5个数,比较了4轮,注意i=1,千万不要从0开始
		for(j=0;j<5-i;j++)//第一轮比较了0,1,2,3四个数
			if(a[j]>a[j+1])//如果下面的数比上面的数要大
			{
				t=a[j];a[j]=a[j+1];a[j+1]=t;//那就交换顺序,t是中间变量
			}
			for(i=0;i<5;i++)//数组不能一次性全部输出,要用一个for循环来实现功能
				printf("%d ",a[i]);

}
  • 杨辉三角形问题 

//杨辉三角形(他的特点就是该数字=上面的数字+上面左边的数字)
#include<stdio.h>
main()
{
	int a[10][10],i,j;//先定义


	for(i=0;i<10;i++)
		for(j=0;j<=i;j++)//因为他是三角形,所以要输出他的一半,而一半的公式就是j<=1
		{
			if(j==0||i==j) a[i][j]=1;
			else a[i][j]=a[i-1][j]+a[i-1][j-1];
		}

//输出
		for(i=0;i<10;i++)
		{
			for(j=0;j<=i;j++)////凡是三角形,第二个for循环永远都是内嵌套的,且他总是要设两个变量,j永远都是小于i的
				printf("%-5d",a[i][j]);
			printf("\n");
		}
}
  • 矩阵问题问题

//将一个 n*m 二维数组的行和列元素互换,存到另一个 m*n的二维数组中,并输出转置其结果。例如:static it a[2][3]={
  {1.2.3},{4,5,6}}
#include<stdio.h>
main()
{
int a[2][3],b[3][2],i,j;
//输入
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
//程序主体
for(i=0;i<2;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
//输出
for(i=0;i<3;i++)
{
	for(j=0;j<2;j++)
		printf("%d ",b[i][j]);
	printf("\n");
}
}
//编程完成下述功能:从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该矩阵两条对角线上各元素值之和并打印出结果。
#include<stdio.h>
main()
{
int a[20][20],n,i,j,sum=0;
printf("请输入20以内的数字:");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
	scanf("%d",&a[i][j]);
	if(i==j||i+j==n-1) sum=sum+a[i][j];
}
printf("%d",sum);
}
//有一个5*5二维数组,试编程求周边元素及对角线无素之和,并输出该数组值最小的元素。
#include<stdio.h>
main()
{
int a[5][5],i,j,sum=0;
printf("请输入矩阵的元素值:");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{ 
	scanf("%d",&a[i][j]);
	if(i==0||i==4||j==0||j==4||i==j||i+j==4)sum=sum+a[i][j];
}printf("%d",sum);
}
  • 插入数问题问题 

//编写程序,从键盘输入n个由小到大的顺序排好的数列和一个数insert_value,把insert value 插入到由这n个数组成的数列中,而且仍然保持由小到大的顺序,若 imsert value比原有所有的数都大时放在最后,比原有的数都小时放在最前面。
#include<stdio.h>
main()
{
int x,i,j;
int a[11];
scanf("%d",&x);
for(i=0;i<10;i++) scanf("%d",&a[i]);
for(i=0;i<11;i++)
{
if(x<a[i])
{for(j=9;j>=i;j--) a[j+1]=a[j]; break;}
}
a[i]=x;
for(i=0;i<11;i++)
printf("%d ",a[i]);

}
  • 递归函数 

//编程求mn(m,n都为整数且n>0)采用递归的方式来做
#include<stdio.h>
int jc(int m,int n)
{
	int x;
	if(n==0) x=1;
	else x=m*jc(m,n-1);
	return x;
}
main()
{
	int m,n,y;
	scanf("%d%,d",&m,&n);
	y=jc(m,n);
	printf("%d",y);
}
  •  偏问题

//求sn=a+aa+aaa+aaaa+..ta...a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时 n=5)。n和a的值由键盘输入,请编程实现以上和过程。
#include <stdio.h>
main()
{ int a,n,i=1,sn=0,tn=0;
  printf("a,n=:");
  scanf("%d,%d",&a,&n);
  while(i<=n)
  { tn=tn+a;                 /*赋值后的tn为i个a组成数的值*/
    sn=sn+tn;                /*赋值后的sn为多项式前i项之和*/
    a=a*10;
    ++i;
   }
   printf("a+aa+aaa+...=%d\n",sn);
}
//.编写程序,计算 1!+2!+3!+.…….n!的值,其中n的值由用户输入。
#include<stdio.h>
main()
{
int n,i,sum,j,t;
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=1;
for(j=1;j<=i;j++)
t=t*j;
sum=sum+t;
}
printf("%d",sum);
}
//.编写程序,计算 1!+2!+3!+.…….n!的值,其中n的值由用户输入,用递归的方式做
#include <stdio.h>
int fun(int n) 
{
    if (n == 1 || n == 0)
        return 1;
    else
        return n * fun(n - 1);
}
main() 
{
    int n, i, s = 0;
    printf("请输入 n 的值\n");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        s += fun(i);
    printf("%d\n", s);
    return 0;
}   
//先定义5行3列的2维整数数组intarray,并让用户从键盘输入15个数存储在该数组中。输一个数值如10,然后在数组中查找该元素。若找到则输出所在的下标值,否则输出0。
#include<stdio.h>
main()
{
	int intarray[5][3],i,j,n,a=0;//a=0是标记变量,好像这种东西都要用标记变量来做
	for(i=0;i<5;i++)
		for(j=0;j<3;j++)
			scanf("%d",&intarray[i][j]);
		printf("请输入一个数值");
			scanf("%d",&n);
		for(i=0;i<5;i++)
		for(j=0;j<3;j++)
			if(intarray[i][j]==n) {printf("他的下标分别是%d,%d",i,j);a=1;}		
if(a==0) printf("0");
}
/*若有如下公式:
pi^2/6=1/1^2+1/2^2+1/3^2+.....+1/n^2
试根据上述公式编程计算pi的近似值
(精确到10^-6)*/

#include<stdio.h>
#include<math.h>
main()
{
float sum,t;
int i,n=1;
sum=0;t=1;
while(t>=1e-6)
{sum=sum+t; 
n++; 
t=1.0/(n*n);}
sum=sqrt(sum*6);
printf("%f",sum);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值