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 mian()
//{
// int length(char *p);
// ....
// return 0;
//}
#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); //相等时返回结果 0
return(*(p1+i)-*(p2+i)); //不等时返回结果为第一个不等字符 ASCII 码的差值
}

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;/*第一天的桃子数是第 2 天桃子数加 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;/*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 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++; //删除元素数加 1
}
for(i=0;i<6-n;i++) //将数组 a 中剩余元素复制到数组 b 中
*(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; /*第 n 次落地时共经过的米数*/
hn=hn/2; /*第 n 次反跳高度*/
}
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);//输入10个评委的评分
sum=ssum(score,10);//计算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;
}
更新于

请我喝[茶]~( ̄▽ ̄)~*

Chen 微信支付

微信支付

Chen 支付宝

支付宝

Chen 贝宝

贝宝