1.输入10个字符,按照ascii码表排序并输出
排序从小到大,应用冒泡或者选择法排序(核心:交换数值)
首先将字符输入
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0;
int a[10] = { 0 };
for (i = 0; i < 10; i++)//将数输入进数组中
{
scanf("%d", &a[i]);
}
}
字符输出
for (i = 0; i < 10; i++)
{
printf("%d", a[i]);
}
方法一
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0, j = 0, k = 0;//循环变量
char a[10] = { 0 };//定义一个存储10字符数组
char t = 0;
printf("请输入10个字符\n");
for (i = 0; i < 10; i++)循环输入
{
scanf("%c", &a[i]);
}
//冒泡排序
for (i = 0; i < 10-1; i++)//外循环控制内层循环遍历整个数组
{
for (j = 0; j <10-1- i; j++)//内循环对相邻元素进行比较
{
if (a[j] > a[j + 1])//判断前一项和后一项,若前大于后交换
{
t = a[j];
a[j] = a[j + 1];//交换
a[j + 1] = t;
}
}
}
for (i = 0; i < 10; i++)//循环输出字符
{
printf("%c\t", a[i]);
}
return 0;
}
水仙花
2.求闰年
闰年能被4整除,但不能被100整除,或者能被400整除
闰年能被400整除但不能被3200整除
##define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()//闰年能被4整除,但不能被100整除,或者能被400整除
{
int year = 0;
printf("请输入年份:");//提示作用
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("%d是闰年", year);
}
else if (year % 400 == 0 && year % 3200 != 0)//判断能被400整除不能被3200整除
{
printf("是闰年\n");
}
else
{
printf("%d不是闰年", year);
}
return 0;
}
方法二:调用函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void leapyear(int year)//调用函数,判断闰年方法
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("是闰年\n");
}
else if (year % 400 == 0 && year % 3200 != 0)//判断能被400整除不能被3200整除
{
printf("是闰年\n");
}
{
printf("不是闰年\n");
}
}
int main()
{
int year = 0;
printf("请输入年份");
scanf("%d", &year);
leapyear(year);//调用函数()里面,自己调用什么输入什么
return 0;
}
调用函数使主函数短小,不累赘。
函数命名要有意义
主函数里leapyear(year)不能写变量类型
3分解质因数
(1)基本知识
%运算符
%取余运算符,或称为取模运算,取余简而言之就是取得结果是余数。
/除法运算符:结果是否为整数,是根据除号两边是否为整数进行运算的。
而取余%运算:%号两边都必须为整数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int i = 0;
for (i = 0; i < 100; i++)
{
if (0 == i % 3)//当每次循环的i与题目中关键数3作取余运算,若余数为零说明,就是5的倍数
//这里就是%号作取余运算符时,经常与条件判断应用
{
printf("%d\n", i);
}
}
return 0;
}
1234%10=4(取余) 7%2=1(取余)
1234/10=123(取整) 7/2=3(取整)
/运算符
1、'/'左右两边都是整型:
1234/10=123(取整)
7/2=3(取整)
如果 '/' 两边都是整型,就算是将返回值类型定义为浮点型,计算出来的结果也只会是一个整数。
2、'/'两边有一边是浮点型:
只要有一个操作数是浮点数,就是浮点数的除法运算;所谓浮点数的除法运算就是,最后的结果是一个浮点数。
%lf 精确到小数点后六位
/与%区别 %取余运算的两边均为整数,不能为小数(浮点数)。
代码
//将一个正整数分解质因数。例如:输入90,打印出90 = 2 * 3 * 3 * 5
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int i = 2;
int n = 0, m = 0;
printf("请输入一个正整数");
scanf("%d", &n);//输入
printf("%d=", n);//90=
for (i = 2; i <= n; i++)
{
while (n != i)//输入是本身则不需要分解
{
if (n % i == 0)//是因子
{
printf("%d*", i);
n /= i;
}
else//不是因子
{
break;
}
}
}
printf("%d\n", n);//最后剩下不能整除i的也是因子
return 0;
}
4.求前二十位斐波那契数列
方法一 数组递归
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int a[20] = { 1,1 };
double sum = 0.0;
int i = 0;
for (i = 2; i < 20; i++)
{
a[i] = a[i - 1] + a[i - 2];
printf("a[%d]=%d\n", i - 2, a[i - 2]);
}
return 0;
}
方法二 变量数叠加
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
int a = 1, b = 1;
int i = 0;
for (i = 0; i <10; i++)
{
printf("%5d %5d", a, b);
a = a + b;
b = a + b;
}
return 0;
}
5水仙花数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i, j, k, n;
for (n = 100; n < 1000; n++)
{
i = n / 100;/*分解出百位*/
j = n % 100 / 10;/*分解出十位*/
k = n % 10; /*分解出个位*/
if (n == i * i * i + j * j * j + k * k * k)
{
printf("%d 是水仙花数\n", n);
}
}
return 0;
}
方法二:
void PPDI(int a, int b)//无返回值
{
printf("PPDI:\n");
for (i = a; i <= b; i++)//从a最小开始,b最大
{
sum = 0;//初始化和
u = i;//用于下面计算,保存输入值
for (j = 0; j < 3; j++)//一共三位数
{
sum += pow((u % 10), 3);//求和
u = u / 10;//去掉末尾
}
if (sum == i)//判断是否相等
{
printf("%d\n", i);
}
}
}
int main()
{
int a= 100,b=999;
printf("请输入数值");
scanf("%d", t);
PPDI(a,b);//调用函数
return 0;
}
6.输入一个英文单词,判断单词由几个字母组成
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 0, count = 0, m = 0;
printf("请输入一个英文单词\n");
m = getchar();
while((a=getchar()&&a!='\n'))//getchar输入英文
{
if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))//if语句统计字母
count++;
}
printf("请输出英文单词由%d个字母组成", count);
return 0;
}
7 求Armstrong
(不同于水仙花)
第一步:计算位数
第二步:判断是否相等
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int m = 0,k =0, a = 0;
int t = 0;//输入数值变量
double result = 0;
printf("请输入一个数值\n");
scanf("%d", &t);
a = t; //保存数值
while (t != 0)//用while 循环求位数
{
t = t / 10;
m++;
}
a = t;//保存数值
while (a % 10 != 0)
{
k = a % 10;
result = result + pow(k, m);//求和
a = a/ 10;
}
if (a == result)//判断是否相等
{
printf("是Armstrong");
}
else
{
printf("不是Armstrong");
}
return 0;
}