求水仙花数
#include<stdio.h>
int main()
{
int i = 0;
int a = 0, b = 0, c = 0, d = 0;
for (i = 0; i < 1000; i++)
{
a = i % 10;//求出个位数
b = (i / 10) % 10;//十位数
c = i / 100;//百位数
//判断其各位数字的立方是否确好等于该数本身
if (i == (a * a * a + b * b * b + c * c * c))
{
printf("%d\n", i);//是则输出
}
}
return 0;
}
判断是否闰年
#include<stdio.h>
int main(){
int year;
printf("请输入年份\n");
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0){ //如果(条件)
printf("the year is leapyear"); //输出今年是闰年
}else{ //否则
printf("the year is not leapyear"); //输出今年不是闰年
}
}
九九乘法口诀表
#include<stdio.h>
int main(){ //主函数
int i,j; //声明变量
for(i=1;i<=9;i++){ //for循环(条件)
for(j=1;j<=i;j++){ //for循环(条件)
printf("%d*%d=%d",i,j,i*j);
}
printf("\n"); //换行
}
}
判断是否为素数
#include<stdio.h>
int main()
{
int i, n;
printf("请输入一个数:");
scanf("%d", &n);
if(n<=1)
printf("这不是素数\n");
else
{
for (i = 2; i < n ; i++)
{
if (n%i == 0)
break;
}
if(i>=n)
printf("这是素数\n");
else
printf("这不是素数\n");
}
return 0;
}
寻找素数
素数的因子是只能有1和他本身
void FindPrime()
{
int i = 0; int j = 0;
for (i = 1; i <= 100; i++)//这里可以直接+=2,因为偶数不可能是素数
{
for ( j = 2; j <= i; j++)
{
if (i % j == 0)//如果余数为0,则不是素数,结束循环
break;
}
if(i==j)//如果j一直加到和i相等,证明i是素数
printf("%d ", i);
}
}
int main()
{
FindPrime();
}
此方案与上一种方案类似,定义了一个flag用来标记,为1是素数,为0则表示不是素数。
# include <stdio.h>
int main()
{
int i;
//先求出100-200之间的所有的数
//这里给出一个for循环
int count = 0;
for(i = 100; i < 200; i++)
{
int j; //定义一个变量j用来表示因子
int flag = 1;//此时定义一个flag标记,表示假设i是素数
for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
{
if(i % j ==0)
{
flag = 0;若能整除,则说明一定不是素数,把flag置为0
break;
}
}
//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
{
count++;
printf("%d ",i);//打印素数
}
}
printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数
return 0;
}
# include <stdio.h>
# include <math.h>
int main()
{
int i;
//先求出100-200之间的所有的数
//这里给出一个for循环
int count = 0;
for(i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
{
int j; //定义一个变量j用来表示因子
int flag = 1;//此时定义一个flag标记,表示假设i是素数
//假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
//拿12这个数来说 它的因子所有表示如下: 12=1*12=2*6=3*4=4*3=6*2=12*1
//12的开平方数是2√3(2倍的根3), 2√3是大于3小于4的,那么用1,2,3去试除12之后,那么4,6,12就没必要再去试除12了
//所以这里的因子范围给到 3 到 sqrt(i) ,sqrt()是C语言的一个库函数,用来求给定值的平方根,需要引用头文件<math.h>
for( j = 2; j <= sqrt(i) ;j++)
{
if(i % j == 0)
{
flag = 0;若能整除,则说明一定不是素数,把flag置为0
break;
}
}
//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
{
count++;
printf("%d ",i);//打印素数
}
}
printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数
return 0;
}
累加和运算
#include <stdio.h>
int main()
{
int sum = 0; // 赋初值
for(int i = 1; i <= 100; i++)
{
sum += i;
}
printf("total is %d\n", sum);
}
#include <stdio.h>
int main()
{
int n,pow,num;
pow=1;
printf("输入一个正整数:");
scanf("%d",&n);
num=n;
do
{
pow*=10;
n/=10;
}while(n!=0);
pow/=10;
printf("%d从高位开始逐位分离并输出的结果是",num);
do
{
printf("%d,",num/pow);
num%=pow;
pow/=10;
}while(pow!=0);
putchar('\n');
return 0;
}
给出一个整数12345,计算该数的位数或它的最高位权
#include <stdio.h>
int main(void){
int n,number,len=0;
scanf("%d",&number);
n=number;//保留原始数据
if(0==n){
len=1;
}//对“0”进行特殊处理
else if(n<0){
n=-n;
}//若是负数,先转换为正数后再处理
while(n>0){
len++;
n=n/10;
}//开始对原本非零的数计算位数
printf("%d",len);
return 0;
}
递归求n的阶乘
#include<stdio.h>//头文件
int main()//主函数
{
int factorial(int number);//自定义阶乘函数声明
int number,temp;//定义变量
printf("输入要求阶乘的数:");//提示语句
scanf("%d",&number);//键盘输入相求的数
temp=factorial(number);//调用阶乘函数
printf("%d!=%d",number,temp) ;//输出结果
return 0;//主函数返回值为0
}
int factorial(int number)//自定义阶乘函数
{
int temp;//定义整型变量
if(number<0)//如果这个数小于0
{
printf("错误数据请,输入大于0的数!");//不符合条件,无法求
}
else if(number==0||number==1)//0或者1本身的阶乘是1
{
temp=1;
}
else
{
temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果
}
return temp;//将temp返回到函数调用处
}
选择排序法
数组名是首元素的地址,指针变量接收地址
选择排序比冒泡排序效率高,只用循环n-1次,
假设第一个元素为最小值,从小到大依次排序
min=i ,外循环n-1次,
内循环遍历数组,逐一与a[min]比较,如果小就更新下标,
定义j变量j=i+1 , j<n ,
注意还有个条件是if(i!=min),交换变量
#include <stdio.h>
void arr_out(int a[8])//输出函数
{
int i = 0;
for(i = 0;i < 8;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
void arr_sort(int *p,int n)
{
int i,j;
int min = 0;
for(i = 0;i < n - 1;i++)//排序次数
{
min = i;
for(j = i + 1;j < n;j++)
{
if(p[j] < p[min])
{
min = j;//记录交换的元素下标值
}
}
if(i != min)
{
int temp = p[i];
p[i] = p[min];
p[min] = temp;
}
}
}
int main()
{
int a[8] = {0};
int i = 0;
for(i = 0;i < 8;i++)
{
scanf("%d",&a[i]);
}
arr_sort(a,8);//排序函数
arr_out(a);//输出函数
return 0;
}
冒泡排序
循环次数依旧是size-1
双重循环,内循环循环条件是size-1-i,初始变量j=0,i=0
大的往后放,在内层循环交换,遇到大的就交换
#include<stdio.h>
void Bubble_sort(int arr[], int size)
{
int j,i,tem;
for (i = 0; i < size-1;i ++)//size-1是因为不用与自己比较,所以比的数就少一个
{
int count = 0;
for (j = 0; j < size-1 - i; j++) //size-1-i是因为每一趟就会少一个数比较
{
if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
count = 1;
}
}
if (count == 0) //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
break;
}
}
int main()
{
int arr[10];
int i;
printf("请输入10个数\n");
for (i = 0; i < 10; i++) //接收用户的数值
{
scanf("%d", &arr[i]);
}
printf("排序前的数组>");
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n排序后的数组>");
Bubble_sort(arr, 10);
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
求数组最大值,最小值的位置
int min = 0; //假定最小值为a[min],即a[0]
int max = 0; 假定最大值为a[max],即a[0]
int i;
for(i=1;i<10;i++)
{
if(a[i]>a[max])
{
max = i; //max记录新的最大值的下标
}
if(a[i]<a[min])
{
min = i; //min记录新的最小值的下标
}
}
利用结构体设计学生成绩管理系统(输入输出,排序,调用函数实现)