在主函数中由键盘输入10个按升序排列的整数存放在一维数组a中,通过调用以下几个自定义函数分别输出数组a、将从键盘输入的一个整数x插入到数组a使其依然有序、输出数组a。
要求:定义以下几个函数(注:函数中形参指针p用来接收实参数组名a),按上述要求依次调用它们以实现所要求的功能。
#include <stdio.h>
main( )
{ void myout(int *p,int n);
int myinsert(int *p,int n,int x);
int a[11],i,n=10,x;
printf("请输入10个按升序排列的整数:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("数组a中的元素为:\n");
myout(a,n);
printf("请输入一个待插入的整数x=");
scanf("%d",&x);
n=myinsert(a,n,x);
printf("插入x后数组a中的元素为:\n");
myout(a,n);
}
void myout(int *p,int n)
{
while(n>0)
{ printf("%4d",*p);
p++;
n--;
}
printf("\n");
}
int myinsert(int *p,int n,int x)
{
int i=0,j=0;
while(x>p[j]&& j<n)
j++;
for(i=n;i>j;i--)
p[i]=p[i-1];
p[j]=x;
n++;
return n;
}
编写一个程序实现如下功能:输入一个字符串,内有数字和非数字字符,如:a123x456 17960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如123放在a[0]中,456放在a[1]中……统计共有多少个整数,并输出这些数。
#include<stdio.h>
#include<string.h>
main()
{
int a[100],*q=a,i,num=0;
char b[100],*p;
printf("请输入一个字符串:");
gets(b);
for(p=b;*p!='\0';p++)
if(*p>='0'&&*p<='9')
{
*q=*p-'0';
p++;
while(*p>='0'&&*p<='9')
*q=(*q)*10+(*(p++))-'0';
num++;
q++;
}
for(i=0,q=a;i<num;i++,q++)
printf("%5d\n",*q);
}
分析以下各个程序的执行结果,并与运行结果进行比较,理解结构体类型数组的使用。
struct myweek
{ char name[12];
int day;
};
main()
{ struct myweek
week[7]={"Monday",1,"Tuesday",2,"Wednesday",3,"Thursday",4,"Firday",5,"Sataday",6,"Sunday",7};
printf("%c\n",week[2].name[1]);
}
比较以下两段程序,想想为什么结果不同?
struct stu
{ char num[5];
float score[3];
};
main()
{ struct stu a[3]={{"01",60,70,80},{"02",70,75,80},{"03",90,95,92}},*p=a;
int i;
float sum=0;
for (i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
struct stu
{ char num[5];
float score[3];
};
main()
{ struct stu a[3]={{"01",60,70,80},{"02",70,75,80},{"03",90,95,92}};
int i;
float sum=0;
for (i=0;i<3;i++)
sum=sum+a[i].score[i];
printf("%6.2f\n",sum);
}
#include <stdio.h>
struct stu
{ int num;
char name[10];
int age;
};
void fun(struct stu *p)
{ printf("%s\n",(*p).name); }
main()
{ struct stu students[3]={{9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18}};
fun(students+2);
}
学生姓名 (name) 和年龄 (age) 存于结构体数组 person 中,函数 fun 的功能是:找出年龄最小的那名学生并输出该学生的姓名和成绩 。
#include<stdio.h>
struct stud
{ char name[20];
int age;
};
struct stud fun(struct stud person[],int n) //1
{ int min,i; //2
min=0; //3
for(i=0;i<n;i++) //4
if(person[i].age <person[min].age ) min=i; //5
return (person[min] ); //6
}
main()
{ struct stud a[]={{"Zhao",21},{"Qian",20},{"Sun",19},{"LI",22}}; //7
int n=4; //8
struct stud minpers; //9
minpers=fun(a,n); //10
printf("%s 是年龄小者,年龄是:%d\n",minpers.name,minpers.age); //11
}
以下程序的功能是:对已经存在的几本图书,任意输入一个书名,调用函数 search() 进行查询,如果查到了,显示出该书的单价,否则显示“ No found !”。
#include <stdio.h>
#include <string.h>
struct book
{ char name[10];
int price;
} bk[5]={{"aaa",10},{"bbb",20},{"ccc",30},{"ddd",40},{"eee",50}};
main()
{ void search(struct book *p, char *c);
char shu[10]; /*待查图书名*/
printf("input the search name:\n");
gets(shu);
search(bk,shu);
}
void search(struct book *p, char *c)
{ int i;
for(i=0;i<5;i++,p++)
if(strcmp(p->name,c)==0)
{ printf ("price is %d\n",p->price);
break;
}
if(i>=5)
printf("No found !\n");
}