admin 管理员组文章数量: 1184232
2023年12月16日发(作者:sql注入会被发现吗)
如对您有帮助,请购买打赏,谢谢您!
第1章 C语言概述
【习题1-1】简述C语言的特点。
答:C语言的特点:C语言简洁、紧凑、使用灵活、方便;运算符丰富;数据结构丰富;C是结构式语言;C语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址;C语言程序生成代码质量高;C语言适用范围大,可移植性好。
【习题1-2】简述上机调试运行C程序的操作步骤。
答:上机运行C语言程序的操作步骤为:启动Visual C++ 6.0→建立工程→创建源程序文件→输入(编辑)源程序内容→保存源程序文件→编译源程序文件→连接目标程序→执行程序→开始另一个程序。
【习题1-3】上机运行本章的3个例题。
答:略。
【习题1-4】请从以下的4个选项中选择一个正确答案。
(1)A (2)A (3)C (4)B
【习题1-5】参照本章例题,编写一个C语言程序,输出以下信息:
**************
Nice to meet you!
**************
编写程序如下:
#include
void main()
{
printf("**************n");
printf("Nice to meet you!n");
printf("**************n");
}
第2章 基本数据类型和运算符
【习题2-1】上机编辑并调试本章所有例题。
答:略。
【习题2-2】下面哪些是合法的常量?
⑴20 0.5 012 13e5.1 E-5 8e4 5. 0x6a
⑵'mn' "OK" "a" '012' "a/b" ''
答:⑴合法的常量有:20 0.5 012 8e4 5. 0x6a
⑵合法的常量有: "OK" "a" '012' "a/b" ''
【习题2-3】下面的变量名中哪些是合法的?
A&b abc123 abc% AbC a_b_c
int _abc 123abc ab?c
a bc a*bc 'a'bc
答:合法的变量名有:abc123 AbC a_b_c _abc
【习题2-4】指出下面的变量定义哪些是正确的,哪些是不正确的,为什么?
⑴Int i,j;
⑵float a,b;
⑶int a,b;float a,b;
⑷float a,int b;
⑸char 'a';
如对您有帮助,请购买打赏,谢谢您!
答:⑴错误,因为关键字Int应该全为小写字母
⑵正确
⑶错,因为同一变量在程序的同一处不应该声明为不同的数据类型
⑷错,因为不同类型的变量要分别声明,其间应使用分号,而不是逗号
⑸错,'a'表示字符常量,不能用作变量名
【习题2-5】把下列数学式子写成C语言表达式。
x14(1)3.26e+(a+b)
3ab(2)2x
3sin(x)mm(3)g122
r2(4)2r+r+cos(45°)
rate(1rate)month(5)loan
(1rate)month1对应的C语言表达式分别为:
(1)3.26*exp(x)+1.0/3*pow(a+b,4)
(2)2*sqrt(x)+(a+b)/(3*sin(x))
(3)g*m1*m2/(r*r)
(4)2*3.14*r+3.14*r*r+cos(3.14/180*45)
(5)loan*rate*pow(1+ rate, month)/(pow(1+rate, month)-1)
【习题2-6】C语言中为什么要引入转义字符?
答:在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、$等。但另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键,或者当按键以后不能显示键面上的字符,为了解决这一问题,在C语言中引入了转义字符。
【习题2-7】逻辑表达式的值是什么?只能用1和0才能表示真值和假值吗?
答:逻辑表达式的值是一个逻辑量“真”或者“假”,不是只有用1表示真值,用0表示假值,在判断一个量为真假时,常以0表示假,以非0表示真。
【习题2-8】对于表达式(1+2)*(y=3),可以肯定(1+2)先计算,而(y=3)后计算吗?
答:不能。
【习题2-9】 “&&”和“‖”严格地执行运算符优先级的规则吗?它的规则是什么?
答:逻辑运算符不按照规定的优先级计算。在逻辑表达式的求值过程中,如果从“&&”或“‖”左边的运算对象部分已经能够确定整个逻辑表达式的值,则不再求右边运算对象的值,这样做提高了运算速度。具体地说:若“&&”的左运算对象值为0,则不再对右运算对象求值,因整个式子的结果必定为0。若“‖”的左运算对象值为非0,则不再对右运算对象求值,因整个式子的结果必定为1。以上所说的这种运算的规则是C对逻辑运算的特殊处理规则。它严格地执行从左到右运算的规则,不受运算符优先级所影响。
【习题2-10】字符常量和字符串常量有什么区别?
答:字符常量和字符串常量的区别:
① 从形式上看,字符常量使用单引号,而字符串常量使用双引号。
② 从内部存储来看,编译程序在每个字符串的尾部自动加上了一个空字符NULL(即‘0’)作为字符串的结束标志,而字符常量则不存在这种情况。
【习题2-11】将下面语句组进行简写。
如对您有帮助,请购买打赏,谢谢您!
⑴int i;
int j;
⑵x=0;
y=0;
⑶x=x+y;
⑷int x,y;
x=y-(y/10)*10;
⑸int x;
x=x+1;
⑹y=x;
--x;
对应的简写语句分别为:
(1)int a,b;
(2)x=y=0;
(3)x+=y;
(4)int x,y;
x=y%10;
(5)int x;
x++; 或 x+=1; 或 ++x;
(6)y=x--;
【习题2-12】写出下面程序运行后的结果。
⑴ 程序运行结果:
2,3
⑵ 程序运行结果:
y=5.000000
⑶ 程序运行结果:
ch1=65,ch2=97
B,b
⑷ 程序运行结果:
0,48
⑸ 程序运行结果:
0
2
2
1
⑹ 程序运行结果:
a,A,32,32
⑺ 程序运行结果:
0
1,6
0,15,15
⑻ 程序运行结果:
如对您有帮助,请购买打赏,谢谢您!
2,2,1
1,2,1
0,2,2
-1,2,2
⑼ 程序运行结果:
3
2
4
⑽ 程序运行结果:
3
2
3,3
4
3,4,4
0
1
第3章 顺序和选择结构程序设计
【习题3-1】请从以下的4个选项中选择1个正确答案。
1. 结构化程序设计的三种基本结构是( )。
A. 函数结构、判断结构、选择结构 B.平行结构、嵌套结构、函数结构
C. 顺序结构、选择结构、循环结构 D.判断结构、嵌套结构、循环结构
【正确答案】 C
2. putchar( )函数可以向终端输出一个( )。
A. 整型变量表达式值 B. 实型变量值
C. 字符串 D. 字符或字符型变量值
【正确答案】 D
3. 若已定义 double y; 拟从键盘输入一个值赋给变量y,则正确的函数调用是( )。
A. scanf(“%d”, &y); B. scanf(“%7.2f”, &y);
C. scanf(“%lf”, &y); D. scanf(“%ld”, &y);
【正确答案】 C
4. 若有以下定义: float x; int a, b; 则正确的switch 语句是( )。
A. switch(x) B. switch(x)
{ case 1,2:printf("*n"); { case 1.0:printf("*n");
}
C. switch(a+b)
case 2: printf("**n") case 3:printf("**n");
}
D. switch(a-b);
{ case 1:printf("*n"); { case 1: printf("*n") ;
case 2: printf("**n"); case 2:printf("**n");
} }
【正确答案】 C
5. 为了避免嵌套的if-else语句的二义性,C语言规定else总是与( )组成配对关系。
A. 缩排位置相同的if B. 在其之前未配对的if
C. 在其之前尚未配对的最近的if D. 同一行上的if
如对您有帮助,请购买打赏,谢谢您!
【正确答案】 B
【习题3-2】if语句有那3种形式,请分别画出每种形式的执行流程图。
【参考答案】
(1)顺序结构 (2)选择结构
(3)循环结构(当型循环) 循环结构(直到型循环)
【习题3-3】下面哪些语句是合法的?
(1)if(a==b)printf("Hello");
(2)if(a==b){printf("Hello")}
(3)if(a==b)
printf("Hello")
else
printf("Goodbye");
(4)if a==b
printf("Hello");
【正确答案】
(1)合法。
(2)不合法。
(3)不合法。
(4)不合法。
【习题3-4】读程序写结果。
(1)从键盘输入58
#include
void main( )
{
int a;
scanf("%d",&a);
if(a>50) printf("A=%d",a);
if(a>40) printf("B=%d",a);
if(a>30) printf("C=%d",a);
}
答案: A=58 B=58 C=58
(2)
#include<stdio.h>
void main( )
{
int x=10,y=20,t=0;
if(x==y) t=x;x=y;y=t;
printf("%d,%d n",x,y);
}
答案:20
(3)
#include
void main( )
如对您有帮助,请购买打赏,谢谢您!
{
int p,a=5;
if(p=a!=0)
printf("%dn",p);
else
printf("%dn",p+2);
}
答案:1
(4)
#include<stdio.h>
void main( )
{
int a=4,b=3,c=5,t=0;
if(a<b) {t=a;a=b;b=t;}
if(a<c) {t=a;a=c;c=t;}
printf("%d %d %dn",a,b,c);
}
答案:5 3 4
(5)
#include<stdio.h>
void main( )
{
int i,m=0,n=0,k=0;
for(i=9;i<=11;i++)
switch(i/10)
{ case 0: m++; n++; break;
case 10: n++;break;
default: k++;n++;
}
printf("%d %d %dn",m,n,k);
}
答案:1 3 2
(6)
#include<stdio.h>
void main( )
{
int n=0,m=1,x=2;
if(!n) x-=1;
if(m) x-=2;
if(x) x-=3;
printf("%dn",x);
如对您有帮助,请购买打赏,谢谢您!
}
答案:-4
(7)
#include<stdio.h>
void main( )
{
int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:switch(y)
{ case 0:a++; break;
case 1:b++; break;
}
case 2:a++;b++; break;
}
printf("%d %dn",a,b);
}
答案:2 1
(8)
#include<stdio.h>
void main( )
{
int a=3,b=4,c=5,t=99;
if(b<a&&a<c) {t=a;a=c;c=t;}
if(a<c&&b<c) {t=b;b=a;a=t;}
printf("%d %d %dn",a,b,c);
}
答案:4 3 5
(9)
#include<stdio.h>
void main( )
{
int n='c';
switch(n++)
{ default: printf("error");break;
case 'a':case 'A':case 'b':case 'B':printf("good");break;
case 'c':case 'C':printf("pass");
case 'd':case 'D':printf("warn");
}
}
答案:passwarn
【习题3-5】有如下if条件语句:
如对您有帮助,请购买打赏,谢谢您!
if(a
else if(c 试按缩进对齐的格式将以上语句改写为结构更清晰的等效if语句,并在每个条件表达式之后用逻辑表达式注释所满足的条件。 【正确答案】 if(a { if(c x=1; else if(a if(b x=2; else x=3; } else if(c x=4; else x=5; 【习题3-6】有两个程序段: (1)if(a { { if(c==d)x=1; if(c==d)x=1; } else x=2; else x=2; } 它们所表示的逻辑关系是下列所示关系中的哪一个? ① 1 a x= x= 2 a≥b且c≠d 2 a ③ 1 a x= x= 2 a≥b 2 c≠d 答案:(1)所表示的是3,(2)所表示的是2 【习题3-7】写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。 程序如下: /*c3_7.c*/ #include "stdio.h" void main() { int year; scanf("%d",&year); /*(a>=b)&&(c>=d))*/ /*(a=d)*/ /*(a /*(a /*a 如对您有帮助,请购买打赏,谢谢您! if(year%400==0||(year%4==0&&year%100!=0)) printf("%d is a leap yearn",year); else printf("%d is not a leap yearn",year); } 【习题3-8】设计一个程序,从键盘输入3个整数,按由小到大的顺序输出。 程序如下: /*c3_8.c*/ #include void main( ) { int a, b, c; if(a>b) {t=a; a=b; b=t;} if(a printf("%d %d %dn",a,b,c); } 【习题3-9】编程序计算下面的函数: ex1 0 y= |x|+2 3≤x≤4 2 sin(x) 当x取其他值时 程序如下: /*c3_9.c*/ #include <stdio.h> #include <math.h> void main( ) { float x,y; printf("输入x:"); scanf("%f",&x); if(x>0&&x<1) /*若0<x<1*/ y=exp(sqrt(x))-1; else if(x>=3&&x<=4) /*若3≤x≤4*/ y=fabs(x)+2; else /*若x≥10*/ y=sin(x*x); printf("x=%.1f,y=%.2fn",x,y); } 【习题3-10】编程序计算下面的分段函数:输入x值,求下列相应y值。 -1 (x<1) y= 2x+1 (1≤x≤10) 3x+2 (x≥10) 如对您有帮助,请购买打赏,谢谢您! 分析:对于分段函数,往往采用多路分支选择语句实现。 程序如下: /*c3_10.c*/ #include <stdio.h> void main( ) { int x,y; printf("输入x:"); scanf("%d",&x); if(x<1) /*若x<1*/ { y=x; printf("x=%3d,y=x=%dn",x,y); } else if(x<=10) /*若1≤x≤10*/ { y=2*x+1; printf("x=%3d,y=2*x+1=%dn",x,y); } else /*若x≥10*/ { y=3*x+2; printf("x=%3d,y=3*x+2=%dn",x,y); } } 【习题3-11】输入一个整数m,判断它能否被3、13、17整除,如果能被三个数之一整除,则输出它能被整除的信息,否则输出m不能被3、13、17整除的信息。试编写该程序。 程序如下: /*c3_11.c*/ #include void main( ) { int m; scanf(“%d”, &m); if(m%3==0||m%13==0||m%17==0) printf(“can be divided!”); else printf(“can not be divided!”); } 【习题3-12】若一个学生是某校的学生,且是男生,则输出“male”;若是女生,则输出“female”;若不是某校的学生,则输出“No”。试编写该程序并画出流程图。 程序如下: /*c3_12.c*/ #include 如对您有帮助,请购买打赏,谢谢您! void main( ) 输入学生学校及学生性别 { int school, sex; 否 是 是否某校学生 scanf(“%d,%d”, &school, &sex); 否 是否男生 if(school==1) { 是 if(sex==1) 输出No 输出female输出“male” printf(“male”); 结 束 else printf(“female”); } else printf(“No”); } 【习题3-13】某产品的国内销售价为80箱以下,每箱350元,超过80箱,超过部分每箱优惠20元;国外销售价为1000箱以下,每箱900元,超过1000箱,超过部分每箱优惠15元。试编写计算销售额的程序。 程序如下: /*c3_13.c*/ #include void main( ) { float money; int national, count; printf("Input national or external: "); scanf("%d",&national); printf("Input count of product: "); scanf("%d",&count); if(national) /* 国内销售 */ if(count<=80) money=count*350.0; else money=count*350.0-(count-80.0)*20.0; else /* 国外销售 */ if( count<=1000) money=count*900.0; else money=count*900.0-(count-1000.0)*15.0; printf("total=%f",money); } 【习题3-14】电文加密的算法是:将字母A变成字母G,a变成g,B变成H,b变成h,依此类推,并且U变成A,V变成B等。从键盘输入一个电文字符,输出其相应的密码。 程序如下: /*c3_14.c*/ 如对您有帮助,请购买打赏,谢谢您! #include void main() { char chr; char password; chr=getchar(); password=chr+6; if(chr<=90) { if(password>90) password=(password%91)+'A'; else password=password%91; } else { if(password>=123) password=(password%123)+'a'; else password=password%123; } printf("The character's password is %c",password); } 【习题3-15】企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 程序如下: /*c3_15.c*/ #include main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1; /*利润为10万元时的奖金*/ bonus2=bonus1+100000*0.75; /*利润为20万元时的奖金*/ 如对您有帮助,请购买打赏,谢谢您! bonus4=bonus2+100000*0.5; bonus6=bonus4+100000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; 金*/ else if(i<=200000) bonus=bonus1+(i-100000)*0.075; 金*/ else if(i<=400000) bonus=bonus2+ (i-200000)*0.05; 金*/ else if(i<=600000) bonus=bonus4+ (i-400000)*0.03; 金*/ else if(i<=1000000) bonus=bonus6+ (i-600000)*0.015; /*利润在60万元至100万元时的奖金*/ else bonus=bonus10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/ printf("bonus=%d",bonus); } 第4章 循环结构程序设计 【习题4-1】分析下面程序的结果: (1)程序运行结果: k=12 (2)程序运行结果: * # (3)程序运行结果: 0 (4)程序运行结果: k=0 (5)程序运行结果: m=1 【习题4-2】假设全班有30个学生,编写一个程序,连续输入30个学生的计算机考试成绩,并计算出全班学生的计算机平均成绩。 程序如下: /*c4_2.c*/ #include void main( ) { float sum=0.0,ave=0.0,score; /*利润在40万至60万元时的奖 /*利润在20万至40万元时的奖 /*利润在10万至20万元时的奖 /*利润为40万元时的奖金*/ /*利润为60万元时的奖金*/ /*利润为100万元时的奖金*/ /*利润在10万元以内按0.1提成奖 如对您有帮助,请购买打赏,谢谢您! int i; for(i=0;i<30;i++) { scanf("%fn",&score); sum+=score; } ave=sum/i; printf("Average is %fn",sum);ave; } 【习题4-3】编程求1!+3!+5!+7!+…+19!的值。 程序如下: /*c4_3.c*/ #include void main( ) { float sum=0.0; int i,j=1; for(i=1;i<20;i++) { j*=i; if(i%2==0) continue; sum+=j; } printf("sum=%en",sum); } 【习题4-4】打印出所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立333方和等于该数字本身,如xyz=x+y+z。 程序如下: /*c4_4.c*/ #include void main( ) { int x,y,z; printf("水仙花数有:"); for(x=1;x<=9;x++) for(y=0;y<=9;y++) for(z=0;z<=9;z++) if(x*100+y*10+z==x*x*x+y*y*y+z*z*z) printf("%-5d",x*100+y*10+z); } 【习题4-5】分别用三种循环控制语句编写程序,求下面和式的值。 如对您有帮助,请购买打赏,谢谢您! 方法一:利用for循环实现 程序如下: /*c4_5a.c*/ #include void main() { int s=0,i; for(i=1;i<=100;i++) s+=i; printf("s=%dn",s); } 方法二:利用while循环实现 程序如下: /*c4_5b.c*/ #include void main() { int s=0,i=1; while(i<=100) { s+=i; i++; } printf("s=%dn",s); } 方法三:利用do-while循环实现 程序如下: /*c4_5c.c*/ #include void main() { int s=0,i=1; do { s+=i; i++; }while(i<=100) printf("s=%dn",s); } 【习题4-6】将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环。 程序如下: /*c4_6.c*/ #include 如对您有帮助,请购买打赏,谢谢您! void main() { int a,b,t; scanf("%d,%d",&a,&b); while(a!=b) { if(a>b) { t=a;a=b;b=t; } printf("%d,%dn",a,b); scanf("%d,%d",&a,&b); } } 【习题4-7】从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。 程序如下: /*c4_7.c*/ #include void main() { int m=0,n=0; char c; while((c=getchar())!='n') { if(c>'A'&&c<='Z') m++; if(c>='a'&&c<='z') n++; } printf("m=%d,n=%d,max=%dn",m,n,m } 【习题4-8】输入n个数,求其最大数、最小数和平均值。 程序如下: /*c4_8.c*/ #include void main( ) { int n,i,max,min,a; float s; scanf("%d,%d",&n,&a); s=max=min=a; for(i=1;i { scanf("%d",&a); s+=a; if(max if(min>a) min=a; 如对您有帮助,请购买打赏,谢谢您! } printf("Max=%d,Min=%d,avg=%f",max,min,s/n); } 【习题4-9】输出显示自然数1~100之间的全部素数。 程序如下: /*c4_9.c*/ #include #include void main() { int n,i,j,l=0; for(n=2;n<=100;n++) { i=sqrt(n); for(j=2;j<=i;j++) if(!(n%j))break; if(j>=i+1) if(l<5) { printf("%dt",n); l++; } else { printf("%dn",n); l=0; } } } 【习题4-10】一个数如果恰好等于它的因子之和,就把它称为“完数”。例如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28是“完数”。编程序找出10000以内的所有“完数”并输出其因子。 程序如下: /*c4_10.c*/ #include void main() { int m,s,i; for(m=2;m<10000;m++) { s=0; for(i=1;i if((m%i)==0) s=s+i; if(s==m) 如对您有帮助,请购买打赏,谢谢您! { printf("%d,its factors are",m); for(i=1;i if(m%i==0) printf("%d ",i); printf("n"); } } } 【习题4-11】求算式xyz+yzz=888中的x、y、z的值(其中xyz和yzz分别表示一个三位数)。 程序如下: /*c4_11.c*/ #include void main() { int x,y,z,i,result=888; for(x=1;x<10;x++) for(y=1;y<10;y++) for(z=0;z<10;z++) { i=100*x+10*y+z+100*y+10*z+z; if(i==result) printf("x=%d,y=%d,z=%dn",x,y,z); } } 【习题4-12】已知鸡兔共有30只,脚共有90只,编程计算鸡兔各有多少只。 程序如下: /*c4_12.c*/ #include void main() { int x,y; for(x=0;x<=30;x++) { y=30-x; if((2*x+y*4)==90) printf("%d,%dn",x,y); } } 【习题4-13】猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。知道第十天早上想再吃时,只剩下一个桃子了。求第一天一共摘了多少个桃子? 分析:前一天桃子数是后一天桃子数的2倍加2个。 程序如下: 如对您有帮助,请购买打赏,谢谢您! /*c4_13.c*/ #include void main( ) { int x,i; x=1; for(i=9;i>=1;i--) x=2*(x+1); printf("%dn",x); } 【习题4-14】编写程序,找出1-99之间的全部同构数。(同构数的定义:出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数) 程序如下: /*c4_14.c*/ #include void main() { int i; for(i=1;i<100;i++) if(i*i%10==i||i*i%100==i) printf("%3d",i); } 【习题4-15】使用嵌套循环输出下列图形: ****** * * * * ****** 程序如下: /*c4_15.c*/ #include void main() { int i,j; for(i=0;i<=3;i++) { for(j=0;j<=5;j++) if(i==0||j==0||i==3||j==5) printf("*"); else printf(" "); printf("n"); } } 【习题4-16】使用循环嵌套输出下列图形: 如对您有帮助,请购买打赏,谢谢您! ***** ***** ***** ***** 程序如下: /*c4_16.c*/ #include void main( ) { int i,j,k; for(i=0;i<=3;i++) /*i是外循环变量用于控制行数*/ { for(k=1;k<=i;k++) /*k是内循环变量用于控制每行的空格数*/ printf(" "); for(j=0;j<=4;j++) /*j是内循环变量用于控制每行中星号的个数*/ printf("*"); printf("n"); } } 【习题4-17】编写一程序,根据用户输入的不同的边长,输出其菱形。例如,边长为3的菱形为: * *** ***** *** * 程序如下: /*c4_17.c*/ #include void main() { int a,i,j,k; printf("please enter the number"); scanf("%d",&a); for(i=0;i<=a-1;i++) { for(j=0;j<=a-2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("n");} for(i=0;i<=a-2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=2*a-4-2*i;k++) printf("*"); 如对您有帮助,请购买打赏,谢谢您! printf("n"); } } 【习题4-18】编程实现从键盘输入若干学号,然后输出学号中十位数字是9的学号(输入0时结束循环)。 程序如下: /*c4_18.c*/ #include void main() { long int num; scanf("%ld",&num); do { if(num/10%10==9) printf("%ld",num); scanf("%ld",&num); }while(num!=0); } y【习题4-19】假设x,y是整数,编程求x的最后3位数,要求x、y从键盘输入。 程序如下: /*c4_19.c*/ #include void main() { int i,x,y; long last=1; printf("Input x and y:"); scanf("%d,%d",&x,&y); for(i=1;i<=y;i++) last=last*x%1000; printf("The last 3 digits:%ldn",last); } 【习题4-20】编程实现将从键盘输入的偶数写成两个素数之和。 程序如下: /*c4_20.c*/ #include #include void main() { int a,b,c,d; scanf("%d",&a); for(b=3;b<=a/2;b+=2) { for(c=2;c<=sqrt(b);c++) 如对您有帮助,请购买打赏,谢谢您! if(b%c==0) break; if(c>sqrt(b)) d=a-b; else continue; for(c=2;c<=sqrt(d);c++) if(d%c==0) break; if(c>sqrt(d)) printf("%d=%d+%dn",a,b,d); } } 第5章 数组 【习题5-1】现有一实型一维数组A[12],其各元素值在内存中排列的顺序为:1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5,请按下列要求编写程序求答案。 (1)数组中元素值最小的数组元素。 (2)数组中元素值最大的数组元素。 (3)数组中某数组元素值等于另外两个数组元素值之和的等式。 (4)数组中某数组元素值等于另外两个数组元素值之差的等式。 程序如下: /*c5_1.c*/ #include void main() { double a[12]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5}; int i,j,k; double max,min; min=a[0]; for(i=0;i<12;i++) if(min>a[i]) min=a[i]; printf("min=%lfn",min); max=a[0]; for(i=0;i<12;i++) if(max printf("max=%lfn",max); for(i=0;i<12;i++) for(j=0;j<12;j++) for(k=0;k<12;k++) { if(i==j||j==k||k==i) continue; if(a[i]+a[j]==a[k]) printf("%lf+%lf=%lfn",a[i],a[j],a[k]); } 如对您有帮助,请购买打赏,谢谢您! for(i=0;i<12;i++) for(j=0;j<12;j++) for(k=0;k<12;k++) { if(i==j||j==k||k==i) continue; if(a[i]-a[j]==a[k]) printf("%lf-%lf=%lfn",a[i],a[j],a[k]); } } 【习题5-2】现有一实型二维数组A[4][3],其各元素值在内存中排列的顺序为: 4.0,28.0,15.5,−9.5,−23.0,8.0,56.0,2.0,28.0,7.0,6.2,5.0 请按下列要求写出各题的答案。 (1)数组中元素值最小的数组元素。 (2)数组中元素值最大的数组元素。 (3)数组中某数组元素值等于另外两个数组元素值之积的等式。 (4)数组中某数组元素值等于另外两个数组元素值之商的等式。 答案: (1)−23.0 (2)56.0 (3)(略) (4)(略) 【习题5-3】完成下列各数组的数组说明语句。 (1)定义一个有100个数组元素的整型一维数组r。 (2)定义一个有100行100列的实型二维数组s。 (3)定义一个整型三维数组t,第一维长度为3,第二维长度为4,第三维长度为5。 (4)定义一个实型四维数组q,第一维长度为6,第二维长度为5,第三维长度为4,第四维长度为3。 答案: (1)int r[100]; (2)float s[100][100]; (3)int t[3][4][5]; (4)float q[6][5][4][3]; 【习题5-4】说明下面各数组定义的含义,并指出对各数组元素所赋的值。 (1)float a[10]={3.,4.5,6.0,8.4,-32.8,3.2,56.0,4.5,2.3,1.5}; (2)int b[10]={3,5,0,12,34,7,8,9,41,88}; (3)float c[2][4]={1.,2.,3.,4.,5.,6.,7.,8.}; (4)int d[3][3]={{1,2,3},{4,5,6},{7,8,9}}; (5)int e[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 答案: (1)(略) (2)(略) (3)(略) (4)(略) 如对您有帮助,请购买打赏,谢谢您! (5)(略) 【习题5-5】按下列要求完成对各数组的初始化数组语句。 (1)实型一维数组A[12],其各元素值在内存中排列的顺序为: 1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0 (2)整型二维数组A[3][3],其各元素值在内存中排列的顺序为: 1,2,3,4,5,6,7,8,9 (3)实型三维数组A[2][3][2],其各元素值在内存中排列的顺序为: 1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.0 答案: float a[12]={1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.0}; int a[3][3]={1,2,3,4,5,6,7,8,9}; float a[2][3][2]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.0}; 【习题5-6】用数组定义语句和scanf语句完成5.4题中各小题相应的功能。 程序如下: /*c5_6.c*/ (略) 【习题5-7】有一整型二维数组a[10][10], 按下列要求写出下列各题C语言程序段。 (1)按行输出所有的数组元素。 (2)按列输出所有的数组元素。 (3)输出主对角线上的所有元素。 (4)输出副对角线上的所有元素。 (5)输出上三角阵(包含主对角线元素)的所有元素。 (6)输出上三角阵(包含副对角线元素)的所有元素。 (7)输出下三角阵(包含主对角线元素)的所有元素。 (8)输出下三角阵(包含副对角线元素)的所有元素。 程序如下: /*c5_7.c*/ #include void main() { int a[10][10]; int i,j,k; for(i=0;i<10;i++) for(j=0;j<10;j++) a[i][j]=i*10+j; printf("==1==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) printf("%3d",a[i][j]); printf("n"); } 如对您有帮助,请购买打赏,谢谢您! printf("n"); printf("==2==n"); fori=0;i<10;i++) { for(j=0;j<10;j++) printf("%3d",a[j][i]); printf("n"); } printf("n"); printf("==3==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(i==j) printf("%3d",a[i][j]); else printf(" "); printf("n"); } printf("n"); printf("==4==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(i+j==10-1) printf("%3d",a[i][j]); else printf(" "); printf("n"); } printf("n"); printf("==5==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(i<=j) printf("%3d",a[i][j]); else printf(" "); printf("n"); 如对您有帮助,请购买打赏,谢谢您! } printf("n"); printf("==6==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(j<10-i) printf("%3d",a[i][j]); else printf(" "); printf("n"); } printf("n"); printf("==7==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(i>=j) printf("%3d",a[i][j]); else printf(" "); printf("n"); } printf("n"); printf("==8==n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(j>=9-i) printf("%3d",a[i][j]); else printf(" "); printf("n"); } printf("n"); } 【习题5-8】阅读、分析下列程序,并写出运行相应程序后的输出结果。 (1)#include "stdio.h" void main() { static int a[10]={1,1,1,1,1,1,1,1,1,1}; 如对您有帮助,请购买打赏,谢谢您! int i,j; for(i=0;i<10;i++) for(j=0;j a[i]=a[i]+a[j]; for(i=0;i<10;i++) printf("%dn",a[i]); } (2)#include "stdio.h" void main() { static int a[200]; int i,j,n; for(i=0;i<200;i++) a[i]=0; n=100; for(i=0;i for(j=0;j a[j]=a[i]+1; printf("%dn",a[n-1]); } (3)#include "stdio.h" void main() { int a,b=0; static int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a) if((c[a]%2)==0) b+=c[a]; printf("%d",b); } (4)#include "stdio.h" void main() { int a,b=0; static int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a) if((a%2)==0) b+=c[a]; printf("%d",b); } (5)#include "stdio.h" main() { int a,b=0; int c[10]={1,2,3,4,5,6,7,8,9,0}; for(a=0;a<10;++a) 如对您有帮助,请购买打赏,谢谢您! b+=c[a]; printf("%d",b); } (6)#include "stdio.h" int c[10]={1,2,3,4,5,6,7,8,9,0}; void main() { int a,b=0; for( a=0;a<10;++a) if((c[a]%2)==1) b+=c[a]; printf("%d",b); } (1) 结果: 1 2 4 8 16 64 128 256 512 (2) 结果:199 (3) 结果:20 (4) 结果:25 (5) 结果:45 (6) 结果:25 【习题5-9】编写一个程序,完成5.1题的要求。 程序如下: /*c5_9.c*/ #include void main() { double a[12]={1.0,15.5,9.5,-23,8.4,66.5,7.1,22.0,54.5,-34,11.3,32.5}; int i,j,k; double max,min; 如对您有帮助,请购买打赏,谢谢您! min=a[0]; for(i=0;i<12;i++) if(min>a[i]) min=a[i]; printf("min=%lfn",min); max=a[0]; for(i=0;i<12;i++) if(max printf("max=%lfn",max); for(i=0;i<12;i++) for(j=0;j<12;j++) for(k=0;k<12;k++) { if(i==j||j==k||k==i) continue; if(a[i]+a[j]==a[k]) printf("%lf+%lf=%lf n",a[i],a[j],a[k]); } for(i=0;i<12;i++) for(j=0;j<12;j++) for(k=0;k<12;k++) { if(i==j||j==k||k==i) continue; if(a[i]-a[j]==a[k]) printf("%lf-%lf=%lf n",a[i],a[j],a[k]); } } 【习题5-10】编写一个程序,完成5.2题的要求。 程序如下: /*c5_10.c*/ (略) 【习题5-11】对给定的整型一维数组a[100]赋值,要求给奇数下标值的元素赋负值,偶数下标值的元素赋正值。 程序如下: /*c5_11.c*/ #include void main() { int a[100]; int i,j,k; for(i=0;i<100;i++) if(i%2==1) a[i]=-1; 如对您有帮助,请购买打赏,谢谢您! else a[i]=1; } 【习题5-12】给整型二维数组b[3][4]输入12个数据,计算并输出数组中所有正数之和、所有负数之和。 程序如下: /*c5_12a.c*/ #include void main() { static int b[3][4]; int i,j,sum1=0,sum2=0; printf("Input 12 numbers:"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&b[i][j]); for(i=0;i<3;i++) for(j=0;j<4;j++) {if(b[i][j]>0) sum1+=b[i][j]; if(b[i][j]<0) sum2+=b[i][j]; } printf("n"); printf("sum1=%d,sum2=%dn",sum1,sum2);} /*c5-12b.c*/ #include void main() { int x[3][4],i,j,a=0,b=0; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&x[i][j]); for(i=0;i<3;i++) for(j=0;j<4;j++) if(x[i][j]>0) a+=x[i][j]; else b+=x[i][j]; printf("%dt%d",a,b); } 【习题5-13】对稀疏数组a[20](所谓稀疏数组,即有若干数组元素值为0的数组),编写一个程序,将所有非零元素值按紧密排列形式转移到数组的前端。(要求:程序中不再开辟其它的单元作为数组元素值的缓存单元) 程序如下: /*c5_13.c*/ #include void main() { int a[20]={0,0,1,0,2,0,0,0,3,4,0,0,0,0,0,5,0,0,6,0}; int i,j,k; for(i=0;i<20;i++) 如对您有帮助,请购买打赏,谢谢您! printf("%3d",a[i]); printf("n"); for(i=1;i<20;i++) { if(a[i]==0) continue; for(k=i-1;k>=0;k--) if(a[k]!=0) break; if(k==i-1) continue; a[k+1]=a[i]; a[i]=0; } for(i=0;i<20;i++) printf("%3d",a[i]); printf("n"); } 【习题5-14】用选择法编写一个程序,使存储在整型数组a[100]中的各元素值按升序排列存放。(要求:程序中至多允许使用一个缓存单元) 程序如下: /*c5_14a.c*/ #include void main() { static int a[100]; int i,j,temp; printf("Input 100 numbers:"); for(i=0;i<100;i++) scanf("%d",&a[i]); for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(a[i]>a[j]) { temp=a[j]; a[j]=a[i]; a[i]=temp; } for(i=0;i<100;i++) printf("%d ",a[i]); printf("n");} /* void main() { int a[100],i,j,min,t; for(i=0;i<100;i++) scanf("%d",&a[i]); for(i=0;i<99;i++) { min=i; for(j=i+1;j<100;j++)
版权声明:本文标题:程序设计基础(C语言)第3版习题及答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1702706461a427530.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论