題目
http://codeup.cn/contest.php
2.2
例题1-1-1 按要求输出信息(1)
#include<stdio.h>
int main()
{
printf("This is my first c program!\n");
return 0;
}
例题1-1-2 按要求输出信息(2)
#include<stdio.h>
int main()
{
printf("********************\n");
printf("Very Good!\n");
printf("********************\n");
return 0;
}
例题1-2-1 求两个整数之和(1)
#include<stdio.h>
int main()
{
int a=123,b=456,sum=a+b;
printf("sum=%d\n",sum);
return 0;
}
例题1-2-2 求两整数数之和(2)
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
return 0;
}
例题3-5 求一元二次方程的根
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c;
double r1,r2;
scanf("%lf %lf %lf",&a,&b,&c);
r1=(-b+sqrt(b*b-4*a*c))/(2*a);
r2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("r1=%7.2lf\n",r1);
printf("r2=%7.2lf\n",r2);
return 0;
}
例题3-9 字符输入输出
#include<stdio.h>
#include<string.h>
int main()
{
char str[4];
gets(str);
puts(str);
return 0;
}
2.3
例题4-1 一元二次方程求根
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c;
double r1,r2;
scanf("%lf %lf %lf",&a,&b,&c);
if(b*b-4*a*c>=0)
{
r1=(-b+sqrt(b*b-4*a*c))/(2*a);
r2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("r1=%7.2lf\n",r1);
printf("r2=%7.2lf\n",r2);
}
else
{
printf("No real roots!\n");
}
return 0;
}
例题4-2 比较交换实数值
#include<stdio.h>
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
if(a>=b)
{
printf("%.2f %.2f\n",b,a);
}
else
{
printf("%.2f %.2f\n",a,b);
}
return 0;
}
例题4-3 比较交换3个实数值,并按序输出
#include<stdio.h>
int main()
{
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
double temp;
if(a<=b)
{
if(b>=c)
{
temp=c;
c=b;
b=temp;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
}
}
else
{
temp=a;
a=b;
b=temp;
if(b>=c)
{
temp=c;
c=b;
b=temp;
if(a>b)
{
temp=a;
a=b;
b=temp;
}
}
}
printf("%.2f %.2f %.2f\n",a,b,c);
return 0;
}
习题4-4 三个整数求最大值
#include<stdio.h>
int main()
{
int a,b,c;
int max;
scanf("%d %d %d",&a,&b,&c);
max=a>b?a:b;
max=max>c?max:c;
printf("%d\n",max);
return 0;
}
习题4-10-1 奖金计算
#include<stdio.h>
int main()
{
double i,afd;
scanf("%lf",&i);
if(i<=100000)
{
afd=i*0.1;
}
else if(i<=200000)
{
afd=100000*0.1+(i-100000)*0.075;
}
else if(i<=400000)
{
afd=100000*0.1+100000*0.075+(i-200000)*0.05;
}
else if(i<=600000)
{
afd=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
}
else if(i<=1000000)
{
afd=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
}
else
{
afd=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
}
printf("%.2f\n",afd);
return 0;
}
2.4
例题5-1-1 连续自然数求和
#include<stdio.h>
int main()
{
int i=1,sum=0;
while(i<=100)
{
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
例题5-1-2 连续自然数求和
#include<stdio.h>
int main()
{
int i=1,sum=0;
do
{
sum+=i;
i++;
}while(i<=100);
printf("%d\n",sum);
return 0;
}
例题5-1-3 连续自然数求和
#include<stdio.h>
int main()
{
int sum=0;
for(int i=1;i<=100;i++)
{
sum+=i;
}
printf("%d\n",sum);
return 0;
}
例题5-1-4 连续自然数求和
#include<stdio.h>
int main()
{
int N,i=1,sum=0;
scanf("%d",&N);
while(1)
{
sum+=i;
i++;
if(i>N)
{
break;
}
}
printf("%d\n",sum);
}
例题5-1-5 连续自然数求和
#include<stdio.h>
int main()
{
int i=1,sum=0;
while(1)
{
sum+=i;
if(sum>1000)
{
break;
}
i++;
}
printf("%d\n",i);
}
例题5-6 矩阵输出
#include<stdio.h>
int main()
{
int a[4][5]={1,2,3,4,5};
int i,j;
for(i=1;i<4;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=(i+1)*a[0][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
printf("%3d",a[i][j]);
}
if(j<=4)
{
printf(" ");
}
else
{
printf("\n");
}
}
return 0;
}
例题5-7 求圆周率pi的近似值
#include<stdio.h>
#include<math.h>
int main()
{
double pi=0;
double i=1,sign=1;
double num=1/i;
while(fabs(num)>=1e-6)
{
pi+=num;
i+=2;
sign=-sign;
num=sign*(1/i);
}
printf("PI=%10.8f\n",4*pi);
return 0;
}
例题5-8 Fibonacci数列
#include<stdio.h>
int main()
{
int num[50]={1,1};
int n;
scanf("%d",&n);
for(int i=2;i<n;i++)
{
num[i]=num[i-1]+num[i-2];
}
printf("%d\n",num[n-1]);
return 0;
}
习题5-10 分数序列求和
#include<stdio.h>
int main()
{
double a[20]={2},b[20]={1};
double sum=0;
int i;
for(i=1;i<20;i++)
{
a[i]=a[i-1]+b[i-1];
b[i]=a[i-1];
}
for(i=0;i<20;i++)
{
sum+=a[i]/b[i];
}
printf("%.6f\n",sum);
return 0;
}
2.5
习题6-4 有序插入
#include<stdio.h>
int main()
{
int a[10];
int i,j;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}
int num;
scanf("%d",&num);
for(i=0;i<10;i++)
{
if(num<a[i])
{
break;
}
}
if(i==0)
{
for(j=9;j>0;j--)
{
a[j]=a[j-1];
}
a[0]=num;
}
else
{
for(j=9;j>i;j--)
{
a[j]=a[j-1];
}
a[i]=num;
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
习题6-5 数组元素逆置
#include<stdio.h>
int main()
{
int a[10];
int i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
int temp;
for(i=0;i<5 ;i++)
{
temp=a[i];
a[i]=a[9-i];
a[9-i]=temp;
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
习题6-6 杨辉三角
#include<stdio.h>
int main()
{
int a[10][10];
int n;
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<i+1;j++)
{
a[i][j]=1;
}
}
for(i=2;i<n;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<i+1;j++)
{
if(j==0)
{
printf("%d",a[i][j]);
}
else
{
printf(" %d",a[i][j]);
}
}
printf("\n");
}
return 0;
}
习题6-12 解密
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
gets(str);
for(int i=0;i<strlen(str);i++)
{
if(str[i]>='a'&&str[i]<='z')
{
str[i]='z'-str[i]+'a';
}
else if(str[i]>='A'&&str[i]<='Z')
{
str[i]='Z'-str[i]+'A';
}
else
{
continue;
}
}
puts(str);
return 0;
}
习题6-13 字符串比较
#include<stdio.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
gets(str1);
gets(str2);
int diff=0;
for(int i=0;i<strlen(str1)&&i<strlen(str2);i++)
{
if(str1[i]==str2[i])
{
continue;
}
else
{
diff=str1[i]-str2[i];
break;
}
}
printf("%d\n",diff);
return 0;
}
例题6-1 逆序输出数组元素
#include<stdio.h>
int main()
{
int num[10];
int i;
for(i=0;i<10;i++)
{
scanf("%d",&num[i]);
}
for(i=9;i>=0;i--)
{
printf("%d\n",num[i]);
}
return 0;
}
例题6-2 数组求解Fibonacci数列问题
#include<stdio.h>
int main()
{
int a[20]={1,1};
int i;
for(i=2;i<20;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<20;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
例题6-3 冒泡排序
#include<stdio.h>
int main()
{
int a[10]={0};
int i,j;
int temp;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=1;j<10;j++)
{
if(a[j-1]>a[j])
{
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
例题6-4 矩阵转置
#include<stdio.h>
int main()
{
int a[2][3],b[3][2];
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
b[i][j]=a[j][i];
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%d",b[i][j]);
if(j<1)
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
例题6-9 字符串求最大值
#include<stdio.h>
#include<string.h>
#define MAX 100
int main()
{
char str1[MAX],str2[MAX],str3[MAX];
gets(str1);
gets(str2);
gets(str3);
char *max;
max=str1;
if(strcmp(str2,max)>0)
{
max=str2;
}
if(strcmp(str3,max)>0)
{
max=str3;
}
puts(max);
return 0;
}
2.6
习题7-5 字符串逆序存放
#include<stdio.h>
#include<string.h>
#define MAX 100
char* Change(char str[],int len);
int main()
{
char str[MAX];
gets(str);
int len=strlen(str);
char *p=Change(str,len);
puts(p);
return 0;
}
char* Change(char str[],int len)
{
char temp;
for(int i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=temp;
}
return str;
}
习题7-7 复制字符串中的元音字母
#include<stdio.h>
#include<string.h>
#define MAX 100
void Change(char str[],int len,char temp[]);
int main()
{
char str[MAX],temp[MAX];
gets(str);
int len=strlen(str);
Change(str,len,temp);
puts(temp);
return 0;
}
void Change(char str[],int len,char temp[])
{
int j=0;
for(int i=0;i<len;i++)
{
if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u')
{
temp[j++]=str[i];
}
}
}
2.7
问题 A: C语言10.1
#include<stdio.h>
int main()
{
int *pa,*pb,*p,a,b;
scanf("%d %d",&a,&b);
pa=&a;
pb=&b;
if(*pa<*pb)
{
p=pa;
pa=pb;
pb=p;
}
printf("%d %d\n",*pa,*pb);
return 0;
}
问题 B: C语言10.2
#include<stdio.h>
int main()
{
int *pa,*pb,*pc,*p,a,b,c;
scanf("%d %d %d",&a,&b,&c);
pa=&a;
pb=&b;
pc=&c;
if(*pa<*pb)
{
p=pa;
pa=pb;
pb=p;
if(*pb<*pc)
{
p=pb;
pb=pc;
pc=p;
if(*pa<*pb)
{
p=pa;
pa=pb;
pb=p;
}
}
}
else
{
if(*pb<*pc)
{
p=pb;
pb=pc;
pc=p;
if(*pa<*pb)
{
p=pa;
pa=pb;
pb=p;
}
}
}
printf("%d %d %d\n",*pa,*pb,*pc);
return 0;
}
问题 C: C语言10.10
#include<stdio.h>
int main()
{
const char *a = "I love China!";
int n;
scanf("%d",&n);
printf("%s\n",a+n);
return 0;
}
问题 D: C语言10.15
#include<stdio.h>
#include<string.h>
#define MAX 20
void swap(char **p1,char **p2);
int main()
{
char str1[MAX],str2[MAX],str3[MAX];
gets(str1);
gets(str2);
gets(str3);
char *p1,*p2,*p3;
p1=str1;
p2=str2;
p3=str3;
if(strcmp(p1,p2)>0)
{
swap(&p1,&p2);
if(strcmp(p2,p3)>0)
{
swap(&p2,&p3);
if(strcmp(p1,p2)>0)
{
swap(&p1,&p2);
}
}
}
else
{
if(strcmp(p2,p3)>0)
{
swap(&p2,&p3);
if(strcmp(p1,p2)>0)
{
swap(&p1,&p2);
}
}
}
puts(p1);
puts(p2);
puts(p3);
return 0;
}
void swap(char **p1,char **p2)
{
char *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
问题 E: C语言10.16
#include<stdio.h>
void Input(int *a);
void Operate(int *a);
void Output(int *a);
int main()
{
int a[10];
Input(a);
Operate(a);
Output(a);
return 0;
}
void Input(int *a)
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",a+i);
}
}
void Operate(int *a)
{
int min=a[0];
int max=a[0];
int i;
int flagmin=0,flagmax=0;
for(i=1;i<10;i++)
{
if(a[i]<min)
{
min=a[i];
flagmin=i;
}
if(a[i]>max)
{
max=a[i];
flagmax=i;
}
}
int temp;
temp=a[0];
a[0]=a[flagmin];
a[flagmin]=temp;
temp=a[9];
a[9]=a[flagmax];
a[flagmax]=temp;
}
void Output(int *a)
{
for(int i=0;i<10;i++)
{
if(i==0)
printf("%d",*(a+i));
else
printf(" %d",*(a+i));
}
printf("\n");
}
2.8
问题 A: C语言11.1
#include<stdio.h>
#include<string.h>
#define MAX 100
struct person {
char name[20];
int count;
}leader[3] = {{"Li",0},{"Zhang",0},{"Fun",0}};
int main()
{
int n;
char str[MAX][MAX];
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
gets(str[i]);
if(strcmp(str[i],"Li")==0)
{
leader[0].count++;
}
else if(strcmp(str[i],"Zhang")==0)
{
leader[1].count++;
}
else if(strcmp(str[i],"Fun")==0)
{
leader[2].count++;
}
else
{
i--;
}
}
for(i=0;i<3;i++)
{
printf("%s:%d\n",leader[i].name,leader[i].count);
}
return 0;
}
问题 B: C语言11.2
#include<stdio.h>
#define MAX 20
struct student {
int num;
char name[20];
char sex;
int age;
};
int main()
{
struct student stu[MAX];
int n;
scanf("%d",&n);
int i;
struct student *sp=stu;
for(i=0;i<n;i++)
{
scanf("%d %s %c %d",&(sp+i)->num,(sp+i)->name,&(sp+i)->sex,&(sp+i)->age);
}
for(i=0;i<n;i++){
printf("%d %s %c %d\n",(sp+i)->num,(sp+i)->name,(sp+i)->sex,(sp+i)->age);
}
return 0;
}
问题 C: C语言11.4
#include<stdio.h>
#define MAX 100
struct people{
int num;
char name[10];
char sex;
char job;
union {
int clas;
char position[10];
}category;
};
int main()
{
struct people peo[MAX];
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%d %s %c %c",&peo[i].num,peo[i].name,&peo[i].sex,&peo[i].job);
if(peo[i].job=='s')
{
scanf("%d",&peo[i].category.clas);
}
else if(peo[i].job=='t')
{
scanf("%s",peo[i].category.position);
}
}
for(i=0;i<n;i++)
{
printf("%d %s %c %c",peo[i].num,peo[i].name,peo[i].sex,peo[i].job);
if(peo[i].job=='s')
{
printf(" %d\n",peo[i].category.clas);
}
else if(peo[i].job=='t')
{
printf(" %s\n",peo[i].category.position);
}
}
return 0;
}
问题 D: C语言11.7
#include<stdio.h>
#define MAX 100
struct student{
int no;
char name[19];
int c1;
int c2;
int c3;
};
void input(struct student stu[]);
void print(struct student stu[]);
int main()
{
struct student stu[5];
input(stu);
print(stu);
return 0;
}
void input(struct student stu[])
{
for(int i=0;i<5;i++)
{
scanf("%d %s %d %d %d",&(stu+i)->no,(stu+i)->name,&(stu+i)->c1,&(stu+i)->c2,&(stu+i)->c3);
}
}
void print(struct student stu[])
{
for(int i=0;i<5;i++)
{
printf("%d %s %d %d %d\n",(stu+i)->no,(stu+i)->name,(stu+i)->c1,(stu+i)->c2,(stu+i)->c3);
}
}
问题 E: C语言11.8
#include<stdio.h>
#define MAX 10
struct student{
int no;
char name[19];
int c1;
int c2;
int c3;
};
void input(struct student stu[]);
void print(struct student stu[]);
int main()
{
struct student stu[MAX];
input(stu);
print(stu);
return 0;
}
void input(struct student stu[])
{
for(int i=0;i<MAX;i++)
{
scanf("%d %s %d %d %d",&(stu+i)->no,(stu+i)->name,&(stu+i)->c1,&(stu+i)->c2,&(stu+i)->c3);
}
}
void print(struct student stu[])
{
double sumc1,sumc2,sumc3,max;
sumc1=0;
sumc2=0;
sumc3=0;
max=stu->c1+stu->c2+stu->c3;
int num=0;
for(int i=0;i<MAX;i++)
{
sumc1+=(stu+i)->c1;
sumc2+=(stu+i)->c2;
sumc3+=(stu+i)->c3;
int temp=(stu+i)->c1+(stu+i)->c2+(stu+i)->c3;
if(temp>max)
{
max=temp;
num=i;
}
}
sumc1/=MAX;
sumc2/=MAX;
sumc3/=MAX;
printf("%.2f %.2f %.2f \n",sumc1,sumc2,sumc3);
printf("%d %s %d %d %d\n",(stu+num)->no,(stu+num)->name,(stu+num)->c1,(stu+num)->c2,(stu+num)->c3);
}
2.10
问题 A: A+B 输入输出练习I
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
问题 B: A+B 输入输出练习II
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a,b;
int i=0;
while(i<n)
{
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
i++;
}
return 0;
}
问题 C: A+B 输入输出练习III
#include<stdio.h>
int main()
{
int a,b;
while(1)
{
scanf("%d%d",&a,&b);
if(a==0&&b==0)
{
break;
}
printf("%d\n",a+b);
}
return 0;
}
问题 D: A+B 输入输出练习IV
#include<stdio.h>
int main()
{
int N;
int sum;
int i,x;
while(1)
{
scanf("%d",&N);
sum=0;
i=0;
if(N==0)
{
break;
}
else
{
while(i<N)
{
scanf("%d",&x);
sum+=x;
i++;
}
}
printf("%d\n",sum);
}
return 0;
}
问题 E: A+B 输入输出练习V
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int i=0,j;
int sum,x,M;
while(i<N)
{
scanf("%d",&M);
j=0;
sum=0;
while(j<M)
{
scanf("%d",&x);
sum+=x;
j++;
}
printf("%d\n",sum);
i++;
}
return 0;
}
问题 F: A+B 输入输出练习VI
#include<stdio.h>
int main()
{
int sum,i,x;
int n;
while(scanf("%d",&n)!=EOF)
{
i=0;
sum=0;
while(i<n)
{
scanf("%d",&x);
sum+=x;
i++;
}
printf("%d\n",sum);
}
return 0;
}
问题 G: A+B 输入输出练习VII
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n\n",a+b);
}
return 0;
}
问题 H: A+B 输入输出练习VIII
#include<stdio.h>
int main()
{
int N;
scanf("%d",&N);
int i=0,j;
int sum,x,M;
while(i<N)
{
scanf("%d",&M);
j=0;
sum=0;
while(j<M)
{
scanf("%d",&x);
sum+=x;
j++;
}
printf("%d\n",sum);
i++;
if(i<N)
{
printf("\n");
}
}
return 0;
}