题目:按顺序。(从上至下)
第八:
#include<stdio.h>
int main()
{
char a[10],b[10];
int i,j;
i=0,j=0;
gets(a);
gets(b);
while(a[i]!=0)
i++;
while((a[i++]=b[j++])!=0);//字符串也可以像数字一样一个一个赋值。
puts(a);
return 0;
}
#include<stdio.h>
int main()
{
int a[3][3],i,j,sum,m;
sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(j=0;j<3;j++)
{
sum+=a[0][j];
sum+=a[2][j];
}
m=a[1][0]+a[1][2];
sum+=m;
printf("%d",sum);
return 0;
} //注意二位数组的下标规律。尤其是对角线,i+j=n
#include<stdio.h>
int main()
{
int a[5][5],i,j,sum,m;
m=4;
sum=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<5;i++)
{
j=i;
sum+=a[i][j];
sum+=a[i][m]; // 关于二位数组副对角线计算
m--;
}
printf("sum=%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
char a[8],i;
gets(a);
for(i=0;i<8;i++)
{
if(a[i]>='a'&&a[i]<='z') // 判断 范围 记住 写成‘a' 不是 a
a[i]=a[i]-32; //大写字母变为小写 +32 反过来 -32
else if(a[i]>='A'&&a[i]<='Z');
else ;
}
puts(a);
return 0;
}
第九周:
#include<stdio.h>
#include<math.h>
double M(int money,int year,double rate) // 实参和形参的名字是可以一样的
{
double sum;
sum=money*pow((1+rate),year); //用pow函数时,pow((....)).
return sum;
}
int main()
{
int money,year;
double rate,sum;
scanf("%d%d%lf",&money,&year,&rate);
sum=M(money,year,rate);
printf("sum=%.2f",sum);
return 0;
}
#include<stdio.h>
int main()
{
int m,c;
int M( int m);
scanf("%d",&m);
c=M(m);
printf("%d",c);
return 0;
}
int M(int m)
{
int y,q,j,a[20];
int i=0; q=m;
while(q!=0)
{
y=m%2;
q=m/2; //十进制改变为二进制, 这两步和数据的剥离时一样的。
m=q;
a[i]=y;
i++;
}
m=0;
for(j=i-1;j>=0;j--)
m=m*10+a[j]; // 转换(二进制)
return m;
}
#include<stdio.h>
int M(int a[],int n) //小心这里的一个问题,行是可以不写,但是不可以省略[]
{
int i;
float ave;
int sum=0;
int count=0;
for(i=0;i<n;i++)
sum+=a[i];
ave=sum/n;
for(i=0;i<n;i++)
if(a[i]>ave)
count++;
return count;
}
int main()
{
int a[10],n,c,i;
n=10;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
c=M(a,n);
printf("%d",c);
return 0;
}
第十周:
#include<stdio.h>
double a(double x, int n)
{
double m;
if(n==0)
return 1; //注意这里与求阶乘不同。
else
m=x*a(x,n-1);
return m;
}
int main()
{
double m,x;
int n;
scanf("%lf%d",&x,&n);
m=a(x,n);
printf("%f",m);
return 0;
}
#include<stdio.h>
int max,min; // 注意!这里是定义了一个全局变量!
void m(int a[],int n)
{
int i;
i=0;
max=a[i];
min=a[i];
for(i=1;i<10;i++)
{
if(a[i]>max) max=a[i];// 这里求最大最小用的是 擂台法
if(a[i]<min) min=a[i];
}
}
int main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
m(a,10);
printf("max=%d,min=%d",max,min);
return 0;
}
#include<stdio.h>
#define N 30
int m(char a[])
{
int x,i,m;
i=0;
m=0;
scanf("%d",&x); //用到了 千分位,分隔的办法,定义 字符数组,
while(x!=0) //将数字 变为 字符的办法: ‘0’+数字
{
a[m]='0'+x%10;
i++;
m++;
x=x/10;
if(i%3==0&&x!=0)
{
a[m]=',';
m++;
i=0;
}
}
a[m]='\0';
return m;
}
int main()
{
char a[N]; //注意,定义数组的时候,不可以空,所以在这里 define N
int n,i;
n=m(a); //这里n是计算 该数组有几位
for(i=n-1;i>=0;i--)
putchar(a[i]);
return 0;
}
#include<stdio.h>
int main()
{
char a[20],*p=a; // 这一段,还可以这样写: char a[20],*p;
int i; p=a;
i=0;
gets(a);
while(*p!='\0'){
p++;
i++;
}
printf("Length of the string is %d",i);
return 0;
}
#include<stdio.h>
int main()
{
int a[10],*p=a,*q=&a[9]; //定义两个指针变量
int temp;
for(;p<a+10;p++) //注意 a+10 +(数字),该数字是指 该数组的构成长度
scanf("%d",p);
p=a; // 指针复位
for(;p<=a+4;p++,q--)
{
temp=*p; //注意这一段,在调用函数的形参的时候,也是要这样才可以改变实参的数值!
*p=*q;
*q=temp;
}
p=a; //再次复位
for(;p<a+10;p++)
printf("%2d",*p); //- 表示左对齐,前面的数字表示几位。 没有 - 表示右对齐
return 0;
}
#include<stdio.h>
int main()
{
int array[10],*p,i,max,min;
p=array; //注意,首先指针在运算的过程中,要有指向,否则在一下的运作中 无意义
for(;p<array+10;p++) //这里运用到了,指针的输入法
scanf("%d",p);
p=array; // 注意复位
max=*p;
min=*p; //擂台法
while(p<array+10) //判断指针的指向是否越界
{
if(*p>max) max=*p;
if(*p<min) min=*p;
p++;
}
printf("max=%d,min=%d",max,min);
return 0;
}
第十一周:
#include<stdio.h>
sort(int *p ,int n);
int main()
{
int a[3],i;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
sort(a,3);
for(i=0;i<3;i++)
printf("%3d",a[i]);
return 0;
}
sort(int *p ,int n) //因为是一维数组,所以,只用定义*p,二维的话,无论字符还是数字,(*p)[80]。
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i; //选择排序法
for(j=i+1;j<n;j++)
if(*(p+j)>*(p+k))
k=j;
if(k!=i)
{
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
}
}
}
#include<stdio.h>
int main()
{
float a[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}},*p[3];
int i,j;
p[0]=a[0]; //行指针的初始化!
p[1]=a[1];
p[2]=a[2];
scanf("%d",&i);
switch(i)
{
case 0:for(j=0;j<4;j++) //开关法
printf("%8.2f",*(*(p+i)+j));break; //在指针表达里面,a[i][j] 为 *(*(p+i)+j)
case 1:for(j=0;j<4;j++)
printf("%8.2f",*(*(p+i)+j));break;
case 2:for(j=0;j<4;j++)
printf("%8.2f",*(*(p+i)+j));break;
default: ;break; //注意,每个语句写完都要添加一个break 语句,并且在最后添加 default 语句。
}
return 0;
}
第十三周 :
#include<stdio.h>
struct data
{
long numb;
char name[20];
float score[3];
float average;
int rank;
}p[5];
void inputscore(struct data *p) ; //注意,在调用函数的方面,结构函数,要写上:struct data ,不可以漏掉
void ave(struct data *p,float average[20]);
void outputscore(struct data *p);
int main()
{
float average[20];
struct data p[5]; //这里相当于 结构函数的声明!
inputscore(p);
ave(p,average);
outputscore(p);
return 0;
}
void inputscore(struct data *p)
{
int i,j;
for(i=0;i<5;i++)
{
scanf("%ld",&(*(p+i)).numb); //指针(p+i)的结构表示:(*(p+i)).numb 要把*号 括住!
scanf("%s",(*(p+i)).name);// 输入二维字符串的时候,只需要 for(i=0;i<5;i++)!
for(j=0;j<3;j++)
scanf("%f",&(*(p+i)).score[j]);
}
}
void ave(struct data *p,float average[20])
{
float sum=0;
int i,j;
float temp;
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
sum+=(*(p+i)).score[j];
(*(p+i)).average=sum/3.0;
average[i]=sum/3;
sum=0;
}
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++) //交换排序法
if(average[j]>average[i])
{
temp=average[i] ;
average[i]=average[j];
average[j]=temp;
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++) //遍历
{
if((*(p+i)).average==average[j])
(*(p+i)).rank=j+1;
}
}
}
void outputscore(struct data *p)
{
int i,j;
printf("Number: Name: score: Average: rank:\n");
for(i=0;i<5;i++){
printf("%-9ld%-10s",(*(p+i)).numb,(*(p+i)).name);
for(j=0;j<2;j++)
printf("%-5.1f",(*(p+i)).score[j]);
printf("%-8.1f",(*(p+i)).score[j]); //注意,在原题目中,三个成绩的有效数字位数不同。
printf("%-10.1f%-d\n",(*(p+i)).average,(*(p+i)).rank);
}
}