写在前面,当时练习以下程序是出于应试,以下有很多应试会考到的题目,例如,最小公倍数、日期转换、选择排序、逆序...如果有很多有应试需求的人们需要整理版的题库,我会抽时间去帮忙整理,祝大家考个好成绩。
//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
60const 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语言初学练习内容请搜索靠谱客的其他文章。
发表评论 取消回复