我是靠谱客的博主 幸福奇异果,这篇文章主要介绍C语言初学练习,现在分享给大家,希望可以做个参考。

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


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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#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); }

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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;       }



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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* #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; }



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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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函数:计算一个日期减去一个整数后所得的日期;

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#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日开始,三天打渔,两天晒网,他在某一天是打渔还是晒网

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#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日之后的某个日期,输出该人在该日期的活动。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#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文钱。(要求体现计算过程)*/

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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; }



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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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; }


 


//结构的嵌套 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#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;             }         }     } }


 


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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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;// }



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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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比,请编程序找出
三队赛手的名单。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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; }


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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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个质数,最终输出该范围内质数的个数

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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个整数为数组中的元素赋值,然后将数组元素从小到大排序并输出
/* 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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; }



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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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项的值。
 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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的所有整数。
/*

复制代码
1
2
3
4
5
6
7
8
9
10
11
#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个质数
 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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语言初学练习内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部