第7章 数组
1: (1) D
(2) A
(3) D
(4) B
(5) D
2: (1) 1 5 4 4
6 7 8
2 3
4
(2) 6333
3: (1)a[8]=data; k>=0 a[k]=temp break k<=8
(2) "%s" str[i]<='Z' c[str[i]+26-'a']++ i+'a'
4、/*题目:求一组成绩的平均分数以及高于平均分的成绩。*/
#include<stdio.h>
#define max 100
void main()
{
float a[max],s=0,average=0;
int i,n;
printf("Please input N: "); /*输入要处理元素的个数*/
scanf("%d",&n);
printf("\nPlease input %d ge shu: ",n); /*输入90,85,92,77,80,62*/
for(i=0;i<n;i++)
{
scanf("%f",&a[i]);
s+=a[i];
}
average = s / n;
printf("\naverage = %.2f\n",average); /*输出81.00*/
for(i=0;i<n;i++)
if(a[i]>average)
printf("%.2f ",a[i]); /*输出90.00 ,85.00 ,92.00*/
}
5、/*题目:编写程序,输入一组整数,将他们排序后由小到大输出。*/
#include<stdio.h>
#define max 100
void main()
{
int a[max],j,i,k=0,t=0,n=0;
printf("Please input N: "); /*输入要处理元素的个数*/
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*比较n-1遍*/
{ k=i;
for(j=i+1;j<n;j++) /*每遍比较n-(i+1)次*/
if(a[k]>a[j])
k=j;
if(k!=i) /*元素排序前下标与排序后下标不符,则交换其值*/
{ t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
6、/*题目:从键盘输入一个4x4的整数矩阵,以主对角线(\)为对称轴*/
/*将左下角元素中较大者替换右上角元素,并将右上角含对称轴输出。*/
#include<stdio.h>
#include<string.h>
void main()
{
int d[4][4]={{0,0,0,0}},i,j;
clrscr();
printf("\nPlease input 16 num: ");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&d[i][j]);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(d[i][j]>d[j][i]) /*左下角元素大于右上角元素则交换*/
d[j][i]=d[i][j];
for(i=0;i<4;i++)
{ printf("\n\n\n\n\n");/*为了保持每行的间隔与每列的相同*/
for(j=0;j<4;j++)
if(j>=i)
printf("\t%d",d[i][j]);/*为了使位数不同的数输出依然保持三角型*/
else
printf("\t");
}
}
7、*题目:输入一个3x4的二维数组,然后分别按行和按列输出。*/
#include<stdio.h>
#include<string.h>
void main()
{
int d[3][4]={{0,0,0,0}},i,j;
printf("Please input 12 num: ");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&d[i][j]);
printf("\n\nAn hang: ");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d ",d[i][j]);
printf("\n\nAn lie: ");
for(i=0;i<4;i++)
for(j=0;j<3;j++)
printf("%d ",d[j][i]);
}
8、/*题目:编写程序,将两个字符串连接起来,不用strcat函数。*/
#include<stdio.h>
#include<string.h>
void main()
{ char s1[50],s2[50];
int i=0,j=0,t=0;
printf("Input one: ");
gets(s1);
while(s1[i]!='\0') i++; /*统计s1中字符个数*/
printf("\n\nInput second: ");
gets(s2);
while(s2[j]!='\0') j++; /*统计s2中字符个数*/
for(t=0;t<=j;t++) /*把s2中字符连接到s1后面*/
{ s1[i]=s2[t]; i++;}
printf("\n\none + second: ");
puts(s1);
}
9、/*输入一行字符串,统计字符对ab的个数。*/
#include<stdio.h>
#include<string.h>
#define MAX 100
void main()
{
char str[MAX];
int i=0,flage=0;
int count=0;
printf("\nPlease input a string: ");
gets(str);
while(str[i])
{ if(str[i]=='a')
flage=1;
else if(str[i]=='b')
{
if(flage==1)
{ count++;flage=0;}
}
else flage=0;
i++;
}
printf("the double char \"ab\" count is %d\n",count);
}
10、
#include<stdio.h> /*相对于第一种方法,这种方法能把同为最大的字符串全部打印出来。*/
#include<string.h>
int paixu(int a[],int n) /*构造对长度为n的数组排序的函数*/
{
int i,j,t,k,temp;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
{ t=a[i];
a[i]=a[k];
a[k]=t;
}
}
temp=a[n-1];
return temp; /*返回最大字符串的长度的值*/
}
void main()
{
char str1[50],str2[50],str3[50],str4[50],str5[50],str6[50];
char str7[50],str8[50],str9[50],str10[50];
int count[10]={0},temp[10]={0},i,j;
int paixu(int a[],int n);
for(i=1;i<=10;i++) /*输入10个字符串*/
{
printf("\nPlease input %d string: ",i);
if(i==1)
{ gets(str1);while(str1[count[0]]){count[0]++;temp[0]++; }}
if(i==2)
{ gets(str2);while(str2[count[1]]){count[1]++;temp[1]++;}}
if(i==3)
{ gets(str3);while(str3[count[2]]){count[2]++;temp[2]++; }}
if(i==4)
{ gets(str4);while(str4[count[3]]){count[3]++; temp[3]++;}}
if(i==5)
{ gets(str5);while(str5[count[4]]){count[4]++; temp[4]++;}}
if(i==6)
{ gets(str6);while(str6[count[5]]){count[5]++; temp[5]++;}}
if(i==7)
{ gets(str7);while(str7[count[6]]){count[6]++; temp[6]++;}}
if(i==8)
{ gets(str8);while(str8[count[7]]){count[7]++; temp[7]++;}}
if(i==9)
{ gets(str9);while(str9[count[8]]){count[8]++; temp[8]++;}}
if(i==10)
{ gets(str10);while(str10[count[9]]){count[9]++;temp[9]++;}}
}
j=paixu(temp,10);
for(i=1;i<=10;i++)
{
if(count[i-1]==j)
{ /*只要字符串长度与最大长度相等就打印出来*/
switch(i)
{ case 1:puts(str1); printf("\n"); break;
case 2:puts(str2); printf("\n"); break;
case 3:puts(str3); printf("\n"); break;
case 4:puts(str4); printf("\n"); break;
case 5:puts(str5); printf("\n"); break;
case 6:puts(str6); printf("\n"); break;
case 7:puts(str7); printf("\n"); break;
case 8:puts(str8); printf("\n"); break;
case 9:puts(str9); printf("\n"); break;
case 10:puts(str10); printf("\n"); break;
}
}
}
}
11、
/*给数组a输入m个按升序排列的数,给数组b输入n个按降序排列的数*/
/*将a与b中的元素按降序排列存在数组c中。*/
#include<stdio.h>
void main()
{
int a[100],b[100],c[100],i,m,n,j,k,temp=0,s;
printf("\nm = ");scanf("%d",&m); /*确定M的个数*/
printf("\nn = ");scanf("%d",&n); /*确定N的个数*/
printf("\nPlease input m ge shu: ");
for(s=0;s<m;s++)
scanf("%d",&a[s]);
printf("\nPlease input n ge shu: ");
for(s=0;s<n;s++)
scanf("%d",&b[s]);
i=m-1;j=0;k=0; /*i,j,分别标记a[]与b[]且都是从最大元素开始做标记*/
for(;;)
{ if(i==0) /*a[]中只有一个数或者a[]处理到了最后一个元素*/
{ if(a[i]<=b[j]) /*如果a[]的最后一个元素<=b[]中当前元素*/
{ c[k]=b[j]; k++; j++; }
else
{ c[k]=a[i];
k++;
for(;;) /*把b[]数组接到c[]后面*/
{ c[k]=b[j];
j++;
k++;
if(j==n) /*如果b[]处理完,结束。并做标记temp=1*/
{ temp=1;break; }
}
}
}if(temp==1)break; /*标记temp=1,全部处理结束*/
if((a[i]<=b[j])&&(i!=0)&&(j!=n))
{ c[k]=b[j]; j++; k++; }
if((a[i]>b[j])&&(i!=0)&&(j!=n))
{ c[k]=a[i]; i--; k++; }
if(j==n) /*b[]处理到完*/
{ for(;;) /*把b[]数组接到c[]后面*/
{ if(i==0) /*如果a[]处理完,结束。并做标记temp=1*/
{ c[k]=a[i];temp=1;break; }
c[k]=a[i];
i--;
k++;
}
}if(temp==1) break;/*标记temp=1,全部处理结束*/
}
for(s=0;s<m+n;s++)
printf("%d ",c[s]);
getch();
}
第8章 指针