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;
}