1.输入日期确定今天是第几天
#include <stdio.h>
//输入三个数,从小到大输出
int main(){
int x,y,z,t;
printf("please input three numbers(1,2,3):\n");
scanf("%d,%d,%d",&x,&y,&z);
if(x>y){
t = x;
x = y;
y = t;
}
if(x>z){
t = x;
x = z;
z = t;
}
if(y>z){
t = y;
y = z;
z = t;
}
printf("从小到大:%d %d %d",x,y,z);
}
2.输入三个数,从小到大输出
#include <stdio.h>
//输入三个数,从小到大输出
int main(){
int x,y,z,t;
printf("please input three numbers(1,2,3):\n");
scanf("%d,%d,%d",&x,&y,&z);
if(x>y){
t = x;
x = y;
y = t;
}
if(x>z){
t = x;
x = z;
z = t;
}
if(y>z){
t = y;
y = z;
z = t;
}
printf("从小到大:%d %d %d",x,y,z);
}
3.古典问题 兔子
//古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,
//小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
//问每个月的兔子总数为多少?
#include <stdio.h>
//递归解决
int sum(int n){
if(n==1||n==2){
return 1;
}
return sum(n-1)+sum(n-2);
}
int main(){
int f1=1,f2=1,i;
for(i=1;i<=20;i++)
}
4.判断素数
//让n除以2到n的平方根之间的每一个数,如果n能被2到n的平方根之间的某个数整除,
//则说明n不是素数,否则n一定是素数。(n大于2)
//让n除以2到n/2之间的每一个数,如果都除不尽,那这个数就是素数
#include <stdio.h>
#include <math.h>
//判断101到200之间的素数
int main(){
int i,j,count=0;
for(i=101;i<=200;i++){
for(j=2;j<=sqrt(i);j++){ //for(j=101;j<=i/2;j++)
if(i%j==0){
break;
}
}
if(j>sqrt(i)){
count++;
printf("%d ",i);
if(count%5 == 0){
printf("\n");
}
}
}
}
5.因式分解(输入 90 90=233*5)
//让n除以2到n的平方根之间的每一个数,如果n能被2到n的平方根之间的某个数整除,
//则说明n不是素数,否则n一定是素数。(n大于2)
//让n除以2到n/2之间的每一个数,如果都除不尽,那这个数就是素数
#include <stdio.h>
#include <math.h>
//判断101到200之间的素数
int main(){
int i,j,count=0;
for(i=101;i<=200;i++){
for(j=2;j<=sqrt(i);j++){ //for(j=101;j<=i/2;j++)
if(i%j==0){
break;
}
}
if(j>sqrt(i)){
count++;
printf("%d ",i);
if(count%5 == 0){
printf("\n");
}
}
}
}
6.嵌套三维运算
//嵌套的三维运算
#include <stdio.h>
int main(){
int score;
char grade;
printf("请输入分数:");
scanf("%d",&score);
grade = (score>=90)?'A':((score>=60)?'B':'C');
printf("%c\n",grade);
return 0;
}
7.最大公约数,最小公倍数
最大公约数:
假如需要求 1997 和 615 两个正整数的最大公约数,进行过程如下:
1997 / 615 = 3 (余152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1,以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
最小公倍数:
假设a,b两个数的最大公约数为m,则最小公倍数n=ab/m
例如24和36,用辗转相除法得到最大公约数为12。再通过公式2436/12得到最小公倍数为72。
//最大公约数和最小公倍数
#include <stdio.h>
int main(){
int a,b,t,r;
printf("please input three numbers:");
scanf("%d %d",&a,&b);
if(a < b){
t = b;
b = a;
a = t;
}
r = a%b;
int n = a*b;
while(r!=0){
a = b;
b = r;
r = a%b;
}
printf("最大公约数:%d,最小公倍数是:%d",b,n/b);
return 0;
}
8.统计输入一行字符串的字母,空格,数字等的个数
方法一: 常规计算
//输入一行字符,分别统计出其中英语字母、空格、数字和其他字符的个数
#include <stdio.h>
int main(){
char c;
int letters=0,spaces=0,digits=0,others=0;
printf("请输入一些字母:\n");
while((c=getchar())!='\n'){
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
letters++;
}else if(c>='0'&&c<='9'){
digits++;
}else if(c==' '){
spaces++;
}else{
others++;
}
}
printf("字母=%d,数字=%d,空格=%d,其他=%d",letters,digits,spaces,others);
}
方法二: 通过函数的方法
#include <stdio.h>
#include <string.h>
void count(char c[]){
int letters=0,space=0,digit=0,other=0;
int i;
for (i = 0; c[i]; i++)
//直到c[i]等于'\0',也就是数值0时,for循环判断结果为假,循环终止。
{
if(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z')
letters++;
else if(c[i]==' ')
space++;
else if(c[i]>='0'&&c[i]<='9')
digit++;
else
other++;
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d",letters,space,digit,other);
}
int main(){
char c[32];
printf("请输入一行字符:\n");
gets(c);
count(c);
return 0;
}
方法三 通过函数指针的方式
#include <stdio.h>
void count(char arr[]){
int letters=0,space=0,digit=0,other=0;
char *p=arr;
char c;
while(*p!='\n') {
c =*p ;
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
other++;
p++;
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d",letters,space,digit,other);
}
int main(){
char c[32];
int i =0;
printf("请输入一行字符:\n");
while((c[i]=getchar())!='\n')
i++;
count(c);
return 0;
}
9.完全数
如果一个数恰好等于它的真因子之和,则称该数为完全数。
如6 =1+2+3; 求1000以内的所有完全数。
#include <stdio.h>
#define N 1000
int main(){
int i,j,k,n,sum;
int a[256];
for(i=2;i<=N;i++){
sum = a[0] = 1;
k=0;
for(j=2;j<=(i/2);j++){
if(i%j==0){
sum +=j;
a[++k]=j;
}
}
if(i==sum){
printf("%d=%d",i,a[0]);
for(n=1;n<=k;n++){
printf("+%d",a[n]);
}
printf("\n");
}
}
}
10.小球自由落体运动
一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第10次落地时反弹多高?共经过多少米? 结果保留两位小数
#include <stdio.h>
int main(){
float h,s;
h=s=100;
h=h/2;
for(i=0;i<10;i++){
//注意从第二次开始,每次的路径都是双倍的
s=s+2*h;
h=h/2;
}
printf("第十次落地共经过%f米,第十次反弹高度为%f",s,h);
return 0;
}
11.乒乓球对比赛问题
两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人,通过抽签决定比赛名单。
有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找出三队赛手的名单
#include <stdio.h>
#include <stdlib.h>
int main(){
char i,j,k;
for(i='x';i<='z';i++){
for(j='x';j<='z';j++){
if(i!=j){
for(k='x';k<='z';k++){
if(i!=k&&j!=k){
if(i!='x'&&k!='x'&&k!='z'){
printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
}
}
}
12.打印菱形
方法一
#include<stdio.h>
int main()
{
int line = 0;
scanf("%d", &line);
//上部分
int i = 0;
for (i = 0; i < line; i++)
{
int j = 0;
//打印空格
for (j = 0; j < line - 1 -i; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
//下部分
for (i = 0; i < line - 1; i++)
{
int j = 0;
//打印空格
for (j = 0; j < i+1; j++)
{
printf(" ");
}
//打印*
for (j = 0; j < 2 * (line - 1 - i)-1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
方法二
#include <stdio.h>
int main(){
int i,j,k;
for(i=0;i<=3;i++){
for(j=0;j<=2-i;j++){
printf(" ");
}
for(k=0;k<=2*i;k++){
printf("*");
}
printf("\n");
}
for(i=0;i<=2;i++){
for(j=0;j<=i;j++){
printf(" ");
}
for(k=0;k<=4-2*i;k++){
printf("*");
}
printf("\n");
}
}
13.回文
//字符串的方式
#include<stdio.h>
int main(void)
{
int i,k;
char c[20];
printf("Enter a word:");
k=0;//字符串一次输出赋值。
while(1){
c[k]=getchar();//从键盘读取字符
if(c[k]=='\n')//如果输入回车赋值读取结束,开始进行下面的语段
break;
k++;
}//此时k为0+输入多少个字符串的值
i=0;//定义数组新变量
k=k-1;
while(c[k]==c[i])//让字符串从两边向里面依次比较
{
if(i==k)
break;//比较到中间值while循环结束
i++;
k--;
}
if(i>=k)//如果比较到最中间的字符说明该字符串为会文
printf("It is a palindrome\n");
else
printf("It is not a palindrom\n");
return 0;
}
14打印杨辉三角
#include <stdio.h>
int main(){
int i,j;
int a[10][10];
for(i=0;i<10;i++){
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++){
for(j=1;j<i;j++){
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<10;i++){
for(j=0;j<=i;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}