7.11
给定一个从小到大有序的整数序列,将其保存至数组。另外输入一个整数,将其插入至这个数组中并保持数组有序。
#include<stdio.h>
int main()
{
char a[50];
int i,j,n,s,m;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d ",&a[i]);
}
scanf("%d",&m);
for (i=0;i<n;i++)
{
if (m>a[i])
{
printf ("%d ",a[i]);
}
else {printf ("%d ",m);break;}
}
for (i=i;i<n;i++)
printf ("%d ",a[i]);
}
7.12
将一个数组中的值按照原始顺序的逆序重新存放,并输出逆序后的数组。
#include<stdio.h>
void main()
{
int n,i,j;
char a[50];
scanf("%d/n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=n-1;i>=0;i--)
{
printf("%d ",a[i]);
}
}
7.13
输出杨辉三角形的前n行。
#include<stdio.h>
void main()
{
int i,n,j;
char a[20][20];
a[0][0]=1;a[1][0]=1;a[1][1]=1;
scanf("%d",&n);
for (i=0;i<n;i++)
{
a[i][0]=1;
}
printf("1\n1 1\n");
for (i=2;i<n;i++)
{
printf("1 ");
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
a[i][j+1]=1;
printf("%d ",a[i][j]);
}
printf("1\n");
}
}
7.14
找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。
#include<stdio.h>
void main()
{
int a[50][50];
int i, j, b, n, q=0,m, l, k;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < n; i++)
{
b = a[i][0];
for (j = 0; j < m; j++)
{
if (b < a[i][j])
{
b = a[i][j]; k = j;
}
}
for (l = 0; l < n; l++)
{
if (b > a[l][k])
break;
if (l == n - 1)
{
printf("%d %d %d\n", b, i, k); q = 1;
}
}
}if (q == 0)printf("NO");
}
7.15
给定15个按从小到大已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。
#include<stdio.h>
void main()
{
int i, j,max, n,min, mid;
int a[15];
for(i=0;i<15;i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &n);
min = 0; max = 14;
while(min<=max)
{
mid = (min + max) / 2;
if (n > a[mid]) { min =mid + 1; }
else if (n < a[mid]) { max = mid - 1; }
else if (n == a[mid]) { printf("%d", mid); break;}
}
if (n != a[mid])printf("NO");}
7.16
给出一篇文章,共有3行文字,每行有最多80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
#include<stdio.h>
void main()
{
char c,str1[80],str2[80],str3[80];
int i,j,n,num1=0,num2=0,num5=0,num3=0,num4=0;
gets(str1);gets(str2);gets(str3);
strcat(str1,str2);strcat(str1,str3);
for(i=0;(c=str1[i])!='\0';i++)
{
if(c>='a'&&c<='z')
{
num1++;
}
else if(c>='A'&&c<='Z')
{
num2++;
}
else if(c==' ')
{
num3++;
}
else if(c>=0&&c<=9)
{num4++;}
else num5++;
}
printf("%d %d %d %d %d",num2,num1,num4,num3,num5);
}
7.17
输出如下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
请使用字符数组的方式完成本题。
#include<stdio.h>
void main()
{
char str[]="* * * * *";
int i,j;
for(i=0;i<5;i++)
{
printf("%s",str);
if(i<4)printf("\n");
for(j=0;j<=i;j++)
{
printf(" ");
}
}
}
7.18
有一行电文,已经按照如下规则译成了密码:
A->Z a->z
B->Y b->y
C->X c->x
… …
… …
即第1个字母变换成第26个字母,第i个字母变换成第(26-i+1)个字母。非字母字符不变。给定一段密码,请将其译成原文并输出。
#include<stdio.h>
void main()
{
char a[100],c;
int i,j,n;
gets(a);
for(i=0;(a[i])!='\0';i++)
{
if(a[i]<='Z'&&a[i]>='A')
{n=a[i]-64;
c=91-n;
printf("%c",c);}
else if(a[i]<='z'&&a[i]>='a')
{
n=a[i]-96;
c=123-n;
printf("%c",c);
}
else{printf("%c",a[i]);}
}
}
7.19
7.20
读入两个字符串s1和s2,比较这两个字符串。若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。输出的非零值应该是相比较的两个字符串第一个不相同位置的字符ASCII差值,例如”And”和”Aid”比较,根据第2个字符的比较结果,应输出5。
要求不要使用strcpy和strcmp函数。
#include<stdio.h>
void main()
{
char s1[100],s2[100];
int n,i,c,f,m;
gets(s1);gets(s2);
c=strlen(s1);f=strlen(s2);
if(c>f)
{
for(i=0;(s2[i])!='\0';i++)
{
if(s1[i]!=s2[i])
{
m=s1[i]-s2[i];
printf("%d",m);break;
}
}
}
else if(c<f)
{
for(i=0;(s1[i])!='\0';i++)
{
if(s1[i]!=s2[i])
{
m=s1[i]-s2[i];
printf("%d",m);break;
}
}
}
else if(c==f)printf("0");
}
7.21
读入两个字符串s1和s2,将s2中的全部字符复制到字符数组s1中去。要求不使用strcpy函数,并保证字符串末尾的’\0’标识符同时被赋值。
#include<stdio.h>
void main()
{
char s1[100],s2[100],c;
int i,j,n;
gets(s1);gets(s2);
for(i=0;i<=strlen(s2);i++)
{
s1[i]=s2[i];
}
printf("%s",s1);
}