if语句运用
1.编写一个关于判断闰年平年的小程序
#include <stdio.h>
void main(){
int a;
printf("Please a yaes: ");
scanf("%d",&a);
if(a%100==0){
if(a%400==0){
printf("闰年\n");
}else{
printf("平年\n");
}
}else{
if(a%4==0){
printf("闰年\n");
}else{
printf("平年\n");
}
}
}
switch语句
2.编写运输公司运费计算程序
#include <stdio.h>
void main(){
int a;
double s,w,p,d;
printf("请输入路程,重量,每公里没吨基本运费: ");
scanf("%lf%lf%lf",&s,&w,&p);
if(s<250){
a = 0;
}else if(s>=250&&s<500){
a = 1;
}else if(s>=500&&s<1000){
a = 2;
}else if(s>=1000&&s<2000){
a = 3;
}else if(s>=2000&&s<3000){
a = 4;
}else{
a = 5;
}
switch(a){
case 0:
d = 0;
printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
case 1:
d = 0.02;
printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
case 2:
d = 0.05;
printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
case 3:
d = 0.08;
printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
case 4:
d = 0.10;
printf("需要运费%5.2lf\n",s*w*p*(1-d));break;
case 5:
d = 0.15;
printf("需要运费%5.2lf\n",s*w*p*(1-d));
}
}
3.计算一个日期为该年的第几天(无循环)
#include <stdio.h>
void main(){
int Y,M,D,Feb,big=31,small=30;
printf("Please input date: ");
scanf("%d%d%d",&Y,&M,&D);
if(Y%100==0){
if(Y%400==0){
Feb =29;
}else{
Feb = 28;
}
}else{
if(Y%4==0){
Feb =29;
}else{
Feb = 28;
}
}
switch(M){
case 1:printf("这是%d年的第%d天\n",M,D);break;
case 2:printf("这是%d年的第%d天\n",M,big*1+D);break;
case 3:printf("这是%d年的第%d天\n",M,big*1+Feb+D);break;
case 4:printf("这是%d年的第%d天\n",M,big*2+Feb+D);break;
case 5:printf("这是%d年的第%d天\n",M,big*2+Feb+small*1+D);break;
case 6:printf("这是%d年的第%d天\n",M,big*3+Feb+small*1+D);break;
case 7:printf("这是%d年的第%d天\n",M,big*3+Feb+small*2+D);break;
case 8:printf("这是%d年的第%d天\n",M,big*4+Feb+small*2+D);break;
case 9:printf("这是%d年的第%d天\n",M,big*5+Feb+small*2+D);break;
case 10:printf("这是%d年的第%d天\n",M,big*5+Feb+small*3+D);break;
case 11:printf("这是%d年的第%d天\n",M,big*6+Feb+small*3+D);break;
case 12:printf("这是%d年的第%d天\n",M,big*6+Feb+small*4+D);
}
}
for循环与break
4.判断一个自然数是否为素数
#include <stdio.h>
void main(){
int n,m,i;
printf("请输入一个2以上的自然数: ");
scanf("%d",&n);
for(i=2;i<n;i++){
if(n%i==0){
m=0;
break;
}else{
m=1;
}
}
if(m==0){
printf("%d不是素数\n",n);
}else{
printf("%d是素数\n",n);
}
}
5.计算斐波那契数列前20项
#include <stdio.h>
void main(){
int i,a[20]={1,1};
for(i=0;i<20;i++){
a[i+2]=a[i+1]+a[i];
}
for(i=0;i<20;i++){
if(0==i%4){
printf("\n");
}
printf("%8d",a[i]);
}
printf("\n");
}
6.数组冒泡排序
#include <stdio.h>
void main(){
int i,j,t,a[10];
printf("please input 10 numbers:\n");
for(i=0;i<10;i++){/*给数组a动态赋值*/
scanf("%d",&a[i]);
}
for(j=0;j<9;j++){/*确定要比较趟数,要比较9躺*/
for(i=0;i<10-j;i++){/*确定每趟比较次数,第1趟比较10-1此,第j躺就是10-j次*/
if(a[i]>a[i+1]){
t = a[i]; a[i]=a[i+1]; a[i+1]=t; /*相邻的两个数值互换*/
}
}
}
printf("print sorted numbers:\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
}
7.二维数组打印九宫格,十字架
#include <stdio.h>
void main(){
int a[3][3];
int i,j;
printf("Please input 10 numbers: \n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
printf("++++++++++++++Print nine squares+++++++++++++++\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%5d",a[i][j]);
}
printf("\n");
}
printf("++++++++++++++++Print the cross++++++++++++++++\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(i==1||j==1){
printf("%5d",a[i][j]);
}else{
printf("%5c",' ');
}
}
printf("\n");
}
printf("\n");
}
8.利用二分法寻找有序数列的某一项
#include <stdio.h>
void main(){
int a[10]={-1,0,5,25,46,59,80,100,120,300};
int n,low,mid,high,found;
low = 0;
high = 10-1;
found = 0;
printf("Input a number to be seached: ");
scanf("%d",&n);
/*以上为程序预处理*/
while(low<=high)
{
mid=(low+high)/2;
if(n==a[mid]){
found = 1; break; /**表示已经找到结束循环**/
}else if(n>a[mid])
{
low = mid+1;
}else
{
high = mid-1;
}
}
if(found == 1){
printf("The index of %d is %d\n",n,mid);
}else
{
printf("There is not found %n!\n",n);
}
}
9.实现2^4=16 pow函数
#include <stdio.h>
void main(){
double pow(double x,double y);
double a,b, z;
printf("Please input 2 numbers: ");
scanf("%lf%lf",&a,&b);
z = pow(a,b);
printf("%lf\n",z);
}
double pow(double x,double y){
double i, result=1;
if(y>=0)
{
for(i=1;i<=y;i++)
{
result = result*x;
}
}
if(y<0){ /*当指数为负数时,如2^-2 可以到写成 1/2^2*/
for(i=1;i<=-y;i++)
{
result = result*(1/x);
}
}
if(x==0)
{
result=0;
}
return result;
}
10.函数嵌套调用(2平方的阶乘 到 3平方阶乘的和)
#include <stdio.h>
long square(int s); //实现平方
long factorial(int f); //实现阶乘
void main()
{
long n,m,sum=0;
long max;
printf("Please input 1 number: ");
scanf("%ld",&max);
for(n=2;n<=max;n++)
{
m = square(n);
sum +=m;
}
/**
sum = square(2);
sum = square(2)+square(3)+square(4);**/
printf("2平方的阶乘 到 %ld平方阶乘的和:%ld\n",max,sum);
}
long square(int s)
{
long k,result;
long factorial(int);
k = s*s;
result = factorial(k);
return result;
}
long factorial(int f)
{
long i,result=1;
for(i=1;i<=f;i++){
result*=i;
}
return result;
}
汇编裸函数编写
#include <stdio.h>
/*
int plus(int x,int y,int z)
{
int a=12
int b=3;
int c=4;
return x+y+z+a+b+c;
}
*/
//编辑裸函数
int __declspec(naked) function(int x,int y,int z)
{
__asm
{
//保存原来栈底
push ebp
//提升栈底
mov ebp,esp
sub esp,0x40
//保存现场
push edi
push esi
push ebx
//填充缓冲区 int 3 相当于中断
mov eax,0xCCCCCCCC
mov ecx,0x10
lea edi,dword ptr ds:[ebp-0x40]
rep stosd
//实现函数功能
//局部变量:ebp-4开始的 参数:ebp+8 开始的 ebp+4表示eip ebp表示原来的栈底(调用前的ebp)
mov dword ptr ds:[ebp-0x4],2
mov dword ptr ds:[ebp-0x8],3
mov dword ptr ds:[ebp-0xc],4
mov eax,dword ptr ds:[ebp+0x8]
add eax,dword ptr ds:[ebp+0xc]
add eax,dword ptr ds:[ebp+0x10]
add eax,dword ptr ds:[ebp-0x4]
add eax,dword ptr ds:[ebp-0x8]
add eax,dword ptr ds:[ebp-0xc]
//恢复现场
pop ebx
pop esi
pop edi
//恢复堆栈
mov esp,ebp
pop ebp
ret
}
}
void main()
{
function(1,2,3);
}
// An highlighted block
var foo = 'bar';
echo 'hello';
```
如有错误还望请大神指点。