目录
-
字母大小写问题
//读取一个字符并输出该字符及其 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);
}