浙大版《C语言程序设计(第3版)》题目集 PTA代码
最近重新复习了一下c语言 就找了一些习题 记录一下和大家一起分享
以下是本人程序(可能不是最佳方案 )
目录
- 浙大版《C语言程序设计(第3版)》题目集 PTA代码
- 编程题
- 习题3-1 比较大小
- 习题3-2 高速公路超速处罚
- 练习3-4 统计字符
- 习题3-5 三角形判断
- 练习3-8 查询水果价格
- 练习4-3 求给定精度的简单交错序列部分和
- 练习4-6 猜数字游戏
- 习题4-7 最大公约数和最小公倍数
- 习题4-8 高空坠球
- 习题4-9 打印菱形图案
- 习题4-10 猴子吃桃问题
- 习题4-11 兔子繁衍问题
- 习题6-7 简单计算器
- 习题6-8 统计一行文本的单词个数
- 习题7-1 选择法排
- 习题7-2 求一批整数中出现最多的个位数字
- 习题7-3 判断上三角矩阵
- 习题7-4 求矩阵各行元素之和
- 习题7-7 字符串替换
- 习题7-8 字符串转换成十进制整数
- 习题8-7 字符串排序
- 习题8-10 输出学生成绩
- 习题9-1 时间换
- 习题9-3 平面向量加法
- 习题9-4 查找书籍
- 习题9-5 通讯录排序
- 函数题
- 练习5-1 求m到n之和
- 练习5-2 找两个数中最大者
- 练习5-3 数字金字塔
- 习题5-1 符号函数
- 习题5-2 使用函数求奇数和
- 习题5-3 使用函数计算两点间的距离
- 习题5-4 使用函数求素数和
- 习题5-5 使用函数统计指定数字的个数
- 习题5-6 使用函数输出水仙花数
- 习题5-7 使用函数求余弦函数的近似值
- 习题6-1 分类统计字符个数
- 习题6-2 使用函数求特殊a串数列和
- 习题6-3 使用函数输出指定范围内的完数
- 习题6-5 使用函数验证哥德巴赫猜
- 习题6-6 使用函数输出一个整数的逆序数
- 习题8-1 拆分实数的整数与小数部分
- 习题8-2 在数组中查找指定元素
- 习题8-3 数组循环右移
- 习题8-4 报数
- 习题8-5 使用函数实现字符串部分复制
- 习题8-6 删除字符
- 习题8-8 判断回文字符串
- 习题8-9 分类统计各类字符个数
- 习题9-2 计算两个复数之积
- 习题9-6 按等级统计学生成绩
- 练习10-1 使用递归函数计算1到n之和
- 习题10-2 递归求阶乘和
- 习题10-3 递归实现指数函数
- 习题10-4 递归求简单交错幂级数的部分和
- 习题10-5 递归计算Ackermenn函数
- 习题10-6 递归求Fabonacci数列
- 习题10-7 十进制转换二进制
- 习题10-8 递归实现顺序输出整数
- 习题11-1 输出月份英文名
- 习题11-2 查找星期
- 习题11-3 计算最长的字符串长度
- 习题11-4 字符串的连接
- 习题11-5 指定位置输出字符串
- 习题11-6 查找子串
- 习题11-7 奇数值结点链表
- 习题11-8 单链表结点删除
编程题
习题3-1 比较大小
#include<stdio.h>
int main()
{
int t,a,b,c;
scanf("%d %d %d",&a,&b,&c);
while(1)
{
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
if(a<b&&b<c)
break;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
习题3-2 高速公路超速处罚
#include<stdio.h>
int main()
{
int speed,limit;
double t;
scanf("%d %d",&speed,&limit);
if(speed<(limit+limit*0.1))
printf("OK");
else if (speed>=limit+limit*0.1&&speed<limit+limit*0.5)
{
t=(speed-limit)*1.0/limit*100.0;
t=(int)(t+0.5)>(int)t?(int)t+1:(int)t;
printf("Exceed %d%%. Ticket 200",(int)t);
}
else
{
t=(speed-limit)*1.0/limit*100.0;
t=(int)(t+0.5)>(int)t?(int)t+1:(int)t;
printf("Exceed %d%%. License Revoked",(int)t);
}
return 0;
}
练习3-4 统计字符
#include <stdio.h>
#include <string.h>
int main()
{
char a[9];
int i=0;
int t=0;
int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
for(i=0;i<=9;i++)
{
// scanf(" %c",&a[i]);
a[i]=getchar();
if((a[i]>=97&&a[i]<=122)||(a[i]>=65&&a[i]<=90))
{
cnt1++;
t=1;
}
else if(a[i]>=48&&a[i]<=57)
{
cnt2++;
t=1;
}
else if(a[i]==32||a[i]==10)
{
cnt3++;
t=1;
}
if (t==0)
cnt4++;
t=0;
}
printf("letter = %d,blank = %d,digit = %d,other = %d",cnt1,cnt3,cnt2,cnt4);
return 0;
}
习题3-5 三角形判断
#include<stdio.h>
#include<math.h>
int main()
{
int a1,a2,b1,b2,c1,c2;
double d1,d2,d3;
scanf("%d %d %d %d %d %d",&a1,&a2,&b1,&b2,&c1,&c2);
d1=sqrt((a1-b1)*(a1-b1)+(a2-b2)*(a2-b2));
d2=sqrt((a1-c1)*(a1-c1)+(a2-c2)*(a2-c2));
d3=sqrt((c1-b1)*(c1-b1)+(c2-b2)*(c2-b2));
if(d1+d2>d3&&d1+d3>d2&&d2+d3>d3)
{
double t=(d1+d2+d3)/2;
double d = d1 + d2 + d3, s = sqrt(t * (t - d1) * (t - d2) * (t - d3));
printf("L = %.2f, A = %.2f",d,s);
}
else printf("Impossible");
return 0;
}
练习3-8 查询水果价格
#include<stdio.h>
int main()
{
int a;
int count=1;
printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit");
while(count<=5)
{
scanf("%d",&a);
switch(a)
{
case 1:
printf("price = 3.00\n");
break;
case 2:
printf("price = 2.50\n");
break;
case 3:
printf("price = 4.10\n");
break;
case 4:
printf("price = 10.20\n");
break;
case 0:
break;
}
count++;
}
return 0;
}
练习4-3 求给定精度的简单交错序列部分和
#include <stdio.h>
#include <math.h>
int main()
{
int a=1;
double eps,sum=0.0;
int sign=1;
double t=1.0;
scanf("%lf",&eps);
while(t>eps)
{
sum+=1.0/a*sign;
sign=-sign;
t=1.0/a;
a+=3;
}
printf("sum = %.6lf",sum);
return 0;
}
练习4-6 猜数字游戏
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned int)time(0));
int a,n;
int count=1;
int t=rand()%100;
scanf("%d %d",&a,&n);
while(a!=t)
{
if(a<t)
printf("T00 small");
else printf("Too big");
count++;
scanf("%d",&a);
if(a<0||count==n)
{
count=-2;
break;
}
}
if(count<=n&&count>3)
count=-1;
switch(count)
{
case 1:
printf("Bingo!");
break;
case 2:
case 3:
printf("Lucky You!");
break;
case -1:
printf("Good Guess!");
break;
case -2:
printf("Game Over");
break;
}
getchar();
return 0;
}
习题4-7 最大公约数和最小公倍数
#include <stdio.h>
int GCD(int M,int N);
int LCM(int M,int N);
int main()
{
int M,N;
int t;
int gcd,lcm;
scanf("%d %d",&M,&N);
if(M<N)
{
t=M;
M=N;
N=t;
}
gcd=GCD(M,N);
lcm=LCM(M,N);
printf("%d %d",gcd,lcm);
return 0;
}
int GCD(int M,int N)
{
int a;
a=M%N;
while(a!=0)
{
M=N;
N=a;
a=M%N;
}
return N;
}
int LCM(int M,int N)
{
int a;
int n=1;
do
{
a=(M*n)%N;
n++;
}while(a!=0);
return M*(n-1);
}
习题4-8 高空坠球
#include<stdio.h>
#include<math.h>
int main()
{
int h,n;
int i;
scanf("%d %d",&h,&n);
double d,h1;
for(i=1;i<=n;i++)
{
if(i==1)
d=h;
else
{
d+=h*1.0/pow(2,i-1)*2;
h1=h*1.0/pow(2,i);
}
}
printf("%.1f %.1f",d,h1);
return 0;
}
习题4-9 打印菱形图案
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i=i+1)
{
if(i<=n/2+1)
{
for(j=n-(2*(i-1));j>=1;j=j-1)
{
printf(" ");
}
for(k=1;k<=(1+(2*(i-1)));k++)
{
printf("* ");
}
printf("\n");
}
else
{
int t;
t=(n+1)-i;
for(j=n-(2*(t-1));j>=1;j--)
{
printf(" ");
}
for(k=1;k<=(1+(2*(t-1)));k++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
习题4-10 猴子吃桃问题
#include <stdio.h>
int main()
{
int N;
int a;
scanf("%d",&N);
for(int i=N;i>=1;i--)
{
if(i==N)
a=1;
else
a=(a+1)*2;
}
printf("%d",a);
return 0;
}
习题4-11 兔子繁衍问题
#include <stdio.h>
int main()
{
int N,sum=1;
scanf("%d",&N);
int a=1;
int b=1;
int month=3;
if(N<=1)
month=1;
else
{
while(sum<N)
{
if(month==3)
{
sum=2;
month++;
}
else
{
sum=sum+1*b;
month++;
b++;
}
}
}
printf("%d",month-2);
return 0;
}
//month 3 4 5 6 7 8 9 10
//sum 2 3 5 8 12 17 23 30
//1 2 3 4 5 6 7 8 9
//1
// 1
// 1
// 2
// 3
// 4
// 5
习题6-7 简单计算器
#include<stdio.h>
int main()
{
int i=0;
char n;
int number1,number2;
scanf("%d",&number1);
while(n!='=')
{
n=getchar();
if(n=='=')
break;
scanf("%d",&number2);
if(n=='+'||n=='-'||n=='*'||n=='/'){
if(n=='+'){
number1=number1+number2;
}else if(n=='-'){
number1=number1-number2;
}else if(n=='*'){
number1=number1*number2;
}else if(n=='/')
{
if(number2==0){
printf("ERROR") ;
i++;
}else{
number1=number1/number2;
}
}
}else{
printf("ERROR") ;
i++;
}
}
if(i==0)
printf("%d",number1);
return 0;
}
习题6-8 统计一行文本的单词个数
#include<stdio.h>
int main()
{
char a;
int cnt=0;
a=getchar();
while(a!='\n')
{
if(a ==' ')
cnt++;
a=getchar();
}
printf("%d",cnt+1);
return 0;
}
习题7-1 选择法排
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
int a[n-1];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int j,t;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
if(i==n-1)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
return 0;
}
习题7-2 求一批整数中出现最多的个位数字
#include<stdio.h>
int main()
{
int i,N;
scanf("%d",&N);
int a[9]={0};
int num;
int t;
for(i=0;i<N;i++)
{
scanf("%d",&num);
do
{
t=num%10;
a[t]++;
num/=10;
}while(num!=0);
}
int M=a[0];
for(i=0;i<+9;i++)
{
if(a[i]>M)
M=a[i];
}
printf("%d:",M);
for(i=0;i<=9;i++)
if(a[i]==M)
printf(" %d",i);
return 0;
}
习题7-3 判断上三角矩阵
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n-1];
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=n-1;i>=0;i--)
{
printf("%d ",a[i]);
}
return 0;
}
习题7-4 求矩阵各行元素之和
#include<stdio.h>
int main()
{
int N1,N2,i,j;
scanf("%d",&N1);
int a[N1-1];
for(j=0;j<N1;j++)
{
scanf("%d",&a[j]);
}
scanf("%d",&N2);
int b[N2-1];
for(j=0;j<N2;j++)
{
scanf("%d",&b[j]);
}
int out[100]={0};
int cnt=0;
int sign=0;
int t=1;
for(i=0;i<N1;i++)
{
for(j=0;j<N2;j++)
{
if(a[i]==b[j])
sign++;
}
if(sign==0)
{
out[cnt]=a[i];
cnt++;
}
sign=0;
}
for(i=0;i<N2;i++)
{
for(j=0;j<N1;j++)
{
if(b[i]==a[j])
sign++;
}
if(sign==0)
{
out[cnt]=b[i];
cnt++;
}
sign=0;
}
// out 3 3 5 -15 6 4 6 1
// out1 3 5 -15 4 6
int out1[cnt];
int k=0;
for(i=0;i<cnt;i++)
{
// if(i!=cnt-1)
// {
// for(j=i+1;j<cnt&& out[i]-out[j];j++)
// if(j==cnt-1)
// {
// out1[k]=out[i];
// k++;
// }
// }
// else
// out1[k]=out[i];
if(i==0)
{
out1[i]=out[i];
k++;
continue;
}
for(j=0;j<k && out[i]-out1[j];j++)
{
if(j==k-1)
{
out1[k]=out[i];
if(i!=cnt-1)
k++;
else break;
}
}
}
for(i=0;i<=k;i++)
{
if(i==0)
printf("%d",out1[i]);
else printf(" %d",out1[i]);
}
return 0;
}
习题7-7 字符串替换
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
int i=0,j;
int t;
while(i<n)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
t=getchar();
if(t=='\n')
i++;
}
int sum=0;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(i+j==n-1)
continue;
else sum+=a[i][j];
}
}
printf("%d",sum);
return 0;
}
习题7-8 字符串转换成十进制整数
#include<stdio.h>
#include<math.h>
int main()
{
char a[100];
int i=0;
int cnt=0;
do
{
a[i]=getchar();
i++;
cnt++;
}while(a[i-1]!='#');
int sign=0;
int k,j=0;
char b[10];
for(i=0;i<cnt;i++)
{
if(a[i]=='x'||a[i]=='X')
{
k=i+1;
if(a[i-1]=='-') sign=1;
for(k=i+1;k<cnt;k++)
{
if((a[k]>='0'&&a[k]<='9')||(a[k]>='a'&&a[k]<='f')||(a[k]>='A'&&a[k]<='F'))
{
b[j]=a[k];
j++;
}
}
}
if(k==cnt)
break;
}
int sum=0;
for(i=0;i<j;i++)
{
switch(b[i])
{
case '0':
sum+=0;
break;
case '1':
sum+=1*pow(16,j-1-i);
break;
case '2':
sum+=2*pow(16,j-1-i);
break;
case '3':
sum+=3*pow(16,j-1-i);
break;
case '4':
sum+=4*pow(16,j-1-i);
break;
case '5':
sum+=5*pow(16,j-1-i);
break;
case '6':
sum+=6*pow(16,j-1-i);
break;
case '7':
sum+=7*pow(16,j-1-i);
break;
case '8':
sum+=8*pow(16,j-1-i);
break;
case '9':
sum+=9*pow(16,j-1-i);
break;
case 'a':
sum+=10*pow(16,j-1-i);
break;
case 'b':
sum+=11*pow(16,j-1-i);
break;
case 'c':
sum+=12*pow(16,j-1-i);
break;
case 'd':
sum+=13*pow(16,j-1-i);
break;
case 'e':
sum+=14*pow(16,j-1-i);
break;
case 'f':
sum+=15*pow(16,j-1-i);
break;
case 'A':
sum+=10*pow(16,j-1-i);
break;
case 'B':
sum+=11*pow(16,j-1-i);
break;
case 'C':
sum+=12*pow(16,j-1-i);
break;
case 'D':
sum+=13*pow(16,j-1-i);
break;
case 'E':
sum+=14*pow(16,j-1-i);
break;
case 'F':
sum+=15*pow(16,j-1-i);
break;
}
}
if(sign==1)
printf("%d",-sum);
else
printf("%d",sum);
return 0;
}
习题8-7 字符串排序
#include<stdio.h>
#include<string.h>
int main()
{
char a[5][100]={'0'};
char b[100];
int i,j;
for(i=0;i<5;i++)
{
scanf("%s",a[i]);
}
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
strcpy(b,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],b);
}
}
}
printf("After sorted:\n");
for(i=0;i<5;i++)
{
printf("%s\n",a[i]);
}
return 0;
}
习题8-10 输出学生成绩
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i;
int *p;
p=(int*)malloc(sizeof(int));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",p+i);
}
double sum=0;
for(i=0;i<n;i++)
{
sum+=*(p+i);
}
printf("average = %.2f\n",sum/n);
double max =*p;
for(i=1;i<n;i++)
{
if(max<*(p+i))
max=*(p+i);
}
printf("max = %.2f\n",max);
double min =*p;
for(i=1;i<n;i++)
{
if(min>*(p+i))
min=*(p+i);
}
printf("min = %.2f\n",min);
free(p);
return 0;
}
习题9-1 时间换
#include<stdio.h>
struct time
{
int hour;
int min;
int sec;
};
int main()
{
struct time Time;
int s;
scanf("%d:%d:%d",&Time.hour,&Time.min,&Time.sec);
scanf("%d",&s);
Time.sec=Time.sec+s;
if(Time.sec>=60)
{
Time.sec=Time.sec-60;
Time.min++;
if(Time.min>=60)
{
Time.min-=60;
Time.hour++;
if(Time.hour>12)
Time.hour-=12;
}
}
printf("%.2d:%.2d:%.2d",Time.hour,Time.min,Time.sec);
return 0;
}
习题9-3 平面向量加法
#include<stdio.h>
struct point
{
double x;
double y;
}p1,p2;
int main()
{
scanf("%lf %lf %lf %lf",&p1.x,&p1.y,&p2.x,&p2.y);
printf("(%.1f %.1f)",p1.x+p2.x,p1.y+p2.y);
return 0;
}
习题9-4 查找书籍
#include<stdio.h>
struct book
{
char name[50];
double price;
};
int main()
{
int n,i,j;
char c;
scanf("%d",&n);
struct book b[n];
for(i=0;i<n;i++)
{
scanf("%c",&c);//读入缓冲区的"\n"
j=0;
do{
b[i].name[j]=getchar();
j++;
}while(b[i].name[j-1]!='\n');
scanf("%lf",&b[i].price);
}
int max,min;
max=0;
min=0;
for(i=1;i<n;i++)
{
if(b[i].price<b[min].price)
min=i;
if(b[i].price>b[max].price)
max=i;
}
printf("%.2f,%s",b[max].price,b[max].name);
printf("%.2f,%s",b[min].price,b[min].name);
}
习题9-5 通讯录排序
#include<stdio.h>
struct contact
{
char name[20];
int bri;
char num[20];
};
int main()
{
int n,i,j;
char a;
scanf("%d",&n);
struct contact c[n];
for(i=0;i<n;i++)
{
scanf("%c",&a);
scanf("%s",&c[i].name);
scanf("%d",&c[i].bri);
scanf("%s",&c[i].num);
}
int max=0;
for(i=0;i<n;i++)
{
struct contact temp;
for(j=i+1;j<n;j++)
{
int year1,year2,mon1,mon2,day1,day2;
year1=c[max].bri/10000;
year2=c[j].bri/10000;
mon1=(c[max].bri-c[max].bri/10000)/100;
mon2=(c[j].bri-c[j].bri/10000)/100;
day1=(c[max].bri-c[max].bri/10000)-mon1*100;
day2=(c[j].bri-c[j].bri/10000)-mon2*100;
if(year1>year2)
max=j;
if(year1==year2)
{
if(mon1>mon2)
max=j;
if(mon1==mon2)
{
if(day1>day2)
max=j;
}
}
}
temp=c[i];
c[i]=c[max];
c[max]=temp;
max=i+1;
}
for(i=0;i<n;i++)
{
printf("%s %d %s\n",c[i].name,c[i].bri,c[i].num);
}
return 0;
}
函数题
练习5-1 求m到n之和
#include <stdio.h>
int sum(int m,int n)
{
int sum1=0;
for(;m<=n;m++)
{
sum1+=m;
}
return sum1;
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("sum = %d\n", sum(m, n));
return 0;
}
练习5-2 找两个数中最大者
#include <stdio.h>
int max( int a, int b )
{
if(a>b)
return a;
else if(a<b)
return b;
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("max = %d\n", max(a, b));
return 0;
}
练习5-3 数字金字塔
#include <stdio.h>
void pyramid( int n )
{
int i,j,t=1;
for(i=1;i<=n;i++)
{
for(j=n-i;j>0;j--)
{
printf(" ");
}
t=i;
for(;t>0;t--)
{
printf("%d ",i);
if(t==1)
printf("\n");
}
}
}
int main()
{
int n;
scanf("%d", &n);
pyramid(n);
return 0;
}
习题5-1 符号函数
#include <stdio.h>
int sign( int x ){
if(x>0)
return 1;
else if(x<0)
return -1;
else return 0;
}
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
习题5-2 使用函数求奇数和
#include <stdio.h>
#define MAXN 10
int even( int n ){
if(n%2==0)
return 1;
else
return 0;
}
int OddSum( int List[], int N ){
int i,sum=0;
for(;i<N;i++)
{
if(even(List[i])==0)
sum+=List[i];
}
return sum;
}
int main()
{
int List[MAXN], N, i;
scanf("%d", &N);
printf("Sum of ( ");
for ( i=0; i<N; i++ ) {
scanf("%d", &List[i]);
if ( even(List[i])==0 )
printf("%d ", List[i]);
}
printf(") = %d\n", OddSum(List, N));
return 0;
}
习题5-3 使用函数计算两点间的距离
#include <stdio.h>
#include <math.h>
double dist( double x1, double y1, double x2, double y2 ){
double d;
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return d;
}
int main()
{
double x1, y1, x2, y2;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));
return 0;
}
习题5-4 使用函数求素数和
#include <stdio.h>
#include <math.h>
int prime( int p ){
int i=2;
int prime1=1;
if (p<=1)
return 0;
else
{
for(;i<p;i++)
{
if(p%i==0)
prime1=0;
}
if(prime1==1)
return 1;
else return 0;
}
}
int PrimeSum( int m, int n ){
int sum=0;
for(;m<=n;m++)
{
if(prime(m)==1)
sum+=m;
}
return sum;
}
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
习题5-5 使用函数统计指定数字的个数
#include <stdio.h>
int CountDigit( int number, int digit ){
int count=0;
int n,t=0;
if(number<0)
number=-number;
t=number;
if(number<10)
{
if(digit==number)
count++;
}
else
{
while(t!=0)
{
n=t%10;
if(digit==n)
count++;
t=t/10;
}
}
return count;
}
int main()
{
int number, digit;
scanf("%d %d", &number, &digit);
printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));
return 0;
}
习题5-6 使用函数输出水仙花数
#include <stdio.h>
int narcissistic( int number ){
int t;
int a,b,c,d;
if(number/1000==0)
{
t=number;
a=number%10;
b=(number/10)%10;
c=(number/100)%10;
if(t==a*a*a+b*b*b+c*c*c)
return 1;
else return 0;
}
else
{
t=number;
a=number%10;
b=(number/10)%10;
c=(number/100)%10;
d=(number/1000)%10;
if(t==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
return 1;
else return 0;
}
}
void PrintN( int m, int n ){
for(m=m+1;m<n;m++)
{
if(narcissistic(m)==1)
printf("%d\n",m);
}
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
习题5-7 使用函数求余弦函数的近似值
#include <stdio.h>
#include <math.h>
double funcos( double e, double x )
{
int sign=-1;
int i=2,n=0;
double cos1=1;
double cos2=cos(x);
double t;
double e1=fabs(cos2-cos1);
while(e1>=e)
{
int sum=1;
for (n=1;n<=i;n++)
{
sum=sum*n;
}
t=sign*pow(x,i)/sum;
cos1+=t;
//2 4 6
//-3.9298 0.12068 -1.2105
i=i+2;
sign=-sign;
e1=fabs(cos2-cos1);
}
return cos1;
}
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
习题6-1 分类统计字符个数
#include<stdio.h>
#define MAXS 15
void StringCount( char s[] );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
void ReadString( char s[])
{
int i=0;
while (i<10)
{
s[i]=getchar();
i++;
}
}
void StringCount( char s[] )
{
int j=0;
int a=0,b=0,c=0,d=0;
while (j<10)
{
if(s[j]>='a'&&s[j]<='z'||s[j]>='A'&&s[j]<='Z')
a++;
else if(s[j]==' '||s[j]=='\n')
b++;
else if(s[j]>='0'&&s[j]<='9')
c++;
else d++;
j++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d",a,b,c,d);
}
习题6-2 使用函数求特殊a串数列和
#include <stdio.h>
int fn( int a, int n );
int SumA( int a, int n );
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
printf("s = %d\n", SumA(a,n));
return 0;
}
/* 你的代码将被嵌在这里 */
int fn( int a, int n )
{
int i;
int t=1; //n=2
int f=0; // 0 1 2
for(i=0;i<n;i++) // a aa
{
f+=a*t;
t*=10;
}
return f;
}
int SumA( int a, int n )
{
int i;
int t=1;
int f=0;
int sum=0;
for(i=0;i<n;i++)
{
f+=a*t;
t*=10;
sum+=f;
}
return sum;
}
习题6-3 使用函数输出指定范围内的完数
#include <stdio.h>
int factorsum( int number );
void PrintPN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);
if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);
PrintPN(m, n);
return 0;
}
int factorsum( int number )
{
int i=1;
int sum=0;
while(i<=number/2)
{
if(number%i==0)
sum+=i;
i++;
}
return sum;
}
void PrintPN( int m, int n )
{
int i;
int t=0;
for(i=m;i<=n;i++)
{
if(factorsum(i) == i )
{
printf("%d = ",i);
for(int j=1;j<=i/2;j++)
{
if(j==i/2)
{
printf("%d\n",j);
break;
}
if(i%j==0)
printf("%d + ",j);
}
t++;
}
}
if(t==0)
printf("No perfect number");
}
习题6-5 使用函数验证哥德巴赫猜
#include <stdio.h>
#include <math.h>
int prime( int p );
void Goldbach( int n );
int main()
{
int m, n, i, cnt;
scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else
printf("\n");
}
return 0;
}
int prime( int p )
{
int i;
int sign=0;
if(p==1)
return 0;
for(i=1;i<=p/2;i++)
{
if(i>1&&(p%i==0))
sign=1;
}
if(sign ==1)
return 0;
else
return 1;
}
void Goldbach( int n )
{
int i,j;
int t;
for(i=2;i<=n;i++)
{
if(prime(i)==1)
for(j=3;j<=n;j++)
if(prime(j)==1&&i+j==n)
{
printf("%d=%d+%d",n,i,j);
t=1;
break;
}
if(t==1)
break;
}
}
习题6-6 使用函数输出一个整数的逆序数
#include <stdio.h>
#include <math.h>
int reverse( int number );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
int reverse( int number )
{
int n=1,i;
int cnt=0;
int sign;
if(number<0)
{
number=-number;
sign=1;
}
while(number/n >=1)
{
cnt++;
n*=10 ;
}
int number1=0;
int t;
for(i=cnt;i>=0;i--)
{
t=number%10;
number=number/10;
number1+=t*pow(10,i-1);//阶乘函数换成for也可以实现
}
if(sign==1)
return -number1;
else
return number1;
}
习题8-1 拆分实数的整数与小数部分
#include <stdio.h>
void splitfloat( float x, int *intpart, float *fracpart );
int main()
{
float x, fracpart;
int intpart;
scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);
return 0;
}
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = (int)x;
*fracpart= x-(int)x;
}
习题8-2 在数组中查找指定元素
#include <stdio.h>
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else
printf("Not found\n");
return 0;
}
int search( int list[], int n, int x )
{
int i;
for(i=0;i<n;i++)
{
if(list[i]==x)
return i;
}
return -1;
}
习题8-3 数组循环右移
#include <stdio.h>
#define MAXN 10
void ArrayShift( int a[], int n, int m );
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
void ArrayShift( int a[], int n, int m )
{
int i;
int *p;
int b[n-1];
for(i=0;i<n;i++)
{
b[i]=a[i];
}
p=b;
for(i=0;i<n;i++)
{
if(i==0) p=&b[n-m];
if(i<m)
{
a[i]=*p;
p++;
}
if(i==m) p=&b[0];
if(i>=m)
{
a[i]=*p;
p++;
}
}
}
习题8-4 报数
#include <stdio.h>
#define MAXN 20
void CountOff( int n, int m, int out[] );
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
//in 0 2 0 4 0 0 7 8 0 10 11
//i 3 6
//out 4 1 5 2 3 6
//cnt 3 0 1 2 3 1 2 3 1 2
// 1 2 3 1 2 3
void CountOff( int n, int m, int out[] )
{
int cnt=1;
int j=1,i=1;
int in[n-1];
for(i=1;i<=n;i++)
{
in[i-1]=i;
}
int k=1;
int N=n;
while(1)
{
if(cnt==m)
{
while(in[k-1]==0)
{
k++;
if(k>N) k=1;
}
out[k-1]=j;
j++;
cnt=0;
in[k-1]=0;
}
if(j>n) break;
k++;
while(in[k-1]==0)
{
k++;
if(k>N) k=1;
}
cnt++;
}
}
习题8-5 使用函数实现字符串部分复制
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
void strmcpy( char *t, int m, char *s )
{
int n=0;
int i=0;
while(t[i]!='\0')
{
n++;
i++;
}
if(m<=n)
{
for(i=0;t[i+m-1]!='\0';i++)
s[i]=t[i+m-1];
s[i]='\0';
}
else s[0]='\0';
}
void ReadString( char s[] )
{
int i=0;
do{
s[i]=getchar();
i++;
}
while(s[i-1]!='\n');
s[i-1]='\0';
}
习题8-6 删除字符
#include <stdio.h>
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
void delchar( char *str, char c )
{
int i=0;
int j,len=0;
while(str[i]!='\0')
{
len++;
i++;
}
i=0;
while(str[i]!='\0')
{
if(str[i]==c)
{
for(j=i;j<len;j++)
str[j]=str[j+1];
len-=1;
continue;
}
i++;
}
}
void ReadString( char s[] )
{
int i=0;
do{
s[i]=getchar();
i++;
}
while(s[i-1]!='\n');
s[i-1]='\0';
}
习题8-8 判断回文字符串
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
bool palindrome( char *s )
{
int len;
int i=0;
int cnt=0;
len=strlen(s);
int m=1;
while(i<len/2)
{
if(s[i]==s[len-m])
cnt++;
m++;
i++;
}
if(cnt==len/2)
return true;
else
return false;
}
习题8-9 分类统计各类字符个数
#include <stdio.h>
#define MAXS 15
void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
StringCount(s);
return 0;
}
void StringCount( char *s )
{
int i;
int a=0,b=0,c=0,d=0,e=0;
for(i=0;i<12;i++)
{
if(s[i]>='A'&&s[i]<='Z')
a++;
else if(s[i]>='a'&&s[i]<='z')
b++;
else if(s[i]==' ')
c++;
else if(s[i]>='0'&&s[i]<='9')
d++;
else e++;
}
printf("%d %d %d %d %d",a,b,c,d,e);
}
void ReadString( char *s )
{
int i=0;
do{
s[i]=getchar();
i++;
}
while(i<12);
}
习题9-2 计算两个复数之积
#include <stdio.h>
struct complex{
int real;
int imag;
};
struct complex multiply(struct complex x, struct complex y);
int main()
{
struct complex product, x, y;
scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);
product = multiply(x, y);
printf("(%d+%di) * (%d+%di) = %d + %di\n",
x.real, x.imag, y.real, y.imag, product.real, product.imag);
return 0;
}
struct complex multiply(struct complex x, struct complex y)
{
multiply.real=x.real+y.real;
multiply.imag=x.imag+y.imag;
}
习题9-6 按等级统计学生成绩
#include <stdio.h>
#define MAXN 10
struct student{
int num;
char name[20];
int score;
char grade;
};
int set_grade( struct student *p, int n );
int main()
{ struct student stu[MAXN], *ptr;
int n, i, count;
ptr = stu;
scanf("%d\n", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
}
count = set_grade(ptr, n);
printf("The count for failed (<60): %d\n", count);
printf("The grades:\n");
for(i = 0; i < n; i++)
printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
return 0;
}
int set_grade( struct student *p, int n )
{
int cnt=0;
int i;
for(i=0;i<n;i++)
{
if(p[i].score>=85&&p[i].score<=100)
p[i].grade='A';
else if(p[i].score>=70&&p[i].score<=84)
p[i].grade='B';
else if(p[i].score>=60&&p[i].score<=69)
p[i].grade='C';
else if(p[i].score>=0&&p[i].score<=59)
{
cnt++;
p[i].grade='D';
}
}
return cnt;
}
练习10-1 使用递归函数计算1到n之和
#include <stdio.h>
int sum( int n );
int main()
{
int n;
scanf("%d", &n);
printf ("%d\n", sum(n));
return 0;
}
int sum( int n )
{
int sum1;
if(n==0)
sum1=0;
else
sum1=n+sum(n-1);
return sum1;
}
习题10-2 递归求阶乘和
#include <stdio.h>
double fact( int n );
double factsum( int n );
int main()
{
int n;
scanf("%d",&n);
printf("fact(%d) = %.0f\n", n, fact(n));
printf("sum = %.0f\n", factsum(n));
return 0;
}
double fact( int n )
{
int i,f=1;
if(n==0)
return 1;
for(i=1;i<=n;i++)
{
f=f*i;
}
return f;
}
double factsum( int n )
{
int i,sum=0;
for(i=1;i<=n;i++)
{
sum+=fact(i);
}
return sum;
}
习题10-3 递归实现指数函数
#include <stdio.h>
double calc_pow( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));
return 0;
}
double calc_pow( double x, int n )
{
int t;
if(n==0)
{
t=1;
return t;
}
t=x*calc_pow(x,n-1);
return t;
}
习题10-4 递归求简单交错幂级数的部分和
#include <stdio.h>
#include<math.h>
double fn( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.2f\n", fn(x,n));
return 0;
}
double fn( double x, int n )
{
double sum=0.0;
if(n==1)
{
sum=x;
return sum;
}
sum=pow(-1,n-1)*pow(x,n)+fn(x,n-1);
return sum;
}
习题10-5 递归计算Ackermenn函数
#include <stdio.h>
int Ack( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));
return 0;
}
int Ack( int m, int n )
{
int a;
if(m==0)
{
a=n+1;
return a;
}
if(n==0&&m>0)
{
a=Ack(m-1,1);
return a;
}
if(m>0&&n>0)
{
a=Ack(m-1,Ack(m,n-1));
return a;
}
}
习题10-6 递归求Fabonacci数列
#include <stdio.h>
int f( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", f(n));
return 0;
}
int f( int n )
{
int sum=0;
if(n==0)
return 0;
if(n==1)
return 1;
sum=f(n-2)+f(n-1);
return sum;
}
习题10-7 十进制转换二进制
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
void dectobin( int n )
{
if(n>=2)
{
dectobin(n/2);
printf("%d",n%2);
}
if(n==1)
printf("1");
if(n==0)
printf("0");
}
习题10-8 递归实现顺序输出整数
#include <stdio.h>
void printdigits( int n );
int main()
{
int n;
scanf("%d", &n);
printdigits(n);
return 0;
}
void printdigits( int n )
{
if(n/10!=0)
{
printdigits(n/10);
printf("%d\n",n%10);
}
else printf("%d\n",n);
}
习题11-1 输出月份英文名
#include <stdio.h>
char *getmonth( int n );
int main()
{
int n;
char *s;
scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);
return 0;
}
char *getmonth( int n )
{
char *month[12]={"January","Ferbruary","March","April","May","June","July",\
"August","September","October","November","December"};
if(n>0&&n<13)
return month[n-1];
else return 0;
}
习题11-2 查找星期
#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
int n;
char s[MAXS];
scanf("%s", s);
n = getindex(s);
if ( n==-1 ) printf("wrong input!\n");
else printf("%d\n", n);
return 0;
}
int getindex( char *s )
{
int i;
char *week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
for(i=0;i<7;i++)
{
if(*s==*week[i])
return i;
}
return -1;
}
习题11-3 计算最长的字符串长度
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10
#define MAXS 20
int max_len( char *s[], int n );
int main()
{
int i, n;
char *string[MAXN] = {NULL};
scanf("%d", &n);
for(i = 0; i < n; i++) {
string[i] = (char *)malloc(sizeof(char)*MAXS);
scanf("%s", string[i]);
}
printf("%d\n", max_len(string, n));
return 0;
}
int max_len( char *s[], int n )
{
int i,j=0;
int num,cnt1=0,cnt2=0;
int max=0;
for(i=0;i<n;i++)
{
while(*(s[i]+j)!='\0')
{
cnt1++;
j++;
}
if(cnt1>cnt2)
{
max=i;
num=cnt1;
}
cnt2=cnt1;
cnt1=0;
j=0;
}
return num;
}
习题11-4 字符串的连接
#include <stdio.h>
#include <string.h>
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
char *str_cat( char *s, char *t )
{
int i=0,j=0;
while(*(s+i)!='\0') i++;
while(*(t+j)!='\0')
{
*(s+i+j)=*(t+j);
j++;
}
*(s+i+j)='\0';
return s;
}
习题11-5 指定位置输出字符串
#include <stdio.h>
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
char *match( char *s, char ch1, char ch2 )
{
int i=0,j=0;
while(*(s+i)!=ch1)
{
i++;
if(*(s+i)=='\0')
{
printf("\n");
return s+i;
}
}
if(ch1==ch2)
{
printf("%c",*(s+i+j));
j++;
while(*(s+i+j)!=ch2)
{
printf("%c",*(s+i+j));
j++;
if(*(s+i+j)=='\0')
break;
}
}
else
while(*(s+i+j)!=ch2)
{
printf("%c",*(s+i+j));
j++;
if(*(s+i+j)=='\0')
break;
}
printf("%c",*(s+i+j));
printf("\n");
return s+i;
}
习题11-6 查找子串
#include <stdio.h>
#include <string.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
char *search(char *s, char *t)
{
int sign;
int len1,len2;
len1=strlen(s);
len2=strlen(t);
int i=0;
while(*(s+i)!=*t)
{
if(i>=len1) return '\0';
i++;
}
int j=0;
while(*(s+i+j)==*(t+j))
{
j++;
}
if(j<len2-1) return '\0';
return s+i;
}
void ReadString( char s[] )
{
int i=0;
do
{
s[i]=getchar();;
i++;
}
while(s[i-1]!='\n');
s[i-1]='\0';
}
习题11-7 奇数值结点链表
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
struct ListNode *L, *Odd;
L = readlist();
Odd = getodd(&L);
printlist(Odd);
printlist(L);
return 0;
}
struct ListNode *readlist()
{
int num;
struct ListNode *head=NULL;
while (1){
struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d",&num);
if(num==-1) break;
p->data=num;
p->next=NULL;
struct ListNode *last=head;
if(last)
{
while(last->next)
last=last->next;
last->next=p;
}
else head=p;
}
return head;
}
struct ListNode *getodd( struct ListNode **L )
{
struct ListNode *head=*L;
struct ListNode *last=head;
struct ListNode *headodd=NULL;
struct ListNode *lastodd=headodd;
struct ListNode *headeven=NULL;
struct ListNode *lasteven=headeven;
int sign=0;
while(last)
{
if(last->data%2==1)
{
struct ListNode *podd=(struct ListNode *)malloc(sizeof(struct ListNode));
podd->data=last->data;
podd->next=NULL;
if(headodd==NULL) headodd=podd;
else lastodd->next=podd;
lastodd=podd;
}
else{
struct ListNode *peven=(struct ListNode *)malloc(sizeof(struct ListNode));
peven->data=last->data;
peven->next=NULL;
if(headeven==NULL) headeven=peven;
else lasteven->next=peven;
lasteven=peven;
}
last=last->next;
}
*L=headeven;
return headodd;
}
习题11-8 单链表结点删除
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);
return 0;
}
struct ListNode *readlist()
{
int num;
struct ListNode *head=NULL;
struct ListNode *last=head;
while(1)
{
scanf("%d",&num);
if(num==-1) break;
struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=num;
p->next=NULL;
if(head==NULL) head=p;
else last->next=p;
last=p;
}
return head;
}
struct ListNode *deletem( struct ListNode *L, int m )
{
struct ListNode *head=L;
struct ListNode *last=head;
struct ListNode *pre=NULL;
while(last)
{
if(last->data==m)
{
if(last==head) head=last->next;
else pre->next=last->next;
}
pre=last;
last=last->next;
}
return head;
}