C语言经典编程案例

C语言经典编程:
1.打印输出hello world
#include<stdio.h>
int main(){
    printf("hello world");
    return 0;
}

2.一个整数加上100是一个完全平方数,加上168又是一个完全平方数,输出该数
#include<stdio.h>
int main(){
    int x;
    int n,m;
    int i,j;
    for(i=1;i<168/2+1;i++){
        if(168%i==0){
            j=168/i;
            if(i>j&&(i+j)%2==0&&(i-j)%2==0)
            {
                m=(i+j)/2;
                n=(i-j)/2;
                x=m*n-100;
                printf("%d+100=%d*%d\n",x,n,n);
                printf("%d+168=%d*%d\n",x,m,m);
            }
        }
    }
    return 0;
}
3.判断输入日期是一年中的第几天
#include<stdio.h>
int main(){
    int year,month,day,sum;
    scanf("%d %d %d",&year,&month,&day);
    switch(month)
    {
        case 1:sum=0;break;
        case 2:sum=31;break;
        case 3:sum=59;break;
        case 4:sum=90;break;
        case 5:sum=120;break;
        case 6:sum=151;break;
        case 7:sum=181;break;
        case 8:sum=212;break;
        case 9:sum=243;break;
        case 10:sum=273;break;
        case 11:sum=304;break;
        case 12:sum=334;break;
        default:printf("data error");break;
    }
    sum=sum+day;
    if(year%400==0||(year%4==0&&year%100!=0)){
        if(month>2){
            sum++;
        }
    }
    printf("这是这一年的第%d天。",sum);
    printf("\n");
    return 0;
}
4.三个数由大到小排序输出
#include<stdio.h>
int main(){
    int x,y,z,t;
    scanf("%d %d %d",&x,&y,&z);
    if(x>y){
        t=x;
        x=y;;
        y=x;
    }
    if(x>z){
        t=x;
        x=z;
        z=x;
    }
    if(y>z){
        t=y;
        y=z;
        z=t;
    }
    printf("从小到大排序:%d %d %d\n",x,y,z);
    return 0;
}
5.打印输出图不能用形(C语言字符乘法运算)
#include<stdio.h>
int main(){
    int i,j;
    for(j=1;j<=5;j++){
        for(i=1;i<=j;i++){
            printf("*");
    }
    printf("\n");
    }

    return 0;
}
6.打印101-200之间的素数
#include<stdio.h>
#include<math.h>
int main(){
    int i,j;
    int count=0;
    for(i=101;i<=200;i++){
        for(j=2;j<i;j++){
            if(i%j==0)  break;
        }
        if(j>=i){
            count++;
            printf("%d  ",i);
            if(count%5==0)
            printf("\n");
        }
    }
    return 0;
}
7.打印水仙花数
#include<stdio.h>
#include<math.h>
int main(){
    int i,j,k;
    int x;
    for(x=100;x<=999;x++){
        i=x/100%10;
        j=x/10%10;
        k=x%10;
        if(i*i*i+j*j*j+k*k*k==x)
        printf("%d  ",x);
    }
    return 0;
}
8.将一个正整数分解质因数
#include<stdio.h>
int main(){
    int i,n;
    printf("请输入一个整数:");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++){
        while(n%i==0){
            printf("%d",i);
            n/=i;
            if(n!=1) printf("*");
        }
    }
    printf("\n");
    return 0;
}
9.成绩输出:将数字成绩转换为等级成绩
方法一:
#include<stdio.h>
int main(){
    int score;
    scanf("%d",&score);
    if(score>=90)
    printf("A");
    else if(score>=60)
    printf("B");
    else
    printf("C");
    return 0;
}
方法二(使用条件运算符(a>b)?a:b):
#include<stdio.h>
int main()
{
    int score;
    char grade;
    printf("请输入分数: ");
    scanf("%d",&score);
    grade=(score>=90)?'A':((score>=60)?'B':'C');
    printf("%c\n",grade);
    return 0;
}
10.求两个数的最大公约数和最小公倍数(辗转相除法)
#include<stdio.h>
int main(){
    int m,n,t,x,y;
    printf("请输入两个整数(空格隔开):");
    scanf("%d %d",&m,&n);
    if(m<n){
        t=m;
        m=n;
        n=t;
    }
    x=m%n;
    y=m*n;
    while(x!=0){
        m=n;
        n=x;
        x=m%n;
    }
    printf("这两个数的最大公约数是%d,最小公倍数是%d\n",m,y/m );
    return 0;
}
11.统计输入字符中各种字符的个数
#include<stdio.h>
int main(){
    //a,b,c分别统计字符串中英文字母、空格、数字和其他字符的个数 
    int a,b,c,d;
    char x;
    a=0;
    b=0;
    c=0;
    d=0;
    printf("请输入一行字符:\n");
    while((x=getchar())!='\n'){
        if((x>='a'&&x<='z')||(x>='A'&&x<='Z'))
            a++;
        else if(x>='0'&&x<='9')
            b++;
        // C语言中双引号表示字符串,这里只能是单引号 
        else if(x==' ')
            c++;
        else
            d++;
    }
    printf("字母个数=%d,数字=%d,空格=%d,其他=%d",a,b,c,d);
    return 0;
}
12.计算s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
#include<stdio.h>
int main()
{
    int s=0,a,n,i,t;
    printf("请输入a和n:");
    scanf("%d%d",&a,&n);
    t=a;
    for(i=n;i>0;i--){
        s+=t;
        a=a*10;
        t+=a;
    }
    printf("a+aa+...=%d\n",s);
    return 0;
}
13.打印1000以内的缩影完数(一个数恰好等于它的因子之和)
#include<stdio.h>
#define N 1000
int main()
{
    int i,j,k,n,sum;
    int a[256];
    for(i=2;i<=N;i++)
    {
        sum=a[0]=1;
        k=0;
        for(j=2;j<=(i/2);j++)
        {
            if(i%j==0)
            {
                sum+=j;
                a[++k]=j;
            }
            
        }
        if(i==sum)
        {
            printf("%d=%d",i,a[0]);
            for(n=1;n<=k;n++)
                printf("+%d",a[n]);
            printf("\n");
        }
        
    }
    return 0;
14.小球从100米高度下落,每次反弹回原高度的一半;再落下。计算第n次落地时,共经过了多少米及反弹高度
#include<stdio.h>
int main()
{
    float s,h,i;
    int n;
    s=h=100;
    h=h/2;
    printf("请输入次数:\n");
    scanf("%d",&n);
    for(i=2;i<=n;i++){
        s=s+2*h;
        h=h/2;
    }
    printf("第%d次落地时,共经过%f米,第%d次反弹高%f米\n",n,s,n,h);
    return 0;
}
15.猴子吃桃问题
#include<stdio.h>
int main()
{
    int day,x1=0,x2;
    day=9;
    x2=1;
    while(day>0){
        x1=(x2+1)*2;
        x2=x1;
        day--;
    }
    printf("总数为%d\n",x1);
    return 0;
}
16.求1+2!+3!+...+20!的和。
#include<stdio.h>
int main()
{
    long double s,a;
    s=0;
    a=1;
    int i;
    for(i=1;i<=20;i++){
        a*=i;
        s+=a;
    }
    printf("%Lf\n",s);
    return 0;
}
17.递归输出至5!
#include<stdio.h>
int main(){
    int i;
    int fact(int);
    for(i=0;i<6;i++){
        printf("%d!=%d\n",i,fact(i));
    }
    return 0;
}
int fact(int j){
    int s;
    if(j==0){
        s=1;
    }
    else{
        s=j*fact(j-1);
    }
    return s;
}
18.利用递归调用方式将输入的5个字符反序打印输出
#include<stdio.h>
int main(){
    int i=5;
    printf("请输入5个字符:\n");
    //注意输入不能有空格
    fun(i);
    printf("\n");
    return 0;
}
void fun(int j){
    char n;
    if(j<=1){
        n=getchar();
        printf("反序输出结果为:");
        putchar(n);
    }
    else{
        n=getchar();
        fun(j-1);
        putchar(n);
    }
}
19.递归求age
#include<stdio.h>
int main(){
    int n;
    printf("请输入一个整数:\n");
    scanf("%d",&n);
    printf("%d\n",age(n));
    return 0;
}
int age(int n){
    int a;
    if(n==1) a=10;
    else{
        a=age(n-1)+2;
    }
    return (a);
}
20.给一个不多于5位的正整数,求它是几位数并逆序打印出各位数字
#include<stdio.h>
int main(){
    long a,b,c,d,e,x;
    printf("请输入一个5位数:\n");
    scanf("%ld",&x);
    a=x/10000;/*分解出万位*/
    b=x%10000/1000;/*分解出千位*/
    c=x%1000/100;/*分解出百位*/
    d=x%100/10;/*分解出十位*/
    e=x%10;/*分解出个位*/
    if(a!=0) printf("5位数,逆序为:%ld %ld %ld %ld %ld\n",e,d,c,b,a);
    else if(b!=0) printf("4位数,逆序为:%ld %ld %ld %ld\n",e,d,c,b);
    else if(c!=0) printf("3位数,逆序为:%ld %ld %ld\n",e,d,c);
    else if(d!=0) printf("2位数,逆序为:%ld %ld %ld %ld\n",e,d);
    else if(e!=0) printf("1位数,逆序为:%ld %ld %ld %ld\n",e);
    return 0;
}

21.判断一个5位数是否为回文数
#include<stdio.h>
int main(){
    long n;
    printf("请输入一个5位数:\n");
    scanf("%ld",&n);
    int a,b,c,d,e;
    a=n/10000;
    b=n%10000/1000;
    d=n%100/10;
    e=n%10;
    if(a==e&&b==d) printf("这是回文数\n");
    else  printf("这不是回文数\n");
    return 0;
}
22.输入星期的第一个字母判断是星期几
#include<stdio.h>
int main()
{
    char i,j;
    printf("请输入第一个字母:\n");
    scanf("%c",&i);
    getchar();
    //scanf("%c",&j);的问题,第二次是读入的一个换行符,
    //而不是输入的字符,因此需要加一个getchar() 吃掉换行符
    switch(i)
    {
        case 'm':
        case 'M':
            printf("Monday\n");
            break;
        case 'w':
        case 'W':
            printf("Wednesday\n");
            break;
        case 'f':
        case 'F':
            printf("Friday\n");
            break;
        case 't':
        case 'T':
            printf("请输入下一个字母\n");
            scanf("%c",&j);
            if (j=='u') {printf("Tuesday\n");break;}
            if (j=='h') {printf("Thursday\n");break;}
        case 's':
        case 'S':
            printf("请输入下一个字母\n");
            scanf("%c",&j);
            if (j=='a') {printf("Saturday\n");break;}
            if (j=='u') {printf("Sunday\n"); break;}
        default :
            printf("error\n"); break;
    }
    return 0;
}

23.打印输出英文26个大小写字母

#include<stdio.h> 
int main(){
    int i;
    for(i=0;i<26;i++)
        putchar('A'+i);
    putchar('\n');
    int j;
    j=0;
    while(j<26){
        putchar('a'+j);
        j++;
    }
    return 0;
}

24.计算输入的5个数的平均值

#include<stdio.h>
int main(){
    int i,n[5],sum;
    i=0;
    sum=0;
    printf("please enter 5 integers:\n");
    while(i<5){
        scanf("%d",&n[i]);
        sum+=n[i];
        i++;
    }
    for(i=0;i<5;i++){
        printf("%5d",n[i]);
    }
    putchar('\n');
    printf("%d\n",sum/5);
    return 0;
}

 25.计算字符串中数字的个数

#include<stdio.h>
int main(){
    int num;
    char ch;
    //int ch;
    //这里也可以写成int类型,因为对应的是其ASCII码 
    do{
        ch=getchar();
        if(ch>='0'&&ch<='9')
            num++;
    }while(ch!='\n');
    printf("%d",num);
    return 0;
}

26.从键盘输入一行英文句子,将每个单词的首字符改成大写字母输出

#include<stdio.h>
int main()

    int i = 0, flag = 1;
    char a[100];
    gets(a);
    for(i = 0; a[i] != '\0'; i++)
    {
        if(a[i] == ' ')
        {
            flag = 1;
        }
        if((flag == 1)&&(a[i]>='a'&&a[i]<='z'))
        //a的ASCII码是97,z的ASCII码是122,也可以写成a[i]>=97&&a[i]<=122 
        {
            //大小写字母的ASCII相差32 
            a[i]=a[i]-32;        
            flag = 0;
        }
    }    
    puts(a);    
    return 0;
}

27.从键盘分别输入两个分数的分子分母及操作(+-*/),运算后输出运算结果的分子和分母
#include<stdio.h>
int m=0,n=0;    //定义全局变量m,n分别存放分子分母 
void cal(int a,int b,int c,int d,char ch){
    if(b==0||d==0)    printf("error!\n");
    else{
        switch(ch){
        case '+':m=a*d+b*c;n=b*d;break;
        case '-':m=a*d-b*c;n=b*d;break;
        case '*':m=a*c;n=b*d;break;
        case '/':m=a*d;n=b*c;break;
        default:printf("error!\n");
        }
    }
}
void fun(){
    int i;
    for(i=2;i<=m&&i<=n;i++){
        while(m%i==0&&n%i==0){
            m=m/i;
            n=n/i;
        }
    }
    
}
int main(){
    int a,b,c,d;
    char op;
    printf("please enter 4 integer and an op:\n");
    scanf("%d %d %c %d %d",&a,&b,&op,&c,&d);
    cal(a,b,c,d,op);
    fun();
    printf("%d/%d+%d/%d=%d/%d\n",a,b,c,d,m,n);
    return 0;
}

定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
1) 在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。main 函数也是一个函数,与其它函数地位平等。
2) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
3) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
4) 在语句块中也可定义变量,它的作用域只限于当前语句块。
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。

对于不同作用域的变量,可以使用相同的名称;对于相同作用域的变量,不可以使用相同的名称。如果全局变量和局部变量使用了相同名称,则全局变量在该局部变量的作用域中无效,也就是无法被访问。

#include <stdio.h>
int n1,n2;//定义全局变量n1、n2分别存放分子和分母 
int main()
{
	void cal(int a,int b,int c,int d,int ch);//cal函数计算出分数运算后的结果,未约分 
	void fun();//用来对n1和n2进行约分 
	int a,b,c,d;
	char ch;
	printf("请输入表达式:");
	scanf("%ld/%ld%c%ld/%ld",&a,&b,&ch,&c,&d);
	cal(a,b,c,d,ch);//计算出还未约分的分子分母 
	fun();// 计算出约分后的分子分母 
	printf("%ld/%ld%c%ld/%ld=%ld/%ld\n",a,b,ch,c,d,n1,n2);
	return 0;                                                              
}
void cal(int a,int b,int c,int d,int ch)
{
	switch(ch)
	{
		case'+':n1=a*d+b*c;n2=b*d;break;
		case'-':n1=a*d-b*c;n2=b*d;break;
		case'*':n1=a*c;n2=b*d;break;
		case'/':n1=a*d;n2=b*c;break;
		default:printf("Error!\n");
	}
}
void fun()
{
	for(int i=2;i<=n1 && i<=n2;i++)
		 while(n1%i==0 && n2%i==0)
		 {
		 	n1=n1/i;
		 	n2=n2/i;
		 }
}

28.去除输入行中多余的空格

//去掉输入行中多余的空格,并将结果打印输出 
#include<stdio.h>
#include<string.h>
main(){
    char str1[80],str2[80];
    int i,j;
    printf("\nEnter a text line:\n");
    gets(str1);
    str2[0]=str1[0];
    for(i=1,j=1;str1[i]!='\0';i++){
        if(str1[i]==' '&&str1[i-1]==' ')
            continue;
        str2[j++]=str1[i];
    }
    str2[j]='\0';
    puts(str2);
    return 0;
}

29.逆序打印输出
#include<stdio.h> 
#define NUM 20
int main(){
    int s[NUM];
    int i,temp;
    printf("\nEnter %d integers:\n",NUM);
    for(i=0;i<NUM;i++){
        scanf("%d",&s[i]);
    }
    for(i=0;i<NUM;i++){
        printf("%4d",s[i]);
    }
    for(i=0;i<NUM/2;i++){
        temp=s[i];
        s[i]=s[NUM-i-1];
        s[NUM-i-1]=temp;
    }
    printf("\n");
    for(i=0;i<NUM;i++){
        printf("%4d",s[i]);
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值