C语言程序设计编辑与调试环境
第1关:打印输出 Hello World
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf("Hello World\n");
/********* End *********/
return 0;
}
第2关:打印输出图形
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf(" *\n");
printf(" ***\n");
printf(" OK\n");
printf(" Hello!\n");
printf("*********\n");
/********* End *********/
return 0;
}
第3关:求3个数的最大值
#include<stdio.h>
int main(void)
{
/********* Begin *********/
int a,b,c,z;
scanf("%d,%d,%d",&a,&b,&c);
z=a;
if(b>a) z=b;
if(c>b) z=c;
printf("max=%d",z);
/********* End *********/
return 0;
}
第4关:熟悉C语言调试过程
#include<stdio.h>
int main(void)
{
/********* Begin *********/
int x;
int y=2,z=3;
scanf("%d",&x);
if(x==y+z)
printf("*****");
else
printf("#####" );
return 0;
/********* End *********/
}
顺序结构程序设计
第1关:加法运算
#include<stdio.h>
int main(void)
{
int a,b,c;
//Please input a,b:
/*********Begin*********/
scanf("%d,%d",&a,&b);
c=a+b;
printf("%d+%d=%d\n",a,b,c);
/*********End**********/
return 0;
}
第2关:不使用第3个变量,实现两个数的对调
#include<stdio.h>
int main(void)
{
int a,b;
//Enter a and b:
scanf("%d%d",&a,&b);
printf("a=%d b=%d\n",a,b);
/*********Begin*********/
/*********End**********/
printf("a=%d b=%d\n",b,a);
return 0;
}
第3关:用宏定义常量
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,b;
scanf("%d",&a);
b=30*a;
printf("%d\n",b);
/*********End**********/
return 0;
}
第4关:数字分离
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,ge,shi,bai;
scanf("%d",&a);
ge=a%10;
shi=(a/10)%10;
bai=a/100;
printf("%d %d %d",bai,shi,ge);
/*********End**********/
return 0;
}
第5关:计算总成绩和平均成绩
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a, b, c, d, e, sum;
float aver;
scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
sum = a + b + c + d + e;
aver = sum / (5.0);
printf("%d %.2f", sum, aver);
/*********End**********/
return 0;
}
第6关:求三角形的面积
#include<stdio.h>
#include <math.h>
int main(void)
{
/*********Begin*********/
double a, b, c;
double s;
double area;
scanf("%lf %lf %lf", &a, &b, &c);
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("%.3lf", area);
/*********End**********/
return 0;
}
第7关:立体几何计算题
#include<stdio.h>
#define PI 3.14
int main(void)
{
/*********Begin*********/
double r, h;
double C1, Sb, Vb;
scanf("%lf,%lf", &r, &h);
C1 = PI * 2 * r;
Sb = 4 * PI * r * r;
Vb = PI * r * r * h;
printf("C1=%.2lf\nSb=%.2lf\nVb=%.2lf\n", C1,Sb, Vb);
/*********End**********/
return 0;
}
第8关:计算两个正整数的最大公约数
#include<stdio.h>
int MaxCommonFactor( int a, int b)
{
int c;
if(a<=0||b<=0)
return -1;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main(void)
{
/*********Begin*********/
int a,b;
scanf("%d,%d",&a,&b);
printf("%d",MaxCommonFactor(a,b));
/*********End**********/
return 0;
}
选择结构程序设计
第1关:排序
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,b,c,d;
printf("请输入三个整数:");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
d=a;
a=b;
b=d;
}
if(a>c)
{
d=a;
a=c;
c=d;
}
if(b>c)
{
d=b;
b=c;
c=d;
}
printf("从小到大排列为:%d,%d,%d",a,b,c);
/*********End**********/
return 0;
}
第2关:选择结构-闰年判断
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int year;
scanf("%d",&year);
if((year % 4 == 0 &&year % 100 != 0)|| year % 400 ==0)
printf("%d 是闰年!\n",year);
else
printf("%d 不是闰年!",year);
/*********End**********/
return 0;
}
第3关:选择结构-分段函数问题
#include<stdio.h>
int main(void)
{
/*********Begin*********/
double x,y;
scanf("%lf",&x);
if(x<0&&x!=-3)
y=x*x+x-6;
else if(x>=0&&x<10&&x!=2&&x!=3)
y=x*x-5*x+6;
else
y=x*x-x-1;
printf("%.3lf",y);
/*********End**********/
return 0;
}
第4关:学生成绩等级换算
#include<stdio.h>
int main(void)
{
/*********Begin*********/
float result;
int x;
scanf("%f",&result);
if(result>=0&&result<=100)
{
x=result/10;
switch(x)
{
case 10:
case 9:;printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
default:printf("E");
}
}
else
printf("Score is error!");
/*********End**********/
return 0;
}
选择结构程序设计进阶
第1关:快递费用计算
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int area = 0;
float w,s,e,p = 0;
int areastartmoney[5] = {10,10,15,15,15};
float areaextramoney[5] = {3,4,5,6.5,10};
scanf("%d,%f",&area,&w);
if(area<0 || area>4)
{
printf("Error in Area\n");
p = 0;
}
else if(w<0)
{
printf("Error in Weight!\n");
p =0;
}
else
{
s =1;
e = ceil(w - 1);
p = areastartmoney[area] + e * areaextramoney[area];
}
printf("Price: %.2f\n",p);
/*********End**********/
return 0;
}
第2关:计算一元二次方程的根
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
float a,b,c;
double x1,x2,d;
printf("Please enter the coefficients a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
d = b*b-4*a*c;
if (b*b-4*a*c<0)
{
printf("error!");
return 0;
}
else
{
x1 = (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);
printf("x1=%.4f, x2=%.4f",x1,x2);
}
/*********End**********/
return 0;
}
第3关:产品信息格式化
#include<stdio.h>
int main(void)
{
/*********Begin*********/
float unit;
int a,b,c,d;
printf ("Enter item number:\n");
scanf ("%d",&a);
printf ("Enter unit price:\n"); scanf ("%f",&unit);
printf ("Enter purchase date (mm/dd/yy):\n");
scanf ("%d/%d/%d",&b,&c,&d);
printf ("Item Unit Purchase\n");
printf ("%-9d$ %-9.2f%02d%02d%02d\n",a,unit,b,c,d);
/*********End**********/
return 0;
}
循环结构程序设计1
第1关:小球自由落体运动
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,n;
float h,M;
scanf("%f %d",&M,&n);
h=M/2;
for (i=2;i<=n;i++)
{
M=M+2*h;
h=h/2;
}
printf("%.2f %.2f",h,M);
/*********End**********/
return 0;
}
第2关:求解出n以内所有能被5整除的正整数的乘积
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,i,s;
s=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
if(i%5==0)
s*=i;
}
printf("%d",s);
/*********End**********/
return 0;
}
第3关:最大公约数和最小公倍数
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,b,i;
scanf("%d %d",&a,&b);
for(i=a;i>=1;i--){
if(a%i==0&&b%i==0){
printf("最大公约数是:%d\n",i);
break;
}
}
for(i=1;i>0;i++){
if(i%a==0&&i%b==0){
printf("最小公倍数是:%d\n",i);
break;
}
}
/*********End**********/
return 0;
}
第4关:字符串中各类字符数的统计
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int e=0,n=0,t=0,p=0;
char c;
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
e++;
else if(c==' ')
t++;
else if(c>='0'&&c<='9')
n++;
else p++;
}
printf("%d %d %d %d",e,n,t,p);
/*********End**********/
return 0;
}
第5关:求sn=a+aa+aaa+aaaa+…的值
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,n,s,sum,i;
i=0;
s=0;
sum=0;
scanf("%d %d",&a,&n);
while(n>0){
s=a;
i+=s;
sum+=i;
a=a*10;
n--;
}
printf("%d\n",sum);
/*********End**********/
return 0;
}
循环结构程序设计2
第1关:C循环-求平均成绩
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,num;
float average,sum=0,a[1000];
scanf("%d",&num);
if(num<=0)
{
printf("the number of students:the scores:average=0.00");
return 0;
}
for(i=0;i<num;i++)
scanf("%f",&a[i]);
for(i=0;i<num;i++)
sum=sum+a[i];
average=sum/num;
printf("the number of students:the scores:average=%.2f",average);
/*********End**********/
return 0;
}
第2关:C循环-求各位数字之积
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,a,score=1;
scanf("%d",&n);
a=n%10;
while(n!=0)
{
score=score*a;
n=n/10;
a=n%10;
}
printf("%d",score);
/*********End**********/
return 0;
}
第3关:C循环-求阶乘之和
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n;
int S=1,i;
int SUM=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
S*=i;
SUM=SUM+S;
}
printf("%d",SUM);
/*********End**********/
return 0;
}
第4关:C循环-水仙花数
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i%10;//个位数
b=(i/10)%10;//十位数
c=(i/10)/10;//百位数
if(i==a*a*a+b*b*b+c*c*c)
printf("%d ",i);
}
/*********End**********/
return 0;
}
第5关:C循环-寻找完数
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,j,sum=0;
for(i=1;i<=1000;i++)
{
for(j=1;j<i;j++)
{
if((i%j)==0)
sum=sum+j;
}
if(sum==i)
printf("%d\n",i);
sum=0;
}
/*********End**********/
return 0;
}
第6关:分数求和
#include<stdio.h>
int main(void)
{
/*********Begin*********/
float i,j,t=1,x,sum=0;
for(i=1;i<=100;i++)
{
x=(1/i)*t;
sum=sum+x;
t=(-t);
}
printf("%.3f",sum);
/*********End**********/
return 0;
}
函数
第1关:求和
#include<stdio.h>
int a(int n)
{
return (1+n)*n/2;
}
int main(void)
{
int m;
scanf("%d",&m);
printf("%d",a(m));
return 0;
}
第2关:回文数计算
#include<stdio.h>
void solve(int n)
{
/*********Begin*********/
if(n<1000)
{
if(n%10==n/100) printf("%d\n",n);
}
else
{
if(n%10==n/1000 && n/10%10==n/100%10) printf("%d\n",n);
}
/*********End**********/
}
int main(void)
{
for(int i=200;i<3001;i++)
{
solve(i);
}
return 0;
}
第3关: 编写函数求表达式的值
#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
double fun(int n)
{
double s, t; int i;
s=1.0; t=1.0;
for(i=1;i<=n;i++)
{
t=t*i/(2*i+1);
s+=t;
}
return s;
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int x;
scanf("%d",&x);
printf("%12.10lf", fun(x));
/*********End**********/
return 0;
}
第4关:阶乘数列
#include<stdio.h>
//编写函数
/*********Begin*********/
typedef int long long ll;
ll digui(int n)
{
if(n==1) return 1;
else return n*digui(n-1);
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int n;
ll sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sum+=digui(i);
}
printf("%lld",sum);
/*********End**********/
return 0;
}
第5关:亲密数
#include<stdio.h>
void solve(){
/*********Begin*********/
int a,i,b=0,m=0;
for(a=1;a<=3000;a++)
{
for(i=1;i<a;i++)
{
if(a%i==0)
b=b+i;
}
for(i=1;i<b;i++)
{
if(b%i==0)
m=m+i;
}
if(m==a)
{
if(a!=b&&a<b)
printf("(%d,%d)",a,b);
}
b=0,m=0;
}
/*********End**********/
}
int main(void)
{
solve();
return 0;
}
第6关:公约公倍数
#include<stdio.h>
typedef int long long ll;
ll lcm(ll a,ll b)
{
ll temp,p,r,k,l;
k=a;
l=b;
if(b>a)
{
temp=b;
b=a;
a=temp;
}
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return k/a*l;
}
int main()
{
ll a,b;
scanf("%lld %lld",&a,&b);
if(a<0 || b<0) printf("Input Error");
else
printf("%lld %lld",(a*b)/lcm(a,b),lcm(a,b));
return 0;
}
递归函数、嵌套函数
第1关:递归求阶乘数列
#include<stdio.h>
long long solve(long long n)
{
/*********Begin*********/
long long p=1,i;
for(i=1;i<=n;i++)
p*=i;
return p;
/*********End**********/
}
int main(void)
{
long long n;
scanf("%lld",&n);
long long ans=0;
for(long long i=1;i<=n;i++)
ans+=solve(i);
printf("%lld", ans);
return 0;
}
第2关:递归实现输出一个整数的逆序
#include<stdio.h>
void solve(int n){
printf("%d", n%10);
/*********Begin*********/
n/=10;
/*********End**********/
if(n>0) solve(n);
}
int main(void)
{
int n;
scanf("%d",&n);
solve(n);
return 0;
}
第3关:将整数递归转换成字符串
#include<stdio.h>
void solve(int n)
{
int temp=n%10;
/*********Begin*********/
n/=10;
if(n)
solve(n);
/*********End**********/
if(n)
printf(" %d", temp);
else
printf("%d", temp);
}
int main(void)
{
int n;
scanf("%d",&n);
solve(n);
return 0;
}
第4关:递归实现Ackman函数
#include<stdio.h>
int Acm(int m,int n){
if(m==0&&n>0)
/*********Begin*********/
return n+1;
/*********End**********/
else if(n==0&&m>0)
/*********Begin*********/
return Acm(m-1,1);
/*********End**********/
else
/*********Begin*********/
return Acm(m-1,Acm(m,n-1));
/*********End**********/
}
int main(void)
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d", Acm(m,n));
return 0;
}
一维数组和二维数组
第1关:排序问题
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10];
int i,j,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]<a[i+1])
{k=a[i];a[i]=a[i+1];a[i+1]=k;}
for (i=0;i<10;i++)
printf("%d ",a[i]);
/*********End**********/
return 0;
}
第2关:查找整数
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int c[10000];
int a,i,b;
scanf("%d",&a);
for(i=0;i<a;i++)
scanf("%d",&c[i]);
scanf("%d",&b);
for(i=0;i<a;i++)
if(c[i]==b)
break;
printf("%d\n",i==a?-1:i+1);
/*********End**********/
return 0;
}
第3关:计算数组中元素的最大值及其所在的行列下标值
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[5][5],max,i,j,p,q,m,n;
printf("Input m, n:");
scanf("%d,%d",&m,&n);
printf("Input %d*%d array:\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
p=q=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]>max)
{
max=a[i][j];
p=i;
q=j;
}
printf("max=%d, row=%d, col=%d",max,p+1,q+1);
/*********End**********/
return 0;
}
第4关:二分查找
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[100];
int n,x,i,j,mid;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
int ans = -1;
i = 0, j = n - 1;
while(i <= j)
{
mid = (i + j) / 2;
if(a[mid] == x)
{
ans = mid;
break;
}
else if(a[mid] > x)
j = mid - 1;
else if(a[mid] < x)
i = mid + 1;
}
if(ans == -1)
printf("None\n");
else
printf("%d\n", ans + 1);
/*********End**********/
return 0;
}
第5关:鞍点
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10][10], maxa[10], mina[10];
int m, n, i, j;
scanf("%d %d", &m, &n);
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
for(i = 0; i < m; i++)
maxa[i] = a[i][0];
for(i = 0; i < n; i++)
mina[i] = a[0][i];
for(i = 0; i < m; i++)
for(j = 0; j < n; j++) {
if(a[i][j] > maxa[i])
maxa[i] = a[i][j];
if(a[i][j] < mina[j])
mina[j] = a[i][j];
}
int flag = 1;
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
if(maxa[i] == mina[j]) {
flag = 0;
printf("Array[%d][%d]=%d\n", i, j, maxa[i]);
break;
}
if(flag)
printf("None\n");
/*********End**********/
return 0;
}
第6关:删除最大值
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10];
int i;
for(i = 0; i < 10; i++)
scanf("%d", &a[i]);
int max = a[0], k = 0;
for(i = 1; i < 10; i++)
if(a[i] > max) max = a[i], k = i;
for(i = 0; i < 10; i++)
if(i != k)
printf("%d ", a[i]);
printf("\n");
/*********End**********/
return 0;
}
第7关:杨辉三角
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,j,a[11][11];
for (i=0;i<10;i++)
{a[i][i]=1;
a[i][0]=1;
}
for (i=2;i<10;i++)
for (j=1;j<=i-1;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("%d",a[i][j]);
printf("\n");
}
printf("\n");
/*********End**********/
return 0;
}
字符数组
第1关:字符逆序
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[1000];
gets(a);
for(int i = strlen(a) - 1;i >= 0;i--)
printf("%c", a[i]);
/*********End**********/
return 0;
}
第2关:字符统计
#include<stdio.h>
#include<string.h>
void function()
{
char s[50];
gets(s);
if(s[0]!='\0')
{
int temp=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]>='0'&&s[i]<='9')
{
temp++;
}
}
printf("%d\n",temp);
}
}
int main()
{
int n;
scanf("%d",&n);
n++;
for(int i=0;i<n;i++)
{
function();
}
return 0;
}
第3关:字符插入
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[20],b[20];
gets(a),gets(b);
int len=strlen(a),lenn=strlen(b);
int min=999,max=0;
for(int i=0;i<len;i++)
{
if(a[i]<min) min=a[i];
}
for(int i=0;i<lenn;i++)
{
if(b[i]>max) max=b[i];
}
for(int i=0;i<len;i++)
{
if(a[i]==min) printf("%c%c",a[i],max);
else printf("%c",a[i]);
}
return 0;
}
第4关:字符串处理
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[1000],b[1000];
gets(a),gets(b);
int Z;
scanf("%d",&Z);
for(int i=0;i<strlen(a);i++)
{
if(i==Z) printf("%s%c",b,a[i]);
else printf("%c",a[i]);
}
return 0;
}
第5关:字符串统计
#include<stdio.h>
#include <string.h>
int main(void)
{
int sumLength = 0, partLength = 0;
char arr[1000];
int max = 0;
char Temp_Arr[1000];
gets(arr);
int i, j;
while (strcmp(arr, "stop") != 0)
{
for (i = 0; i < strlen(arr); i++)
{
if (arr[i] != ' ')
{
sumLength++;
partLength++;
}
else
{
if (partLength > max)
{
max = partLength;
}
partLength = 0;
}
}
if (partLength > max)
{
max = partLength;
}
partLength = 0;
for (i = 0; i < strlen(arr); i++)
{
if (arr[i] != ' ')
{
partLength++;
if (partLength == max)
{
for (j = 0; j < max; j++)
{
Temp_Arr[j] = arr[j + i - max+1];
}
Temp_Arr[max] = '\0';
break;
}
}
else
{
partLength = 0;
}
}
printf("%d %s", sumLength, Temp_Arr);
printf("\n");
sumLength = 0;
partLength = 0;
max = 0;
gets(arr);
}
return 0;
}
第6关:字符串排序
#include<stdio.h>
#include<string.h>
char s1[50], s2[50], s3[50];
int main(void)
{
scanf("%s%s%s", s1, s2, s3);
if(strcmp(s1, s2) <= 0) {
if(strcmp(s2, s3) <= 0)
printf("%s\n%s\n%s\n", s1, s2, s3);
else {
if(strcmp(s3, s1) <= 0)
printf("%s\n%s\n%s\n", s3, s1, s2);
else
printf("%s\n%s\n%s\n", s1, s3, s2);
}
} else {
if(strcmp(s1, s3) <= 0)
printf("%s\n%s\n%s\n", s2, s1, s3);
else {
if(strcmp(s3, s2) <= 0)
printf("%s\n%s\n%s\n", s3, s2, s1);
else
printf("%s\n%s\n%s\n", s2, s3, s1);
}
}
return 0;
}
指针
第1关:用指针法输入12个整数,然后按每行4个数输出
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[12],*b,i;
b=a;
for(i=0;i<12;i++)
{
scanf("%d",b++);
}
b=a;
for(i=0;i<12;i++)
{
if((i+1)%4==0)
printf("%d\n",*b);
else
printf("%d ",*b);
b++;
}
/*********End**********/
return 0;
}
第2关:指针变量作为函数参数实现两变量交换值
#include<stdio.h>
/*********Begin*********/
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
/*********End**********/
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
/*********Begin*********/
swap(&a,&b);
printf("%d %d",a,b);
/*********End**********/
return 0;
}
第3关:报数
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,ans,i;
scanf("%d",&n);
ans=0;
if(n==0)
return 0;
for(i=2;i<=n;i++)
ans=(ans+3)%i;
printf("%d\n",ans+1);
/*********End**********/
return 0;
}
第4关:strcmp函数
#include<stdio.h>
int strcmp(char *p1,char *p2){
/*********Begin*********/
int i = 0;
while(*(p1+i) != '\0' || *(p2+i) != '\0')
{
if(*(p1+i) > *(p2+i))
return 1;
else if(*(p1+i) < *(p2+i))
return -1;
else
i++;
}
return 0;
/*********End**********/
}
int main(void)
{
char a[110],b[110];
scanf("%s%s",a,b);
if(strcmp(a,b)>0)
printf("%s", a);
else
printf("%s", b);
return 0;
}
指针进阶
第1关:输出若干个学生成绩中的最高分.要求用指针函数实现
#include<stdio.h>
/*********Begin*********/
int max(int s[],int n)
{
int temp=0;
int *p;
p=&temp;
for(int i=0;i<n;i++)
{
if(*p<s[i]) *p=s[i];
}
return *p;
}
/*********End**********/
int main(void)
{
int n,s[110];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&s[i]);
/*********Begin*********/
/*********End**********/
printf("%d",max(s,n) );
return 0;
}
第2关:采用指针变量表示地址的方法输入输出数组中的个元素
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int v[100],n;
scanf("%d",&n);
int *p;
for(p=v;p<v+n;p++)
{
scanf("%d",p);
}
for(p=v;p<v+n;p++)
{
printf("%d ",*p);
}
/*********End**********/
return 0;
}
第3关:用指针实现数组循环移动
#include<stdio.h>
int *solve(int *s, int n, int m){
/*********Begin*********/
int k = m % n;
if(k == 0) return s;
int *p = &s[n - k];
int *q = p + m;
for(int i = 0;i < n - k;i++)
*q++ = *s++ ;
return p;
/*********End**********/
}
int main(void)
{
int n, m, s[110];
scanf("%d%d", &n, &m);
for(int i = 0;i < n;i++)
scanf("%d", &s[i]);
int *ans;
/*********Begin*********/
ans = solve(s, n, m);
/*********End**********/
for(int i = 0;i < n;i++){
if(i == 0) printf("%d", *ans++ );
else printf(" %d", *ans++ );
}
return 0;
}
结构体
第1关:结构体变量的初始化和引用
#include<stdio.h>
/*********Begin*********/
int main()
{
struct data
{
char num[20];
char name[20];
int score;
}s1,s2;
scanf("%s%s%d",s1.num,s1.name,&s1.score);
scanf("%s%s%d",s2.num,s2.name,&s2.score);
if(s1.score>s2.score)
{
printf("%s %s %d\n",s1.num,s1.name,s1.score);
}
else
{
printf("%s %s %d\n",s2.num,s2.name,s2.score);
}
return 0;
}
/*********End*********/
第2关:结构体排序
#include<stdio.h>
/*********Begin*********/
typedef struct student
{
char num[12];
char name[20];
int score;
}m;
/*********End**********/
int main(void)
{
/*********Begin*********/
int i,n,j;
m s[200],temp;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].score);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(s[j].score>s[i].score)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%s %s %d\n",s[i].num,s[i].name,s[i].score);
}
/*********End**********/
return 0;
}
第3关:结构体存储数据
#include<stdio.h>
#include<string.h>
/*********Begin*********/
/*********End**********/
int main(void)
{
/*********Begin*********/
char str[10];
int i,n,sum1=0,sum2=0,sum3=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",str);
if(strcmp(str,"Li")==0) sum1++;
else if(strcmp(str,"Zhang")==0) sum2++;
else if(strcmp(str,"Sun")==0) sum3++;
}
printf("Li:%d\n",sum1);
printf("Zhang:%d\n",sum2);
printf("Sun:%d\n",sum3);
/*********End**********/
return 0;
}
第4关:结构体存储学生信息
#include<stdio.h>
#include<string.h>
int Count;
struct student
{
char sno[20],name[20];
int math,english,chinese,sum;
};
void print(struct student stu)
{
printf("%s %s %d %d %d %d\n",stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum);
}
void query_stu(struct student s[],char *name)
{
/*********Begin*********/
for(int i=0;i<Count;i++)
{
if(strcmp(s[i].name,name)==0)
{
s[i].sum=s[i].math+s[i].english+s[i].chinese;
printf("%s %s %d %d %d %d\n",s[i].sno,s[i].name,s[i].math,s[i].english,s[i].chinese,s[i].sum);
}
}
/*********End**********/
}
void delete_stu(struct student s[],char *sno)
{
/*********Begin*********/
int k=0;
for(int i=0;i<Count;i++)
{
if(strcmp(s[i].sno,sno)==0)
{
k=i;
for(int j=k;j<Count-1;j++)
{
s[j]=s[j+1];
}
}
}
/*********End**********/
}
void update_stu(struct student s[],char *sno,int math,int english,int chinese)
{
/*********Begin*********/
for(int i=0;i<Count;i++)
{
if(strcmp(s[i].sno,sno) == 0)
{
s[i].math=math;
s[i].english=english;
s[i].chinese=chinese;
s[i].sum=s[i].math+s[i].english+s[i].chinese;
}
else{
s[i].sum=s[i].math+s[i].english+s[i].chinese;
}
}
/*********End**********/
}
int main(void)
{
int n,q;
struct student students[50];
scanf("%d%d",&n,&q);
Count=n;
for(int i=0;i<n;i++){
/*********Begin*********/
scanf("%s%s%d%d%d",students[i].sno,students[i].name,&students[i].math,&students[i].english,&students[i].chinese);
/*********End**********/
}
while(q--)
{
int op;
scanf("%d",&op);
char sno[20],name[20];
if(op==1){
scanf("%s",name);
query_stu(students,name);
}
else if(op==2){
int a,b,c;
scanf("%s%d%d%d",sno,&a,&b,&c);
update_stu(students,sno,a,b,c);
for(int i=0;i<Count;i++)
print(students[i]);
}
else{
scanf("%s",sno);
delete_stu(students,sno);
for(int i=0;i<Count-1;i++)
print(students[i]);
}
}
return 0;
}
文件
第1关:HelloWorld
#include<stdio.h>
void solve(){
/********** Begin *********/
FILE * pfile = fopen("in.txt","w");
fprintf(pfile,"HelloWorld");
fclose(pfile);
/********** End **********/
}
第2关:文件读取和写入
#include<stdio.h>
void solve(){
/********** Begin *********/
int a,b,c;
FILE * r=fopen("a.txt","r");
FILE * w=fopen("b.txt","w");
while(fscanf(r,"%d%d%d",&a,&b,&c)!=EOF)
fprintf(w,"%d %d %d",a,b,c);
fclose(r);
fclose(w);
/********** End **********/
}
第3关:统计文本字母数量
#include<stdio.h>
void solve(){
/********** Begin *********/
FILE *fp;
char word;
int num=0;
fp=fopen("a.txt","r");
while(!feof(fp))
{
fscanf(fp,"%c",&word);
if((word>='A'&&word<='Z')||(word>='a'&&word<='z'))
{
num++;
}
}
printf("%d",num-1);
fclose(fp);
/********** End **********/
}
第4关:读取文件中指定学生信息
#include<stdio.h>
#include<string.h>
void solve(char s[]){
/********** Begin *********/
FILE *fp=fopen("a.txt","r");
char num[12],stu[100];
for(int i=0;i<10;i++)
{
fgets(num,12,fp);
fseek(fp,-11*sizeof(char),1);
fgets(stu,100,fp);
if(strcmp(num,s)==0)
{
printf("%s",stu);
break;
}
if(i==9)
{
printf("Not Found!");
}
}
/********** End **********/
}