C语言复习day3(题目练习)

1.统计从键盘输入一行字符的个数,当输入换行符时退出程序。

#include<stdio.h>
void main()
{
    int n=0;
	char c;
	printf("input a string:\n");
	while((c=getchar())!='\n') //只要遇到换行符就结束计数
	{
		n++;
	/*	if(c==' ')
		n--;         加上这一句就不算空格数了 */    
	}
	printf("%d\n",n);
}
2.求1!+2!+3!......+10!的和。

#include<stdio.h>
void main()
{
    int t=1,n=1,s=0;
	while(n<=5)
	{   
	   t=t*n;
	   s=s+t;
	   n++;
	}
	printf("%d\n",s);
}
3.随机输入若干整数,求输入数值中偶数之和。输入-1时程序结束。

#include<stdio.h>
void main()
{
    int sum=0,n;
	while(1)
	{
		printf("input number:\n");
		scanf("%d",&n);
		if(n==-1)               //跳出整个循环 结束程序
			break;
		if(n%2!=0)
			continue;   // 是奇数就跳出本次循环 不计数
		sum=sum+n;
	}
	printf("the result is:%d\n",sum);
}
4.用字符‘*’打印钻石图案。

#include<stdio.h>
void main()
{
    int i,j;
	for(i=1;i<5;i++)
	{  for(j=0;j<4-i;j++)                         //把第一个for循环结束后 进行第二个for 并没有嵌套 所以第二个可以用j来循环。
		printf(" ");
	   for(j=0;j<2*i-1;j++)
          printf("*");
	   printf("\n");
	}
	for(i=1;i<4;i++)
	{
         for(j=0;j<i;j++)
	{
	   printf(" ");
        }
        for(j=0;j<7-2*i;j++)
         <span style="font-family: Arial, Helvetica, sans-serif;">{</span>
<span style="font-family: Arial, Helvetica, sans-serif;">                          printf("*");</span>
         }
           printf("\n");
	}
}
5.从键盘上输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>
void main()
{
    int m,n,t,p,r;
	printf("intput two numbers:");
	scanf("%d %d",&m,&n);
	if(m>n)
	{
         t=m;
	 m=n;
	 n=t;
	}
	p=m*n;
	while(m!=0)
	{
	 r=n%m;
	 n=m;
	 m=r;
	}
	printf("最小公倍数是:%d\n",p/n);
	printf("最大公约数是:%d\n",n);
}
6.已知数组中的值在0~9之间,统计0~9各数字出现的个数。
for(i=0;i<10;i++)
{
     b[i]=0;
}
for(i=0;i<20;i++)
{
     b[a[i]]++;
}
for(i=0;i<10;i++)
 printf("%d",b[i]);
7.冒泡排序:

for(i=0;i<n-1;i++)
   for(j=0;j<n-1-i;j++)
{   if(a[j]>a[j+1])
    {t=a[j];
    a[j]=a[j+1];
    a[j+1]=t;}
}
8.定义一个含有15个元素的数组,并编写函数分别完成以下操作:1.调用C函数库中的随机函数,给所有元素赋以0~50之间的随机数2.输出数组元素中的值3,按顺序对每隔3个数求一个和数,并传回主函数4.最后输出求出的所有和值。

#include<stdio.h>
#include<stdlib.h>
#define SIZE 15
#define N 3
void main()
{
    int x[SIZE],w[SIZE/N];
	int i,j,sum=0;
	for(i=0;i<SIZE;i++)
	{
		x[i]=rand()%51;
	}
	for(i=0,j=0;i<SIZE;i++)
	{
		printf("%d ",x[i]);
		sum=sum+x[i];
		if((i+1)%3==0)
		{w[j]=sum;            //if后面的三个语句一定要用{}括起来,否则会出错!
		  sum=0;
		  j++;}
	}
	printf("\n");
	for(j=0;j<SIZE/N;j++)
		printf("和值为:%d ",w[j]);
}
9.有一已按递减顺序排列的数组a,其中的数据为19,17,15,13,11,9,7,5,3,1。将从键盘输入的数k插入到该数组中,使插入后的数组仍然有序。

#include<stdio.h>
void main()
{
	int a[11]={19,17,15,13,11,9,7,5,3,1};  //这是10个数
	int i,k;
	printf("input a number:");
	scanf("%d",&k);
    for(i=9;i>0;i--)         //此处应为9  比到第一个仍为>时 就把它放在第一个
	{
		if(k>=a[i])
		{
			a[i+1]=a[i];
			if(i==0)
			{ a[0]=k;
			}
		}
		else
		{
			a[i+1]=k;
			break;               //此处要注意有break!
		}
	}
	for(i=0;i<11;i++)
	  printf("%d ",a[i]);
}
10.数组中相同的元素只保留一个。

for(i=0;i<n-1;i++)
{
  j=i+1;
  while(j<n)
 {
   if(a[i]==a[j])
    { n--;
      for(k=j;k<n;k++)
         a[k]=a[k+1];
     }
    else 
     j++;
 }
}

11.编写函数sum(int n),用以求f(x)(从0加到n) 的和作为函数值返回,其中,f(x)=x*x+1.

#include<stdio.h>
int sum(int n);
int f(int x);
void main()
{
   int a,b;
   printf("input a number:");
   scanf("%d",&a);
   b=sum(a);
   printf("a=%d,sum=%d",a,b);
}
int sum(int n)
{
	int x,s=0;
	for(x=0;x<n;x++)
	{
		s=s+f(x);
	}
	return s;
}
int f( int x)
{
	return x*x+1;
}
12.*p++ 等价于 *(p++) 先得到p的指向变量的值*p 然后使p加1.    *(++p) 先使p加1 再取值

13.

char *string="it's a string";
printf("%s",string);
printf("%s",string+5);
14.

void copy(char *from,char *to)
{ while(*from!='\0')
   *to++=*from++;
   *to='\0';
}

15.编写程序,统计字符串中数字字符的个数。

#include<stdio.h>
void main()
{
	char str[30];
	char *p;
	int n=0;
	printf("input string str:");
	gets(str);
	p=str;
	while(*p!='\0')
	{
        if(*p>='0'&&*p<='9')     //if后面如果没有大括号,只执行离它最近的那个语句。
		n++;
	  p++;
	}
    printf("the num is:%d\n",n);
}

16.编写程序,判断字符串是否是回文。

#include<stdio.h>
#include<string.h>
int huiwen(char *p,int n);
void main()
{
   char str[30];
   int flag,n;
   printf("input a string:");
   gets(str);
   n=strlen(str);
   flag=huiwen(str,n);
   if(flag)
	   printf("YES\n");
   else
	   printf("NO\n");
}
int huiwen(char *p,int n)
{
	int i=0;
	while(i<n/2)
	{
     if(*(p+i)==*(p+n-1-i))
	    i++;
	 else 
	   break;
	}
	 if(i==n/2)
		 return 1;
	 else 
		 return 0;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值