读入两个字符串s1和s2,将s2中的全部字符复制到字符数组s1中去。要求不使用strcpy函数,并保证字符串末尾的’\0’标识符同时被赋值
#include <stdio.h>
void main()
{
int i;
char s1[30],s2[30];
gets(s1);
gets(s2);
for(i=0;i<30;i++)
{
s1[i]=s2[i];
}
puts(s1);
}
读入两个字符串s1和s2,比较这两个字符串。若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。输出的非零值应该是相比较的两个字符串第一个不相同位置的字符ASCII差值,例如”And”和”Aid”比较,根据第2个字符的比较结果,应输出5。
要求不要使用strcpy和strcmp函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s1[101];
char s2[101];
gets(s1);
gets(s2);
int long1=strlen(s1);
int long2=strlen(s2);
if(long1>long2)
{
int x;
for(int i=0;i<long2;i++)
{
if(s1[i]!=s2[i])
{
x=abs(s1[i]-s2[i]);
printf("%d\n",x);
break;
}
}
}
else if(long1==long2)
{
int x=0;
printf("%d\n",x);
}
else if(long1<long2)
{
int x;
for(int i=0;i<long1;i++)
{
if(s1[i]!=s2[i])
{
x=-abs(s1[i]-s2[i]);
printf("%d\n",x);
break;
}
}
}
return 0;
}
有一行电文,已经按照如下规则译成了密码:
A->Z a->z
B->Y b->y
C->X c->x
… …
… …
即第1个字母变换成第26个字母,第i个字母变换成第(26-i+1)个字母。非字母字符不变。给定一段密码,请将其译成原文并输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s1[101];
char s2[101];
gets(s1);
int longs=strlen(s1);
for(int i=0;i<longs;i++)
{
if(s1[i]>='A'&&s1[i]<='Z')
{
s2[i]='A'+'Z'-s1[i];
}
else if(s1[i]>='a'&&s1[i]<='z')
{
s2[i]='a'+'z'-s1[i];
}
else
s2[i]=s1[i];
}
puts(s2);
return 0;
}
输出如下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
请使用字符数组的方式完成本题。
#include <stdio.h>
#include <stdlib.h>
#define r 15
#define c 15
int main()
{
char chars[r][c]={ "* * * * *",
" * * * * *",
" * * * * *",
" * * * * *",
" * * * * *"};
for(int i=0;i<r;i++)
{
printf("%s\n",chars[i]);
}
return 0;
}
给出一篇文章,共有3行文字,每行有最多80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char sentence1[81];
char sentence2[81];
char sentence3[81];
int x1=0,y1=0,z1=0,n1=0,t1=0;
int x2=0,y2=0,z2=0,n2=0,t2=0;
int x3=0,y3=0,z3=0,n3=0,t3=0;
gets(sentence1);
gets(sentence2);
gets(sentence3);
int L1=strlen(sentence1);
int L2=strlen(sentence2);
int L3=strlen(sentence3);
for(int i=0;i<L1;i++)
{
if(sentence1[i]>='A'&&sentence1[i]<='Z')
{
x1=x1+1;
}
else if(sentence1[i]>='a'&&sentence1[i]<='z')
{
y1=y1+1;
}
else if(sentence1[i]>='0'&&sentence1[i]<='9')
{
z1=z1+1;
}
else if(sentence1[i]==' ')
{
n1=n1+1;
}
else t1=t1+1;
}
for(int i=0;i<L2;i++)
{
if(sentence2[i]>='A'&&sentence2[i]<='Z')
{
x2=x2+1;
}
else if(sentence2[i]>='a'&&sentence2[i]<='z')
{
y2=y2+1;
}
else if(sentence2[i]>='0'&&sentence2[i]<='9')
{
z2=z2+1;
}
else if(sentence2[i]==' ')
{
n2=n2+1;
}
else t2=t2+1;
}
for(int i=0;i<L3;i++)
{
if(sentence3[i]>='A'&&sentence3[i]<='Z')
{
x3=x3+1;
}
else if(sentence3[i]>='a'&&sentence3[i]<='z')
{
y3=y3+1;
}
else if(sentence3[i]>='0'&&sentence3[i]<='9')
{
z3=z3+1;
}
else if(sentence3[i]==' ')
{
n3=n3+1;
}
else t3=t3+1;
}
printf("%d %d %d %d %d",x1+x2+x3,y1+y2+y3,z1+z2+z3,n1+n2+n3,t1+t2+t3);
return 0;
}
给定15个按从大到小已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。
#include <stdio.h>
#include <stdlib.h>
#define N 15
int main()
{
int ints[N];
int n;
for(int i=0;i<15;i++)
{
scanf("%d",&ints[i]);
}
/* for(int i=0;i<15;i++)
{
printf("%d ",ints[i]);
}
printf("\n");
*/
scanf("%d",&n);
if(ints[0]>ints[14])
{
if(n>ints[7])
{
if(n>ints[3])
{
if(n==ints[0])
{
printf("0");
}
else if(n==ints[1])
{
printf("1");
}
else if(n==ints[2])
{
printf("2");
}
else
{
printf("NO");
}
}
else if(n==ints[3])
{
printf("3");
}
else if(n<ints[3])
{
if(n==ints[4])
{
printf("4");
}
else if(n==ints[5])
{
printf("5");
}
else if(n==ints[6])
{
printf("6");
}
else
{
printf("NO");
}
}
else
{
printf("NO");
}
}
else if(n<ints[7])
{
if(n>ints[11])
{
if(n==ints[8])
{
printf("8");
}
else if(n==ints[9])
{
printf("9");
}
else if(n==ints[10])
{
printf("10");
}
else
{
printf("NO");
}
}
else if(n<ints[11])
{
if(n==ints[12])
{
printf("12");
}
else if(n==ints[13])
{
printf("13");
}
else if(n==ints[14])
{
printf("14");
}
else
{
printf("NO");
}
}
}
}
else if(ints[0]<ints[14])
{
if(n<ints[7])
{
if(n<ints[3])
{
if(n==ints[0])
{
printf("0");
}
else if(n==ints[1])
{
printf("1");
}
else if(n==ints[2])
{
printf("2");
}
else
{
printf("NO");
}
}
else if(n==ints[3])
{
printf("3");
}
else if(n>ints[3])
{
if(n==ints[4])
{
printf("4");
}
else if(n==ints[5])
{
printf("5");
}
else if(n==ints[6])
{
printf("6");
}
}
else
{
printf("NO");
}
}
else if(n>ints[7])
{
if(n<ints[11])
{
if(n==ints[8])
{
printf("8");
}
else if(n==ints[9])
{
printf("9");
}
else if(n==ints[10])
{
printf("10");
}
else
{
printf("NO");
}
}
else if(n==ints[11])
{
printf("11");
}
else if(n>ints[11])
{
if(n==ints[12])
{
printf("12");
}
else if(n==ints[13])
{
printf("13");
}
else if(n==ints[14])
{
printf("14");
}
else
{
printf("NO");
}
}
else
{
printf("NO");
}
}
}
printf("\n");
return 0;
}
找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。
#include<stdio.h>
void main()
{
int i,j,k,m,n,a[50][50],max,maxj;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
max=a[i][0];
maxj=0;
for(j=1;j<n;j++)
if(max<a[i][j])
{
max=a[i][j];
maxj=j;
}
for(k=0;k<m;k++)
if(max>a[k][maxj])
break;
if(k>=m)
printf("%d %d %d ",max,i,maxj);
}
}
输出杨辉三角形的前n行。
#include<stdio.h>
#define N 50
int main(void)
{
int n;
scanf("%d", &n);
int ints[N][N] = { 0 };
for (int i = 0; i < n; i++)
{
ints[i][0] = ints[i][i] = 1;
}
for (int i=2; i < n; i++)
{
for (int j = 1; j < n-1; j++)
{
ints[i][j] = ints[i - 1][j] + ints[i - 1][j - 1];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if(ints[i][j]!=0) printf("%d ", ints[i][j]);
}
printf("\n");
}
}
将一个数组中的值按照原始顺序的逆序重新存放,并输出逆序后的数组。
#include<stdio.h>
void main()
{
int i,a[50],n,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<=(n-1)/2;i++)
{
t=a[n-1-i];
a[n-1-i]=a[i];
a[i]=t;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
给定一个从小到大有序的整数序列,将其保存至数组。另外输入一个整数,将其插入至这个数组中并保持数组有序。
#include<stdio.h>
void main()
{
int i,a[50],n,m;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(i=n-1;i>=0;i--)
{
if(m>a[i])
{
a[i+1]=m;
break;
}
else
a[i+1]=a[i];
}
if(i<0)
a[0]=m;
for(i=0;i<n+1;i++)
printf("%d ",a[i]);
}