《C语言程序设计》练习题

《C语言程序设计》练习题,第1张

一、选择题

1、C语言规定,在一个源程序中,main()函数的位置(C )。

A) 必须在最开始 B)必须在最后

C) 可以任意 D) 必须在系统调用的库函数后面

这题你死记就行,你看看这个

任何一个C++程序都必须定义一个main函数,它的返回类型总是int类型。这个函数由 *** 作系统来调用,在main函

数执行完以后,程序也就终止了。 main也可以使用return向 *** 作系统返回一个值,使用 *** 作系统的命令可以检测

main的返回值。一般约定在main返回0时,表示程序运行过程中没有出现错误,其它非零值表示程序出现异常情况。

若没有为main指定返回值,这样返回值是任意的。

2、若x和y都是int 型变量,x=100,y=200,且有以下程序段,printf(“%d”,(x,y));则其输出结果是( A)。

A) 200 B) 100 C) 100 200 D) 输出不确定值

(x,y)这是个逗号表达式,表达式的值为最后一个逗号后面表达式的值,因为前面有一个%d,所以输出 的是y的

3、合法的C语法字符常量是(C )。

A) “A” B) 65 C) ‘\t’ D) A

字符都是由两个单引号括起来的,死记, a)为字符串

4、表达式“3!=4”的值是(A )。

A) 1 B) 0 C) T D) F

!=是c语言的逻辑运算符,3!=4为真,多以得1, 3=4为假,值为0

5、 int a=1,b=2,c=3,d=4,执行下列程序后x的值为( C)。

if(a>b) x=1;else if (c>d) x=2;else x=3;

A) 1 B) 2 C) 3 D) 4

如果a>b,1>2为假,不执行x=1,执行else if(c>d),判断:3>4为假,不执行x=2,执行=3,完

6、以下程序的输出结果是(D)。

Int x=10,y=3,z;printf(“%d\n”,z=(x%y,x/y));

A)1 B) 0 C) 4 D) 3

逗号表达式,x%y,10%3,商3余1,模取余数1,x/y,10/3,商3余1,除法取商3,逗号表达式,表达式的值为最后一

个逗号后面表达式的值

7、为表示x≥y≥z,应使用C语言表达式(A )。

A) (x>=y)&&(y>=z) B) (x>=y) AND (y>=z)

C) (x>=y>=z) D) (x>=y) & (y>=z)

关系运算符,x>=y与y>=z必须是同时成立的,因此要用逻辑运算符&&,&&与的意思

8、合法的数组定义是( a )。

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

C) char a=”string”; D) char a[ ]={“01234”};

a不指定数组长度定义,正确

b数组长度为5,就是里面有5个数组元素,多了一个数组元素

c定义a不是数组而是一个变量,素组应该是a[]

d是错的,字符串是这样定义的:char a[ ]={'0','1','2','3','4','\0'};

[4]中数字是数组长度,说明里面有几个元素

9、设x和y均为int型变量,则语句“x+=y;y=x-y;x-=y;”的功能是(D)。

A) 把x和y按从小到大排列 B)把x和y按从大到小排列

C)无确定结果 D)交换x和y中的值

x+=y等同于x=x+y,把x加y的值赋给x,x现在存的是x与y的和

y=x-y把x减y的值赋给y,x现在存的是x与y的和 (x+y)-y=x,把x的值给y,y存x的值

x-=y等同于x=x-y,把x减y的值赋给x,(x+y)-y=x,现在的后面的y存的是x的值,做完后x里存的值是y,完成交换

10、若已定义x和y为double类型,则表达式“x=1,y=x+3/2”的值是(C)。

A) 1 B)2 C) 20 D) 10

逗号表达式,先让x=1在算y=x+3/2,得2,因为是double类型,所以有小数点

11、下列条件语句中,功能与其他语句不同的是 (D)

A) if(a) printf("%d\n",x); else printf("%d\n",y);

B) if(a==0) printf("%d\n",y); else printf("%d\n",x);

C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);

D) if(a==0) printf("%d\n",x); else printf("%d\n",y);

a 如果a为真输出x,如果a为假输出y

b 如果a==0,也就是为假,输出y,a为真输出x,同a

c 如果a!=0为真,输出x,a为假输出y同上

d 如果a为假输出x,如果a为真输出y,与以上的都不同

12、以下能正确定义二维数组的是 (C)

A) int a[][3]; B) int a[][3]=2{23};

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

a 没有给数组赋初值

b {}里不能有

c 正确,记住第一个[]中可以为空,第二个[]不能为空,死记

d a[2][3] 的意思是有两个一维数组,每个一维数组里有3个元素,{{1},{2},{3,4}}; 她的意思是三个数组,{}中的每一个{}代表一个数组,里边的数为数组元素

13、用C语言编写的代码程序 (B)

A)可立即执行 B)是一个源程序

C)经过编译即可执行 D)经过编译解释才能执行

死记

#include<stdioh>

#include<stringh>

#include<malloch>

typedef struct stu //一个学生的档案

{

char num[20];//学号

char name[20];//姓名

float score[5]; //成绩,前三门是单科成绩,第四个是总分,最后一个是平均分

}student;

student s[10]; //所有学生的信息

void main()

{

void init();//初始化函数申明

void sort();//排序函数申明

void print();//输出函数申明

init();

sort();

print();

}

void init()//初始化所有学生的档案

{

int i,j;

for(i=0;i<10;i++) //逐个键入学生的信息

{

printf("请输入一学生的学号:");

scanf("%s",s[i]num);

printf("请输入该学生的姓名:");

scanf("%s",s[i]name);

printf("请输入该学生的三门成绩:");

s[i]score[3]=0;

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

{

scanf("%f",&s[i]score[j]);

s[i]score[3]+=s[i]score[j]; //求总分

}

s[i]score[4]=s[i]score[3]/3; //求平均分

}

printf("学生档案建立成功!\n");

}

void sort()

{

int i,j,k;

char str[20];

float temp;

for(i=0;i<9;i++) //主循环,进行排名

for(j=i+1;j<10;j++)

if(s[j]score[3]>s[i]score[3])

{

strcpy(str,s[i]num); //交换学号

strcpy(s[i]num,s[j]num);

strcpy(s[j]num,str);

strcpy(str,s[i]name); //交换姓名

strcpy(s[i]name,s[j]name);

strcpy(s[j]name,str);

for(k=0;k<5;k++) //交换成绩

{

temp=s[i]score[k];

s[i]score[k]=s[j]score[k];

s[j]score[k]=temp;

}

}

}

void print()

{

int i;

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

printf("%s %s %1f %1f %1f %1f %1f\n",s[i]num,s[i]name,s[i]score[0],s[i]score[1],s[i]score[2],s[i]score[3],s[i]score[4]

(1)以下选项中属于C语言的数据类型是( C )

A.复数型 B.逻辑型 C.双精度型 D.集合型

(2)在C语言中,不正确的int类型的常数是( A )

A.32768 B.0 C.037 D.0XAF

(3)以下所列的C语言常量中,错误的是( D )

A.0xFF B.12e05 C.2L D.'\72'

(4) C语言中的基本数据类型包括( D )

A.整型、实型、逻辑型 B.整型、实型、逻辑型、字符型

C.整型、逻辑型、字符型 D 整型、实型、字符型

(5)若变量a、i已正确定义,且i已正确赋值,合法的语句是( B )

Aa==1 B++i Ca=a++=5 Da=int(i)

(6)若有以下程序段:

int c1=2,c2=3,c3;

c3=10/c2c1;

则执行后c3的值是(A )

A0 B3 C1 D2

(7)如下程序:

main(B)

{int y=6,x=3,z=1;

printf("%d %d\n",(++x,y++),z+2);}

运行该程序的输出结果是( )

A3 4 B6 3 C4 3 D3 3

(8)若有以下定义和语句:

char c1='a',c2='f';

printf("%d,%c\n",c2-c1,c2-'a'+'B');

则输出结果是( B )

A2,M B5,G

C2,E D输出项与对应的格式控制不相符,输出结果不确定

(9)当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( C )

Ac=a=b; B(a=c)||(b=c); C(a=c)&&(b=c); Da=c=b;

(10)设int x=2,y=1;表达式(!x||y--)的值是( B )

A-2 B1 C2 D-1

(11)、阅读以下程序,则( D )。

main()

{ int a=5,b=0,c=0;

if(a=b+c) printf(“ \n”);

else printf(“$ $ $\n”);

}

A、有语法错误不能通过编译 B、可以通过编译但不能通过连接

C、输出 D、输出 $ $ $

(12)下面程序执行时,若从键盘输入5,则输出为( A )。

main()

{

int a;

scanf(”%d”,&a);

if(a++>5) printf(”%d\n”,a);

else printf(”%d\n”,a--);

}

A、6 B、7 C、5 D、4

(13)已知a,b,c的值分别为4、5、6,执行以下语句后a,b,c的值分别是( C)。

if(a>b) a=b; b=c; c=a;

A、4、5、6 B、5、6、6 C、4、6、4 D、5、6、5

(14)以下说法不正确的是( B )

A)对于各种循环,循环体中的语句均可以由空语句构成。

B)do-while和for循环均是无条件地执行一次循环体,再对表达式进行判断。

C)使用while 和do-while循环时,循环变量初始化的 *** 作应在循环语句之前完成。

D)while循环是先判断表达式,再执行循环体内的语句。

(15)设有程序段:

int k=0;

while(k=0)k--;

则下面描述中正确的是( C )

A、while循环执行10次 B、循环是无限次执行

C、循环体语句一次也不执行 D、循环体语句执行一次

《C语言程序设计》作业与思考题解答

说明:习题中P119:27 表示《C/C++上机实践及习题选解》中第119页的27题,其它以此类推,书后有解答。非《C/C++上机实践及习题选解》中的习题提供习题参考答案。

习题解答

作业一

1.合法的标识符: a12 A21 sum2 _fun C_program

不合法的标识符:f(x) $a21 21a while tan@sohucom

2

main( )

{ int i, j, s;

i=2; j=3;

s=ij;

printf(“ %d %d=%d”,i,j,s)

}

作业二

1指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?

正确的整型(int)常量:0 -325 128 03456

正确的实型(float)常量: 00 2 12e-3 5e2

正确的字符型(char)常量: ‘b’ ‘104’ ‘108’ ‘ ’ ‘8’

2表达式的结果 (1) 1

(2) 0

(4) 0

(5) 95

(9) ‘A’

(11) 2

(12) 45

3 Y=sin(2x)+(a+b)/(ab)/(1+a/b)+aa/2

4.设m为整数,用逻辑表达式表示:能同时被3与7整除或者被5除余2且小于100的整数。

m%3= =0 && m%7= =0 || m%5= =2 && m<100

作业三

1.华氏温度通过公式C=5/9(f-32)转换成摄氏温度。试编程并上机调试运行:从键盘上输入华氏温度,利用公式计算后输出摄氏温度(要求:保留一位小数;记录调试过程中遇到的问题及解决方法)。

#include

main( )

{ float f,c;

scanf(“%f”,&f);

c=50/9(f-32);

printf(“c=%1f”,c);

}

2

用IF语句:

#include

#include

main( )

{ float x,y;

scanf(“%f”,&x);

if (x<0) y=fabs(x);

else if (x<10) y=x;

else if (x<20) y=3-x/5;

else if (x<40) y=3x-10;

else y=0;

printf(“y=%f’,y);

}

用switch 语句:

#include

#include

main( )

{ float x,y;

scanf(“%f”,&x);

if (x<0) y=fabs(x);

else switch ( int(x/10) )

{ case 0: y=x; break;

case 1: y=3-x/5;break;

case 2,3: y=3x-10; break;

defaut y=0;

}

printf(“y=%f’,y);

}

3 解答见P151;

4.程序如下:

#include

#include

main()

{

int i=0;

char ch;

ch=getchar();

while (ch!=' ')

{ if (ch=='(') i++;

if (ch==')') i--;

if (i<0) break;

ch=getchar();

}

if (i==0) printf("(与)匹配") ;

else if (i<0) printf(" 缺) ") ;

else printf("缺少)");

}

5 程序如下:

#include

main()

{

int i,j,k,m=0;

for (i=1;i<10;i++)

for (j=1;j<20;j++)

{ k=100-i10-j5;

if (k>0) { printf(" i=%-3dj=%-3dk=%-3d",i,j,k);

m++;

if (m%4==0) putchar(' ');

}

}

printf(" m=%d ",m);

}

6 在横线上填写合适语句,完善程序,使之完成如下功能:从键盘上输入一个不多于7位的正整数,统计其中2的个数,并求各位数字中的最小数。

#include

main( )

{int count,min,temp;

long n;

min=9; count=0;

scanf( “%ld” ,&n);

do

{ temp= n % 10 ;

if (temp= =2) count++;

if (min>temp) min=temp;

n=n/10;

}while ( n );

printf(“count=%d,min=%d”,count,min)

}

作业四

1.p128: 46 解答见p156

2 p128: 411 解答见p158

3编写一递归函数计算mn ,并从键盘输入m,n的值(如4,3),求mn 的值(上机调试)。

funm_n(int m,int n)

{

int y;

if (n==1) y=m;

else y=mfunm_n(m,--n);

return y;

}

main()

{int m,n,y;

printf("Input integer(m,n):");

scanf("%d,%d",&m,&n);

y=funm_n(m,n);

printf(" %d^%-d=%-d",m,n,y);

}

4P128: 412 (3); 答案:12345678

5.求3-100中的素数,要求编写一函数来判断某数是否为素数。

main()

{

int prime,i,n=0;

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

{ prime=prime_num(i);

if (prime) { if (n%10==0) printf(" ");printf("%4d",prime);n++;}

}

}

prime_num(int m)

{ int k=2,r;

do {

r=m % k;

if (r==0) break;

k++;

}while(k<m); p=""> </m);>

if (r!=0) return m;

else return 0;

}

6 结果如下:

main0:x=12,y=2

fun: x=6,y=25

main:x=12,y=2

fun:x=7,y=26

main:x=12,y=2

作业五

1从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。

#include

#include

main()

{

int i=0,c[52]={0},m=0;

char str[80];

printf("Input a string:");

scanf("%s",str);

while (str[i])

{ if (str[i]>='A' && str[i] <='Z') c[str[i]-'A']++;

if (str[i]>='a' && str[i] <='z') c[str[i]-'a'+26]++;

i++;

}

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

if (c[i]){ if (m%8==0) putchar(' ');m++;

printf("%c:%-d ",i+'A',c[i]);

}

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

if (c[i+26]){if (m%8==0) putchar(' ');m++;

printf("%c:%-d ",i+'a',c[i+26]);

}

}

2 P132: 515 程序见p167

3.从键盘上输入8个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。

#include

#include

main()

{

int data[8],i,p1,p2,temp;

p1=data;

printf("Input 8 numbers:");

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

{ scanf("%d",p1);/ 或 &(p1) / ;

p1++;

}

for (p1=data;p1<data+8-1;p1++) p=""> </data+8-1;p1++)>

for (p2=p1+1;p2<data+8;p2++) p=""> </data+8;p2++)>

if (p1<p2){ temp=p1; p1=p2; p2=temp;}

for (i=0,p1=data;i<8;i++,p1++)

printf("%6d",p1 ) ;

}

4.从键盘上输入一个4 4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。

#include

#include

main()

{

int d[4][4],i,j,temp;

printf("Input 16 numbers:");

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

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

scanf("%d",&d[i][j]) ;

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

for (j=0;j<i;j++) p=""> </i;j++)>

if (d[i][j]>d[j][i]) d[j][i]=d[i][j];

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

{ printf(" ");

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

if (j>=i) printf("%6d",d[i][j] ) ;

else printf("%6c",' ') ;

}

}

5.盘上输入两个字符串a,b,下面程序将a,b的对应字符中的较大者存放在数组c的对应位置上,填空完善之。

#include

#include

main( )

{int k=0;

char a[80],b[80],c[80]={‘’},p,q;

p=a; q=b;

gets(a); gets(b);

while (p!=0 || q!=0 )

{ if ( p!=0 ) c[k]=p;

else c[k]=q;

p++; q++; k++;

if ( p !=0 ) strcat(c,p);

else strcat(c,q);

puts(c);

}

作业六

1.P134:65 程序见p178

2.P135:67 程序见p181

3.P134:618 程序见p196

1 一条简单语句是以_____;___字符作为结束符的,一条复合语句是分别以___{_____字符和_____}___字符作为开始符和结束符的。

2 任何一个C++程序至少且只能包含一个_____主___函数,且程序总是从这个函数开始执行,不论这个函数的位置如何。一个函数定义由 函数头 和 函数体 两部分组成。

3 C++头文件和源程序文件的扩展名分别为 h 和 cpp。

4 cout与 *** 作符__<<_配合使用才能显示输出,cin与 *** 作符_>>_配合使用才能实现输入。

5 数据类型int,char,bool,float,double, int 等的类型长度分别为___4_、1_、_1_、_4、_8___和_____4___。

6 数值常量46、0173和0x62对应的十进制值分别为_____46___、____123____和______98__。

7 字符串”It\’s\40a\40C++programe!”中包含有______19____个字符。

8 若x=5,y=10,则计算y=++x表达式后,x和y的值分别为____6____和____60____。

9 若x=25,则计算y=x--表达式后,x和y的值分别为____24____和__25______。

10 假定x和ch分别为int型和char型,则sizeof(x)和sizeof(ch)的值分别为___4_____和_____1___。

11 假定x=64,y=88,则x<<2和y>>2的值分别为____128____和___44_____。

12 假定x是一个逻辑量,则x&&true的值与_____x___的值相同,x||false的值也与_____x___的值相同。

13 假定x是一个逻辑量,则x&&!x和x||!x的值分别为____0____和____1____。

14 假定x=10,则表达式x<=1020:30的值为____20____。

15 表达式sqrt(81)和pow(6,3)的值分别为________9______和_________216_____。

16 数学算式(1+x)sin48°和axbex+1对应的算术表达式分别为___(1+x)sin(48314159/180)_____和_____apow(x,b)exp(x+1)___。

17 逻辑表达式:a>=x||b>2y+10的相反式为:___~(a<=x&&2y+10)_____。

18 在嵌套的if语句中,每个else关键字与它前面最接近的____if____关键字相配套。

19 在for语句中,假定循环体被执行次数为n,则<表达式1>共被计算____n___次,<表达式2>共被计算____n____次,<表达式3>共被计算____n____次。

20 执行for和while循环时,每次是先进行____条件____的判断,然后再执行____循环___,执行do循环时则相反。

另外,站长团上有产品团购,便宜有保证

#include<stdioh>

main()

{

float n,s=1;

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

{

s+=1/n;

if(s>=8)

break;

}

printf("s=%f,n=%f",s,n);

}

程序就是这样,循环的1000是确保执行正常,因为我不确定是在n=几的时候符合条件,当s>=8得时候应该是与8最接近的值了

#include <iostream>

using namespace std;

class Palindrome

{

private:

int n;

int y;

public:

Palindrome(int x){ n = x; y = 0; }

void huiwen();

void show();

};

void Palindrome::huiwen()

{

// 判断该十进制数是否为回文数

long i = n, j = n, tmp1 = 0;

while (i)

{

tmp1 = tmp110 + i%10;

i /= 10;

}

// 若为回文数

int a[100], k = 0, tmp2, count;

if (tmp1 == n)

{

// 转换为二进制

if (n < 2) y = 1;

else

{

do{

tmp2 = j % 2;

a[k++] = tmp2;

j = j / 2;

} while (j != 0);

// 判断该二进制数是否为回文数

for (count=0;count<k;count++)

if (a[count] != a[k-1-count]) break;

if (count == k) y = 1;

}

if (y == 1) {

cout << "该数的二进制为:" << endl;

for (k=k-1;k>=0;k--)

cout << a[k];

cout << endl;

}

}

}

void Palindrome::show()

{

huiwen();

if (y == 0) cout << "该数不是绝对回文数!" << endl;

else cout << "该数是绝对回文数!" << endl;

}

int main()

{

int x;

cin >> x;

Palindrome p(x);

pshow();

system("pause");

return 0;

}

以上就是关于《C语言程序设计》练习题全部的内容,包括:《C语言程序设计》练习题、程序设计题目(用C语言)、程序设计习题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9968060.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存