1.1题目

1.2代码
#include<stdio.h>
#include<string.h>
void fc(char *s,int len,float a[4]){
a[0]=a[1]=a[2]=a[3]=0;
char *p=s;
while(*p!='\0'){
if(*p>='0'&&*p<='9')a[2]++;
else if(*p>='a'&&*p<='z')a[0]++;
else if(*p>='A'&&*p<='Z')a[1]++;
else a[3]++;
p++;
}
a[0]=a[0]/len*100;
a[1]=a[1]/len*100;
a[2]=a[2]/len*100;
a[3]=a[3]/len*100;
}
int main()
{
char str[100];
fgets(str,sizeof(str),stdin);
str[strcspn(str,"\n")]='\0';
int len=strlen(str);
float a[4]={0};
fc(str,len,a);
for(int i=0;i<4;i++){
printf("%.3f%% ",a[i]);
}
return 0;
}
1.3解题思路
根据题目,统计四种字符的数量,算出他们占总字符数量的百分比,这题用void,无返回值的函数类型来写,因为我们只是对数组的值做出改变,相当于通过地址直接改变变量值。
1.在主函数里先输入字符串,我们需要计算四种字符的数量,所以定义一个长度为4的数组,然后调用我们定义的函数计算出四类字符所占的百分比。
2.在主函数前定义一个计算四类字符所占百分比的函数,在这个函数里先遍历字符串,计算出四类字符的数量,利用指针实现(题目要求),然后看题,题目说要在这个函数里计算出百分比,那么就直接计算就好。
3.调用完以后长度为4的数组就有了值,然后将这四个值输出,注意百分号的输出格式。
综上所有代码完成之后,检查程序是否能够运行。
1.4总结
本题结合指针+字符串解题,需先明确题目要求,注意输入输出的格式。
2.1题目

2.2代码
#include <stdio.h>
void find(int *a,int n,int *max,int *min){
*max=a[0];
*min=a[0];
for(int i=1;i<n;i++){
if(a[i]>*max)*max=a[i];
if(a[i]<*min)*min=a[i];
}
}
int main()
{
int a[10];
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
int max,min;
find(a,10,&max,&min);
printf("%d %d",max,min);
return 0;
}
2.3解题思路
本题利用指针遍历数组找出最大值和最小值。
1.在主函数里先确定数组里的值,因为是利用函数找出最大值和最小值,可是函数返回值是不能返回两个值的,所以我们利用指针变量,先定义普通的最大最小值的变量,然后通过地址对变量的值做出改变。
2.根据分析,定义函数无需返回值,所以是无参函数,在这个函数里找出数组的最大值和最小值,先假定都是数组的第一个数,然后不断的和数组其他数比较,确定最大值和最小值的值。
3.在主函数里输出最大值和最小值。
综上所有代码完成之后,检查程序是否能够运行。
2.4总结
本题注重函数的返回值,不一定需要返回值,在函数里可以通过地址对变量进行改变。
3.1题目

3.2代码
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
int temp=a,sum=0;
while(temp>0){
int b=temp%10;
temp=temp/10;
sum+=b;
}
if(sum==1)printf("January");
else if(sum==2)printf("February");
else if(sum==3)printf("March");
else if(sum==4)printf("April");
else if(sum==5)printf("May");
else if(sum==6)printf("June");
else if(sum==7)printf("July");
else if(sum==8)printf("August");
else if(sum==9)printf("September");
else if(sum==10)printf("October");
else if(sum==11)printf("November");
else if(sum==12)printf("December");
else printf("***");
return 0;
}
3.3解题思路
根据题目要求我们要先计算出,三位数各个位置上的数之和,然后根据和来输出对应的英文名称。
1.先输入三位数,然后计算个位置上的值,将这些值加起来。
2.计算个位置上的数值,这个是一种计算方法,可以在本子上算一下,找找规律。
3.根据和,输出对应月份的英文字母。
综上所有代码完成之后,检查程序是否能够运行。
3.4总结
这个题是考计算出各位数字之和,这个有不同的方法。
4.1题目

4.2代码
#include <stdio.h>
void fun(int *a,int n){
int temp[n];
int count=0;
int *start=a-(n-1);
for(int i=0;i<n;i++){
if(start[i]<0){
temp[count]=start[i];
count++;
}
}
for(int i=0;i<n;i++){
if(start[i]>0){
temp[count]=start[i];
count++;
}
}
for(int i=0;i<n;i++){
start[i]=temp[i];
}
}
int main()
{
int a[10];
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
fun(&a[9],10);
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}
4.3解题思路
这个题是让我们在原有数组的基础上,对数组位置上的值,根据正负排列。
1.在主函数里先确定数组的值,看清楚题目要求,是将最后一个元素的地址传给函数。
2.在定义的函数里,定义一个新的数组,这个数组先存储好值,在给原数组,这个新数组里,先放负数,遍历整个数组,再同样遍历整个数组,放正数。不过主函数传过来的是最后一个元素的地址,我们可以从第一个元素开始遍历,也可以从最后一个元素开始,代码里的*start是一个指针变量,它其实是在通过数组a里面元素的地址来看的,虽然我们用的是start,但是这相当于间接调用了原数组,是通过地址改变位置上的值。
3.在主函数里输出排好序的数组元素值。
综上所有代码完成之后,检查程序是否能够运行。
4.4总结
本题考察指针的运用,要多熟练掌握指针不同的定义和调用。
5.1题目

5.2代码
#include <stdio.h>
void sort(int *a,int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int *merge(int *a,int m,int *b,int n){
static int c[13];
for(int i=0;i<m;i++){
c[i]=a[i];
}
for(int i=0;i<n;i++){
c[m+i]=b[i];
}
for(int i=0;i<m+n-1;i++){
for(int j=0;j<m+n-i-1;j++){
if(c[j]>c[j+1]){
int temp=c[j];
c[j]=c[j+1];
c[j+1]=temp;
}
}
}
return c;
}
int main()
{
int a[5],b[8];
for(int i=0;i<5;i++){
scanf("%d",&a[i]);
}
sort(a,5);
for(int i=0;i<8;i++){
scanf("%d",&b[i]);
}
sort(b,8);
int *c=merge(a,5,b,8);
for(int i=0;i<13;i++){
printf("%d ",c[i]);
}
return 0;
}
5.3解题思路
根据题目要求是先将两个数组都排序完后,然后合并排序。需要定义两个函数。
1.在主函数里先确定两个数组的值,先分别调用sort函数排序。
2.先定义sort函数,这个函数很好写,是简单的利用冒泡排序的方法进行升序排序。
3.定义merge函数,不过这个函数需要返回的是一个新的数组,在主函数里需要先定义好,这个函数也是在排序,我是先将两个数组的值合并再利用冒泡排序的方法进行排序,还有其他的方法。
4.在主函数里相应的位置调用这个函数,将新数组里的值输出。
综上所有代码完成之后,检查程序是否能够运行。
5.4总结
本题考察函数的定义以及调用,注意数组的灵活运用。