C语言程序设计任务式教程赵秀芝课后参考答案_第1页
C语言程序设计任务式教程赵秀芝课后参考答案_第2页
C语言程序设计任务式教程赵秀芝课后参考答案_第3页
C语言程序设计任务式教程赵秀芝课后参考答案_第4页
C语言程序设计任务式教程赵秀芝课后参考答案_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【练习1】模仿案例1,在屏幕上输出“我爱你,中国!”。#include<stdio.h>

intmain(){

printf("我爱你,中国!\n");

return0;

}使用流程图描述求两个整数x和y最大值的算法。程序设计的一般步骤是什么?分析问题设计算法编写程序运行程序,分析结果编写程序文档【练习1】指出表2.2中的词汇,哪些可以作为标识符,哪些不可以作为标识符,并给出原因。表2.2判断哪些可以作为标识符intINThelloHellohello2hello2.8#hello2helloCC++Python3.7x+yx<y>windowsiOSx=?int:不可以,因为int是c语言里的关键字INT:可以hello:可以Hello:可以hello2:可以Hello2.8:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头#hello:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头2hello:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头C:可以C++:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头Python3.7:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头x+y:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头x<y>:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头windows:可以iOS:可以x=?:不可以,因为标识符只能由下划线(_)、英文字母(A~Z和a~z)以及数字字符(0~9)构成,并且不能以数字字符开头【练习2】许多编译器允许美元符$出现在标识符之中,例如,$、$1、a$等在这些编译环境中都是合法标识符。测试你使用的编译器是否支持在标识符中使用美元符$。【练习3】使用宏定义和常变量两种方式分别定义符号N,令N代表100。#defineN100constintN=100;【练习4】尝试给出表2.3中各个类型对应的无符号整型的取值范围。类型缩写占用字节取值范围shortintshort2−intint32位系统中占4字节(−2longintlong4−longlongintlonglong8−类型字节取值范围unsignedshortint20~65,535unsignedint40~4,294,967,295unsignedlongint40~4294967295unsignedlonglongint80~18,446,744,073,709,551,615【练习5】为表2.6中的属性填写合适的数据类型,并给出理由。表2.6为属性填写数据类型属性类型理由年龄int年龄只能是整数月工资double工作可能会出现小数考试分数double平时分和期末分折算后可能会出现小数性别char性别“男”“女”应用字符类型跳高成绩double跳高的高度可能会出现小数【练习6】在程序中定义一些变量,表示某人的出生日期、身高和体重信息,并使用自己的信息作为初始值。intyear=2005;

intmonth=1;

intday=1;

intheight=175;

doubleweight=65.3;【练习7】指出表达式2.5f+(int)7.8%2中存在的类型转换。double-->int(7.8-->7)int-->float((int)7.8%2-->1.000000)【练习8】指出下面代码片段中存在的隐式类型转换。chara='A';---->?shortb=32;---->?intc=1+1.5;---->int-->float(1+1.5-->2.5)doubled=a+b;---->char-->int('A'-->65)【练习9】模仿案例6使用printf输出今天的天气情况,温度、湿度、风力等可能是变量数据利用“占位”形式输出。#include<stdio.h>

intmain(){

floattemperature=37.1;//温度

floathumidity=47.3;//湿度

floatwindPower=3.5;//风力

printf("%f摄氏度\n",temperature);

printf("%f级\n",humidity);

printf("%f%%\n",windPower);

return0;

}【练习10】改写案例6,要求输出小明体重和身高信息时保留2位小数。#include<stdio.h>

intmain()

{

intage=18;//定义变量保存年龄

floatweight=70.25f;//定义变量保存体重

doubleheight=1.85;//定义变量保存身高

chargender='M';//定义变量保存性别

printf("年龄:%d\n",age);//输出年龄

printf("体重(公斤):%0.2f\n",weight);//输出体重

printf("身高(米):%0.2f\n",height);//输出身高

printf("性别(男M/女F)%c\n",gender);//输出性别

printf("爱好:%s\n","编程序、打游戏");//输出爱好

return0;

}【练习11】使用%u、%o和%x分别输出123和-1,并观察显示结果,分析原因。#include<stdio.h>

intmain(){

printf("%u,%u\n",123,-1);

printf("%o,%o\n",123,-1);

printf("%x,%x\n",123,-1);

return0;

}【练习12】尝试分别使用%d和%lld输出longlong型数据9876543210,并观察显示结果。#include<stdio.h>

intmain(){

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

printf("%lld\n",9876543210);

return0;

}【练习13】定义double变量d,输入变量d,四舍五入输出整数部分。#include<stdio.h>

intmain(){

doubled;

intnext;

scanf("%lf",&d);

next=(int)(d*10)%10;

if(next<5){

printf("%d",(int)d);

}else{

printf("%d",(int)d+1);

}

return0;

}【练习14】在程序中定义一些变量,表示某人的出生日期、身高和体重信息,将自己的信息输入这些变量,并输出。【练习15】修改案例11的代码,将其中的++换成--,观察运行结果并分析原因。【练习16】指出表2.13中算术表达式的值和类型,并使用printf输出。表2.13算术表达式1+3.53.5f+8'A'+17/3/27/(3/2)-7%3-7%-37%-31+3.5-->4.5f3.5f+8-->12.5f‘A’+1-->‘B’(char)或66(int)7/3/2-->1(int)7/(3/2)-->7(int)-7%3-->-1(int)-7%-3-->-1(int)【练习17】分析下面程序的输出结果。源程序:#include<stdio.h>intmain(){ inta=33,b=33,c=4,d=4; a%=c++; b%=++d; printf("%d,%d,%d,%d\n",a,b,c,d); return0;}【练习18】分析下面程序的输出结果。源程序:#include<stdio.h>intmain(){ printf("%d\n",sizeof1.2+4); printf("%d\n",sizeof(1.2+4)); printf("%d\n",sizeof-3.8); printf("%d\n",-sizeof3.8); return0;}【练习19】使用sizeof运算符和printf函数,打印表2.3和表2.4中数据类型占用的字节数。#include<stdio.h>

intmain()

{

printf("shortint-->%d字节\n",sizeof(shortint));

printf("int-->%d字节\n",sizeof(int));

printf("longint-->%d字节\n",sizeof(longint));

printf("longlongint-->%d字节\n",sizeof(longlongint));

printf("float-->%d字节\n",sizeof(float));

printf("double-->%d字节\n",sizeof(double));

return0;

}编写程序提示用户输入浮点数表示华氏温度值,输出对应的摄氏温度值。摄氏度(C)=(华氏度(F)-32)÷1.8。#include<stdio.h>

intmain(){

floatF,C;

scanf("%f",&F);

C=(F-32)/1.8;

printf("摄氏度:%f\n",C);

return0;

}编写程序提示用户输入浮点数表示摄氏温度值,输出对应的华氏温度值。华氏度(F)=32+摄氏度(C)×1.8。#include<stdio.h>

intmain(){

floatF,C;

scanf("%f",&C);

F=32+C*1.8;

printf("华氏度:%f\n",F);

return0;

}【练习1】假设有整型变量x,按要求写出表达式。判断x能否被3整除; if(x%3==0)判断x是否为5和7的公倍数; if(x%5==0&&x%7==0)判断x不在闭区间[1,10]; if(x<1&&x>10)判断x是否为正偶数。 if(x%2==0)【练习2】在表3.4中填写常量表达式对应的逻辑值。表3.4判断表达式的“真/假”表达式真/假表达式真/假表达式真/假表达式真/假5>6假-8.6假!5+6真4<7&&9%3假6/7假6%7真!(5+6)假4<7||9%3真【练习3】给出下面程序运行结果,分析原因。源程序:#include<stdio.h>intmain(){ inta=3,b=4,c=5; printf("%d\n",a>b&&b++&&c--);printf("%d,%d\n",b,c);}【练习4】给出下面程序运行结果,分析原因。源程序:#include<stdio.h>intmain(){ unsigneda=100,b=1; intc=100,d=1; printf("%d\n",-1>a&&b++); printf("%d\n",-1>c&&d++); printf("b=%d,d=%d\n",b,d); return0;}【练习5】编写程序,输入一个整数表示年份,判断该年份是否是闰年,闰年输出1,平年输出0。闰年的判断标准是:能被400整除的年份是闰年,例如2000年是闰年;或者,能被4整除同时不能被100整除的年份是闰年,例如2020年是闰年,1900年不是闰年(虽然1900能被4整除,也能被100整除,但1900不能被400整除)。#include<stdio.h>

intmain()

{

intyear;

scanf("%d",&year);

if(year%400==0||year%4==0&&year%100!=0){

printf("是闰年");

}else{

printf("不是闰年");

}

return0;

}【练习6】模仿案例4输入两个浮点数,求最小值,并输出结果。#include<stdio.h>

intmain()

{

floatx,y;

printf("请输入两个浮点数:\n");

scanf("%f%f",&x,&y);

if(x<y)//if语句,判断x是否小于y,满足条件执行x=y

{

x=y;

}

printf("大数=%f\n",x);

return0;

}【练习7】模仿案例5的代码,实现三值排降序,并测试所有可能的输入。#include<stdio.h>

intmain()

{

intx,y,z;

printf("请输入三个整数:\n");

scanf("%d%d%d",&x,&y,&z);

intt;

if(y>x)//第一次比较前两个数,满足条件交换

{

t=y;

y=x;

x=t;

}

if(z>y)//第二次比较后两个数,满足条件交换

{

t=z;

z=y;

y=t;

}

if(y>x)//第三次再次比较前两个数,满足条件交换

{

t=y;

y=x;

x=t;

}

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

return0;

}【练习8】分析以下代码实现的功能。源程序:#include<stdio.h>intmain(){ intscore; printf("输入一个整数:\n"); scanf("%d",&score); if(score>100||score<0) printf("输入有误\n"); if(score>=90&&score<=100) printf("A\n"); if(score>=80&&score<90) printf("B\n"); if(score>=70&&score<80) printf("C\n"); if(score>=60&&score<70) printf("D\n"); if(score>=0&&score<60) printf("E\n"); return0;}score90~100为Ascore80~89为Bscore70~79为Cscore60~69为Dscore60以下为E【练习9】纠正下面代码中的错误,实现输入月份,并输出对应季度的功能。源程序:#include<stdio.h>intmain(){ intmonth; printf("输入一个整数代表月份:\n"); scanf("%d",&month); if(month>12||month<1) printf("输入有误\n"); if(month>=1&&month<=3) printf("第一季度\n"); if(month>=4||month<=6) printf("第二季度\n"); if(month>=7&month<=9) printf("第三季度\n"); if(month>=10&&month<=12); printf("第四季度\n"); return0;}#include<stdio.h>

intmain()

{

intmonth;

printf("输入一个整数代表月份:\n");

scanf("%d",&month);

if(month>12||month<1)

printf("输入有误\n");

if(month>=1&&month<=3)

printf("第一季度\n");

if(month>=4&&month<=6)

printf("第二季度\n");

if(month>=7&&month<=9)

printf("第三季度\n");

if(month>=10&&month<=12)

printf("第四季度\n");

return0;

}【练习10】输入两个整数,使用if-else语句输出两个整数的最大值。#include<stdio.h>

intmain()

{

intx,y;

printf("请输入两个整数:\n");

scanf("%d%d",&x,&y);

if(x<y)//if语句,判断x是否小于y,满足条件执行x=y

{

x=y;

}

printf("大数=%d\n",x);

return0;

}【练习11】输入两个整数,使用条件表达式输出两个整数的最大值。#include<stdio.h>

intmain()

{

intx,y;

printf("请输入两个整数:\n");

scanf("%d%d",&x,&y);

printf("大数=%d\n",x<y?x=y:y);

return0;

}【练习12】输入三个整数,输出三个整数的最大值。#include<stdio.h>

intmain()

{

intx,y,z;

printf("请输入三个整数:\n");

scanf("%d%d%d",&x,&y,&z);

intt;

if(y<x)//第一次比较前两个数,满足条件交换

{

t=y;

y=x;

x=t;

}

if(z<y)//第二次比较后两个数,满足条件交换

{

t=z;

z=y;

y=t;

}

if(y<x)//第三次再次比较前两个数,满足条件交换

{

t=y;

y=x;

x=t;

}

printf("最大值=%d\n",z);

return0;

}【练习13】计算分段函数的值。要求从键盘输入一个浮点型变量,根据f(x)的表达式,求分段函数y=f(x)的值,其f(x)表达式如下所示:

y#include<stdio.h>

intmain()

{

floatx,y;

scanf("%f",&x);

if(x>10){

y=x+2;

}elseif(x<0){

y=2*x-2;

}else{

y=0;

}

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

return0;

}【练习14】输入月份,输出对应季度,使用嵌套if-else语句的方式实现。#include<stdio.h>

intmain()

{

intmonth;

printf("输入一个整数代表月份:\n");

scanf("%d",&month);

if(month>12||month<1)

printf("输入有误\n");

if(month>=1&&month<=3)

printf("第一季度\n");

if(month>=4&&month<=6)

printf("第二季度\n");

if(month>=7&&month<=9)

printf("第三季度\n");

if(month>=10&&month<=12)

printf("第四季度\n");

return0;

}【练习15】使用switch语句完成练习14的内容。#include<stdio.h>

intmain(){

intmonth;

printf("输入一个整数代表月份:\n");

scanf("%d",&month);

switch(month){

case1:

printf("第一季度\n");

break;

case2:

printf("第一季度\n");

break;

case3:

printf("第一季度\n");

break;

case4:

printf("第二季度\n");

break;

case5:

printf("第二季度\n");

break;

case6:

printf("第二季度\n");

break;

case7:

printf("第三季度\n");

break;

case8:

printf("第三季度\n");

break;

case9:

printf("第三季度\n");

break;

case10:

printf("第四季度\n");

break;

case11:

printf("第四季度\n");

break;

case12:

printf("第四季度\n");

break;

default:

printf("输入有误\n");

break;

}

return0;

}【练习16】输入一个整数表示月份,输出平年中,该月份的天数。注意,程序中要有输入合法性验证的分支。#include<stdio.h>

intmain(){

intmonth;

printf("输入一个整数代表月份:\n");

scanf("%d",&month);

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){

printf("%d月有31天\n",month);

}elseif(month==4||month==6||month==9||month==11){

printf("%d月有30天\n",month);

}elseif(month==2){

printf("%d月有28天\n",month);

}else{

printf("月份输入有误\n");

}

return0;

}【练习17】以“按1杭州、按2宁波、……、按11丽水”的形式提供用户选择界面,界面中需要包含浙江省11个地级城市;在接受用户输入的整数后,输出对应城市的简介,简介的内容自拟。#include<stdio.h>

intmain(){

intn;

printf("1.杭州市\n2.宁波市\n3.温州市\n4.嘉兴市\n5.湖州市\n6.绍兴市\n7.金华市\n8.衢州市\n9.舟山市\n10.台州市\n11.丽水市\n");

printf("请选择你要查看的城市序号:\n");

scanf("%d",&n);

if(n==1){

printf("杭州市");

}elseif(n==2){

printf("宁波市");

}elseif(n==3){

printf("温州市");

}elseif(n==4){

printf("嘉兴市");

}elseif(n==5){

printf("湖州市");

}elseif(n==6){

printf("绍兴市");

}elseif(n==7){

printf("金华市");

}elseif(n==8){

printf("衢州市");

}elseif(n==9){

printf("舟山市");

}elseif(n==10){

printf("台州市");

}elseif(n==11){

printf("丽水市");

}else{

printf("输入的序号错误\n");

}

return0;

}输入两个整数表示出生日期的月和日,输出该出生日期对应的星座。输入合法性验证中,2月按照29天计算,即2月29日是合法日期。#include<stdio.h>intmain(){intmonth,day;printf("请输入出生日期的月份和日期(以空格分隔):");scanf("%d%d",&month,&day);if((month==1&&day>=20)||(month==2&&day<=18)){printf("水瓶座");}elseif((month==2&&day>=19)||(month==3&&day<=20)){printf("双鱼座");}elseif((month==3&&day>=21)||(month==4&&day<=19)){printf("白羊座");}elseif((month==4&&day>=20)||(month==5&&day<=20)){printf("金牛座");}elseif((month==5&&day>=21)||(month==6&&day<=21)){printf("双子座");}elseif((month==6&&day>=22)||(month==7&&day<=22)){printf("巨蟹座");}elseif((month==7&&day>=23)||(month==8&&day<=22)){printf("狮子座");}elseif((month==8&&day>=23)||(month==9&&day<=22)){printf("处女座");}elseif((month==9&&day>=23)||(month==10&&day<=23)){printf("天秤座");}elseif((month==10&&day>=24)||(month==11&&day<=22)){printf("天蝎座");}elseif((month==11&&day>=23)||(month==12&&day<=21)){printf("射手座");}elseif((month==12&&day>=22)||(month==1&&day<=19)){printf("摩羯座");}else{printf("输入的日期不合法");}return0;}以分别输入年、月、日的方式读入一个合法日期,输出该日期是当年的第几天(注意闰年与平年)。#include<stdio.h>intmain(){intyear,month,day;intdaysOfMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};inttotalDays=0;printf("请输入年份:");scanf("%d",&year);printf("请输入月份:");scanf("%d",&month);printf("请输入日期:");scanf("%d",&day);if(year%4==0&&year%100!=0||year%400==0){daysOfMonth[2]=29;}for(inti=1;i<month;i++){totalDays+=daysOfMonth[i];}totalDays+=day;printf("该日期是当年的第%d天",totalDays);return0;}编写程序,提示用户输入一个整数表示每周工作的小时数,输入一个浮点数表示时薪,输出本周的工资收入。当周工作时间小于或等于40小时时,工资收入等于小时数乘以时薪;工作时间超过40小时且小于或等于80小时时,超出40小时的部分可获得1.5倍的时薪;工作时间超过80小时,不输出工资收入,提示用户“注意身体”。#include<stdio.h>intmain(){inthours;floathourlyRate;floatincome;printf("请输入每周工作的小时数:");scanf("%d",&hours);printf("请输入时薪:");scanf("%f",&hourlyRate);if(hours<=40){income=hours*hourlyRate;}elseif(hours<=80){income=40*hourlyRate+(hours-40)*hourlyRate*1.5;}else{printf("注意身体");return0;}printf("本周的工资收入为:%.2f",income);return0;}某市出租车分为A、B、C三个档次。A档出租车起步价20元,超过3公里每公里按5元计费;B档出租车起步价15元,超过3公里每公里按4元计费;C档出租车起步价10元,超过3公里每公里按3元计费。编写一个程序,用户以字母的形式输入出租车档次,以浮点数形式输入乘坐里程,根据用户的输入,计算车费,并以四舍五入的方式输出车费的整数部分。#include<stdio.h>#include<math.h>intmain(){chargrade;floatdistance;intfare;printf("请输入出租车档次(A/B/C):");scanf("%c",&grade);printf("请输入乘坐里程(公里):");scanf("%f",&distance);if(grade=='A'){fare=20+ceil(fmax(distance-3,0))*5;}elseif(grade=='B'){fare=15+ceil(fmax(distance-3,0))*4;}elseif(grade=='C'){fare=10+ceil(fmax(distance-3,0))*3;}else{printf("输入的档次无效");return0;}printf("车费为:%d",fare);return0;}“甲、乙、丙、丁、戊、己、庚、辛、壬、癸”称为十天干,“子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥”称为十二地支。把干支顺序相配,正好60为一周期,周而复始,循环记录。这就是“干支纪年”。已知2023年癸卯年。编写程序,输入一个代表年份的整数,输出相应的天干和地支。#include<stdio.h>intmain(){chartg[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};chardz[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};intyear;scanf("%d",&year);intt=(year-4)%10;intd=(year-4)%12;printf("%d年%s%s年",year,tg[t],dz[d]);return0;}严谨细致的工作态度是程序员必备的职业素养。在本项目案例6中,用于求解一元二次方程ax2+bx+c=0的代码不够“完美”,其中没有考虑用户为a或b输入0值的极端情况。编写程序,使用if和if-else的嵌套改写案例6,考虑a为0且b不为0时,一元一次方程的解;以及a和b同为0且c不为0时,方程无解的情况。#include<stdio.h>#include<math.h>intmain(){doublea,b,c;printf("请输入三个浮点数:\n");scanf("%lf%lf%lf",&a,&b,&c);if(a==0&&b!=0){printf("x=%lf",-c/b);}elseif(a==0&&b==0&&c!=0){printf("x属于R\n");}else{doubledelta=b*b-4*a*c;//delta代表一元二次方程的根判别式∆if(delta<0)////通过根判别式∆决定流程{printf("方程无解\n");}else{//存在实数解的分支delta=sqrt(delta);//开方printf("x1=%lf,x2=%lf\n",(-b-delta)/2/a,(-b+delta)/2/a);//输出解}}return0;}【练习1】案例2中用户输入整数的个数是固定值4,即使不使用循环也能很容易地写出代码。请改写案例2,使程序能够计算“任意多个”同学成绩的和。提示:增加变量n表示要输入成绩的个数,用户在输入n个成绩之前,先输入n。#include<stdio.h>

intmain()

{

intn=0,x=0,sum=0,i=0;//定义并初始变量

scanf("%d",&n);

while(i<n)//循环条件

{

scanf("%d",&x);//读入x

sum+=x;//累加

++i;//改变循环变量

}

printf("sum=%d\n",sum);

return0;

}【练习2】模仿案例3,实现求一组数平均数的功能。提示:需要增加一个变量记录用户输入数据的个数。#include<stdio.h>

intmain()

{

intx,sum=0,cnt=0;//定义并初始变量

scanf("%d",&x);//第一次读入x

while(x!=-1){//循环条件

sum+=x;//累加

++cnt;

scanf("%d",&x);//循环体中读入x

}

printf("avg=%f\n",sum*1.0/cnt);

return0;

}【练习3】模拟“请输入密码并以#号键结束”,要求对输入的密码进行+1显示。例如:输入abc123#,则输出bcd234。#include<stdio.h>

intmain()

{

charx;

charstr[1000000];

intcnt=0;

scanf("%c",&x);//第一次读入x

while(x!='#'){//循环条件

str[cnt]=x+1;

++cnt;

scanf("%c",&x);//循环体中读入x

}

printf("%s",str);

return0;

}【练习4】输入一个正整数,输出该数有几位。#include<stdio.h>

intmain()

{

intx;

intcnt=0;

scanf("%d",&x);//第一次读入x

while(x!=0){//循环条件

x/=10;

++cnt;

}

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

return0;

}【练习5】编写程序计算n的阶乘。#include<stdio.h>

intmain()

{

intx;

intsum=1;

scanf("%d",&x);//第一次读入x

while(x!=0){//循环条件

sum*=x;

--x;

}

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

return0;

}【练习6】给出下面程序运行结果,分析原因。源程序:#include<stdio.h>intmain(){ inti=1,j=0; while(i<100) { i*=2; ++j; } printf("i=%d,j=%d\n",i,j); return0;}i=128,j=7【练习7】完善案例8的代码,使其面对小于2的输入时,能够输出“输入有误”的提示信息。#include<stdio.h>

#include<math.h>

intmain()

{

inti,n,nSqrt;

scanf("%d",&n);

if(n<2){

printf("输入有误");

return0;

}

nSqrt=sqrt(n);//计算n的算术平方根并取整

for(i=2;i<=nSqrt;++i){//逐个判断2~nSqrt是否存在n的因数

if(n%i==0){//n能被i整除立即跳出

break;

}

}

if(i>nSqrt){//使用i>nSqrt来决定输出

printf("%u是素数\n",n);

}

else{

printf("%u不是素数\n",n);

}

return0;

}【练习8】求最小的n,满足n的阶乘大于10000。#include<stdio.h>

intmain()

{

intn=1,sum=1;

while(sum<100000){

sum*=n;

n++;

}

printf("%d%d",n,sum);

return0;

}【练习9】改写案例9,要求在循环体中不使用continue,并能完成与案例9相同的功能。#include<stdio.h>

intmain()

{

inti;

for(i=1;i<=25;++i){

if(i%3!=0){

printf("%d",i);

}

}

return0;

}【练习10】输入n,打印下面图形的前n行。122333……#include<stdio.h>

intmain()

{

intn,temp=1;

scanf("%d",&n);

for(inti=0;i<n;++i){

for(intj=0;j<i+1;++j){

printf("%d",i+1);

}

if(i!=n-1)printf("\n");

}

return0;

}【练习11】使用两重循环完成案例11。#include<stdio.h>

intmain()

{

inti,j;

for(i=1;i<=9;++i){//将循环体执行9次

for(j=1;j<=i;++j){//循环打印i个hello

printf("%d*%d=%d",j,i,i*j);

}

printf("\n");//打印换行符号

}

return0;

}升序打印1到100之间所有能被7整除的数。#include<stdio.h>

intmain()

{

for(inti=0;i<100;++i){

if((i+1)%7==0){

printf("%d",i+1);

}

}

return0;

}降序打印1到100之间所有能被7整除的数。#include<stdio.h>

intmain()

{

for(inti=100;i>0;--i){

if(i%7==0){

printf("%d",i);

}

}

return0;

}输入一个整数,输出其所有因数。例如:输入10,输出1、2和5。#include<stdio.h>

intmain()

{

intn;

scanf("%d",&n);

for(inti=1;i<n;++i){

if(n%i==0){

printf("%d",i);

}

}

return0;

}输入两个非负整数,输出这两个整数的最大公约数。#include<stdio.h>

intmain()

{

intn,m;

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

for(inti=n;i>1;--i){

if(n%i==0&&m%i==0){

printf("%d",i);

break;

}

}

return0;

}输出数列1.00!#include<stdio.h>

intmain()

{

inttemp=1;

floatsum=1;

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

sum+=(1.0/temp);

temp*=i;

}

printf("%f",sum);

return0;

}水仙花数是一个3位整数,各个数位上数的立方之和恰好等于这个数本身。例如,153=1×1×1+5×5×5+3×3×3。编程打印所有的水仙花数。#include<stdio.h>

intmain()

{

for(inti=100;i<1000;++i){

intsum=0;

inttemp=i;

while(temp!=0){

intitem=temp%10;

temp/=10;

sum+=item*item*item;

}

if(sum==i){

printf("%d",i);

}

}

return0;

}输入一个整数,输出该整数所有因数之和。例如:输入10,10的因数包括1、2和5,所以输出8。#include<stdio.h>

intmain()

{

intn;

intsum=0;

scanf("%d",&n);

for(inti=1;i<n;++i){

if(n%i==0){

sum+=i;

}

}

printf("%d",sum);

return0;

}输入一个合数n,将n进行质因数分解。例如,输入100,输出2、2、5、5。#include<stdio.h>

intmain(){

intn,i;

scanf("%d",&n);

for(i=2;i<=n;i++){

while(n%i==0){

printf("%d",i);

n/=i;

}

}

return0;

}冰雹猜想的内容是:任何一个大于1的整数n,按照n为偶数则除等2,n为奇数则乘3后再加1的规则不断变化,最终都可以变化为1。例如,n等于20,变化过程为:20、10、5、16、8、4、2、1。编写程序,用户输入n,输出变化过程以及变化的次数。#include<stdio.h>

intmain(){

intn,count=0;

scanf("%d",&n);

while(n!=1){

printf("%d",n);

if(n%2==0){

n/=2;

}else{

n=n*3+1;

}

count++;

}

printf("%dcount=%d",n,count);

return0;

}10、输入正整数n,打印由“*”组成的(2*n-1)×(2*n-1)菱形图案。例如,输入为3,输出以下图案:*************#include<stdio.h>

#include<stdlib.h>

intmain(){

intn,i,j;

scanf("%d",&n);

for(i=1;i<=2*n-1;i++){

for(j=1;j<=2*n-1;j++){

if(abs(i-n)+abs(j-n)<=n-1){

printf("*");

}else{

printf("");

}

}

printf("\n");

}

return0;

}哥德巴赫猜想的内容是:任何一个大于4的偶数,均可拆分成两个奇素数的和。编写程序,在有限的范围内验证哥德巴赫猜想。输入一个偶数n,输出n的所有奇素数拆分方法。例如,输入16,输出3+13、5+11;再如,输入20,输出3+17、7+13。#include<stdio.h>

intmain(){

intn,i,j;

intis_prime;

scanf("%d",&n);

for(i=3;i<=n/2;i+=2){

is_prime=1;

for(j=2;j*j<=i;j++){

if(i%j==0){

is_prime=0;

break;

}

}

if(is_prime){

is_prime=1;

for(j=2;j*j<=n-i;j++){

if((n-i)%j==0){

is_prime=0;

break;

}

}

if(is_prime){

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

}

}

}

return0;

}整数6的因子包括1、2和3,巧合的是6=1+2+3,像6这样所有因子之和恰好等于自身的数称为“完数”。编写程序找出2至10000之间的所有完数。#include<stdio.h>

intmain(){

inti,j,sum;

for(i=2;i<=10000;i++){

sum=0;

for(j=1;j<=i/2;j++){

if(i%j==0){

sum+=j;

}

}

if(sum==i){

printf("%d:",i);

for(j=1;j<=i/2;j++){

if(i%j==0){

printf("%d",j);

}

}

printf("\n");

}

}

return0;

}12、计算2到100之间所有素数的和。#include<stdio.h>

intmain(){

inti,j,sum=0;

intis_prime;

for(i=2;i<=100;i++){

is_prime=1;

for(j=2;j*j<=i;j++){

if(i%j==0){

is_prime=0;

break;

}

}

if(is_prime){

sum+=i;

}

}

printf("%d",sum);

return0;

}【练习1】定义长度为12的整型数组,将你所在班级每个月过生日的人数输入数组中相应元素(1月对应下标0,2月对应下标1,……,12月对应下标11),并统计输出各个季度过生日的人数。#include<stdio.h>

intmain(){

intn,x,i;

scanf("%d",&n);

inta[12]={0};

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

scanf("%d",&x);

a[x-1]++;

}

printf("第一季度生日的人数=%d\n",a[0]+a[1]+a[2]);

printf("第二季度生日的人数=%d\n",a[3]+a[4]+a[5]);

printf("第三季度生日的人数=%d\n",a[6]+a[7]+a[8]);

printf("第四季度生日的人数=%d\n",a[9]+a[10]+a[11]);

return0;

}【练习2】定义长度为12的整型数组,初始化为平年中每个月的天数,并输出。#include<stdio.h>

intmain(){

inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};

for(inti=0;i<a[i];i++){

printf("%d",a[i]);

}

return0;

}【练习3】定义长度为100的数组,为每个元素存入0~9的随机数,再用一个长度为10数组统计,第一个数组中各个整数出现的次数。#include<stdio.h>

#include<stdlib.h>

#include<time.h>

intmain(){

//定义长度为100的数组

intarr[100];

//定义长度为10的数组用于统计次数

intcount[10]={0};

//生成随机数种子

srand(time(NULL));

//为每个元素存入0~9的随机数

for(inti=0;i<100;i++){

arr[i]=rand()%10;

}

//统计各个整数出现的次数

for(inti=0;i<100;i++){

count[arr[i]]++;

}

//输出统计结果

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

printf("%d出现的次数:%d\n",i,count[i]);

}

return0;

}【练习4】定义长度为10的数组,存储0至9的阶乘,并输出。#include<stdio.h>

intfactorial(intn){

if(n<=1){

return1;

}else{

returnn*factorial(n-1);

}

}

intmain(){

//定义长度为10的数组

intarr[10];

//计算并存储0至9的阶乘

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

arr[i]=factorial(i);

}

//输出结果

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

printf("%d的阶乘为:%d\n",i,arr[i]);

}

return0;

}【练习5】模仿案例4,实现对数组元素排降序。并尝试在排序过程中,判断当前轮次是否发生了“交换”,如果在外层循环的某一轮次中,内层循环没有任何一次“交换”发生,便可以使用break语句提前结束排序算法。#include<stdio.h>

#include<stdlib.h>

#defineN(10)

intmain()

{

intscores[N],i,j,flag;

for(i=0;i<N;++i){//随机生成数组元素

scores[i]=rand()%101;

}

printf("排序前:\n");//排序前打印数组

for(i=0;i<N;++i){

printf("%d",scores[i]);

}

printf("\n---------------\n");

for(i=0;i<N-1;++i){//冒泡排序的外层循环进行N-1轮

flag=0;

for(j=0;j<N-1-i;++j){//内层循环进行N-1-i次,比上一轮少1次比较

if(scores[j+1]<scores[j]){//如果相邻元素逆序则交换位置

intt=scores[j+1];

scores[j+1]=scores[j];

scores[j]=t;

flag=1;

}

}

if(flag==0)break;

}

printf("排序后:\n");//排序后打印数组

for(i=0;i<N;++i){

printf("%d",scores[i]);

}

return0;

}【练习6】杨辉三角中的各项与组合数相对应,例如,图5.12右图中第4行第2列元素值等于6,表示从4个物品中选择2个物品,共有6种完全不同的组合方法(从a、b、c、d选择2个字母有ab、ac、ad、bc、bd和cd等6种组合)。请利用杨辉三角算一算师生报名志愿者活动被录取的概率。提示:学生是33人中选6名,老师是16人中选1名,选中的概率是1÷16÷杨辉三角第33行第6列上的数。#include<stdio.h>

//计算组合数

intcombination(intn,intm){

if(m==0||m==n){

return1;

}else{

returncombination(n-1,m-1)+combination(n-1,m);

}

}

intmain(){

intstudents=33;//学生总人数

intteachers=16;//老师总人数

intselected_students=6;//选中的学生人数

intselected_teachers=1;//选中的老师人数

//计算杨辉三角第33行第6列的组合数

intcoeff=combination(students,selected_students)*combination(teachers,selected_teachers);

//计算被录取的概率

doubleprobability=1.0/coeff;

printf("被录取的概率为:%0.12f%%",probability);

return0;

}【练习7】定义长度为19的字符数组将自己的身份证号码作为初始值。提示:使用字符串字面常量的方式初始更加简便。#include<stdio.h>

intmain(){

//定义长度为19的字符数组,并将身份证号码作为初始值

charidNumber[19]="123456789012345678";

//输出身份证号码

printf("身份证号码:%s",idNumber);

return0;

}【练习8】定义2个长度适合的字符数组,分别输入自己的学号和姓名,并输出。提示:一个汉字字符占用2个或更多字节的内存,所以保存姓名的字符数组要有足够的空间。#include<stdio.h>

intmain(){

//定义长度适合的字符数组

charstudentID[10];

charname[20];

//输入学号和姓名

printf("请输入学号:");

scanf("%s",studentID);

printf("请输入姓名:");

scanf("%s",name);

//输出学号和姓名

printf("学号:%s\n",studentID);

printf("姓名:%s\n",name);

return0;

}【练习9】完善案例8,要求用户设置的密码必须同时包含大小写字母、数字字符和其他字符。#include<stdio.h>

#include<string.h>

#include<ctype.h>

intcheckPassword(charpassword[]){

intlengt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论