1.
【问题描述】
输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)
【要求】
【数据输入】一个整数N。(N不大于30000)
【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
解答:
#include <stdio.h>
void main(){
int n,a,b,c,d,s,g,z;
printf("请输入正整数z,7<=z<=30000\n");
scanf_s("%d",&z);
for(n=1;n<=z;n++)
{
a=n%7;
b=n%10;
c=(n-b)%10;
d=(n-b-10*c)%100;
s=(n-b-10*c-100*d)%1000;
g=(n-b-10*c-100*d-1000*s)%1000;
if(a==0 || b==7 || c==7 ||d==7 || s==7 || g==7)
{
printf("%d \n",n);
}
}
getch();
}
运行结果:
2.
【问题描述】
数组排序:自主输入数组,找出第k大的数据,互换到位置k。
【样例输入】:1,54,6,23
【样例输出】:54,23,6,1
解答:
#include <stdio.h>
#define N 80
void main()
{
int i,j,k,n,tmp,imax,max,a[N];
printf("请输入数组长度\n");
scanf_s("%d",&k);
for(i=0;i<k;i++)
{
printf("请输入数字\n");
scanf_s("%d",&a[i]);
}
printf("原始数组为\n");
for(n=0;n<k;n++)
{
printf("%d",a[n]);
}
printf("\n");
for(i=0;i<k;i++)
{
imax=i;max=a[i];
for(j=i+1;j<=k;j++)
{
if(a[i]<a[j])
{
imax=j;
max=a[j];
}
}
if(imax>i)
{
tmp=a[i];
a[i]=a[imax];
a[imax]=tmp;
}
}
printf("排序完成后\n");
for(n=0;n<k;n++)
{
printf("%d ",a[n]);
}
getch();
}
运行结果:
3.
【问题描述】
对于给定的一个字符串,统计其中数字字符出现的次数。
【数据输入】输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。
【数据输出】对于每个测试实例,输出该串中数值的个数,每个输出占一行。
【样例输入】
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
【样例输出】
6
9
解答:
#include<stdio.h>
main()
{
intn,i,j,a;
chars[1000];
while(scanf("%d",&n)!=EOF)
{
getchar();
for(i=0;i<n;i++)
{
gets(s);
a=0;
for(j=0;s[j]!='\0';j++)
{
if((s[j]<='9')&&(s[j]>='0'))
a=a+1;
}
printf("%d\n",a);
}
}
getch();
}
运行结果:
4.
【问题描述】
多项式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
现在请求出该多项式的前n项的和。
【数据输入】输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。
【数据输出】对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。
【样例输入】
2
1 2
【样例输出】
1.00
0.50
解答:
#include<stdio.h>
#include<math.h>
main()
{
doublem,n,i,s,j,k,a;
while(scanf("%lf",&m)!=EOF)
{
for(i=0;i<m;i++)
{
s=0;
scanf("%lf",&n);
for(j=1;j<=n;j++)
s=s+1/j*pow(-1,j+1);
printf("%.2lf\n",s);
}
}
getch();
}
运行结果:
5.
【问题描述】
给定一个日期,输出这个日期是该年的第几天。
【数据输入】输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input,另外,可以向你确保所有的输入数据是合法的。
【数据输出】对于每组输入数据,输出一行,表示该日期是该年的第几天。
【样例输入】
1985/1/20
2006/3/12
【样例输出】
20
71
解答:
#include<stdio.h>
main()
{
inta,b,c,d,e,f,g;
while(scanf("%d/%d/%d",&a,&b,&c)!=EOF)
{
if(b==1)
d=c;
else if(b==2)
d=31+c;
else if(b==3)
d=31+28+c;
else if(b==4)
d=31+28+31+c;
else if(b==5)
d=31+31+28+30+c;
else if(b==6)
d=31+28+31+30+31+c;
else if(b==7)
d=31+28+31+30+31+30+c;
else if(b==8)
d=31+28+31+30+31+30+31+c;
else if(b==9)
d=31+28+31+30+31+30+31+31+c;
else if(b==10)
d=31+28+31+30+31+30+31+31+30+c;
else if(b==11)
d=31+28+31+30+31+30+31+31+30+31+c;
else if(b==12)
d=31+28+31+30+31+30+31+31+30+31+c+30;
e=a%100;
f=a%400;
g=a%4;
if(e==0)
{
if(f==0)
d=1+d;
else
d=d;
}
else if(g=0)
d=d+1;
else
d=d;
printf("%d\n",d);
}
getch();
}
运行结果:
6.
【问题描述】
定义5乘5的二维数组,所编程序的功能是将数组左下三角中的元素值全部变成0.
【样例输入】:
1 7 4 0 9
4 8 8 2 4
5 5 1 7 1
1 5 2 7 6
1 4 2 3 6
【样例输出】:
0 7 4 0 9
0 0 8 2 4
0 0 0 7 1
0 0 0 0 6
0 0 0 0 0
解答:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main ( )
{
int a[N][N], i, j;
printf("初始值\n");
for ( i=0; i<N; i++ )
{
for ( j=0; j<N; j++ )
{
a[i][j] = rand()%10;
printf( "%4d",a[i][j] );
}
printf("\n");
}
fun ( a );
printf ("转换之后\n");
for ( i=0; i<N; i++ )
{
for ( j=0; j<N; j++ )
printf( "%4d",a[i][j] );
printf("\n");
}
getch();
}
int fun ( int a[][N] )
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<=i;j++)
a[i][j]=0;
}
return 1;
}
运行结果:
7.
【问题描述】
请编写程序,移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<=n-1)的数组平移到数组的最后。
【样例输入】:数组为{1,2,3,4,5,6,7,8,9,10},p=3;
【样例输出】:5,6,7,8,9,10,1,2,3,4.
解答:
#include <stdio.h>
#define N 80
void fun(int *w,int p, int n)
{
int a[N];
int i,j=0;
for(i=0;i<p;i++)
a[i]=w[i];
for(i=p;i<n;i++)
w[i-p]=w[i];
for(i=n-p;i<n;i++)
w[i]=a[j],j++;
}
void main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;
printf("Theoriginal data:\n");
for(i=0;i<n; i++)
printf("%3d",a[i]);
printf("\n\nEnter p: ");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedata after moving:\n");
for(i=0;i<n; i++)
printf("%3d",a[i]);
printf("\n\n");
getch();
}
运行结果:
8.
【问题描述】:由键盘输入字符串s,把字符s中所有的字母改写成该字母的下一个字母,如字母“z”改成“a”,其余不变。
【样例输入】:ME123asd
【样例输出】:NF123bte
解答:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#define N 81
void fun ( char *s )
{
int i;
for(i=0;s[i]!='\0';i++)
{
if((s[i]>'a'-1&&s[i]<'z'+1)||(s[i]>'A'-1&&s[i]<'Z'+1))
{
if(s[i]=='z') s[i]='a';
elseif(s[i]=='Z')s[i]='A';
elses[i]++;
}
}
}
void main( )
{ char a[N];
printf ( "Entera string :\n" );
gets ( a );
printf ( "Theoriginal string is :\n" );
puts( a );
fun ( a );
printf ( "Thestring after modified :\n");
puts ( a );
getch();
运行结果:
9.
【问题描述】:自主输入字符串s,并将其中的内容逆置后前后对比输出。
【样例输入】:asdqwe
【样例输出】:ewqdsa
解答:
#include <stdio.h>
#include <string.h>
#define N 81
void fun ( char *s )
{
chartmp[N];
inti,j,len;
for(len=0;s[len]!='\0';len++);
j=len-1;
for(i=0;i<len;i++)
{
tmp[i]=s[j];
j--;
}
tmp[len]='\0';
strcpy(s,tmp);
}
void main( )
{ char a[N];
printf ( "Enter a string :\n" );
gets ( a );
printf ( "Theoriginal string is :\n" );
puts( a );
fun ( a );
printf("\n");
printf ( "Thestring after modified :\n");
puts ( a );
getch();
}
运行结果:
10.
【问题描述】:
自主输入字符串s,统计其中“a”到“z”26个字母各自出现的次数,并依次放在sd所指数组中并输出。
【样例输入】:qwavxeertyasdzxc
【样例输出】:2 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 1 01 1 0 1 1 1 1 1
解答:
#include <stdio.h>
void fun(char *s,int sd[])
{
int i,tmp;
for(i=0;i<26;i++)
{
sd[i]=0;
}
for(i=0;s[i]!='\0';i++)
{
tmp=s[i]-'a';
if(tmp>=0&& tmp<27)
{
sd[tmp]++;
}
}
}
void main( )
{
char aa[1000];
int bb[26],k,n;
printf("\nPleaseenter a char string:\n") ;
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26;k++)
printf("%d",bb[k]);
printf("\n");
getch();
运行结果:
11.
【问题描述】:输入只包含字母和*号的字符串s,并将字符串中的前导*号全部移到字符串的尾部。
【样例输入】:*****awe**rt
【样例输出】:awe**rt*****
解答:
#include <stdio.h>
void fun( char *a )
{
inti,len,j;
for(len=0;a[len]!='\0';len++);
for(i=0;a[i]=='*';i++);
for(j=i;j<len;j++)
{
a[j-i]=a[j];
}
for(j=len-i;j<len;j++)
{
a[j]='*';
}
}
int main()
{ char s[81],*p;
int n=0;
printf("Entera string:\n");
gets(s);
fun( s );
printf("Thestring after moveing:\n");
puts(s);
getch();
}
运行结果: