C语言编程题 1.从键盘任意输入a、b、c的值,编程计算并输出一元二次方程ax^2^+bx+c的两个实根,否则就输出“方程无实根”的信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> #include <math.h> int main ( ) { double a,b,c,disc,x1,x2,p,q; scanf ("%lf%lf%lf" ,&a,&b,&c); disc=b*b-4 *a*c; if (disc<0 ) printf (“has not real roots\n”); else { p=-b/(2.0 *a); q=sqrt (disc)/(2.0 *a); x1=p+q; x2=p-q; printf (“real roots:\nx1=%7.2f \n x2=%7.2f \n”,x1,x2); } return 0 ; }
2.编写程序,计算并输出杨辉三角的前十行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int a[10 ][10 ]={0 },i,j; for (i=0 ;i<10 ;i++) { a[i][0 ]=1 ; a[i][i]=1 ; } for (i=2 ;i<10 ;i++) for (j=0 ;j<i;j++) a[i][j]=a[i-1 ][j-1 ]+a[i-1 ][j]; for (i=0 ;i<10 ;i++) { for (j=0 ;j<=i;j++) printf ("%5d" ,a[i][j]); printf ("\n" ); } return 0 ; }
3.编写程序,功能是实现两个字符串连接。(不允许使用strcat函数)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { char s1[80 ],s2[40 ]; int i=0 ,j=0 ; printf ("input string1:" ); scanf ("%s" ,s1); printf ("input string2:" ); scanf ("%s" ,s2); while (s1[i]!='\0' ) i++; while (s2[j]!='\0' ) s1[i++]=s2[j++]; s1[i]='\0' ; printf ("\nThe new string is:%s\n" ,s1); return 0 ; }
4.编写程序,计算下列分段函数; X={-X X<0 0 X=0 2X X>0}
1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> #include <math.h> int main ( ) { int x,y; scanf ("%d " ,&x); if (x<0 ) y=-x; else if (x==0 ) y=0 ; else y=2 *x; printf ("x=%d,y=%d\n" ,x,y); return 0 ; }
5.编写程序,输入一个正整数n(1<N<=6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。 a [ i ] [ j ] = i * n + j + 1 ( 0 <= i <= N-1 , 0 <= j <= n-1 )
例如n=3时:
|1 2 3| |1 4 7|
A= |4 5 6| 转置成 B=|2 5 8|
|7 8 9| |3 6 9|
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 #include <stdio.h> #define M 6 int main () { int a[M][M],b[M][M],i,j,n; do { scanf ("%d" ,&n); }while (n<=0 ||n>6 ); for (i=0 ;i<n;i++) for (j=0 ;j<n;j++) a[i][j]=i*n+j+1 ; for (i=0 ;i<n;i++) { for (j=0 ;j<n;j++) printf ("%4d " ,a[i][j]); printf ("\n" ); } printf ("\n" ); for (i=0 ;i<n;i++) for (j=0 ;j<n;j++) b[j][i]=a[i][j]; for (i=0 ;i<n;i++) { for (j=0 ;j<n;j++) printf ("%4d " ,b[i][j]); printf ("\n" ); } return 0 ; }
6.编写一函数,求字符串的长度。在主函数中输入字符串,并输出其长度。请将其补充完整。 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 #include <stdio.h> int main () { int length (char *p) ; int len; char str[80 ]; printf ("input string: " ); scanf ("%s" ,str); len=length(str); printf ("The length of string is %d.\n" ,len); return 0 ; } int length (char *p) { int n; n=0 ; while (*p!='\0' ) { n++; p++; } return (n); }
7.中国有句古话叫”三天打鱼两天晒网“,假设某人从某天其,开始“三天打鱼两天晒网”,编写程序,计算这个人在以后的第n天中是“打鱼”还是“晒网”? 1 2 3 4 5 6 7 8 9 #include <stdio.h> int main () { int day; scanf ("%d" ,&day); if (day%5 ==1 || day%5 ==2 | day%5 ==3 ) printf ("Fishing in day %d\n" ,day); else printf ("Drying in day %d\n" ,day); return 0 ; }
8.编写程序,有一个3×4的矩阵,输出其中最大的那个元素的值,以及其所在的行号和列号。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { int a[3 ][4 ]={{1 ,2 ,3 ,4 },{9 ,8 ,7 ,6 }, {-10 ,10 ,-5 ,2 }},i,j; int row,colum,max; max=a[0 ][0 ]; row=0 ; colum=0 ; for (i=0 ; i<3 ; i++) for (j=0 ; j<4 ; j++) if (a[i][j]>max) { max=a[i][j]; row=i; colum=j; } printf ("最大值%d 行%d 列%d" ,max,row,colum); return 0 ; }
9.有n个人围成一圈,顺序排号。从第一个人开始报数(从1数到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 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 #include <stdio.h> #define nmax 50 int main () { int i,k,m,n,num[nmax]; printf ("please input the total of numbers:" ); scanf ("%d" ,&n); for (i=0 ;i<n;i++) num[i]=i+1 ; i=0 ; k=0 ; m=0 ; while (m<n-1 ) { if (num[i]!=0 ) k++; if (k==3 ) { num[i]=0 ; k=0 ;m++; } i++; if (i==n) i=0 ; } i=0 ; while (num[i]==0 ) i++; printf ("%d is left\n" ,num[i]); return 0 ; }
10.编写程序,从键盘上接收一个百分制成绩(整数),判断数据的合理性。如果不是正确的成绩(<0或>100),则输出“Error data!”,否则输出其响应的等级,成绩在90分及以上为‘A’,80 ~ 89分为‘B’,70 ~ 79分为‘C’,60 ~ 69分为‘D’,60分以下为‘E’。例如:(1)输入成绩为120时,输出Error data!(2)输入信息为85时,输出B 。【要求:用switch语句实现。】 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 () { int score,grade,temp; printf ("Your scroe:" ); scanf ("%d" ,&score); if (score>100 ||score<0 ) { printf ("Error data!\n" ); } else { temp=score/10 ; switch (temp) { case 10 : case 9 :grade='A' ;break ; case 8 :grade='B' ;break ; case 7 :grade='C' ;break ; case 6 : grade='D' ;break ; default : grade='E' ;break ; } printf ("grade:%c\n" ,grade); } return 0 ; }
11.编写程序,输入10个整数存入数组a,再输入一个整数x,在数组a中查找x,找到输出x在10个数中的序号,找不到则输出”no found“。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int i,a[10 ],x,flag=0 ; for (i=0 ;i<10 ;i++) scanf ("%d" ,&a[i]); scanf ("%d" ,&x); for (i=0 ;i<10 ;i++) if (x==a[i]){flag=i+1 ;break ;} if (flag==0 ) printf ("no found\n" ); else printf ("%d\n" ,flag); return 0 ; }
12.编写一函数int strcmp(char *p1,char *p2),实现两个字符串的比较。当字符串1 = 字符串2时,返回0;当字符串1 != 字符串2时,返回它们两者第一个不同字符的ASCII码的差值。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { int strcmp (char *p1,char *p2) ; int m; char str1[20 ],str2[20 ],*p1,*p2; printf ("input two strings:\n" ); scanf ("%s" ,str1); scanf ("%s" ,str2); p1=&str1[0 ]; p2=&str2[0 ]; m=strcmp (p1,p2); printf ("result:%d\n" ,m); return 0 ; } int strcmp (char *p1,char *p2) { int i; i=0 ; while (*(p1+i)==*(p2+i)) if (*(p1+i++)=='\0' ) return (0 ); return (*(p1+i)-*(p2+i)); }
13.编写程序,从键盘上接收一个百分制成绩(整数),判断数据的合理性。如果不是正确的成绩(<0或>100),则输出“Error data!”,否则输出其响应的等级,成绩在90分及以上为‘A’,80 ~ 89分为‘B’,70 ~ 79分为‘C’,60 ~ 69分为‘D’,60分以下为‘E’。例如:(1)输入成绩为120时,输出Error data!(2)输入信息为85时,输出B 。【要求:用if语句实现】 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int score,grade,temp; printf ("Your scroe:" ); scanf ("%d" ,&score); if (score>100 ||score<0 ) { printf ("Error data!\n" ); } else { if (score>=90 ) grade='A' ; else if (score>=80 ) grade='B' ; else if (score>=70 ) grade='C' ; else if (score>=60 ) grade='D' ; else grade='E' ; printf ("grade:%c\n" ,grade); } return 0 ; }
14.编写程序,输入一个不超过10位的正整数,判断该数是否是回文数(回文数:数字对称,如 12321,123321是回文数)。要求用数组实现。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { int b[10 ],i,j,k,m; long num,n; printf ("输入一个正整数:" ); scanf ("%ld" ,&num); k=0 ;n=num; do { b[k]=n%10 ; k=k+1 ; n=n/10 ; }while (n!=0 ); m=1 ; for (i=0 ;i<=(k-1 )/2 ;i++) if (b[i]!=b[k-1 -i]) m=0 ; if (m) printf ("%ld 是回文数" ,num); else printf ("%ld 是不回文数" ,num); return 0 ; }
15.编写一函数int strcpy(char *p1,char *p2),实现两个字符串的复制。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> int main () { int strcpy (char *p1,char *p2) ; char str1[20 ],str2[20 ],*p1,*p2; printf ("input two strings:\n" ); scanf ("%s" ,str1); scanf ("%s" ,str2); p1=&str1[0 ]; p2=&str2[0 ]; strcpy (p1,p2); printf ("%s\n" ,str1); return 0 ; } int strcpy (char *p1,char *p2) { while (*p1!='\0' ) *p1++=*p2++; *p1='\0' ; }
16.输入三条边长值,编写程序,利用海伦公式计算三角形的面积 $$ area = \sqrt{s(s-a)(s-b)(s-c)} $$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> #include <math.h> int main () { float a, b, c, s, area; printf ("请输入三角形的三边长: " ); scanf ("%f%f%f" , &a, &b, &c); if (a+b>c && a+c>b && b+c>a) { s = (a + b + c) / 2.0 ; area = sqrt (s * (s-a) * (s-b) * (s-c)); printf ("area=%f\n" , area); } else printf ("不能构成三角形\n" ); return 0 ; }
17.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想吃时,见只剩下一个桃子了。编写程序,输出第一天共摘了多少个桃子。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int day,x1,x2; day=9 ; x2=1 ; while (day>0 ) { x1=(x2+1 )*2 ; x2=x1; day--; } printf ("the total is %d\n" ,x1); return 0 ; }
18.编写函数,输入一个字符串(<40个字符),要求输出这个字符串每个字符,每个字符之间空一个空格。如输入”ABC“,应输出:“A B C”。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <string.h> int main () { char str[80 ]; void insert (char []) ; scanf ("%s" ,str); insert(str); printf ("output:\n%s\n" ,str); return 0 ; } void insert (char str[]) { int i; for (i=strlen (str);i>0 ;i--) { str[2 *i]=str[i]; str[2 *i-1 ]=' ' ; } }
19.已知某公司员工的基本工资为800元,绩效工资按每月工程利润提成(profit),利润提成比例(d)如下,编写程序计算员工工资。 profit<1000 没有提成
1000<=profit<2000 提成10%
2000<=profit<5000 提成15%
5000<=profit<10000 提成20%
profit>=10000 提成25%
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 #include <stdio.h> int main () { long profit; int d; float s=800 ; printf ("请输入利润:" ); scanf ("%ld" ,&profit); if (profit<0 ) { printf ("输入的利润无效\n" ); return 1 ; } switch (profit/1000 ) { case 0 : d=0 ;break ; case 1 : d=10 ; case 2 : case 3 : case 4 : d=15 ;break ; case 5 : case 6 : case 7 : case 8 : case 9 : d=20 ;break ; default : d=25 ; } s=s+profit*d/100.0 ; printf ("工资 s=%.2f" ,s); return 0 ; }
20.两个乒乓球对进行比赛,各出三人。甲队为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 #include <stdio.h> int main () { char i,j,k; 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 id a--%c\tb--%c\tc--%c\n" ,i,j,k); } } } return 0 ; }
21.编写程序,删除一维数组中重复出现的元素。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main () { int i,j,a[6 ],b[6 ],n,t; int *pa=a,*pb=b; for (i=0 ;i<6 ;i++) scanf ("%d" ,pa+i); n=0 ; for (i=0 ;i<6 -n;i++) for (j=1 ;j<6 -i-n;j++) if (*(pa+i)==*(pa+i+j)) { t=*(pa+i+j); *(pa+i+j)=*(pa+5 -n); *(pa+5 -n)=t; n++; } for (i=0 ;i<6 -n;i++) *(pb+i)=*(pa+i); for (i=0 ;i<6 -n;i++) printf ("%d " ,*(pb+i)); return 0 ; }
22.输入一个大写字母,输出字母表中它前面的字母和后面的字母。如果输入的字母为A或Z,则分别输出提示信息“没有前面的字母”或“没有后面的字母”。 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main () { char c; scanf ("%c" ,&c); if (c>='A' && c<='Z' ) { if (c=='A' ) printf ("没有前面的字母\n" ); else if (c=='Z' ) printf ("没有后面的字母\n" ); else printf ("前面字母:%c,后面字母:%c\n" ,c-1 ,c+1 ); } return 0 ; }
23.一球从100m高度自由落下,每次落地后会反跳原来高度的一半,再落下。求它第10次落地时,共经过多少米?第10次反弹多高? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { double sn=100 ,hn=sn/2 ; int n; for (n=2 ;n<=10 ;n++) { sn=sn+2 *hn; hn=hn/2 ; } printf ("第 10 次落地时共经过%f 米\n" ,sn); printf ("第 10 次反弹%f 米\n" ,hn); return 0 ; }
24.编写一个函数void fun(char *ss),它的功能是:将ss所指字符串中下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 1 2 3 4 5 6 7 8 void fun (char *ss) { int i,n; n=strlen (ss); for (i=1 ;i<n;i+=2 ) if (ss[i]>= 'a' && ss[i]<='z' ) ss[i]=ss[i]-32 ; }
25.韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。编程,帮韩信算出有多少士兵。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int x; for (x=1 ; ;x++) { if (x%5 ==1 && x%6 ==5 && x%7 ==4 && x%11 ==10 ) { printf ("x = %d\n" , x); break ; } } return 0 ; }
26.编写程序,输入一行不超过80个字符,统计其中有多少个单词,单词之间用空格分隔开。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main () { char ch[81 ]; int i,num=0 ,word=0 ; char c; gets(ch); for (i=0 ;(c=ch[i])!='\0' ;i++) if (c==' ' ) word=0 ; else if (word==0 ) { word=1 ; num++; } printf ("There are %d words in the line.\n" ,num); return 0 ; }
27.下面程序定义了M*N的二维数组,并在主函数中自动赋值。函数fun(int a[] [N],int 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 #include <stdio.h> #define M 3 #define N 4 void fun (int a[][N], int n) { int i,j; for (i=0 ;i<M;i++) for (j=0 ;j<=i;j++) a[i][j]=a[i][j]*n; } int main () { int i,j,n,a[M][N]; for (i=0 ;i<M;i++) for (j=0 ;j<N;j++) scanf ("%d" ,&a[i][j]); scanf ("%d" ,&n); fun(a,n); for (i=0 ;i<M;i++) { for (j=0 ;j<N;j++) printf ("%3d " ,a[i][j]); printf ("\n" ); } return 0 ; }
28.编写程序,输出100-200之间所有素数,每行输出10个数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> int main () { int n,m=0 ,i,flag; for (n=101 ;n<=200 ;n=n+2 ) { flag=1 ; for (i=2 ;i<n;i++) if (n%i==0 ) {flag=0 ;break ;} if (flag) { printf ("%d " ,n); m=m+1 ; if (m%10 ==0 ) printf ("\n" ); } } return 0 ; }
29.编写函数int fun(char *ss,char c),它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。 1 2 3 4 5 6 7 8 9 10 11 int fun (char *ss, char c) { int n=0 ; while (*ss) { if (*ss==c) n++; ss++; } return n; }
30.编写函数fun功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)例如:当t=1000时,函数值为1597。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int fun (int t) { int i,f0=0 ,f1=1 ,f2=f0+f1; while (f2<=t) {f0=f1;f1=f2;f2=f0+f1;} return f2; } int main () { int n; scanf ("%d" ,&n); printf ("%d " ,fun(n)); return 0 ; }
31.编写程序,输入一行字符,分别统计求出其中英文字母、空格和其他字符的个数并输出结果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main ( ) { char ch; int char_num=0 ,kongge_num=0 ,int_num=0 ,other_num=0 ; while ((ch=getchar())!='\n' ) { if (ch>='a' &&ch<='z' ||ch<='z' &&ch>='a' ) char_num++; else if (ch==' ' ) kongge_num++; else if (ch>='0' &&ch<='9' ) int_num++; else other_num++; } printf ("字母= %d,空格= %d,数字= %d,其它=%d\n" ,char_num,kongge_num,int_num,other_num); return 0 ; }
32.已知数组int a[10]={1,3,5,7,9,11,13,15,19};请按下列要求用c语言编写程序。 (1)编写函数viod swap(int *arr,int n){……},实现将数组arr的前n个元素逆序排列,即arr[0]与arr[n-1]交换,arr[1]与arr[n-2]交换
(2)编写主函数main(){……},将数组a按原顺序输出后,调用swap()对数组a的全部元素进行逆序排列,然后再次输出数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> void swap (int *arr,int n) { int t,i; for (i=0 ;i<n/2 ;i++) {t=arr[i];arr[i]=arr[n-i-1 ];arr[n-i-1 ]=t;} } int main () { int a[10 ]={1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19 },i,n; scanf ("%d" ,&n); for (i=0 ;i<n;i++) printf ("%d " ,a[i]); printf ("\n" ); swap(a,n); for (i=0 ;i<n;i++) printf ("%d " ,a[i]); return 0 ; }
33.某大学正在举行歌唱比赛,现有10位评委为学生评分,评分采用百分制。按如下规则计算学生的最终得分:先计算评委的分数之和,减去分数中的最高分与最低分,再除以8得到学生的成绩。请输入1位同学的10个分数,计算和输出学生的最终得分。下面给出了main()函数,请将其他函数补充完整,即写出input()、ssum()、smax()与smin()函数的定义。 1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> int main () { int score[10 ],max,min,sum; float aver; input(score,10 ); sum=ssum(score,10 ); max=smax(score,10 ); min=smin(score,10 ); aver=(sum-max-min)*1.0 /(10 -2 ); printf ("%f\n" ,aver); }
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 void input (int s[], int n) { int i; for (i=0 ;i<n; i++) scanf ("%d" ,&s[i]); } int ssum (int s[], int n) { int st=0 ,i; for (i=0 ; i<n; i++) st+=s[i]; return st; } int smax (int s[], int n) { int m, i; m=s[0 ]; for (i=1 ;i<n;i++) { if (m<s[i]) m=s[i];} return m; } int smin (int s[], int n) { int m, i; m=s[0 ]; for (i=1 ;i<n;i++) { if (m>s[i]) m=s[i]; } return m; }
34.某物品原有价值为p,由于使用其价值降低,价值的折扣率根据时间t(月数)确定如下:t<3,无折扣、3<=t<6,2%折扣、6<=t<12,5%折扣、12<=t<21,8%折扣、t>=21,10%折扣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int time,discount; float price; scanf ("%d,%f" ,&time,&price); switch (time/3 ) { case 0 : discount=0 ;break ; case 1 : discount=2 ;break ; case 2 : case 3 : discount=5 ;break ; case 4 : case 5 : case 6 : discount=8 ;break ; default : discount=10 ; } printf ("prices=%f" ,price*(1 -discount/100.0 )); return 0 ; }
35.用迭代法求x=√a。求平方根的迭代公式为:x(n+1)=1/2(xn+a/xn)(要求前后两次求出的x的差的绝对值小于10的-5次方) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> #include <math.h> int main () { float a,x0,x1; printf ("enter a positive number:" ); scanf ("%f" ,&a); x0=a/2 ; x1=(x0+a/x0)/2 ; do { x0=x1; x1=(x0+a/x0)/2 ; }while (fabs (x0-x1)>=1e-5 ); printf ("The square root of %5.2f is %8.5f\n" ,a,x1); return 0 ; }
36.编写程序,输入年月日,计算该日期在本年中是第几天,需要考虑闰年。要求用结构体变量形式完成。 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> struct { int year; int month; int day; }date; int main () { int days=0 ; printf ("input year,month,day:" ); scanf ("%d,%d,%d" ,&date.year,&date.month,&date.day); switch (date.month) { case 12 : case 11 : days=days+31 ; case 10 : days=days+30 ; case 9 : days=days+31 ; case 8 : days=days+30 ; case 7 : days=days+31 ; case 6 : days=days+31 ; case 5 : days=days+30 ; case 4 : days=days+31 ; case 3 : days=days+28 ; case 2 : days=days+31 ; case 1 : days=days+date.day; } if ((date.year %4 == 0 && date.year % 100 != 0 ||date.year % 400 == 0 ) && date.month >=3 ) days+=1 ; printf ("%d/%d is the %dth day in %d.\n" ,date.month,date.day,days,date.year); return 0 ; }
37.编写程序输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1^3^+5^3^+3^3^。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { int i,j,k,n; printf ("water flower number is:" ); for (n=100 ;n<1000 ;n++) { i=n/100 ; j=n/10 %10 ; k=n%10 ; if (i*100 +j*10 +k==i*i*i+j*j*j+k*k*k) printf ("%-5d" ,n); } return 0 ; }
38.编写程序,已有一个已排好序的数组int a[11]={1,4,6,9,13,16,28,40,100},令输入一个数,要求按原来排序的规律将它插入数组中。 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 main () { int a[11 ]={1 ,4 ,6 ,9 ,13 ,16 ,19 ,28 ,40 ,100 }; int temp1,temp2,number,end,i,j; printf ("array a:\n" ); for (i=0 ;i<10 ;i++) printf ("%5d" ,a[i]); printf ("\n" ); printf ("insert data:" ); scanf ("%d" ,&number); end=a[9 ]; if (number>end) a[10 ]=number; else { for (i=0 ;i<10 ;i++) { if (a[i]>number) { temp1=a[i]; a[i]=number; for (j=i+1 ;j<11 ;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break ; } } } printf ("Now array a:\n" ); for (i=0 ;i<11 ;i++) printf ("%5d" ,a[i]); printf ("\n" ); return 0 ; }
39.现有10个城市名及其春、夏、秋、冬四个季节的平均温度值,编写程序,定义合适的结构体,输入10个城市名和四季温度,计算各城市的全年平均温度,并按照平均温度从低到高的顺序输出城市名、四季温度及全年平均温度。 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 #include <stdio.h> struct aa { char city[10]; float spring; float summer; float autumn; float winter; float avgtem; }; int main() { struct aa x[10],t; int i,j; for(i=0;i<10;i++) scanf("%s%f%f%f%f",x[i].city,&x[i].spring,&x[i].summer,&x[i].autumn,&x[i].winter); for(i=0;i<10;i++) x[i].avgtem=(x[i].spring+x[i].summer+x[i].autumn+x[i].winter)/4; for(i=0;i<9;i++) for(j=0;j<9-i;j++) { if(x[j].avgtem>x[j+1].avgtem) {t=x[j];x[j]=x[j+1];x[j+1]=t;} } for(i=0;i<10;i++) printf("%s,%f,%f,%f,%f,%f\n",x[i].city,x[i].spring,x[i].summer,x[i].autumn,x[i].winter,x[i].avgtem); return 0; }
40.编写程序,计算1+3+3^2^+…+3^10^的值并输出,假定分别用i,p,s作为循环变量、累成变量和累加变量的标识符。 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> int main () { int i; int p=1 ; int s=1 ; for (i=1 ;i<=10 ;i++) {p*=3 ; s+=p;} printf ("%d\n" ,s); return 0 ; }
41.编写程序,求10个元素数组的最大值及其在数组中出现的次数 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main () { int a[10 ],i,max,count=0 ; for (i=0 ;i<10 ;i++) scanf ("%d" ,&a[i]); max=a[0 ]; for (i=1 ;i<10 ;i++) { if (a[i]>max) { max=a[i]; count=1 ;} else if (a[i]==max) count++; } printf ("max=%d,count=%d" ,max,count); return 0 ; }
42.统计候选人得票数,假设有3名候选人,每次输入一个得票候选人的名字,输入“0”结束。要求最后输出每个人的得票数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> #include <string.h> struct person { char name[20 ]; int count; }; int main () { struct person leader [3]= {"Hu" ,0 ,"Li" ,0 ,"Ma" ,0 }; int i; char leader_name[20 ]; do { scanf ("%s" ,leader_name); if (strcmp (leader_name,"0" )==0 ) break ; else for (i=0 ;i<3 ;i++) if (strcmp (leader_name,leader[i].name)==0 ) leader[i].count++; }while (1 ); for (i=0 ;i<3 ;i++) printf ("%5s: %d\n" ,leader[i].name,leader[i].count); return 0 ; }
43.设计函数double exp(double x)设计程序,利用e^x^=1+x+x^2^/2!+x^3^/3!+x^4^/4!+…,计算e^x^的近似值,要求误差小于10^-6^。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> #define EPS 1e-6 int main () { double e, item; int i,x,k; scanf ("%d" ,&x); item = 1.0 ; e = 1.0 ; i =1 ; k=x; while (k/item>=EPS) { item = item * i; e = e + k/item; i++; k=k*x; } printf ("\ne=%lf\n" , e); printf ("共累加了%d 项\n" , i-1 ); return 0 ; }
44.编写函数void to_b(unsigned long n),函数功能将一个十进制整数转换成二进制的形式。要求用递归方法实现。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> void to_b (unsigned long n) ;int main () { unsigned long num; scanf ("%ul" ,&num); to_b(num); putchar ('\n' ); return 0 ; } void to_b (unsigned long n) { unsigned long r; r=n%2 ; if (n>=2 ) to_b(n/2 ); putchar (r?'1' :'0' ); return ; }
45.现有扑克牌52张,其花色记录为:char Suit[]={3,4,5,6};其牌面记录为:char Face[]={‘A’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’X’,’J’,’Q’,’K’};请用C语言编写程序实现以下功能。 (1)自定义结构体数组,按照同一花色牌面从小到大的顺序记录全部52张扑克牌;
(2)以时间为参数设置随机序列种子,实现洗牌,即遍历扑克牌数组,依次交换当前牌与数组中随机位置的牌;
(3)输出打乱顺序后的全部扑克牌,牌与牌间使用Tab分隔。
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 #include <stdio.h> #include <time.h> #include <stdlib.h> struct card { char face; char suit; }; typedef struct card Card ;int main () { Card deck[52 ],t; char Face[]={'A' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'X' ,'J' ,'Q' ,'K' }; char Suit[]={3 ,4 ,5 ,6 }; int i,j; for (i=0 ;i<52 ;i++) { deck[i].face=Face[i%13 ]; deck[i].suit=Suit[i/13 ]; } srand(time(NULL )); for (i=0 ;i<52 ;i++) { j=rand()%52 ; t=deck[i];deck[i]=deck[j];deck[j]=t; } for (i=0 ;i<52 ;i++) printf ("%c%c\t" ,deck[i].suit,deck[i].face); return 0 ; }