Press "Enter" to skip to content

Tag: c语言

C语言概述

程序(program)由一个或多个函数组成,其中必须有一个名为main()的函数。函数的描述由函数头和函数体组成。函数头(header)包括预处理语句和函数名。可通过圆括号识别一个函数名,圆括号内部可以为空。而函数体(body)位于花括号中并有一系列语句组成,每个语句以一个分号结束。


/*一个简单的C程序*/
#include<stdio.h>
/*
 * 预处理器命令,头文件(header)。
 * 头文件包括了建立最终的可执行程序市编译器需要的信息。
 * 但函数实际代码被包含在库文件中,而不是头文件。
 * 编译器的链接部分负责找到您需要的库代码。
*/

int main(void)
/*
 * 调用main函数,并不接受参数,int表示main()函数返回一个整数。
 * main()是必须开始的函数,是C的基本模块。
 * int指明了函数的返回类型。
 * C90允许使用main(),但C99不允许。建议使用main(void).
 */
 {
//花括号划定了main()函数的界限。
    int num;
    /* 定义一个名为num的变量。这一行叫做声明语句。
     * 说明函数中有一个叫做num的参数,该参数为整数类型。
     * int是C语言的关键字。
     * 在C语言中,所有变量都必须在使用之前定义。
     * 变量命名可供使用的字符有大小写字母、数字和下划线。
     * 第一个字符必须是字母或者下划线。
     * C语言区分大小写。*/
    num = 1;        /*为num赋值,赋值是C的基本操作之一*/

    printf("I am a simple ");   /*调用printf()函数*/
    printf("computer.\n");      /*再次调用printf()函数*/
    printf("My favorite number is %d because it is first.\n",num);
    /* 把num的值给printf()附参,并打印输出,%d表示输出值的位置和形式。
     * printf()是C语言的一个标准函数。圆括号表明printf是一个函数名。
     * 圆括号中的内容是从main函数传递到printf函数的信息,它被成为参数。*/
    return 0;   /*返回语句*/
    /* 返回语句是程序的最后一个语句。int main(void)要求返回一个整数值,
     * 则由return函数返回一个整数值0表示程序的结束。
}   /*结束*/

让程序具有可读性是一个良好的编程习惯。
常用的技巧有:
+ 选择有意义的变量名和使用注释;
+ 使用空行来分隔一个函数概念上多个部分;
+ 每个语句用一行;
+ 程序在开始处用一个注释说明文件的名称和程序的目的;
+ 多个声明


// two_func.c 在一个文件中使用两个函数
#include<stdio.h>
void butler (void);
/* 通知编译器要用到该函数.原型是一种声明的形式,用于告诉编译器使用自定义的函数。
 * butler函数第一个void说明butler()不返回值。
 * 第二个void说明没有参数。
 * void表明是空的,而非无效的。 */
int main(void){
        printf("I will summon the butler function.\n");
        butler();   /*调用函数*/
        printf("Yes. Bring me some tea and writeable CD-ROMS.\n");
        return 0;       
}

void butler(void){  /*函数定义*/
    printf("You rang, sir?\n"); //注意不需要return()函数返回值
}

一门语言的语法就是一套规则,用于管理这种语言中的合法语句组织在一起的方式。语句的语义就是它所表达的意思。编译器可以帮助您发现语法上的错误,但是程序里的语义错误只有在编译完之后才能从程序的行为中表现出来。检测语义错误可能包括跟踪程序的状态,即程序每执行一步之后所有变量的值。

关键字是C语言的词汇。

通过手工方式一步一步的跟踪程序,并记录每个变量,这样就可以监视程序状态。程序状态(program state)是指程序执行过程中的给定点上所有变量值的集合。它是当前计算状态的一个快照。
跟踪程序状态的方法有:
1. 逐步执行程序;
2. 在程序的关键点处加入printf()语句以监视所选变量的值。通过观察变量值的变化来了解程序的执行情况;
3. 使用调试器。调试器是一种程序,它可以一步一步运行另一个程序并检查程序的变量值。


完数

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。
提示:可以写一个函数来判断某个数是否是完数。


输入格式:

两个正整数,以空格分隔。

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。


输入样例:1 10
输出样例:6


#include<stdio.h>
#include<stdlib.h>

int main(){
    //输入整数变量 
    int n,m;
    do{
        scanf("%d",&n); 
        scanf("%d",&m);     
    }while(0>n&&n>=m&&m>999);
    //命名参数 
    int x,i;
    int sum;
    int count = 0;

    for(x=n;x<=m;x++){  
        sum =0;
        //判断是否是完数 
        for(i=1;i<x;i++){
            if(x%i == 0){
                sum += i;
                }
            }
            //是完数的话,计数器+1并输出 
            if(sum == x){
                count ++;
                if(count>1){
                    printf(" %d",x);
                }else{
                    printf("%d",x);
                }           
            }else{
                printf("");
            }
    }
    system("pause");
    return 0;
} 

分解质因数

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

输入格式:一个整数,范围在[2,100000]内。
输出格式:形如:n=axbxcxd或n=n。所有的符号之间都没有空格,x是小写字母x。
输入样例:18
输出样例:18=2x3x3

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int n,i; 
    scanf("%d",&n);
    printf("%d=",n);

    for(i=2; i<=n; i++){
        while(n!=i){
            if(n%i==0){
                printf("%dx",i);
                n=n/i;
            }else{
                break;
        }
        }
    }
    printf("%d\n",n);
    return 0;
}

用汉语拼音输出整数

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
如输入1234,则输出: yi er san si
注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为: fu er san si yi

输入格式:一个整数,范围是[-100000,100000]。
输出格式:表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。
输入样例:-30
输出样例:fu san ling
时间限制:500ms内存限制:32000kb

#include <stdio.h>
int main(){
    int x,t;
    scanf("%d",&x);
    int mask = 1;
//判断输入数是否为负数,如果为负数,则输出负号,然后把负数转化为正整数。
    if(x<0){
        printf("fu ");
        x = -x;
    }
//判断输入的正整数有多少位,然后输出后面与x相余的对应位数
    t = x;  
    while( t > 9){
        t /= 10;
        mask *= 10;
    }
//不断的相于,然后输出到switch()
    do {
        int d = x / mask;
//      printf("%d",d);
        switch(d){
            case 0:
                printf("ling");
                break;
            case 1:
                printf("yi");
                break;
            case 2:
                printf("er");
                break;
            case 3:
                printf("san");
                break;
            case 4:
                printf("si");
            case 5:
                printf("wu");
                break;
            case 6:
                printf("liu");
                break;
            case 7:
                printf("qi");
                break;
            case 8:
                printf("ba");
                break;
            case 9:
                printf("jiu");
                break;
            }
        if( mask > 9){
            printf(" ");
            }
            x %= mask;
            mask /= 10 ;
        } while(mask >0);
    return 0;
}