C语言程序设计知识点及示例(20xx)

C语言程序设计知识点及示例

知识点1C语言程序总含有main函数,程序执行时,总是从main函数开始,在main函数结束。

示例1C语言程序一定包含   函数。

参考答案:main

示例2C语言程序执行时,如下叙述中正确的是   

A)总是从main函数开始,在main函数结束

B)从main函数开始,在程序的最后一个函数中结束

C)从程序的第一个函数开始,在main函数结束

D)从程序的第一个函数开始,在程序的最后一个函数中结束

参考答案:A

知识点2C语言的main函数可以调用所有其他函数,其他函数可以相互调用,但其他函数不能调用main函数,在正常性情况下每个函数都可以被编译。

示例3C语言的函数   调用main函数。

示例4以下关于函数的叙述中正确的是   

A)每个函数都可以被其他函数调用(包括main函数在内)

B)main函数可以调用所有其他函数

C)在一个函数内部可以定义另一个函数

D)前面都是错误的

参考答案:B

知识点3C语言的标识符由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,标识符包括关键字(共32个,例int,if,…),系统预定义的标识符(库函数名,例printf,scanf,…)和用户标识符。

示例5按照C语言规定的用户标识符命名规则,标识符中   包含正负号。

参考答案:不能

示例6按照C语言规定的用户标识符命名规则,下面   是标识符。

A)1x         B)x$       C)_for       D)for

参考答案:C

示例7下列定义变量的语句中错误的是   

A)int _if;            B)int INT;           C)char for%;             D)float _float;

参考答案:C

知识点4在C语言中,整常数可用以下三种形式表示:十进制整数;八进制整数。以0开头的数是八进制数;十六进制整数。以0x开头的数是16进制数。

示例8以下选项中可作为C语言合法常量的是   

A)0xabg             B)-0819                     C)xab8                      D)0xabc

参考答案:D

示例9在C语言中,八进制整常数以   开头。

参考答案:0

示例10在C语言中,十六进制整常数以   开头。

参考答案:0x

知识点5在C语言的实常数的指数表示法中,字母e(或E)之前必须有数字,且e后面的指数必须为整数。

示例11在C语言的实常数的指数表示法中,字母e(或E)之前必须有数字,且e后面的指数必须为   

参考答案:整数

示例12以下选项中   是合法的C语言合法常量。

A)-80          B)-08                  C)-1e6.0                    D)1.68e

参考答案:A

知识点6在C语言中,以l或L结束的常整数为长整型常数。

示例13在C语言中,如果一个整常数以   结束,则此常数为长整型常数。

参考答案:L或l

知识点7在C语言中,定义变量可以为量常初值,但其初值应是常量表达式,不能包含变量。

示例14以下能正确定义且赋初值的语句是   

A)int x=y=16;           B)char ch=98;            

C)int a=a+6;               D)double x=1.68e-8.0

参考答案:B

知识点8在C语言中,任何非零的数值被认作“真”,零值表示“假”。

示例15设有定义:“int m=1,n=6;”,则以下选项中值为1的表达式是   

A)(m==1)&&(!n==0)         B)(m<n)&& m && 0

    C)!m && !n                            D)!m || !n

参考答案:A

示例16表达式“ (E)?(x+1) : (y+1)”中的条件表达式(E)等价的是   

参考答案E!=0或E<0||E>0

知识点9break语句可用于switch语句和循环体中,continue只能用于循环体中,用于结束本次循环。

示例17continue只能用于   中。

参考答案:循环体

示例18下列叙述正确的是   

A)break语句只能用于switch语句

B)continue语句只能用于switch语句

C)break语句必须与switch语句中的case配对

D)break可用于switch语句和循环体中

参考答案:D

知识点10在定义数组时可为其赋初始,并且第一维元素个数可以不写。

示例19下面正确定义一维数组的选项是   

A)int a[2]={1,2,3};            B)char a[]={1,2,3,4,5};

C)char a={'a', 'b', 'c'};          D)int a[3] = "abc";

参考答案:B

示例20下面正确定义二维数组的选项是   

A)int a[2][3]={1,2,3};                      B)char a[][2]={1,2,3,4,5};

C)char a[2][2]={'a', 'b', 'c', 'd', 'e'};             D)int a[2][4] = {"abc", "123"};

参考答案:B

示例21以下二维数组定义中错误的是   

A)int x[][3]={0,1,2,3,4,5,6,7,8};                     B)int x[2][3]={{0,1}, {2,3}, {4,5}};

C)int x[][3]={{1},{2}};                          D)int x[2][2]= {1,2,3,4};

参考答案:B

知识点11函数返回值类型取决于定义函数时的函数首部所说明的函数类型。

示例22函数返回值类型取决于定义函数时的函数首部所说明的   

参考答案:函数类型

示例23在C语言中,函数返回值的类型与   相同。

A)函数原型中的函数类型                      B)return语句中表达式的类型

C)函数的实参类型                                 D)函数的形参类型

参考答案:A

示例24已定义以下函数“int fun (int *p) {return *p;}”,则fun函数返回值是   

参考答案一个整型数

知识点12在调用函数时,不写函数的返回值类型与实参类型。

示例25有以下函数定义“void f (int a){…}”,如果以下选项中的变量都已经正确定义并赋值,则对函数f的正确调用语句是   

A) f (int a);           B)f (1.0);            C)f ("123");        D)void f (a);

参考答案:B

知识点13如果指针变量p指向x,则可用*p间接访问x。

示例26若有定义:“int x=18,*p=&x;”,则*p的值是   

参考答案:18

知识点14指针变量不能被赋值为整型值。只能被赋值为地址值。

示例27设已有定义:“float x;”,则以下对指针变量p进行定义且赋初值的语句中正确的是   

A)float *p = 1024;     B)int *p= (int)x+1;

C)float p=&x;            D)float *p=&x;

参考答案:D

知识点15调用scanf函数时,应写输入项的地址值。

示例28若有定义:“int x=18,*p=&x;”,则通过p输入x的语句是“scanf("%f",    );”。

参考答案:p

如有定义“int a[10], *p=a;”,则p指向a[0],p+i指向a[i],*(p+i)=*(a+i)=a[i]=p[i]。

示例29若有定义“int a[10], *p=a;”,当执行“p++;”后,p指向   

参考答案:a[1]

知识点16结构体变量所占内存长度是各成员占的内存长度之和。共用体变量所占的内存长度等于最长的成员的长度。共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。

示例30若有以下定义:

union

{

         int a;

         char b;

         double c;

} data;

以下叙述中错误的是   

A) data的每个成员起始地址都相同

B)变量data所占的内存字节数与成员c所占字节数相等

C)程序段“data.a=16;printf("%fln ",data.c);”输出结果为16.000000

D) data可作为函数的实参

参考答案:C

示例31若有以下定义:

union

{

         short int a;

         char b;

         double c;

} data;

变量data所占的内存字节数为   

参考答案:8

示例32若有以下定义:

struct

{

         short int a;

         char b;

         double c;

} data;

变量data所占的内存字节数为   

参考答案:11

知识点17用typedef声明新的类型名来代替已有的类型名。一般使用格式为“typedwf 已有类型 新类型;”。

示例33设有以下语句:

typedef struct DateType

{

         int month;

         int day;

         int year;

} DATE;

则下面叙述中正确的是   

A)不能用struct DateType定义结构体变量            

B) DATE是struct类型的变量

C)可以用DATE定义结构体变量                  

D) DATE是struct DateType类型的变量

参考答案:C

示例34声明STRING为字符指针类型 的语句为         

参考答案:typedef char *STRING;

知识点18宏定义和文件包含都属于预处理命令,在源程序的一行上只能写一条预处理命令,对源程序编译之前做一些处理,生成扩展C源程序,都不占用程序运行时间。

示例35宏替换命令   程序的运行时间。

参考答案:不占用

示例36以下叙述中正确的是   

A)在源文件的一行上只能有一条预处理命令

B)宏名必须用小写字母表示

C)宏替换要占用程序的运行时间

D)前面都是错语的

参考答案:A

示例37若程序有宏定义"#define N 168;",则以下叙述中正确的是   

A)在预编译时,对C源程序用168替换标识符N

B)在编译时,用168替换标识符N

C)在运行时,用168替换标识符N

D)前面都是错误的

参考答案:A

知识点19数据块读写函数(fread()和fwrite())的调用函数调用“fread (buffer,size,count,fp);”与“fwrite(buffer,size,count,fp);”中的buffer是指针,对fread 来说,它是读入数据的存放地址,对fwrite来说,是要输出数据的地址(均指起始地址)。

示例38读取二进制文件的函数调用形式为“fwrite (buffer, size, count, pt);”,其中buffer是   

A)一个文件指针                      B)一个内存块的首地址,表示读入数据存放的地址

C)一个内存块的字节数            D)一个内存块的首地址,表示输出数据存放的地址

参考答案:D

知识点20如到文件末尾,则函数feof的函数值为真(1),否则函数值为假(0)。

示例38设fp为指向一二进制文件的指针,且还未读到此文件末尾,则函数feof(fp)的返回值为   

A)EOF               B)1              C)0             D)NULL

参考答案:C

示例39设fp为指向一二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为   

参考答案:1

知识点21指针变量的值是地址,不能赋一个整数作为指针变量。

示例40以下叙述中错误的是   

A)通过函数形参的值可以改变对应实参的值 B)函数可以返回地址值

C)可以将一个整数赋给一个指针变量            D)函数的形参可以为结构体类型

参考答案:C

知识点22对于逻辑表达式,并不是所有的逻辑运算符都要被执行。例如a&&b,只有a为真时,才需要判断b的值,又如a||b,只要a为真,就不必判断b的值。

示例41已有定义“float x=6;int n=8,k;”,执行“k=x || n++”以后,n的值为   

参考答案:8

示例42已有定义“int m=6, n=8,k;”,执行“k=!m && --n”以后,n的值为   

参考答案:8

示例43有以下程序:

#include <stdio.h>

int main(void)

{

         int a, b, c;

         a = 2; b = 3;

         c = (a / b < 1) || (a % b > 1);

         printf("%d%d%d\n", a, b, c);

         return 0;

}

运行结果是:

参考答案:231

点评:由于“a / b < 1”为值,所以“(a / b < 1) || (a % b > 1)”也为真(值为1),所以c=1。

知识点23对数值型或字符型数组在定义时可进行初始化,如所给初值的小于数组元素个数,则未赋初值的元素的值为0(或'\0')。

示例44设有定义语句:“int a[][168]={{1},{2}};”,则数组元素a[1][16]的值为   

参考答案:0

示例45设有定义语句:“int a[16]={1, 2};”,则数组元素a[6]的值为   

参考答案:0

知识点24对于“int n, *p = &n;”,则*p为p所指向变量n的值,&n为n的地址。

示例46对于“int n = 8 , *p = &n;”,则*p的值为   

参考答案:8

示例47已有定义“int a=1024;”,a的地址为1026,则&a=   

参考答案:1026

知识点25打开文件语句“fopen(文件名,使用文件方式);”,使用文件方式为字符串,对于打开文本文件,“r”表示(只读)为输入打开一个文本文件,“w”表示(只写)为输出打开一个文本文件,“a”表示(追加)向文本文件尾增加数据。

示例48设有定义:“FILE *fp;”,将以下打开文件的语句补充完整,以便为输出打开一个文本文件。

fp = fopen("test.txt",   );

参考答案:"w"

示例49以下程序建立一个名为test.txt的字符文件(文本文件),将从键盘输入的一行字符存入文件中。请填空。

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

         FILE *fp;

         char ch;

         if((fp= fopen("test.txt",   [1]  )) == NULL)

         {

                   printf("Can not open!\n");

                   exit(0);

         }

         printf("Enter data\n");

         while((ch=getchar())!='\n')fputc(ch ,fp);

         fclose(fp);

         return 0;

}

参考答案:[1] "w"

点评:文件操作方式是字符串,注意"w"应用双引号括起来。

知识点26malloc的函数原型为“void *malloc(unsigned int size); ”,一般使用格式为“(基类型 *)malloc(sizeof(基类型))”。

示例50已有指针定义 “float *p;”,请写出完整的语句,利用malloc函数使p指向一个动态存储单元            

参考答案:p=(float *)malloc(sizeof(float))

知识点27通过关键定extern声明将外部变量的作用域在本文件范围内扩充也可将用作域扩充到其他程序文件中。

示例51用关键字extern声明的变量为                

参考答案:外部变量

知识点28通过关键定static声明将外部变量的作用域在仅限于所在文件中。

示例52在多文件程序中,要将外部变量的作用域仅限于所在文件,应使用关键字   

参考答案:static

知识点29枚举类型用于将变量的值一一列举出来,变量的值只限于列举出来的值的范围内,声明枚举类型用enum。

示例53声明枚举类型使用的关键字是   

参考答案:enum

知识点30对于if else结构,else一般与最接它的if相匹配,编程时最好采用恰当的缩进格式。

示例54:有如下程序:

#include <stdio.h>

int main(void)

{

    int x = 16, y = 30, z = 40, flag = 9,p = 80;

    if (x < y)

                   if (z < flag) x = x + z;

                   else if (!p) x= p + flag;

                   else x = y + z + p;

    printf("%d\n", x);

         return 0;

}

运行结果是:

参考答案:150

点评:上面程序if else结构缩进格式恰当,容易看出else与if的匹配关系,由于关系表达式“x > y”为假,所以直接出跳if结构,显示x的值16。

知识点31switch语句执行时,首先计算switch的判断表达式,并以此值去依次找与之相等的case标号值,找到后就将流程转到该标号处,执行后面各语句。

示例55有如下程序:

#include <stdio.h>

int main(void)

{

         int n = 0, x = 0, y = 0;

         switch (n)

         {

         case 0:

                   y++;

         case 1:

                   x++;

                   break;

         case 2:

                   x++;

                   y++;

         }

         printf("%d,%d\n", x, y);

         return 0;

}

运行结果是:

参考答案:1,1

点评:由于n=0,所以从case 0后面的语句开始执行,执行到break时跳出switch结构。

知识点32逗号表达式的一般形式可以扩展为“ 表达式1,表达式2,表达式3,……,表达式n”,它的值为表达式n的值。

示例56有如下程序:

#include <stdio.h>

int main(void)

{

         int a = 10;

         a = (3, 6, ++a, a + 9);

         printf("%d\n", a);

         return 0;

}

运行结果是:

参考答案:20

知识点32对于C语言的表达式,如果表达式的值为0,表示逻辑假,如果表达式的值非0,表示逻辑真。

示例57有以下程序:

#include <stdio.h>

#include <stdio.h>

int main(void)

{

         int k = 8;

         while (--k) printf("%d\n", k -= 6);

         return 0;

}

运行结果是:

参考答案:1

点评:第1次循环时,“--k”值为7,为真,并且k的值为7,经过“k -= 6”后,k的值为1,所以显示1,第2次循环时,“--k”值为0,循环结束。

示例58有以下程序:

#include<stdio.h>

int main(void)

{

         int x = -6;

         while(x++);

         printf("%d\n",x);

         return 0;

}

运行结果是:

参考答案:1

点评:当while条件“x++”为假时,“x++”的值为0,也就是取出x的值为0,然后再将x的值加1,所以x的值变为1。

示例59有以下程序:

#include <stdio.h>

int main(void)

{

         int i = 1;

    do

                   printf("%d", i);

         while (--i);

    printf("%d\n", i);

         return 0;

}

运行结果是:

参考答案:1

点评:第1次循环时,i的值为1,显示1,条件“--i”的值为0,i的值也变为0,所以第2个printf语句显示0。

知识点33简单递归函数通常对应数学中递推式,可简单地将递推式中的递推条件用if语句表示来进行编程。

示例60试用递归编程实现求阶乘n!的函数,并编写测试程序。

分析:求阶乘函数f(n)=n!=1*2*…*n可用递推式表示如下:

具体递归函数及测试程序如下:

#include<stdio.h>

int f(int n)

{

         if (n == 0) return 1;

         else return n * f(n - 1);

}

int main(void)

{

         printf("%d\n", f(6));

         return 0;

}

示例61试用递归编程实现求累加和1+2+3+…+n的函数,并编写测试程序。

分析:求求累加和1+2+3+…+n的函数可用递推式表示如下:

具体递归函数及测试程序如下:

#include<stdio.h>

int s(int n)

{

         if (n == 0) return 0;

         else return n + s(n - 1);

}

int main(void)

{

         printf("%d\n", s(10));

         return 0;

}

知识点34函数返回值类型由函数首部说的函数类型决定,与“return 表达式”中的表达式类型无关。

示例62有以下程序:

#include <stdio.h>

int f(double x, double y)

{

         return x + y;

}

int main(void)

{

         int w = f(1.3, 2.6);

         printf("%d\n", w);

         return 0;

}

运行结果是:

参考答案:3

点评:调用函数f(1.3, 2.6)时,“return x + y;”表达式的值为3.9,由于函数类型为整型,所以将3.9转抽为整型3作为函数的返回值。

知识点34通常采用推递方式在求递推函数的值。

示例63有以下程序:

#include <stdio.h>

int fun(int x)

{

         if (x == 0) return 2;

         else if (x == 1) return 5;

         else if (x == 2) return 9;

         else return x + fun(x - 3);

}

int main(void)

{

         printf("%d\n", fun(6));

         return 0;

}

运行结果是:

参考答案:11

点评:fun(6)=6+fun(3)= 6+3+fun(0)= 6+3+2=11。

知识点35不能通过函数形参改变实参的值。

示例64有以下程序:

#include <stdio.h>

void f(int *p){ p = p + 2; }

int main(void)

{

         int a[] = {1, 2, 3}, *p = a;

         f(p);

         printf("%d\n", *p);

         return 0;

}

运行结果是:

参考答案:1

点评:调用函数“f(p);”后,实参p的值不变,也为a,由于数组名变指向下标为0的元素的指针,也就是p=&a[0],所以*p=a[0]=1。

知识点36对于数组,通常采用依次比较方式求最大值(最小值)。

示例65有以下程序:

#include<stdio.h>

int main(void)

{

         int i,j,m;

         int a[3][3] = {10, 20, 60, 28, 72, -30, -85, 1, 6};

         m = a[0][0];

         for (i = 0; i < 3; i++)

                   for (j = 0; j < 3; j++)

                            if(a[i][j] > m) m = a[i][j];

         printf("%d\n", m);

         return 0;

}

运行结果是:

参考答案:72

示例66有以下程序:

#include<stdio.h>

int main(void)

{

         int i,j,m;

         int a[3][3] = {10, 20, 60, 28, 72, -30, -85, 1, 6};

         m = a[0][0];

         for (i = 0; i < 3; i++)

                   for (j = 0; j < 3; j++)

                            if(a[i][j] < m) m = a[i][j];

         printf("%d\n", m);

         return 0;

}

运行结果是:

参考答案:-85

知识点37通常采用条件表达式“a<b?b:a”(“a<b?a:b”)求两个数的最大小(最小值)。

示例67以下程序的功能是:输出a、b、c三个变量中的最小值。将程序补充完整。

#include <stdio.h>

#define min(x, y) x < y ?  [1] 

int main(void)

{

         int a, b, c, t;

         scanf("%d%d%d", &a, &b, &c);

         t = min(a, b);

         t = min(t, c);

         printf("%d\n", t);

         return 0;

}

参考答案[1] x : y

示例68以下程序的功能是:输出a、b、c、d三个变量中的最大值。将程序补充完整。

#include <stdio.h>

int main(void)

{

         int a, b, c, d, t;

         scanf("%d%d%d%d", &a, &b, &c, &d);

         t = a < b ?  [1]  ;

         t = c < t ?  [2]  ;

         t = d < t ?  [3]  ;

         printf("%d\n", t);

         return 0;

}

参考答案:[1] b : a            [1] t : c          [1] t : d

知识点38对于链表通常采用动态内存分配函数“void *malloc(unsigned int size)”,在编程时应将函数强制转换为特定指针类型,并用sizeof()函数求存储单元所点空间大小,在显示链表时,一般从头指针开始(p=head)依次显示各节点(p=p->next)。

示例69下面程序的功能为先建立线性链表,然后再显示线性链表各元素的值,将程序补充完整。

#include <stdio.h>

#include <stdlib.h>

typedef struct Node

{

         int data;

         struct Node *next;

} Node;

int main(void)

{

         Node *head = NULL, *rear = NULL, *p;                           // head表示头指针,rear表尾指针,p为临时指针变量

         int a[] = {1, 2, 3, 4, 5, 6};

         for (int i = 0; i < 6; i++)

         {       // 建立线性链表

                   p = (  [1]  )malloc(  [2]  ));

                   p->data = a[i];

                   p->next = NULL;

                   if (head == NULL)

                   {       // 在空链表中插入节点, 所插入节点为惟一节点

                            head = rear = p;                                        // 头尾指针指向同一节点

                   }

                   else

                   {       // 将p追加到rear所指示结点的后面

                            rear->next = p;                                          // p为rear的后继

                            rear = p;                                                    // p指向新的尾节点

                   }

         }

         p =   [3]  ;                                                               // p指向第一个节点

         while (p != NULL)

         {       // 显示线性链表

                   printf("%d ", p->data);

                   p =   [4]  ;                                                      // p移向后继

         }

         printf("\n");

         return 0;

}

参考答案:[1] Node *        [2] sizeof(Node)            [3] head                [4] p->next

知识点39通常求累加和时,用于求和的变量被初始化为0。

示例70下面程序的功能是计算1+2+3+…+100,将程序补充完整。

#include<stdio.h>

int main(void)

{

         int s =   [1]  ;

         for (int n = 1; n <= 100; n++)

                   s = s +   [2]  ;

         printf("%d\n", s);

         return 0;

}

参考答案[1] 0  [2]n

示例71编程通过函数计算数组中各元素的平均值。

#include <stdio.h>

float average(int a[], int n)

{

         float s = 0;

         for (int i = 0; i < n; i++)

                   s += a[i];

         return s / n;

}

int main(void)

{

         int a[6] = {2, 4, 6, 8, 10, 18};

         float mean;

         mean = average(a, 6);

         printf("mean=%f\n", mean);

         return 0;

}

知识点40通常求连乘积时,用于求积的变量被初始化为1。

示例72下面程序的功能是计算阶乘n!,将程序补充完整。

#include<stdio.h>

int f(int n)

{

         int t =   [1]  ;

         for (int i = 1; i <= n; i++)

                   t = t *   [2]  ;

        

         return t;

}

int main(void)

{

         printf("%d\n", f(6));

         return 0;

}

参考答案:[1] 1   [2]i

示例73下面程序的功能是计算一个二维数组各元素之乘,将程序补充完整。

#include<stdio.h>

int main(void)

{

         int i, j, t =   [1]  ;

         static int a[3][3] = {{1, 2, 6}, {2, 3, -10}, {-5, 1, 5}};

         for (i = 0; i < 3; i++)

                   for (j = 0; j < 3; j++)

                            t = t *   [2]  ;

         printf("%d\n", t);

         return 0;

}

参考答案:[1] 1   [2]a[i][j]

知识点41C语言用%表示两个整数的求余运算,m % n == 0表示m能被n所整除。

示例74编程实现输出1000以内能同时被5,7和11所整除的所有正整数。

参考答案:

#include <stdio.h>

int main(void)

{

         for (int n = 1; n <= 1000; n++)

                   if (n % 5 == 0 && n % 7 == 0 && n % 11 == 0)

                            printf("%d ", n);

         printf("\n");

         return 0;

}

知识点42在用getchar()函数输入字符时,换行符被当着字符'\n'被getchar()所接收。

示例75从键盘上连续输入若干个字符(以回车换行符为结束标记),统计其中包含的英文字母字符的个数,数字字符的个数,以及其他字符的个数。

参考答案:

#include <stdio.h>

int main(void)

{

         int ch = getchar();

         int n_letter = 0, n_digit = 0, n_other = 0;

         while (ch != '\n')

         {

                   if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') n_letter++;

                   else if (ch >= '0' && ch <= '9') n_digit++;

                   else n_other++;

                   ch = getchar();

         }

         printf("Letter:%d Digit:%d  Other:%d\n", n_letter, n_digit, n_other);

         return 0;

}

或:

#include <stdio.h>

int main(void)

{

         int ch, n_letter = 0, n_digit = 0, n_other = 0;

         while ((ch = getchar()) != '\n')

         {

                   if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') n_letter++;

                   else if (ch >= '0' && ch <= '9') n_digit++;

                   else n_other++;

         }

         printf("Letter:%d Digit:%d  Other:%d\n", n_letter, n_digit, n_other);

         return 0;

}

知识点43用gets()输入字符串时,能自动接收从键盘上所输入的一行字符,比用getchar()函数处理起来更简单。

示例76从键盘上连续输入1行字符(假设每行小于80个字符),编程统计其中包含的数字字符的个数。

参考答案:

#include <stdio.h>

#include <string.h>

int main(void)

{

         char ch, str[80];

         int n = 0;

         for (int i = 0; i < 6; i++)

         {

                   gets(str);

                   for (int j = 0; j < strlen(str); j++)

                            if (str[j] >= '0' && str[j] <= '9') n++;

         }

         printf("Digit:%d\n", n);

         return 0;

}

相关推荐