C语言.docx
《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(33页珍藏版)》请在冰点文库上搜索。
C语言
1
/*身高预测
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。
小孩成人后身高与其父母身高和自身性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为:
男性成人时身高=(faHeight+moHeight)*0.54(cm)
女性成人时身高=(faHeight*0.923+moHeight)/2(cm)
此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。
*/
#include
voidmain()
{doublefaHeight,moHeight,h,h1=0,h2=0;
charsex,sports,diet;
printf("请输入父亲身高(cm)");
scanf("%lf",&faHeight);
printf("请输入母亲身高(cm)");
scanf("%lf",&moHeight);
printf("请输入孩子性别(F:
女性,M:
男性)");
scanf("%*c%c",&sex);
printf("是否喜爱体育锻炼?
(Y/N)");
scanf("%*c%c",&sports);
printf("是否有良好的卫生饮食习惯?
(Y/N)");
scanf("%*c%c",&diet);
if(sex=='M'||sex=='m')
h=(faHeight+moHeight)*0.54;
else
h=(faHeight*0.923+moHeight)/2;
2
*输入一个学生的两门课成绩(百分制),计算该学生的总分并要求输出成绩等级'A'、'B'、'C'、'D'、'E'。
总分在180分以上为'A',160~179分为'B',140~159分为'C',120~139分为'D',120分以下为'E'。
*/
#include
voidmain()
{inta,b;
printf("请输入两门课的成绩(百分制):
");
scanf("%d%d",&a,&b);
if(a<0||a>100||b<0||b>100)
printf("输入错误(成绩应为百分制)!
");
else
{switch((a+b)/20)
{case20:
case19:
case18:
printf("%d--->A",a+b);break;
case17:
case16:
printf("%d--->B",a+b);break;
case15:
case14:
printf("%d--->C",a+b);break;
case13:
case12:
printf("%d--->D",a+b);break;
default:
printf("%d--->E",a+b);
}
}
}
if(sports=='Y'||sports=='y')h1=0.02;
if(diet=='Y'||diet=='y')h2=0.015;
printf("孩子身高为:
%.2f(cm)",h*(1+h1+h2));
}/*题目:
3
在[200,900]范围内同时满足以下两个条件的十进制数:
(1)其个位数字与十位数字之和除以10所得的余数是百位数字;
(2)该数为素数;
问:
有多少个这样的数,并逐一显示(每行显示5个)。
*/
#include
#include
voidmain()
{inti,j,m,a,b,c,flag;
m=0;
for(i=201;i<900;i+=2)
{a=i/100;
b=i/10%10;
c=i%10;
if((b+c)%10==a)
{flag=1;
for(j=2;j<=(int)sqrt(i);j++)
if(i%j==0)
{flag=0;
break;
}
if(flag==1)
{printf("%4d",i);
m++;
}
if(m%5==0)printf("\n");
}
}
printf("这样的数有%d个",m);
}
4
/*编程输出如下上三角形式的九九乘法表。
123456789
---------
123456789
4681012141618
9121518212427
162024283236
2530354045
36424854
495663
6472
81
*/
#include
voidmain()
{inti,j;
for(i=1;i<10;i++)
printf("%-4d",i);
printf("\n");
for(i=1;i<10;i++)
printf("%-4c",'-');
printf("\n");
for(i=1;i<10;i++)
{for(j=1;j
printf("%-4c",'');
for(j=i;j<10;j++)
printf("%-4d",i*j);
printf("\n");
}
}
5
/*打印fabonacci数列的前20项,该数列前两项为1,以后各项均为前相邻两项之和*/
#include
voidmain()
{intfa[20];
inti;
fa[0]=fa[1]=1;
for(i=2;i<20;i++)
fa[i]=fa[i-1]+fa[i-2];
printf("fabonacci数列的前20项\n");
for(i=0;i<20;i++)
{printf("%-6d",fa[i]);
if((i+1)%5==0)printf("\n");
}
}
6
/*从键盘输入一个班学生(最多30人)的成绩,然后按降序进行排列*/
#include
#defineN30
voidmain()
{doubles[N],t;
intn,i,j;
printf("请输入学生人数:
");
scanf("%d",&n);
for(i=0;i{printf("请输入第%d个学生的成绩:
",i+1);
scanf("%lf",s+i);
}
for(i=0;ifor(j=i+1;jif(s[i]
{t=s[i];
s[i]=s[j];
s[j]=t;
}
printf("\n降序排序后成绩\n");
for(i=0;iprintf("%.2f\n",s[i]);
}
7
/*从键盘输入一个班学生(最多30人)的成绩,然后按降序进行排列*/
#include
#defineN30
voidmain()
{doubles[N],t;
intn,i,j;
printf("请输入学生人数:
");
scanf("%d",&n);
for(i=0;i{printf("请输入第%d个学生的成绩:
",i+1);
scanf("%lf",s+i);
}
for(i=0;ifor(j=0;jif(s[j]
{t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
printf("\n降序排序后成绩\n");
for(i=0;iprintf("%.2f\n",s[i]);
}
8
/*从键盘输入一个班学生(最多30人)的成绩,然后按降序进行排列*/
#include
#defineN30
voidmain()
{doubles[N],t;
intn,i,j,k;
printf("请输入学生人数:
");
scanf("%d",&n);
for(i=0;i{printf("请输入第%d个学生的成绩:
",i+1);
scanf("%lf",s+i);
}
for(i=0;i{k=i;
for(j=i+1;jif(s[k]
if(k!
=i)
{t=s[k];
s[k]=s[i];
s[i]=t;
}
}
printf("\n降序排序后成绩\n");
for(i=0;iprintf("%.2f\n",s[i]);
}
9
/*编写一个程序,利用字符数组实现两个字符串的比较。
*/
#include
#defineN80
intstrbj(chars1[],chars2[])
{inti=0;
while(s1[i]==s2[i])
if(s1[i]=='\0')
return0;
else
i++;
returns1[i]-s2[i];
}
voidmain()
{chars1[N],s2[N];
intk;
printf("请输入第一个字符串");
gets(s1);
printf("请输入第二个字符串");
gets(s2);
k=strbj(s1,s2);
if(k>0)
printf("%s>%s",s1,s2);
elseif(k<0)
printf("%s<%s",s1,s2);
else
printf("%s=%s",s1,s2);
}
10
/*编写程序,输出2~n之间的所有素数,n由键盘输入。
要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。
*/
#include
#include
intsushu(intm)
{inti;
for(i=2;i<(int)sqrt(m);i++)
if(m%i==0)return0;
return1;
}
voidmain()
{intn,i,count=0;
printf("inputn:
");
scanf("%d",&n);
printf("2~%d之间的素数有:
\n",n);
for(i=2;i<=n;i++)
if(sushu(i)==1)
{count++;
printf("%-6d",i);
if(count%5==0)printf("\n");
}
printf("\n");
}
11
/*编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。
*/
#include
#defineN8
doubleaver(doubles[])
{inti;
doublesum=0;
for(i=0;isum+=s[i];
returnsum/N;
}
voidmain()
{doubles[N],a;
inti;
for(i=0;i{printf("请输入第%d个学生的成绩:
",i+1);
scanf("%lf",s+i);
}
printf("平均分为:
%.2f\n",a=aver(s));
printf("高于平均分的成绩有\n");
for(i=0;iif(s[i]>a)printf("%.2f",s[i]);
}
12
/*下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。
*/
#include
#defineN10
voidfun(int*a,intn,int*odd,int*even)
{inti;
*odd=*even=0;
for(i=0;iif(*(a+i)%2==0)
*even+=*(a+i);
else
*odd+=*(a+i);
}
voidmain()
{
inta[N]={1,10,2,3,19,6},i,n=6,odd,even;
printf("Theoriginaldatais:
\n");
for(i=0;iprintf("%5d",*(a+i));
printf("\n\n");
fun(a,n,&odd,&even);
printf("Thesumofoddnumbers:
%d\n",odd);
printf("Thesumofevennumber:
%d\n",even);
}
13
/*编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现
删除字符串str中和字符ch相等所有字符,然后输出字符串str。
*/
#include
#defineN80
voiddele(char*s,charch)
{char*q;
q=s;
while(*s!
='\0')
{if(*s!
=ch)
{*q=*s;
q++;
}
s++;
}
*q='\0';
}
voidmain()
{charstr[N],ch;
printf("请输入字符串:
");
gets(str);
printf("请输入要删除的字符:
");
ch=getchar();
dele(str,ch);
printf("删除%c后的字符串为\n",ch);
puts(str);
}
14
/*某单位进行选举,有5位候选人:
zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
*/
#include
structusr
{charname[50];
intnum;
};
voidmain()
{inti,n;
structusruser[5]={{"zhang",0},{"wang",0},{"li",0},{"zhao",0},{"liu",0}};
printf("请输入选票,5位选手的编号分别是1、2、3、4、5,当输入非选手编号时输入结束:
\n");
scanf("%d",&n);
while(n==1||n==2||n==3||n==4||n==5)
{user[n-1].num++;
scanf("%d",&n);
}
for(i=0;i<5;i++)
printf("%s得票:
%d\n",user[i].name,user[i].num);
}
15
/*设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄*/
#include
structusr
{charname[50];
intage;
};
voidmain()
{inti,j;
structusruser[3]={{"张三",20},{"李四",22},{"王平",23}};
j=0;
for(i=1;i<3;i++)
{if(user[i].agej=i;
}
printf("年龄最小的是%s,年龄%d岁\n",user[j].name,user[j].age);
}
16
/*编写一个程序,将5个字符串写入文件中。
*/
#include
#include
voidmain()
{inti;
charstr[100];
FILE*fp;
fp=fopen("text.txt","w");
if(fp==NULL)
{printf("不能打开这个文件");
exit(0);
}
printf("请输入5个字符串:
\n");
for(i=0;i<5;i++)
{scanf("%s",str);
fprintf(fp,"%s\n",str);
}
fclose(fp);
}
17
/*根据程序提示从键盘输入一个已存在的文本文件的完整文件名,再输入一个新文本文件的完整文件名,
然后将已存在的文本文件中的内容全部复制到新文本文件中*/
#include
#include
voidmain()
{charch,frname[50],fwname[50];
FILE*fr,*fw;
printf("请输入原文件名:
");
scanf("%s",frname);
printf("请输入新文本文件名:
");
scanf("%s",fwname);
fr=fopen(frname,"r");
if(fr==NULL)
{printf("不能打开%s文件",frname);
exit(0);
}
fw=fopen(fwname,"w");
if(fw==NULL)
{printf("不能打开%s文件",fwname);
exit(0);
}
ch=fgetc(fr);
while(!
feof(fr))
{
fputc(ch,fw);
ch=fgetc(fr);
}
fclose(fr);
fclose(fw);
}
改后的
修改原因
2.程序编译(compile)
拼写错误
中所涉及的各种对象为主要考虑因素。
用词错误
数的前缀字符0x,x前面是数字0而不是字符o),由数字0~9、字母A~F或a~f组成。
描述更准确一些
C语言中,用编译预处理命令#define(第6章介绍)来定义符号变量。
⑤在一个程序的同一个语句块中变量不允许重复定义。
内存空间为1字节,取值范围为-128~127。
自右至左
见文档“2.图表和代码的更改”
删除这句话
数为pow(x,y),
漏掉,y
而操作数中至少有一个为实型数据时,择结果为双精
运算b%2!
=0的结果为1,得表达式0&&1③逻辑运算0&&1的结果为0,即整个表达式的计算结果为0。
例2.19假设有整型变量a=2,b=1和x,计算表达式a
(x=5):
a>b?
(x=6):
(x=7)的值。
根据条件运算符的右结合性,计算表达式a
(x=5):
a>b?
(x=6):
(x=7)的值,相当于计算表达式a
(x=5):
(a>b?
(x=6):
(x=7))的值。
根据优先级,应首先计算a>b?
(x=6):
(x=7)的值。
此表达式也是一个条件表达式,因表达式a>b为“真”,所以表达式的值为6(x=6);于是表达式a
(x=5):
(a>b?
(x=6):
(x=7))化简为a
(x=5):
6,因表达式a
表达式2是a+10
/*将变量c转换成单精度型再与4相除(强制类型转换的操作数是c)*/
求表达式(float)c/4的值,
删除这句话
则sizeof(x)=4,sizeof(z)=4,sizeof(x+y)=4,sizeof(double)的值
删除等号
以指数形式输出实数(隐含6位小数,共13位)
见文档“2.图表和代码的更改”
表2-7printf函数常用的格式符
floatr,h,v,s;/*定义r,h,v,s为单精度实型变量*/
floata,b,c,p,s;/*定义a,b,c,p,s为单精度实型变量*/
值小32,即'E'+32会得到小写字母e的ASCII码值101。
4.下列可以正确表示字符常量的是()。
从第3章开始,为了节省篇幅省略了
printf("max=%d\n",b);/*若a≤b,则输出b的值*/
floatscore;/*定义实型变量score,用以表示成绩*/
floatscore;/*定义实型变量score,用以表示成绩*/
floatscore;/*定义实型变量score,用以表示成绩*/
y=3*x+5;/*若x≥2,则y=3x+5*/
x2=-1.500000-1.658312i
case8:
printf("%d:
B\n",score);break;/*80≤score<90,等级为B*/
grade=10或9、grade=8、grade=7、grade=6、grade=5或4、3、2、1、0
见文档“2.图表和代码的更改”
与下面的横线连接起来
见文档“2.图表和代码的更改”
printf("divisoriszero!
\n");/*若除数为0,则输出提示信息*/
删除选项
删除选项
1.判断字符型变量ch为小写字母的表达式是。
floati=1,temp=1,sum=0;/*定义实型变量i、temp、sum,并对其赋初值*/
通过该例题希望大家掌握正负相间问题的处理方法。
这里sign是每一项的符号,循环体内的语句sign=-sign,每循环一次改变一次符号。
sign的初值等于1,循环一次,执行sign=-sign,sign变成-1,再循环一次,执行sign=-sign,sign又变成1。
这样一正一负可以处理像这样正负相间的问题。
sum=5050
floatscore,sum=0,ave;
删除注释
i=1
见文档“2.图表和代码的更改”
floatscore,max,min;/*定义实型变量score,max,min*/
图4-11(a)中输出i的值框后面有箭头线→,与右边的线连接
见文档“2.图表和代码的更改”
菱形框i<=100右边箭头的Y改为N,下边箭头的N改为Y
i%9=0
i%9=0
见文档“2.图表和代码的更改”
if(b>5)/*若b>5,则结束整个循环*/
for(j=1;j