我是靠谱客的博主 幸福奇异果,最近开发中收集的这篇文章主要介绍C语言初学练习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面,当时练习以下程序是出于应试,以下有很多应试会考到的题目,例如,最小公倍数、日期转换、选择排序、逆序...如果有很多有应试需求的人们需要整理版的题库,我会抽时间去帮忙整理,祝大家考个好成绩。


//book.c 一本书的图书目录,本题来自C Primer Plus例题,当时觉得对于应用结构体帮助很大,照着敲了一遍。

#include<stdio.h>                            
#include<string.h>
char* s_gets(char*st,int n);
#define MAXTITL 41
#define MAXAUTL 31
struct book{
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
};

int main()
{
    struct book library;
    printf("Please enter the book title.n");
    s_gets(library.title,MAXTITL);
    printf("Now enter the author.n");
    s_gets(library.author,MAXAUTL);
    printf("Now enter the value.n");
    scanf("%f",&library.value);
    printf("%s by %s: %.2fn",library.title,library.author,library.value);
    printf("Done.n");
    return 0;
}

char* s_gets(char*st,int n)
{
    char* ret_val;
    char* find;
    ret_val=fgets(st,n,stdin);
    if(ret_val)
    {
        find=strchr(st,'n');
        if(find)
           *find='';
        else
          while(getchar()!='n')
          continue;
    }
    return ret_val;
}
*/
                                      //多本书
/*manybook.c
#include<stdio.h>
#include<string.h>
*/
                                     //funds1.c Ba Jie Gou Cheng yuan as Canshu
/*
#include<stdio.h>
#define FUNDLEN 50
struct funds{
    char bank[FUNDLEN];
    double bankfund;
    char save[FUNDLEN];
    double savefund;
};
double sum(double,double);
int main()
{
    struct funds stan={
        "Garlic-Melon Bank",
        4032.27,
        "Lucky's Savings and Loan",
        8543.94
    };
    printf("Stan has a total of %.2f.n",sum(stan.bankfund,stan.savefund));
    return 0;
}

double sum(double x,double y)
{
    return(x+y);
}
*/
                                   //funds3.c      传递结构
/* 
#include<stdio.h>
#define FUNDLEN 50
struct funds{
    char bank[FUNDLEN];
    double bankfund;
    char save[FUNDLEN];
    double savefund;
};
double sum(struct funds MASCAL);
int main()
{
    struct funds stan={
        "Garlic-Melon Bank",
        4032.27,
        "Lucky's Savings and Loan",
        8543.94
    };
    printf("Stan has a total of %.2f.n",sum(stan));
    return 0;
}

double sum(struct funds MASCAL)
{
    return(MASCAL.bankfund+MASCAL.savefund);
}

  //编写程序,判断今天是今年的第几天。

#include<stdio.h>
int LeapYear(int a);
int TODAT(int x,int y,int z);
struct DATE{
    int year;
    int month;
    int day;
};
typedef struct DATE DATE;
int main()
{
    int N;
    DATE today;
    printf("Please enter the Year Month Day.n");
    scanf("%d %d %d",&today.year,&today.month,&today.day);
    N=TODAY(today.year,today.month,today.day);
    printf("Today is the %dth days.n",N);
    return 0;
}
int LeapYear(int a)
{
    return(a%4==0&&a%100!=0)||(a%400==0);                                    //1 TRUE;0 FALSE;   400 is  LEAPYEAR too 
}
int TODAY(int x,int y,int z)
{
    const MON[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int sum=0,i;
    for(i=0;i<(y-1);i++)
          sum+=MON[i];
    sum=sum+z;
    if(y>2&&LeapYear(x)) sum++;                                   //1 
    return sum;      
}



//编写函数,接收任意多个实数,返回一个数组,其中数组第一个元素为所有参数的平均值,其他元素为所有参数中大于平均值的实数。

/*
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *p,*min,N,i,temp;
    p=(int*)malloc(N*sizeof(int));
    printf("Please enter the N:n");
    scanf("%d",&N);
    if(p==0){
        printf("allocation failure!");
        exit(1);
    }
    for(i=0;i<N;i++)
         scanf("%d",p+i);
    min=p;
    for(i=0;i<N;i++){
        if(*(p+i)<*min){
            temp=*min;
            *min=*(p+i);
            *(p+i)=temp;
        } 
    }
    for(i=0;i<N;i++)
        printf("%dt",*(p+i));
    free(p);
    return 0;
}



//编写函数,接收两个正整数作为参数,返回一个数组,其中第一个元素为最大公约数,第二个元素为最小公倍数。

const int MA_MI(int a,int b);
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    MA_MI(a,b);
    return 0;
}
const int MA_MI(int a,int b)
{
    int x,y;
    int r=1;
    x=a;y=b;
    int temp=0;
    if(x<y){
        temp=x;
        x=y;
        y=temp;
    }
    while(r!=0){
        r=x%y;//是取余哦! 
        x=y;
        y=r;
    }
    printf("%d %d",x,a*b/x);
}
/*
#include<stdio.h>
void MAMI(int*a);
int main()
{
    int arr[2];
    scanf( "%d%d",&arr[0],&arr[1]);
    MAMI(&arr);
    printf("最大公约数是:%dn最小公倍数是:%dn",arr[0],arr[1]);
    return 0;
}
void MAMI(int *a)
{
    int x,y,r; 
    x=a[0];y=a[1];
    //让大数为x
    if(x<y)
    {
        r=y;
        y=x;
        x=r;
     } 
    while(1){                         //最大公约数-->辗转相除法      
        r=x%y;
        x=y;
        y=r;
        if(r==0){
            a[1]=a[1]*a[0]/x;
            a[0]=x;
            break;
        }
    }
    //最小公倍数 :两数相乘除以最大公约数 
}


 

//日期 
//编写结构Date函数:计算一个日期减去一个整数后所得的日期;

#include<stdio.h>
struct Date{
    int yr;
    int mo;
    int day;
};
const int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int LeapYear(int);
int todayis(int,int,int); 
int main()
{
    struct Date dt;
    int N,n,i=0;
    printf("Please enter the year/month/day:n");
    scanf("%d %d %d",&dt.yr,&dt.mo,&dt.day);
    N=todayis(dt.yr,dt.mo,dt.day);
    printf("Please enter a number:n");
    scanf("%d",&n);
    if(n>N)                                                          //未完待续 
    {    
        printf("Warning!n");
        exit(0);
    }
    else if(n==N) 
    {
        dt.yr--;
        dt.mo=12;
        dt.day=31;
    }
    else if(n<N)
    {
        n=N-n;                                      //n<N
        dt.mo=1;
        for(i=0;month[i]<n;i++) 
        {
            n-=month[i];
            dt.mo++; 
        }
        if(LeapYear(dt.yr)==0&&dt.mo>2) n--;
        dt.day=n+1;
    }
    printf("%d-%d-%d",dt.yr,dt.mo,dt.day);
    return 0;
 }
int LeapYear(int x)
{
    return(x%4==0&&x%100!=0)||(x%400==0);                  //T1 366;F0 365
}
int todayis(int x,int y,int z)
{
    int i;
    int sum=0;
    for(i=0;i<(y-1);i++)
    {
        sum+=month[i];    
    }
    if(LeapYear(x)==1&&y>2) sum++;
    sum=sum+z;
    return sum;
}



//一个人从2010年,1月1日开始,三天打渔,两天晒网,他在某一天是打渔还是晒网

#include<stdio.h>
struct Date{
    int yr;
    int mo;
    int day;
};
int LeapYear(int);
int todayis(int,int,int);
const int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int N=0,i;
    int dyear;
    struct Date dt;
    printf("Please enter the year/month/day:n");
    scanf("%d %d %d",&dt.yr,&dt.mo,&dt.day);
    N=todayis(dt.yr,dt.mo,dt.day);
    dyear=dt.yr-2010;
    if(dyear>0)
    {
        for(i=0;i<dyear;i++)
        {
            N+=365;
            if(LeapYear(2010+i)) N++; 
        }
    }
    if(N%5<=3&&N%5!=0) printf("He is fishing.n");
    else printf("He is drying.n");
    return 0;
}
int LeapYear(int x)
{
    return(x%4==0&&x%100!=0)||(x%400==0);                  //T1 366;F0 365
}
int todayis(int x,int y,int z)
{
    int i;
    int sum=0;
    for(i=0;i<(y-1);i++)
    {
        sum+=month[i];    
    }
    if(LeapYear(x)==1&&y>2) sum++;
    sum=sum+z;
    return sum;
}



//2. 假设某人从2019年10月1日起,第一天学习数学,第二天学习英语,第三天学习编程,第四天休息。从键盘输入2019年10月1日之后的某个日期,输出该人在该日期的活动。

#include<stdio.h>
typedef struct
{
    int yr; //年
    int mo; //月
    int day; //日
} Date;
const int NoLeapYear[]={31,28,31,30,31,30,31,31,30,31,30,31};
int Leapyear(int y)
{
return (y%4==0&&y%100!=0)||(y%400==0);
}
unsigned DateToNum(Date dt) //把日期转换为一个正整数
{
    int i;
    unsigned ndays=0; //步骤1
    //累计整年的天数
    for(i=1;i<dt.yr;++i) //步骤2
    ndays+=Leapyear(i)?366:365;
    //累计正月的天数
    for(i=1;i<dt.mo;++i) //步骤3
    ndays+=NoLeapYear[i-1];
    if(dt.mo>2&&Leapyear(dt.yr)) //闰年闰月加一天
    ++ndays;
    //加上所属月份的天数
    ndays+=dt.day; //步骤4
    return ndays; //步骤5
}
int main()
{
    Date dt;
    Date dt1={2019,10,1};
    int n;
    //输入
    printf("Enter a date(year month day) after 2019/10/1:n");
    scanf("%d/%d/%d",&dt.yr,&dt.mo,&dt.day);
    n=DateToNum(dt)-DateToNum(dt1);
    switch((n+1)%4)
    {
        case 1:printf("Mathn"); break;
        case 2:printf("Englishn"); break;
        case 3:printf("Programmingn"); break;
        case 4:printf("Restingn"); break;
    }
    return 0;
}



/*求解百钱百鸡问题:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,
用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,
问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。(要求体现计算过程)*/

#include<stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<100;i++)
        for(j=1;j<100;j++)
            for(k=1;k<100;k++)
            {
                if(i*15+j*9+k==300&&i+j+k==100)
                {
                    printf("%d %d %dn",i,j,k);
                }
            }
    return 0;
}



//定义动态数组,从键盘输入数组元素个数并为数组中的元素赋值,然后将数组元素从小到大排序并输出

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *p,n,i;
    int min,j;
    scanf("%d",&n);
    p=(int*)malloc(n*sizeof(int));
    if(p==0)
    {
        printf("allocation failure!n");
        exit(1);
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&p[i]);
        
    }
    min=*p;
    for(i=0;i<n;i++)                  //冒泡排序 
        for(j=0;j<n-1;j++)
        {
            if(p[j]>p[j+1])
            {
                min=p[j+1];
                p[j+1]=p[j];
                p[j]=min;
            }
        }
    for(i=0;i<n;i++)
    {
        printf("%dt",*(p+i));
    }
    free(p);
    return 0;
}


 


//结构的嵌套 

#include<stdio.h>
struct Birthday{
    int yr;
    int mo;
    int day;
};
struct Student{
    int No;
    char name[5];
    struct Birthday date;
};
int main()
{
    struct Student st[5];
    int i=0;
    for(i=0;i<5;i++)                 //注意字符串不需要用取址符 
    {
        scanf("%d %s %d %d %d",&st[i].No,st[i].name,&st[i].date.yr,&st[i].date.mo,&st[i].date.day);
    }
    printf("n");
    for(i=0;i<5;i++)
        printf("%d %s %d-%d-%dn",st[i].No,st[i].name,st[i].date.yr,st[i].date.mo,st[i].date.day);
    return 0;
}
*/
//顺序表—选择排序 
/*
#include<stdio.h>
#include<stdlib.h>
typedef int Type;
struct SeqList{
    Type* data;
    int len;
    int size;                                   //数据元素个数 
};
typedef struct SeqList SeqList;
void Select_Swap(SeqList* l);
int main(){
    SeqList List;
    int i=0;
    List.size=0;
    printf("Please enter the length:n");
    scanf("%d",&List.len);
    List.data=(Type*)malloc(List.len*sizeof(Type));
    if(List.data==0){
        printf("allocation failure!n");
        exit(0);
    }
    printf("Now,please enter the numbers:n");
    for(i=0;i<List.len;i++){
        scanf("%d",&List.data[i]);
        List.size++;
    }
    Select_Swap(&List);
    printf("The new list is:n");
    for(i=0;i<List.len;i++)
        printf("%dt",List.data[i]);
    free(List.data);
    return 0;
}
void Select_Swap(SeqList* l){                     //!!!!!!!!选择排序 
    int i=0;
    int j=0;
    Type temp=l->data[i];
    for(i=0;i<l->size-1;i++){
        int min=i;                                     
        for(j=i+1;j<l->size;j++){ 
            if(l->data[j]<l->data[min]){                        //寻找未排序数列中的最小值 
                min=j;                                          //记录此时最小值 
                temp=l->data[min];                              //交换,这一块出现了问题,本次编程问题出现在对于选择排序的理解上。 
                l->data[min]=l->data[i];
                l->data[i]=temp;
            }
        }
    }
}


 


// 程序功能说明:从键盘输入一个字母并输出其对应的小写字母。

#include<stdio.h>
char lower(char c); 
int main()
{
    char letter; 
    scanf("%c",&letter);//
    letter=lower(letter);// 
    printf("lower case is %c",letter); 
    return 0;
}
char lower(char c) 
{
    if(c>='A'&&c<='Z')//
        return c+32;
    else 
        return c;//
}



//程序功能说明:输入一个日期,判断该年是不是闰年。

#include<stdio.h>
struct Date
{
    int yr; //年
    int mo; //月
    int day; //日
} ;
const int NoLeapYear[]={31,28,31,30,31,30,31,31,30,31,30,31};
int Leapyear(int y)
{
    return (y%4==0&&y%100!=0)||(y%400==0);
}
int main()
{    
 struct Date date1;          
printf("Enter a date(year month day):n");
scanf("%d%d%d",&date1.yr,&date1.mo,&date1.day);
if(Leapyear(date1.yr))             
printf("This year is a leap year.n");
else
printf("This year is not a leap year.n");
   return 0;
}
*/
//二维数组:求一个3*3矩阵对角线元素之和
/*
#include<stdio.h>
int main()
{
    int a[3][3],b[3],sum=0;
    int i,j;
    printf("Please input rectangle element:n");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
            if(i==j)
            {
                sum+=a[i][j];
            }
        }
    printf("对角线和是%.2d",sum);
    return 0;
}


 

/*猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
        程序分析:采取逆向思维的方法,从后往前推断。*/
                      //d1=2(d2+1)

#include<stdio.h>
int main()
{
    int dayn,d1,d2;
    dayn=9;
    d2=1;
    for(dayn=9;dayn>0;dayn--)
    {
        d1=(d2+1)*2;            //第一天的桃子数是第2天桃子数加1后的2倍
        d2=d1;
    }
    printf("the total is %dn",d1);
    return 0;
}


 


两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x、z比,请编程序找出
三队赛手的名单。

#include<stdio.h>
int main()
{
    char i,j,k;               
    //i是a的对手,j是b的对手,k是c的对手
    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("order is a--%ctb--%ctc--%cn",i,j,k);
                }
            }
        }
    return 0;
}


//请从键盘输入一个整数(位数不固定),然后将该整数逆序输出并计算各位上数字的和。(要求体现计算过程)

#include<stdio.h>
int main()
{
    long int num;
    int i,sum=0;
    scanf("%ld",&num);
    while(num!=0)
    {
        sum+=num%10;
        printf("%d",num%10);
        num=num/10;
    }
    printf("n%d",sum);
    return 0;
}



//输出100-200之间的所有质数,每行输出5个质数,最终输出该范围内质数的个数

#include<stdio.h>
int isPrime(int x);
int main()
{
    int i=100,j=0;
    for(i=101;i<200;i++)
    {
        if(isPrime(i))
        {
            printf("%dt",i);
            j++;
            if(j%5==0) printf("n");
        }
    }
    printf("n%d",j);
    return 0;
}
int isPrime(int x)
{
    int i;
    for(i=2;i<x;i++)
        if(x%i==0) return 0;
    return 1;
}



//定义一个数组,从键盘输入5个整数为数组中的元素赋值,然后将数组元素从小到大排序并输出
/* 

#include<stdio.h>
int main()
{
    int a[5],i,j,min,temp;
    for(i=0;i<5;i++)
        scanf("%d",&a[i]);
    /*
    for(i=0;i<5;i++)
        for(j=0;j<4;j++)               //冒泡排序 
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
             } 
    */                           
    /*                                  //选择排序 
    for(i=0;i<4;i++)
    {
        min=i;                       //注意这里是改变 下标 
        for(j=i+1;j<5;j++)          //j初始 定为i后面一个 
            if(a[min]>a[j])
            {
                min=j;
                temp=a[min];
                a[min]=a[i];
                a[i]=temp;
            }
    }
    
    for(i=0;i<5;i++)
        printf("%dt",a[i]);
    return 0;
}



//程序功能说明:将把数组中的数据元素逆置。

#include<stdio.h> 
void InvertArray(int p[],int n);  //逆置 
void OutputArray(int p[],int n);  //输出 
int main() 
{ 
    int a[10]; 
    int i;     
    printf("Enter 10 integers:n"); 
    for(i=0;i<10;i++)  
        scanf("%d",&a[i]); 
    InvertArray(a,10);  
    printf("after invert:n"); 
    OutputArray(a,10);
    return 0;
} 
void InvertArray(int p[],int n)      //逆置 
{ 
    int left=0; //首元素下标 
    int right=n-1; //尾元素下标 
    int temp; //用于三角交换 
    while(left<right) 
    {     
        temp=p[left]; 
        p[left]=p[right]; 
        p[right]=temp; 
        left++; //下标向右移动 
        right--; //下标向左移动 
    } 
} 
void OutputArray(int p[],int n)//输出 
{ 
    int i; 
    for(i=0;i<n;i++) 
    printf("%dt",p[i]); 
    printf("n");
}


 

//程序功能说明:从键盘输入一个整数n,计算求斐波那契数列第n项的值。
 

#include<stdio.h> 
int Fibonacci(int n); 
int main() 
{ 
    int n;
    printf("Enter a positive integer:n");
    scanf("%d",&n);
    n=Fibonacci(n);
    printf("%dn",n);
    return 0;
} 
int Fibonacci(int n) 
{ 
    int i; //表示数列号 
    int fib1=1; //前两项的第 1项 
    int fib2=1; //前两项的第 2项 
    int fib3; //用于存储当前项的值或返回值
    if(n==1) 
        fib3=1; 
    else if(n==2) 
        fib3=1;
    else 
    { 
        fib3=fib1+fib2; //第 3 项的值 
        for(i=4;i<=n;i++) //从第 4 项开始以后的值 
        {     
            fib1=fib2; 
            fib2=fib3;
            fib3=fib1+fib2;
        } 
    }
    return fib3;
}


*/
//程序功能说明:输出100以内能被3整除且个位数为6的所有整数。
/*

#include <stdio.h>
int main( )
{ 
    int i;
    for(i=0;i<100;i++)
    { 
        if(i%3==0&&i%10==6)
            printf("%4d",i);
    }
    return 0;
}


*/
//输出50以内的质数,每行输出5个质数
 

#include<stdio.h>
#include<math.h>
int isPrime(int);
int main()
{
    int i,j=0;
    for(i=2;i<50;i++)
        if(isPrime(i))
        {
            printf("%dt",i);
            j++;
            if(j%5==0) printf("n");
        }
    return 0;
}
int isPrime(int x)
{
    int i;
    for(i=2;i<x;i++)
    {
        if(x%i==0)    return 0;
    }
    return 1;
                                  //前面不带else
}
*/
//求 1-1/2+1/3-1/4+...+1/99-1/100;
/*
#include<stdio.h>
int main()
{
    int i,j;
    float tn=1.0,sn=0.0;
    for(i=2;i<=100;i++)
    {
        sn+=tn;
        j=-1*i;
        tn=1.0/j;
    }
    printf("和为:%f",sn);
    return 0;
}


 

//定义数组,从键盘为数组中的元素赋值,然后,找出数组元素的最大值
/*
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *arr;
    int n,i,max;
    scanf("%d",&n);
    arr=(int*)malloc(n*sizeof(int));
    if(arr==NULL) 
    {
        printf("allocation failure!n");
        exit(1);
    }
    for(i=0;i<n;i++)
        scanf("%d",&arr[i]);
    max=arr[0];
    for(i=0;i<n;i++)
        if(max<arr[i]) max=arr[i];
    printf("%d",max);
    free(arr);
    return 0;
}
*/
//寻找二维数组最小值 
/*
#include<stdio.h>
int minvalue(int array[2][3]);
int main()
{
    int a[2][3]={1,3,4,5,8,9},s;
    s=minvalue(a);
    printf("%d",s);
}
minvalue(int array[][3])
{  
    int    i,j,min;
    min=array[0][0];
    for(i=0;i<2;i++)
        for(j=0;j<3;j++)
            if(min>array[i][j])
            {
                int temp=min;
                min=array[i][j];
                array[i][j]=min;
            }
   return  min;
}
*/
//找出一批正整数中的最大的偶数。
/*
#include <stdio.h>
int fun(int a[],int n);
int main()
{
    int a[]={1,2,9,24,35,18},k;
    k=fun(a,6);
    printf("max=%dn",k);
}

int fun(int a[],int n)
{
    int i,amax=-1;
    for(i=0;i<n;i++)
         if(a[i]%2==0&&a[i]>amax)
              amax=a[i];
    return amax;
}
*/
//编写子函数isPrime(判断质数),输出100以内的所有质数,每行输出10个质数;并按照由大到小的顺序输出最大的3个质数。
//难点在于  由大到小顺序输出最大的3个质数 
/*
#include<stdio.h> //标准输入输出函数库
int IsPrime(int n); //质数判断函数
int main()
{
    int i,j=0;
    int n =0;
    int a[3];
    for(i=100;i>1;i--)
    {
        if(IsPrime(i))
        {
            printf("%dt",i);
            j++;
            if(n<3){                           //这个用法不熟练,但是很好用  
                a[n++]=i;
            }
            if(j%10==0)
                printf("n");
        }
    }
    printf("n100以内最大的三个整数:");
    for(n=0;n<3;n++){
        printf("%4d",a[n]);
    }
    return 0;
}
int IsPrime(int n)
{
    int ok=1;          //用于记录质数判断结果,1 为质数,0 为非质数
    int i;             //用于除数
    if(n==0||n==1)     //若n的值为0或1,则不是质数
        ok=0;
    else
        for(i=2;i<n;i++)
            if(n%i==0) //若被一个数整除,则n 不是质数
            {    
                ok=0;
                break; //结束for循环
            }
    return ok; //返回判断结果
}
*/
//从键盘输入某年某月某日,判断这一天是这一年的第几天。其中,定义结构体类型Date(成员分别是year,month,day)
/*
#include<stdio.h>
typedef struct
{
    int yr;   //年
    int mo;   //月
    int day;  //日
} Date;
const int NoLeapYear[]={31,28,31,30,31,30,31,31,30,31,30,31};
int Leapyear(int y)
{
    return (y%4==0&&y%100!=0)||(y%400==0);
}
unsigned DateToNum(Date dt) //把日期转换为一个正整数
{
    int i;
    unsigned ndays=0;   //unsigned : 非负值 
    for(i=1;i<dt.mo;++i) 
        ndays+=NoLeapYear[i-1];
    if(dt.mo>2&&Leapyear(dt.yr)) //闰年闰月加一天
        ++ndays;
    ndays+=dt.day; 
    return ndays;
}
int main()
{
    Date dt;
    printf("Enter a present date(year month day):n");
    scanf("%d%d%d",&dt.yr,&dt.mo,&dt.day);
    printf("the date is %dth day in the yearn",DateToNum(dt));
    return 0;
}
*/

//定义动态数组,从键盘输入数组元素个数并为数组中的元素赋值,然后计算数组元素中大于平均值的元素的个数并输出这些元素。
/*
#include <stdio.h>
#include <stdlib.h>
void aver(const int p[],int n);
int main()
{
    int i,n ;
    scanf("%d",&n);
    int *ip=(int*)malloc(n*sizeof(int));
    if(ip==NULL ){
    printf("allocation failuren");
    exit(1);
    }
    printf("input n intergers:n");
    for(i=0;i<n;i++)
        scanf("%d",&ip[i]);
    aver(ip,n);
    free(ip);                         //一定不要掉 
    return 0;
}
void aver(const int p[],int n)
{
   int i=0; 
   int total=0;
   int m=0; 
   float average=0.0; 
   for(i=0;i<n;i++)
        total+=p[i];
    average=1.0*total/n;                 //注意这里要乘1.0将他转换为float型 
    printf("average=%fn",average);
    for(i=0;i<n;i++)
    {
           if(p[i]>average)
        {
               m++;
               printf("%dt",p[i]);
        }
    }
    printf("n大于平均值的数字一共有%d个。",m);
}
*/
//功能:求一批数中最大值和最小值的差。
/*
#include "stdio.h"
#define N 30
#include "stdlib.h"
int max_min(int a[],int n)
{
    int i,max,min;
    max=min=a[0];
    for(i=1;i<n;i++)
        if(a[i]>max) max=a[i];
        else if(a[i]<min) min=a[i];
    return(max-min);                       //常规想法是在设置一个变量,存储max-min,而这样直接return回去简洁好读 
}
int main()
{
    int a[N],i,k;
    for(i=0;i<N;i++)
    a[i]=rand()%51+10;
    for(i=0;i<N;i++)
    {
        printf("%5d",a[i]);
        if((i+1)%5==0) printf("n");
    }
    k=max_min(a,N);
    printf("the result is:%dn",k);
}
*/

//求给定正整数m以内的素数之和。例如:当m=20时,函数值为77。
/*
#include <stdio.h>
int fun(int m)
{
    int i,k,s=0;
    for(i=2;i<=m;i++)        //因为要累加,套双重循环 
    {
        for(k=2;k<i;k++)
            if(i%k==0) break;
        if(k==i) s=s+i;               //这一步很灵性,理解一下。要k和i值相等才累加 
    }
    return s;
}
int main()
{
    int y;
    y=fun(20);
    printf("y=%dn",y);
}
*/
//请从键盘输入一个整数(位数不固定),然后将该整数逆序输出并计算各位上数字的和。
/*
#include<stdio.h> //包含printf
int main()
{
    int n; //初始化
    int sum=0; //求和的变量
    scanf("%d",&n);
    while(n!=0) //直到n的值为0,结束迭代
    {
        printf("%d",n%10);
        sum+=n%10; //求和
        n=n/10; //把n的值降一阶
    }    
    printf("n"); //输出一个换行符
    printf("%d n",sum);
    return 0;
}
*/
/*
//定义一个数组,从键盘输入5个整数为数组中的元素赋值,然后用冒泡法和简单选择法将数组元素从小到大排序并输出。
#include <stdio.h>
#include <stdlib.h>
void input(int *arr,int n);
//简单选择排序:对数组中的元素按非递减有序排列 
void sort(int *arr, int n);
//输出数组中的所有元素 
void display(int *arr,int n);
int main()
{
    int n;
    printf("input number of intergers:n");
    scanf("%d",&n);
    int *arr;
    arr=(int*)malloc(n*sizeof(int));
    if(arr==NULL)                            //NULL都为大写 
    {
         printf("allocation failuren");
           exit(1);
    }
    input(arr,n);
    printf("排序前:n");
    display(arr,n);
    sort(arr,n);
    printf("排序后:n");
    display(arr,n);
    return 0;
}
//从键盘输入n个数,保存在数组中
void input(int *arr, int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
}
//使用简单选择排序对数组中的元素按非递减有序排列 
void sort(int *arr, int n)
{
    int i,j,k;
    int temp;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(arr[j]<arr[k])
            {
                k=j;
            }
        }
        if(k!=i)
        {
            temp=arr[k];
            arr[k]=arr[i];
            arr[i]=temp;
        }
    }
}
//输出数组中的所有元素 
void display(int *arr,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d  ", arr[i]);
    }
    printf("n");
}
*/

/*功能:根据整型形参m,计算如下公式的值:
      y=1/5+1/6+1/7+1/8+1/9+1/10...+1/(m+5)
*/
/*
#include "stdio.h"
double fun(int m);
int main()   
{
    int n;      
    printf("Enter n: ");
    scanf("%d",&n);   
    printf("nThe result is %lfn",fun(n));
}   
double fun(int m)   
{
    double y=0;
    int i;
    for(i=0;i<=m;i++)
        y+=1.0/(i+5); 
}
*/
/*
2.功能:用下面的和式求圆周率的近似值。直到最后一项的绝对值
      小于等于0.0001。
      π/4 = 1-1/3+1/5-1/7+……  */
/*  
#include "stdio.h"
#include "math.h"
void fun()
{
  int i=1;
  double s=0,t=1,p=1;
  while(fabs(t)>1e-4)
  {
    s+=t;
    p=-p;            //定义一个变量用于交替正负 
    i=i+2;
    t=p/i;
  }
    printf("pi=%fn",s*4);
}
int main()
{
    fun();
}
*/

/*编写程序,从键盘输入 n (n<10)个学生的学号(学号为4位的整数,从1000开始)、成绩并存入结构数组中,
查找并输出成绩最高的学生信息。*/
/*
#include <stdio.h>
#define  N  8
typedef struct student
{
   int no;
   int score;
}student;
int main()
{
    student s[11];
    int n,i;
    int max;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&s[i].no,&s[i].score);
        max=s[0].score;                          
        if(max<s[i].score)
        max=s[i].score;
    }
    for(i=0;i<n;i++)
    {
        if(s[i].score==max)
            printf("%d ",s[i].no);
    }
        printf("%d",max);
    return 0;
 }
*/
/*
/*.编写程序,从键盘输入 n (n<10)个学生的学号(学号为4位的整数,从1000开始)、成绩并存入结构数组中,
按成绩从低到高排序并输出排序后的学生信息。*/
/*
#include <stdio.h>
#define  N  8
typedef struct student
{
   int no;
   int score;
}student;
int main()
{
    student s[11];
    int n,i,j;
    int temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d %d",&s[i].no,&s[i].score);
    }
    for(i=0;i<n;i++)
    {
       for(j=0;j<n-1;j++)
       {
           if(s[j].score>s[j+1].score)//对分数排序
           {
             temp=s[j].score;
             s[j].score=s[j+1].score;
             s[j+1].score=temp;

            //分数排序完毕后,学号也要交换
             temp=s[j].no;
             s[j].no=s[j+1].no;
             s[j+1].no=temp;
           }
       }

    }
    for(i=0;i<n;i++)
    {
            printf("%d %dn",s[i].no,s[i].score);
    }
    return 0;
 }
*/
// 快速排序
/*
void QuickSort(int arr[], int start, int end)
{
    if (start>=end)
            return;
    int i=start;
    int j=end;
    // 基准数
    int baseval=arr[start];
    while (i<j)
    {
        //从右向左找比基准数小的数
        while(i<j&&arr[j]>=baseval)
        {
            j--;
        }
        if(i<j)
        {
            arr[i]=arr[j];
            i++;
        }
        //从左向右找比基准数大的数
        while(i<j&&arr[i]<baseval)
        {
            i++;
        }
        if(i<j)
        {
            arr[j]=arr[i];
            j--;
        }
    }
    // 把基准数放到i的位置
    arr[i]=baseval;
    // 递归
    QuickSort(arr,start, i-1);
    QuickSort(arr,i+1,end);
}
*/

最后

以上就是幸福奇异果为你收集整理的C语言初学练习的全部内容,希望文章能够帮你解决C语言初学练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部