当前位置:首页 » 编程语言 » 重邮c语言实验题库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

重邮c语言实验题库

发布时间: 2022-11-03 21:18:48

c语言作业 实验2-3-1 求1到100的和(10 分) 本题要求编写程序,计算表达式 1 + 2 + 3 + ... + 100 的值

#include<stdio.h>
voidmain(){inti,s;
for(i=1,s=0;i<=100;i++)s+=i;
printf("sum=%d ",s);
}

Ⅱ 求c语言程序设计第三版和c语言程序设计实验与习题指导答案

c语言程序设计第三版指导答案

附录F课后题参考答案
习题1
1.1填空题
1.函数
2.主函数main();主函数main()3.主函数main()4.函数首部;函数体5.{;}
6.顺序结构;选择结构;循环结构7..c;.obj;.exe
1.2思考题
1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构
2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。
3.略4.略5.略1.3编程题1.答:
#include"stdio.h"main()
{floata=10,b=20,h=5,s;s=(a+b)*h/2;
printf("s=%f",s);}
2.答:
#include"stdio.h"
main()
{printf("******************************");printf("*helloworld*");printf("******************************");}
习题2
2.1单选题
DBDCADCABBCA
2.2填空题
1.2.000000

2.1;0.500000
3.9;24.65.100;d6.(1)20
(2)0

(3)607.(1)10;6;4
(2)6;9;15
(3)3;60;83
8.55或'7'
9.x=4;y=6;z=3;m=463
2.3改错题(略)
习题3
3.1单选题
BDABCADCACBBA
3.2填空题
1.32.2613.10
4.2,1;互换a,b的值5.6.66.0037.7
8.5.0,4,c=3<Enter>
9.i=10,j=20<Enter>
10.(1)65(2)65,A(3)3.14,123.46
(4)3.141600e+000,1.234560e+002(5)8765.432100(6)8.765432e+003
11.a=2b=5x=8.8y=76.34c1=65c2=9712.%d/%d;%d/%d=%.2f
3.3改错题(略)3.4编程题
1.答:
#include"stdio.h"main(){
intx,y;
scanf("%d%d",&x,&y);printf(" x y ");
printf("十进制数 %d %d ",x,y);printf("八进制数 %o %o ",x,y);printf("十六进制数 %X %x ",x,y);}
2.答:
#include"stdio.h"main(){
charch;
printf("请输入一个大写英文字母");scanf("%c",&ch);
printf("大写英文字母是%c ",ch);printf("它的前导字符是%c ",ch-1);printf("它的后续字符是%c ",ch+1);}
3.答:
#include"stdio.h"main(){
intx,a,b,c,y;
printf("请输入一个三位整数 ");scanf("%d",&x);a=x/100;
b=(x-a*100)/10;c=x%10;
y=c*100+b*10+a;
printf("反向输出该整数:%d ",y);}}
4.答:
#include"stdio.h"main()
{inthour;
doublesalary,salaryday;
scanf("%d,%lf",&hour,&salaryday);
salary=hour*salaryday-hour*salaryday*0.1;
printf("%8.2lf ",salary);}
5.答:
#include"stdio.h"main(){
inta,b,c,t;
printf("请输入三个整数 ");scanf("%d%d%d",&a,&b,&c);
printf("交换前a=%d,b=%d,c=%d ",a,b,c);t=a;a=c;c=b;b=t;
printf("交换后a=%d,b=%d,c=%d ",a,b,c);}
习题4
4.1单选题
BADDDACBBBBA
4.2填空题
1.1
2.(1)a>0||b>0
(2)x>0&&x<=10(3)a==1.5&&b==1.5&&c==1.5
(4)p<a||p<b||p<c
3.(1)0(2)1(3)1(4)0(5)1
4.c=15.-46.17.5,0,38.59.123
10.(cvb=='y'||cvb=='Y')&&(work>=3||college=='y'||college=='Y')&&age<=35
4.3改错题(略)4.4编程题
1.答
#include"stdio.h"
#include"math.h"main(){
doublea,b,c,p,area;
scanf("%lf%lf%lf",&a,&b,&c);
printf("三角形的三边为:%.llf,%.1lf,%.1lf ",a,b,c);if(a+b>c&&a+c>b&&b+c>a){p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("三角形的面积为%.2lf ",area);}else
printf("不能构成三角形 ");}
2.答:
#include"stdio.h"main()
{intx,y;
scanf("%d,%d",&x,&y);if(x*x+y*y>1000)
printf("%d ",(x*x+y*y)/100);else
printf("%d ",x+y);}
3.答:
#include"stdio.h"#include"math.h"main()
{doublex,y;
scanf("%lf",&x);if(x<-2)y=x*x-sin(x);elseif(x<=2)y=pow(2,x)+x;elsey=sqrt(x*x+x+1);
printf("x=%.2lfy=%.2lf ",x,y);}
4.答:
#include"stdio.h"main()
{longge,shi,qian,wan,x;scanf("%ld",&x);wan=x/10000;
qian=x%10000/1000;shi=x%100/10;
ge=x%10;
if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/printf("thisnumberisahuiwen ");else
printf("thisnumberisnotahuiwen ");
}
5.答:
#include"stdio.h"main()
{floatp,w,s,d,f;
scanf("%f,%,%f",p,s,w);if(s>3000)d=0.15elseif(s>=2000)d=0.1;elseif(s>=1000)d=0.08;elseif(s>=500)d=0.05;elseif(s>=250)d=0.02;elsed=0f=p*w*s*(1-d);printf("%f",f);}
6.答:
#include"stdio.h"main()
{intyear,money;charx;
printf("是否是本公司产品(y/n):");scanf("%c",&x);
if(x=='y'||x=='Y')
{printf("产品使用的年限:");scanf("%d",&year);
if(year<=1)money=0;
elseif(year<8)money=50;elsemoney=100;

printf("产品保修额是:%d ",money);
}
else
{money=200;
printf("不是本公司产品,产品保修额是:%d ",money);}}
7.答:
#include"stdio.h"main()
{intmoney,num1,num2;
printf("请输入取款额(≤2000):");scanf("%d",&money);
if(money>2000)printf("请输入取款额数≤2000! ");elseif(money%50==0){num1=money/100;num2=(money-num1*100)/50;printf("需支付100元:%d张 ",num1);printf("需支付50元:%d张 ",num2);}elseprintf("输入钱数必须是50的倍数! ");}
习题5
5.1单选题
CDABAABDDBDBCB
5.2填空题
1.202.333
3.(1)i<10或i<=9(2)j%3!=0
4.(1)flag*(float)k/(k+1)或1.0*flag*k/(k+1)(2)flag=-flag5.(1)max=x


(2)x!=-1(3)scanf("%d",&x)
6.(1)x<=9或x<10
(2)y=9-x
5.3改错题(略)5.4编程题
1.答:
(1)for循环,其他略
#include"stdio.h"
main()
{inti,s=0;
for(i=1;i<=100;i++)s+=i*i;
printf("%d ",s);}
(2)for循环,其他略
#include"stdio.h"main()
{inti=1,p=1;doubles=1;do{
s+=1.0/p;p*=++i;
}while(1.0/p>1e-6);printf("%lf",s);}
2.答:
#include"stdio.h"main()
{intm,n,t,a,b;
scanf("%d,%d",&m,&n)if(m<n)
{t=mm=nn=t}a=m;b=n;t=m%nwhile(t)
{m=nn=tt=m%n;}printf("%d",n);}
3.答:
#include"stdio.h"main()
{intx,y,s=1;
scanf("%d,%d",&x,&y)for(y>0y--)s*=x
printf("%d,%d,%d ",s%10,s/10%10,s/100%10);}
4.答:
#include"stdio.h"main()
{intx,y,z;
for(x=1x<20x++)for(y=1y<33y++){z=100-x-y
if((z%3)==0&&(5*x+3*y+z/3)==100)printf("x=%d,y=%d,z=%d ",x,y,z)}}
5.答:(a)
#include"stdio.h"main()
{intj,k
for(j=1j<=4j++)
{for(k=1;k<=4-j;k++)printf("");printf("****")printf(" ")}}
(b)
#include"stdio.h"main()
{intj,k
for(j=1j<=4j++)
{for(k=1;k<=4-j;k++)printf("");for(k=1k<=2*j-1k++)printf("*")printf(" ")}}
6.答:
程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。
#include<stdio.h>main(){inti,j,k,n;printf("waterflower'numberis:");for(n=100;n<1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出个位*/if(n==i*i*i+j*j*j+k*k*k){printf("%-5d",n);}}printf(" ");}
7.答:
#include<stdio.h>main(){intx;for(x=1000;x>=3;x--)if(x%3==1&&x%5==2&&x%7==3){
printf("该校的学生人数是:%d人 ",x);break;}}
8.答:
#include<stdio.h>main(){intx=12,i=1;while(1)
{if((x+20+i)==2*(x+i))break;i++;}printf("小明母亲在%d年后比小明的年龄大一倍 ",i);printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁 ",x+i,x+20+i);}
习题6
6.1单选题
DBCCBBDC
C语言程序设计教程(第3版)
278
6.2填空题
1.c2.603.1000104.16
6.3编程题
1.答:
#include"stdio.h"#include"math.h"
#defineF(a)a*a+sqrt(3*a*a+2*a+1)main()
{floatx,f;
scanf("%f",&x);
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x)printf("%f ",f);}
习题7
7.1单选题
BCADACCCDABCBDB
7.2填空题
1.(1)2345(2)10010(3)QuickC

(4)1000001000001000001000001(5)Language
(6)LanguageProgramming2.(1)j+=2(2)a[i]>a[j]3.(1)i=1(2)x[i-1]
7.3改错题(略)7.4编程题
1.答:
#defineN10
#include"stdio.h"main()
{inta[N]={1,2,3,4,5,6,7,8,9,10,osum=0,qsum=0,j;for(j=0;j<10;j++)
if(j%2)qsum+=a[j];
elseosum+=a[j];
printf("osum=%d,qsum=%d ",osum,qsum);}
2.答:
#defineN10
#include"stdio.h"main()
{inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;scanf("%d",&x);for(j=0;j<N;j++)
if(x<a[j])break;if(j==N)a[N-1]=x;else
{for(k=N-1;k>j;k--)a[k]=a[k-1];a[j]=x;}
for(j=0;j<N;j++)
printf("%d",a[j]);}
3.答:
#defineM3
#include"stdio.h"main()
{inta[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;for(j=0;j<M;j++)
for(k=0;k<M;k++)if(a[j][k]!=a[k][j]){flag=0;break;}if(flag)printf("ok");elseprintf("NO");}
4.答:
#include"stdio.h"#include"string.h"main()
{charc1[10],c2[10],j;gets(c1);gets(c2);
for(j=0;(c1[j]==c2[j])&&c1[j]&&c2[j];j++);if(c1[j]>c2[j])printf("%d ",1);if(c1[j]<c2[j])printf("%d ",-1);if(c1[j]==c2[j])printf("%d ",0);}
5.答:
#include"stdio.h"#include"string.h"#defineM3#defineN80main()
{chara[M][N],j,k,n[5]={0};for(j=0;j<M;j++)gets(a[j]);
for(j=0;j<M;j++)
for(k=0;a[j][k];k++)
if(a[j][k]>='A'&&a[j][k]<='Z')n[0]++;
elseif(a[j][k]>='a'&&a[j][k]<='z')n[1]++;elseif(a[j][k]>='0'&&a[j][k]<='9')n[2]++;elseif(a[j][k]=='')n[3]++;elsen[4]++;
for(j=0;j<5;j++)printf("%4d",n[j]);}
习题8
8.1单选题
DBDACBACCC
8.2填空题
1.(1)2,1(2)10#30#(3)FOUR,P(4)60
2.(1)49
(2)2
(3)2

(4)

(5)
8.3改错题(略)8.4编程题
1.答:
#include"stdio.h"
main()
{intn1,n2,n3,t;int*p1,*p2,*p3;
printf("pleaseinput3number:n1,n2,n3:");scanf("%d,%d,%d",&n1,&n2,&n3);p1=&n1;
p2=&n2;p3=&n3;
if(*p1>*p2){t=*p1;*p1=*p2;*p2=t;}
if(*p1>*p3){t=*p1;*p1=*p3;*p3=t;}if(*p2>*p3){t=*p2;*p2=*p3;*p3=t;}
printf("thesortednumbersare:%d,%d,%d ",n1,n2,n3);}
2.答:
#include"stdio.h"#defineN3main()
{inta[N],*p=a;for(;p-a<N;p++)scanf("%d",p);p=a+N-1;
for(;p-a>=0;p--)printf("%d",*p);}
3.答:
#include"stdio.h"main()
{inta[10];
intj,minl=0,maxl=0;for(j=0;j<10;j++)
scanf("%d",a+j);for(j=0;j<10;j++)
{if(a[maxl]<*(a+j))maxl=j;if(a[minl]>*(a+j))minl=j;}
j=a[0];a[0]=a[minl];a[minl]=j;j=a[9];a[9]=a[maxl];a[maxl]=j;for(j=0;j<10;j++)printf("%d",*(a+j));}
4.答:
输入阵列如下:123456789101112输出阵列如下:
121110987654321
#defineM3
#defineN4
#include"stdio.h"main()
{inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=&a[0][0],t;for(k=0,j=M*N-1;k<j;k++,j--)
{t=*(p+k);*(p+k)=*(p+j);*(p+j)=t;}for(k=0k<Mk++){for(j=0j<Nj++)
printf("%4d",a[k][j]);printf(" ");
}}
5.答:
#include"stdio.h"main(){
intlen;
charstr[20],*p=str;
printf("pleaseinputastring: ");scanf("%s",str);len=0;
while(*p!=''){
len++;p++;}
printf("thestringhas%dcharacters. ",len);}
6.答:
#include"string.h"#include"stdio.h"main(){
char*str1[5],ch[5][20],k,t,j,*c;voidsort(char**);for(k=0;k<5;k++){str1[k]=ch[k];gets(str1[k]);}for(k=0;k<7;k++)
{t=k;
for(j=k+1;j<5;j++)if(strcmp(*(str1+t),*(str1+j))>0)t=j;c=*(str1+t);
*(str1+t)=*(str1+k)*(str1+k)=c}
for(k=0;k<5;k++)puts(str1[k]);}
习题9
9.1单选题
CBBADDBCCDDCABCBCCBADCDAB
9.2填空题
1.1202.x3.3,2,2,34.fac/i5.8,176.97.1.0/(i*i)8.
fun-in:30,20,10fun-end:1015,35,105010,20,309.01234510.9363611.(1)r+b[k](2)*x
12.7531913.15
14.(1)*x(2)t15.(1)''(2)n++16.024
9.3改错题(略)9.4编程题
1.答:
voidzhuan()
{charch;
while((ch=getchar())!=' ')
{if(ch>='a'&&ch<='z')ch=ch-32;putchar(ch);}}
2.答:
doubleexpp(intn){intk,fac=1;doublesum=1;
for(k=1;k<=n;k++){fac*=k;
sum+=1.0/fac}
return(sum);}
3.答:
intxy3(intx,inty)
{intk,num=1;
for(k=1;k<=yk++)num*=x
num=num%1000returnnum}
4.答:
intage(intn){intc;
if(n==1)c=10
elsec=age(n-1)+2returnc}
5.答:
#include"stdio.h"
main()
{inta,b,c,d;
voidfun(inta,intb,int*c,int*d);scanf("%d%d",&a,&b);fun(a,b,&c,&d);
printf("%d%d",c,d);
}
voidfun(inta,intb,int*c,int*d){if(b)
{*c=a/b;*d=a%b;}}
6.答:
#include"stdio.h"
main(intargc,char*argv[]){intk;
printf("argc=%d ",argc);for(k=1;k<argc;k++)printf("%s ",argv[k]);}
习题10
10.1单选题
CDBBBBBBADCCBDC
10.2填空题
1.所有结构体成员所占存储空间的总和2.与占用存储空间最大的那个成员相等
附录F课后题参考答案

285
3.(1)structsatype(2)3(3)sa.a(4)9(5)psa=&sa4.805.structnode6.0
10.3编程题
1.答:
#include"stdio.h"
structstudent{
longnum;
charname[20];charsex;floatscore;};main()
{structstudents[20],temp;intj,k,man=0,woman=0;
floatsumman=0,sumwoman=0,aveman,avewoman;for(k=0;k<20;k++)
{scanf("%ld%s%c%f",&s[k].num,s[k].name,&s[k].sex,&s[k].score);if(s[k].sex=='m')
{summan+=s[k].score;man++;}else
{sumwoman+=s[k].score;woman++}}
aveman=summan/man;
avewoman=sumwoman/woman;
printf("%d %f %d %f ",man,aveman,woman,avewoman);for(k=0;k<19;k++)
for(j=0;j<20-k;j++)
if(s[j].score<s[j+1].score)
{temp=s[j];s[j]=s[j+1];s[j+1]=temp;}printf("thesortednumbers: ");for(k=0;k<20;k++)
printf("%ld %s %c %5.1f ",s[k].num,s[k].name,s[k].sex,s[k].score);}
习题11
11.1单选题
BADD
11.2填空题
1.3d3d3302.(1)28
(2)20(3)0(4)--9
3.(1)251
(2)42
(3)209
(4)–295(5)848
习题12
12.1单选题
BCDCAADA
12.2填空题
1.rewind(文件指针)2."d1.dat","rb"3.stdin
4.文本文件;二进制文件5.(1)"w"
(2)str[i]--32

(3)"r"
6.fopen7.Hello8.(1)"r"

(2)fgetc(fp)

(3)time++


C语言程序设计实验与习题指导课后程序设计答案
P18
(1)
#include<stdio.h>intmain(void){intcelsius,fahr;fahr=150;celsius=5*fahr/9-5*32/9;printf("fahr=%d,celsius=%d ",fahr,celsius);return0;}
(2)
#include<stdio.h>intmain(void){intcelsius,fahr;celsius=26;fahr=9*celsius/5+32;printf("celsius=%d,fahr=%d ",celsius,fahr);return0;}
(3)
#include<stdio.h>intmain(void){intaverage,math,eng,comp;math=87;eng=72;comp=93;average=(math+eng+comp)/3;printf("math=%d,eng=%d,comp=%d,average=%d ",math,eng,comp,average);return0;}
(4)
#include<stdio.h>intmain(void){intn,a,b,c;n=152
c=n%10;
b=(n/10)%10;a=n/100;
printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d ",n,c,b,a);return0;
}
P27
(1)
#include<stdio.h>#include<math.h>intmain(void){intcelsius,fahr;printf("Entercelsius:");scanf("%d",&celsius);fahr=9*celsius/5+32;printf("fahr%d ",fahr);return0;}
(2)
#include<stdio.h>#include<math.h>intmain(void){intmoney,year;doublerate,interest;printf("Entermoney,year,rate:");scanf("%d%d%lf",&money,&year,&rate);interest=money*pow(1+rate,year)-money;printf("interest=%.2f ",interest);return0;}
(3)
#include<stdio.h>#include<math.h>intmain(void){doublex,y;printf("Enterx:");scanf("%lf",&x);
if(x<0){y=pow(x+1,2)+2*x+1/x;}else{y=sqrt(x);}
printf("y=f(%f)=%.2f ",x,y);return0;
}
(4)
#include<stdio.h>intmain(void){intx,y;printf("Enternum1:");scanf("%d",&x);printf("Enternum2:");scanf("%d",&y);printf("%d+%d=%d ",x,y,x+y);printf("%d-%d=%d ",x,y,x-y);printf("%d*%d=%d ",x,y,x*y);printf("%d/%d=%d ",x,y,x/y);printf("%d%%%d=%d ",x,y,x%y);return0;}
10的阶乘
#include<stdio.h>intmain(void){inti,n,proct;printf("Entern:");scanf("%d",&n);proct=1;for(i=1;i<=n;i++){proct=proct*i;}printf("proct=%d ",proct);return0;}

Ⅲ C语言 编程!!!二、实验题目: 有10个学生,每个学生的数据包括学号,姓名,及三门课成绩,总,平均。

#include(stdio.h)

float score[4];

}person[10];

int i;

printf("请输入10名学生的学号、姓名、及三门成绩:");

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

printf("学号:%d 姓名:%s 成绩:%d %d %d 平均成绩:%d ",person[i]->number,person[i]->name[20],person->score[0],person->score[1],person->score[2],person->score[3]);

}

(3)重邮c语言实验题库扩展阅读:

在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。

不像 COBOL、Fortran 和 PL/I等编程语言,在 C 语言的工作任务里不会包含嵌入的关键字,所以几乎所有的 C 语言程序都是由标准函数库的函数来创建的。

Ⅳ 一些c语言题,一共10道。求高手解答,急,明晚交。。。。。。。。

总考别人是不行的 父母供应你上学不容易的,

有时间少打打游戏 多练习练习比这个强!!

Ⅳ 谁能帮找C语言基础习题

C语言实验参考答案
实验一
5、输入并运行自已编写的程序(教材第一章P14 三 编程题)。
实验二
1、编写一个程序,从键盘接收3个实数(分别为10.0、20.0、5.0),输出这3个数的和s、乘积t和平均值a。
#include <stdio.h>
main()
{float x,y,z,s,t,a;
printf(“x,y,z=”);
scanf(“%f,%f,%f”,&x,&y,&z);
s=x+y+z;
t=x*y*z;
a=s/3;
printf(“s=%f,t=%f,a=%f\n”,s,t,a);
}
2、编程。要求用户输入两个整数a、b(分别为20、10), 读取用户从键盘输入的值,然后:
1)用整数输出这两个数的和、差;
2)用长整型输出这两个数的积,用float输出商;
3)用整数输出这两个数的余数,用float输出平均值。
#include <stdio.h>
main()
{int a,b,he,cha,yu;
long ji;
float shang,aver;
printf(“a,b=”);
scanf(“%d,%d”,&a,&b);
he=a+b;
cha=a-b;
ji=(long)a*b;
shang=1.0*a/b;
yu=a%b;
aver=(a+b)/2.0;
printf(“a+b=%d,a-b=%d,a*b=%ld\n”,he,cha,ji);
printf(“a/b=%f,a%%b=%d,aver=%f\n”,shang,yu,aver);
}
实验三
1、编写一个程序,从键盘接收一个一位的整型数,经转换,用字符函数putchar输出。例如,输入整数5,程序运行后输出字符5。
#include <stdio.h>
main()
{int a;
char c;
printf(“a=”);
scanf(“%d”,&a);
c=a+48;
putchar(c);
}
2、编程。输入半径,计算球体表面积( )和球体积 ( )。
#include <stdio.h>
#define PI 3.1415926
main()
{float r,s,v;
printf(“r=”);
scanf(“%f”,&r);
s=4*PI*r*r;
v=4/3.0*PI*r*r*r;
printf(“s=%f,v=%f\n”,s,v);
}
3、编写一个程序,要求通过键盘给6个变量赋值,然后将变量的值在屏幕上打印输出。这六个变量的值分别为:10,-10,40000,a,3.14,hello。
#include <stdio.h>
main()
{int a,b;
long c;
char d,ch[6];
float e;
scanf(“%d,%d,%ld,%c,%f,%s”,&a,&b,&c,&d,&e,ch);
printf(“%d,%d,%ld,%c,%f,%s\n”,a,b,c,d,e,ch);
}
实验四
1、输入三个整数,分别存放到变量a,b,c中,试编程输出其中的最小值。
#include <stdio.h>
main()
{int a,b,c,min;
printf(“a,b,c=”);
scanf(“%d,%d,%d”,&a,&b,&c);
min=a>b?(b>c?c:b):(a>c?c:a);
printf(“min=%d\n”,min);
}
2、输入一个字符,如是大写字母,则输出相应小写字母;如是小写字母,则输出相应大写字母;其它字符原样输出 。(例如:输入F,输出f,输入b,输出B,输入7,输出7)。
#include <stdio.h>
main()
{char c,ch;
c=getchar();
ch=c;
if(c>=‘A’&&c<=‘Z’)
ch=c+32;
if(c>=‘a’&&c<=‘z’)
ch=c-32;
putchar(ch);
}
实验五
1、函数

⑴用条件表达式求函数值y。
⑵用if语句编程,输入x,输出y,并给出你所使用的测试用例。
解(1)
#include <stdio.h>
main()
{int y;
float x;
printf(“x=”);
scanf(“%f”,&x);
y=x>0?1:(x==0?0:-1);
printf(“y=%d\n”,y);
}
解(2)
#include <stdio.h>
main()
{int y;
float x;
printf(“x=”);
scanf(“%f”,&x);
if(x>0)
y=1;
else if(x==0)
y=0;
else
y=-1;
printf(“y=%d\n”,y);
}
2、试编程输入成绩cj(cj为整型变量),如果cj的值在[100,90]内输出A,在(90,80]内输出B,在(80,70]内输出C,在(70,60]内输出D,在(60,0]内输出E,其它输出错误信息。请使用if语句和switch语句分别实现。
解(1)
#include <stdio.h>
main()
{int cj;
printf(“cj=”);
scanf(“%d”,&cj);
if(cj>=90&&cj<=100)
printf(“A\n”);
else if(cj>=80&&cj<90)
printf(“B\n”);
else if(cj>=70&&cj<80)
printf(“C\n”);
else if(cj>=60&&cj<70)
printf(“D\n”);
else if(cj>=0&&cj<60)
printf(“E\n”);
else
printf(“输入错误\n”);
}
解(2)
#include <stdio.h>
main()
{int cj,n;
printf(“cj=”);
scanf(“%d”,&cj);
n=(cj>=0)+(cj>=60)+(cj>=70)+(cj>=80)+(cj>=90)+(cj>100);
switch(n)
{case 5:printf(“A\n”);break;
case 4:printf(“B\n”); break;
case 3:printf(“C\n”); break;
case 2:printf(“D\n”); break;
case 1:printf(“E\n”); break;
default:printf(“输入错误\n”);
}
}
实验六
1、编程:输出200以内所有能被7整除的数。
#include <stdio.h>
main()
{int i;
for(i=0;i<=200;i+=7)
printf(“%4d”,i);
}
2、从键盘输入n个数(n<10),找出其中最小值,请编写相应程序。
#include <stdio.h>
main()
{int n,i,a,min;
printf(“n=”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{scanf(“%d”,&a);
if(i==1)min=a;
if(min>a)min=a;
}
printf(“min=%d”,min);
}
3、键盘输入正整数m和n(m<n),计算m~n之间所有奇数之和x与偶数之和y,请编程实现。
#include <stdio.h>
main()
{int m,n,i,x1=0,x2=0;
printf(“input m,n(m<n):”);
scanf(“%d,%d”,&m,&n);
for(i=m;i<=n;i++)
if(i%2==1)x1+=i;
else x2+=i;
printf(“x1(奇数之和)=%d,x2(偶数之和)=%d\n”,x1,x2);
}
实验七
1、打印出所有的"水仙花数",所谓的"水仙花数"是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个"水仙花数",因为有153=1*1*1+5*5*5+3*3*3 。
解(1)
#include <stdio.h>
main()
{int a,b,c,n;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{n=100*a+10*b+c;
if(n==a*a*a+b*b*b+c*c*c)
printf(“%d\n”,n);
}
}
解(2)
#include <stdio.h>
main()
{int a,b,c,n;
for(n=100;n<=999;n++)
{a=n/100;
b=n%100/10;
c=n%10;
if(n==a*a*a+b*b*b+c*c*c)
printf(“%d\n”,n);
}
}
2、请分别用三种循环结构编程计算: 1!+2!+3!+...+n! , n的值由键盘输入。
解(1)
#include <stdio.h>
main()
{int n,i;
long p=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{p*=i;
sum+=p;
}
printf(“1!+2!+…+%d!=%ld\n”,n,sum);
}
解(2)
#include <stdio.h>
main()
{int n,i=1;
long p=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
while(i<=n)
{p*=i;
sum+=p;
i++;
}
printf(“1!+2!+…+%d!=%ld\n”,n,sum);
}
解(3)
#include <stdio.h>
main()
{int n,i=1;
long p=1,sum=0;
printf(“n=”);
scanf(“%d”,&n);
do
{p*=i;
sum+=p;
i++;
}
while(i<=n);
printf(“1!+2!+…+%d!=%ld\n”,n,sum);
}
实验八
1、打印输出由1,2,3,4四个数字组成的4位数,并统计它的个数(允许该4位数中有相同的数字,例如:1111,1122,,1212等).。
#include <stdio.h>
main()
{int n,a,b,c,d,num=0;
for(a=1;a<=4;a++)
for(b=1;b<=4;b++)
for(c=1;c<=4;c++)
for(d=1;d<=4;d++)
{n=1000*a+100*b+10*c+d;
printf(“%5d”,n);
num++;
}
printf(“\nnum=%d\n”,num);
}
2、从键盘输入10个正整数进行求和,如果错误地输入了负数,则求和结束。请分别用break和不用break编写相应程序。
解(1) 用break编写程序
#include <stdio.h>
main()
{int i,n,sum=0;
for(i=1;i<=10;i++)
{scanf(“%d”,&n);
if(n>=0)sum+=n;
else break;
}
printf(“sum=%d”,sum);
}
解(2) 不用break编写程序
#include <stdio.h>
main()
{int i=1,n=0,sum=0;
while(i<=10&&n>=0)
{scanf(“%d”,&n);
if(n>=0)
sum+=n;
i++;
}
printf(“sum=%d”,sum);
}
实验九
1、求一个3×3的整数矩阵的副对角线上所有奇数的和sum2。
#include <stdio.h>
main()
{int a[3][3],sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf(“%d”,&a[i][j]);
if(i+j==2&&a[i][j]%2)
sum2+=a[i][j];
}
printf(“sum2=%d”,sum2);
}
2、输入一个正整数n(1<n≤10),再输入n个整数,请编程实现:
⑴ 输出这些数的平均值(保留2位小数)。
⑵ 把这些数逆序后再输出。
⑶ 输出它们中的最大值及其下标(设最大值唯一,下标从0开始)。
⑷ 将它们中的最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。
#include <stdio.h>
main()
{int a[10],n,min,max,xb0,xb1,i,sum,t;
float aver;
printf(“n=”);
scanf(“%d”,&n);
for(i=0;i<n;i++)
scanf(“%d”,&a[i]);
min=a[0];xb0=0;
max=a[0];xb1=0;
sum=a[0];
for(i=1;i<n;i++)
{if(min>a[i]){min=a[i];xb0=i;};
if(max<a[i]){max=a[i];xb1=i;};
sum+=a[i];
}
aver=1.0*sum/n;
printf(“(1)平均值为:%3.2f\n”,aver);
printf(“(2)逆序输出:”);
for(i=n-1;i>=0;i--)
printf(“%4d”,a[i]);
printf(“\n”);
printf(“(3)最大值为:%d,其下标为:%d\n”,max,xb1);
t=a[0];a[0]=a[xb0];a[xb0]=t;
t=a[n-1];a[n-1]=a[xb1];a[xb1]=t;
printf(“(4)经交换后输出:”);
for(i=0;i<n;i++)
printf(“%4d”,a[i]);
printf(“\n”);
}
实验十
1、输入一个以回车结束的字符串(少于80个字符),将该字符串逆序后输出。
#include <stdio.h>
#include <string.h>
main()
{char c[80],ch;
int i,l;
gets(c);
l=strlen(c);
for(i=0;i<l/2;i++)
{ch=c[i];
c[i]=c[l-i-1];
c[l-i-1]=ch;
}
puts(c);
}
2、输入一个以回车结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数,然后再输出该字符串。
#include <stdio.h>
main()
{char c[80],ch;
int i,num=0;
gets(c);
ch=getchar();
for(i=0;c[i]!=‘\0’;i++)
if(c[i]==ch)num++;
printf(“num(%c)=%d\n”,ch,num);
puts(c);
}
实验十一
1、键盘输入2个字符串,将二者连接后的结果输出(用指针完成)。
#include <stdio.h>
#include <string.h>
main()
{char a[40],b[20],*p,*q;
int i,la,lb;
gets(a);
gets(b);
la=strlen(a);
lb=strlen(b);
p=&a[la];
q=b;
for(i=0;i<=lb;i++)
{*p=*q;
p++;
q++;
}
puts(a);
}
2、编一个程序,输入15个整数存入一维数组,按逆序存放后再输出(用指针完成)。
#include <stdio.h>
main()
{ int i,a[15],*p=a,*q,temp;
for(i=0;i<15;i++)
scanf("%d",p+i);
q=&a[14];
for(i=0;i<7;i++)
{temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
p=a;
for(i=0;i<15;i++)
printf("%3d",*(p+i));
}
3、用指针方法,编写一个函数,求矩阵主对角线元素之和Sum。
#include <stdio.h>
main()
{int i,j,a[3][3],*p=*a,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",p);
if(i==j)sum+=*p;
p++;
}
printf("sum=%d\n",sum);
}
4、输入一个3×6的二维整型数组,输出其中最大值、最小值以及它们所在行和列的下标(用指针完成)。
#include <stdio.h>
main()
{int i,j,a[3][6],*p=*a,min,max,xb0_h,xb0_l,xb1_h,xb1_l;
for(i=0;i<3;i++)
for(j=0;j<6;j++)
{scanf("%d",p);
if(i==0&&j==0)
{max=*p;min=*p;
xb0_h=0;xb0_l=0;
xb1_h=0;xb1_l=0;
}
if(max<*p)
{max=*p;xb1_h=i;xb1_l=j;}
if(min>*p)
{min=*p;xb0_h=i;xb0_l=j;}
p++;
}
printf("最大值为:%d,行标:%d,列标:%d\n",max,xb1_h,xb1_l);
printf("最小值为:%d,行标:%d,列标:%d\n",min,xb0_h,xb0_l);
}
实验十二
定义一个含10个学生成绩的结构数组(每个学生的信息包括学号、姓名、成绩),数据自定,要求:
1)求出平均成绩。
2)将成绩从高到低排序输出。
#include <stdio.h>
main()
{int i,j,g[15],temp;
float aver=0;
struct student
{long num;
char name[20];
int grade;
}stu[10]={{101001,“zhao”,78},{101002,“qian”,86},
{101003,“sun”,69},{101004,“li”,77},
{101005,“zhou”,98},{101006,“wu”,56},
{101007,“zheng”,75},{101008,“wang”,88},
{101009,“chen”,73},{101010,“shen”,99}
};
for(i=0;i<10;i++)
{aver+=stu[i].grade;g[i]=stu[i].grade;}
aver=aver/10;
printf(“(1)平均成绩:%5.2f\n”,aver);
for(i=0;i<10;i++)
for(j=i;j<10;j++)
if(g[i]<g[j])
{temp=g[i];
g[i]=g[j];
g[j]=temp;
}
printf(“(2)成绩排序:”);
for(i=0;i<10;i++)
printf(“%4d”,g[i]);
printf(“\n”);
}
实验十三
1、在主函数main()中已有变量定义和函数调用语句:“int a=1,b= -5,c; c=fun (a ,b)”; fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请
1)编写fun函数。
fun(int x , int y)
{ }
2)写出这个主函数main()。
#include <stdio.h>
int fun(int x,int y);
main()
{int a=1,b=-5,c;
c=fun(a,b);
printf(“c=%d\n”,c);
}
int fun(int x,int y)
{if(x>y)return x-y;
else return y-x;
}
2、定义一个函数,求200~500之间满足“用4除余1,(或)用5除余3,(或)用7除余4”的数,且一行打印6个。
#include <stdio.h>
void f(int n);
main()
{int n;
for(n=200;n<=500;n++)
f(n);
}
void f(int n)
{static int p=0,m=0;
if(n%4==1 || n%5==3 || n%7==4)
{p++;
printf("%4d",n);
m=1;
}
else m=0;
if(p%6==0&&m==1)printf("\n");
}
3、函数isprime( ),用来判断一个整形数a是否为素数,若是素数,函数返回1,否则返回0,请编写isprime( ) 函数。
#include <stdio.h>
int isprime(int a);
main()
{int a,n=0;
printf(“a=”);
scanf(“%d”,&a);
if(a>0)n=isprime(a);
if(n==1)printf(“%d是素数”,a);
else printf(“%d不是素数”,a);
}
int isprime(int a)
{int m;
for(m=2;m<a;m++)
if(a%m==0)return 0;
return 1;
}
实验十四
1、编程实现:输入n(n<10)个整数,按从大到小的顺序对其排序。
#include <stdio.h>
main()
{int i,j,a[10],n,t;
printf(“n=”);
scanf(“%d”,&n);
for(i=0;i<n;i++)
scanf(“%d”,&a[i]);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<n;i++)
printf(“%4d”,a[i]);
printf(“\n”);
}
实验十五
1、用多文件模块知识编程解决问题(题目自定)。
实验十六
1、编程,要求实现:在主程序main( )中输入2个整数,通过调用函数将两者的值互换。(要求分别用值传递方式,地址传递方式以及全局外部变量传递方式编程)。
解(1) 用值传递方式编程
用值传递方式不能将两者的值互换。
解(2) 用地址传递方式编程
#include <stdio.h>
void swap(int *x,int *y );
main()
{int x,y;
printf(“x,y=”);
scanf(“%d,%d”,&x,&y);
swap(&x,&y);
printf(“x=%d,y=%d\n”,x,y);
}
void swap(int *x,int *y )
{int temp;
temp=*x;
*x=*y;
*y=temp;
}
解(3) 用全局外部变量传递方式编程
#include <stdio.h>
void swap();
int x,y;
main()
{printf(“x,y=”);
scanf(“%d,%d”,&x,&y);
swap();
printf(“x=%d,y=%d\n”,x,y);
}
void swap()
{int temp;
temp=x;x=y;y=temp;
}

实验十七
1、用递归方法实现求N的阶乘。
#include <stdio.h>
long fact(int n);
main()
{int n;
printf(“n=”);
scanf(“%d”,&n);
if(n>=0)printf(“%d!=%ld\n”,n,fact(n));
else printf(“输入错误!\n”);
}
long fact(int n)
{long p;
if(n<=1)return 1;
else p=n*fact(n-1);
return p;
}
2、用递归方法编写求斐波那契数列的函数,返回值为长整型。斐波那契数列的定义为: ,并写出相应主函数。
#include <stdio.h>
int fib(int n);
main()
{int n,i;
printf(“n=”);
scanf(“%d”,&n);
for(i=0;i<=n;i++)
printf(“%d,”,fib(i));
printf(“…\n”);
}
int fib(int n)
{ if(n==0) return 0;
if(n==1) return 1;
if(n>1) return fib(n-1)+fib(n-2);
}
实验十八
1、统计一个文本文件(该文件您自已此前已建立)中字母、数字及其它字符各有多少个,试编程。
#include <stdio.h>
main()
{char ch;
int zm=0,sz=0,qt=0;
FILE *fp;
fp=fopen(“file1.txt”,“r”);
if(fp==NULL)
{printf(“不能打开文件file1.txt\n”);exit(0);}
while(!feof(fp))
{ch=fgetc(fp);
if((ch>=‘a’&&ch<=‘z’)||( ch>=‘A’&&ch<=‘Z’))
zm++;
else if(ch>=‘0’&&ch<=‘9’)
sz++;
else qt++;
}
fclose(fp);
printf(“zm=%d\n”,zm);
printf(“sz=%d\n”,sz);
printf(“qt=%d\n”,qt);
}
可用以下程序,建立文件file1.txt,并写入20个字符到文件中。
#include "stdio.h"
main()
{int i;
char ch;
FILE *fp;
if((fp=fopen("file1.txt","w"))==NULL)
{printf("file open error!\n");
exit(0);
}
for(i=0;i<20;i++)
{ch=getchar();
fputc(ch,fp);
}
fclose(fp);
}
2、文本文件int.txt中包含若干整数,请把文件中所有数据相加,并把累加和写入文件最后。
#include <stdio.h>
main()
{int a,sum=0;
FILE *fp;
fp=fopen("file2.txt","r");
if(fp==NULL)
{printf("不能打开文件file2.txt\n");exit(0);}
while(!feof(fp))
{fscanf(fp,"%2d",&a);
sum+=a;
}
fclose(fp);
fp=fopen("file2.txt","a");
if(fp==NULL)
{printf("不能打开文件file2.txt\n");exit(0);}
fprintf(fp,"%d",sum);
fclose(fp);
}
可用以下程序,建立文件file2.txt,并写入10个整数到文件中。
#include "stdio.h"
main()
{int i,a;
FILE *fp;
if((fp=fopen("file2.txt","w"))==NULL)
{printf("file open error!\n");
exit(0);
}
for(i=0;i<10;i++)
{scanf("%d",&a);
fprintf(fp,"%2d",a);
}
fclose(fp);
}

Ⅵ C语言实验题

字符需要用'',大写字母的ascii码比小写字母小32,应该用减号。

ps.该程序有个问题,就是当你输入多于10个字符的时候,只读取了10个字符,会有字符还留在缓冲区,如果下次再读取时会异常,建议程序结尾加个getchar();

Ⅶ 大一c语言实验题!急!

1-3:

intf(intx){
return(x&1);
}
main(){
intx;
printf("Pleaseinputthenum:");
scanf("%d",&x);
printf("%s ",f(x)?"Odd":"Even");
}

1-4:

intisprime(inti){
if((i!=0)&&(i!=1)){
inta=2;
for(;a<i;a++){
if(!(i%a))break;
}
return(a>=i);
}else{
return0;
}
}
main(){
intn;
printf("Pleaseinputanumber:");
scanf("%d",&n);
if(isprime(n)){
printf("%disaprimenumber. ",n);
}else{
printf("%disnotaprimenumber. ",n);
}
}

1-6:

intsum(intn){
return(n==1)?1:(n+sum(n-1));
}
main(){
intn;
printf("n=");
scanf("%d",&n);
printf("sum=%d ",sum(n));
}

Ⅷ 急求===《C语言程序设计实验·设计·习题》的答案

这是谭浩强版习题题答案,看与你的是否一致

1.5请参照本章例题,编写一个C程序,输出以下信息:
************
Very Goodj!
************
解:
main()
{
printf(" ************ \n");
printf("\n");
printf(" Very Good! \n");
printf("\n");
printf(" ************\n");
}
1.6编写一个程序,输入a b c三个值,输出其中最大者。
解:main()
{int a,b,c,max;
printf("请输入三个数a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<B)
max=b;
if(max<C)
max=c;
printf("最大数为:%d",max);
}
第三章
3.3 请将下面各数用八进制数和十六进制数表示:
(1)10 (2)32 (3)75 (4)-617
(5)-111 (6)2483 (7)-28654 (8)21003
解:十 八 十六
(10)=(12)=(a)
(32)=(40)=20
(75)=(113)=4b
(-617)=(176627)=fd97
-111=177621=ff91
2483=4663=963
-28654=110022=9012
21003=51013=520b
3.5字符常量与字符串常量有什么区别?
解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符
而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号'\0'.
3.6写出以下程序的运行结果:
#include
void main()
{
char c1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%c b%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c %c\n",c4,c5);
解:程序的运行结果为:
aabb cc abc
A N
3.7将"China"译成密码.密码规律:用原来的字母后面第4个字母代替原来的字母,
例如,字母"A"后面第4个字母是"E",用"E"代替"A".因此,"China"应译为"Glmre".
请编一程序,用赋初值的议程使c1,c2,c3,c4,c5分别变成'G','1','m','r','e',并
输出.
main()
{char c1="C",c2="h",c3="i",c4='n',c5='a';
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}
3.8例3.6能否改成如下:
#include
void main()
{
int c1,c2;(原为 char c1,c2)
c1=97;
c2=98;
printf("%c%c\n",c1,c2);
printf("%d%d\n",c1,c2);
}
解:可以.因为在可输出的字符范围内,用整型和字符型作用相同.
3.9求下面算术表达式的值.
(1)x+a%3*(int)(x+y)%2/4=2.5(x=2.5,a=7,y=4.7)
(2)(float)(a+b)/2+(int)x%(int)y=3.5(设a=2,b=3,x=3.5,y=2.5)
3.10写出下面程序的运行结果:
#include
void main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
解:结果: 9,11,9,10
第4章
4.4.a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'.想得
到以下的输出格式和结果,请写出程序要求输出的结果如下:
a= 3 b= 4 c= 5
x=1.200000,y=2.400000,z=-3.600000
x+y= 3.60 y+z=-1.20 z+x=-2.40
u= 51274 n= 128765
c1='a' or 97(ASCII)
c2='B' or 98(ASCII)
解:
main()
{
int a,b,c;
long int u,n;
float x,y,z;
char c1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z=-3.6;
u=51274;n=128765;
c1='a';c2='b';
printf("\n");
printf("a=%2d b=%2d c=%2d\n",a,b,c);
printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x,y,z);
printf("x+y=%5.2f y=z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6ld n=%9ld\n",u,n);
printf("c1='%c' or %d(ASCII)\n",c1,c2);
printf("c2='%c' or %d(ASCII)\n",c2,c2);
}
4.5请写出下面程序的输出结果.
结果:
57
5 7
67.856400,-789.123962
67.856400 ,-789.123962
67.86,-789.12,67.856400,-789.123962,67.856400,-789.123962
6.785640e+001,-7.89e+002
A,65,101,41
1234567,4553207,d687
65535,17777,ffff,-1
COMPUTER, COM
4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',
问在键盘上如何输入?
main()
{
int a,b;
float x,y;
char c1,c2;
scanf("a=%d b=%d,&a,&b);
scanf(" x=%f y=%e",&x,&y);
scanf(" c1=%c c2=%c",&c1,&c2);
}
解:可按如下方式在键盘上输入:
a=3 b=7
x=8.5 y=71.82
c1=A c2=a
说明:在边疆使用一个或多个scnaf函数时,第一个输入行末尾输入的"回车"被第二
个scanf函数吸收,因此在第二\三个scanf函数的双引号后设一个空格以抵消上行
入的"回车".如果没有这个空格,按上面输入数据会出错,读者目前对此只留有一
初步概念即可,以后再进一步深入理解.
4.7用下面的scanf函数输入数据使a=10,b=20,c1='A',c2='a',x=1.5,y=-
3.75,z=57.8,请问
在键盘上如何输入数据?
scanf("%5d%5d%c%c%f%f%*f %f",&a,&b,&c1,&c2,&y,&z);
解:
main()
{
int a,b;
float x,y,z;
char c1,c2;
scanf("%5d%5d%c%c%f%f",&a,&b,&c1,&c2,&x,&y,&z);
}
运行时输入:
10 20Aa1.5 -3.75 +1.5,67.8
注解:按%5d格式的要求输入a与b时,要先键入三个空格,而后再打入10与20。%*f
是用来禁止赋值的。在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不
会赋给任何变量。
4.8设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积,
用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字.请编
程.
解:main()
{
float pi,h,r,l,s,sq,vq,vz;
pi=3.1415926;
printf("请输入圆半径r圆柱高h:\n");
scanf("%f,%f",&r,&h);
l=2*pi*r;
s=r*r*pi;
sq=4*pi*r*r;
vq=4.0/3.0*pi*r*r*r;
vz=pi*r*r*h;
printf("圆周长为: =%6.2f\n",l);
printf("圆面积为: =%6.2f\n",s);
printf("圆球表面积为: =%6.2f\n",sq);
printf("圆球体积为: =%6.2f\n",vz);
}
4.9输入一个华氏温度,要求输出摄氏温度,公式为C=5/9(F-32),输出要有文字说明,
取两位小数.
解: main()
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);
c=(5.0/9.0)*(f-32);
printf("摄氏温度为:%5.2f\n",c);
}
第五章 逻辑运算和判断选取结构
5.4有三个整数a,b,c,由键盘输入,输出其中最大的数.
main()
{
int a,b,c;
printf("请输入三个数:");
scanf("%d,%d,%d",&a,&b,&c);
if(a<B)
if(b<C)
printf("max=%d\n",c);
else
printf("max=%d\n",b);
else if(a<C)
printf("max=%d\n",c);
else
printf("max-%d\n",a);
}
方法2:使用条件表达式.
main()
{int a,b,c,termp,max;
printf(" 请输入 A,B,C: ");
scanf("%d,%d,%d",&a,&b,&c);
printf("A=%d,B=%d,C=%d\n",a,b,c);
temp=(a>b)?a:b;
max=(temp>c)? temp:c;
printf(" A,B,C中最大数是%d,",max);
}
5.5 main()
{int x,y;
printf("输入x:");
scanf("%d",&x);
if(x<1)
{y=x;
printf("X-%d,Y=X=%d \n",x,y);
}
else if(x<10)
{y=2*x-1;
printf(" X=%d, Y=2*X-1=%d\n",x,y);
}
else
{y=3*x-11;
printf("X=5d, Y=3*x-11=%d \n",x,y);
}
}
(习题5-6:)自己写的已经运行成功!不同的人有不同的算法,这些答案仅供参考! 818pp.com
# include
void main()
{
float s,i;
char a;
scanf("%f",&s);
while(s>100||s<0)
{
printf("输入错误!error!");
scanf("%f",&s);
}
i=s/10;
switch((int)i)
{
case 10:
case 9: a='A';break;
case 8: a='B';break;
case 7: a='C';break;
case 6: a='D';break;
case 5:
case 4:
case 2:
case 1:
case 0: a='E';
}
printf("%c",a);
}
http://818pp.com/
5.7给一个不多于5位的正整数,要求:1.求它是几位数2.分别打印出每一位数字3.
按逆序打印出各位数字.例如原数为321,应输出123.
main()
{
long int num;
int indiv,ten,hundred,housand,tenthousand,place;
printf("请输入一个整数(0-99999):");
scanf("%ld",&num);
if(num>9999)
place=5;
else if(num>999)
place=4;
else if(num>99)
place=3;
else if(num>9)
place=2;
else place=1;
printf("place=%d\n",place);
printf("每位数字为:");
ten_thousand=num/10000;
thousand=(num-tenthousand*10000)/1000;
hundred=(num-tenthousand*10000-thousand*1000)/100;
ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10;
indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10;
switch(place)
{case 5:printf("%d,%d,%d,%d,%d",tenthousand,thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,tenthousand);
break;
case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case 3:printf("%d,%d,%d\n",hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d\n",indiv,ten,hundred);
case 2:printf("%d,%d\n",ten,indiv);
printf("\n反序数字为:");
printf("%d%d\n",indiv,ten);
case 1:printf("%d\n",indiv);
printf("\n反序数字为:");
printf("%d\n",indiv);
}
}
5.8
1.if语句
main()
{long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
scanf("%ld",&i);
if(i<=1e5)bonus=i*0.1;
else if(i<=2e5)bonus=bon1+(i-100000)*0.075;
else if(i<=4e5)bonus=bon2+(i-200000)*0.05;
else if(i<=6e5)bonus=bon4+(i-400000)*0.03;
else if(i<=1e6)bonus=bon6+(i-600000)*0.015;
else bonus=bon10+(i-1000000)*0.01;
printf("bonus=%10.2f",bonus);
}
用switch语句编程序
main()
{long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
int branch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
scanf("%ld",&i);
branch=i/100000;
if(branch>10)branch=10;
switch(branch)
{case 0:bonus=i*0.1;break;
case 1:bonus=bon1+(i-100000)*0.075;break;
case 2:
case 3:bonus=bon2+(i-200000)*0.05;break;
case 4:
case 5:bonus=bon4+(i-400000)*0.03;break;
case 6:
case 7
case 8:
case 9:bonus=bon6+(i-600000)*0.015;break;
case 10:bonus=bon10+(i-1000000)*0.01;
}
printf("bonus=%10.2f",bonus);
} http://818pp.com/

5.9 输入四个整数,按大小顺序输出.
main()
{int t,a,b,c,d;
printf("请输入四个数:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\n\n a=%d,b=%d,c=%d,d=%d \n",a,b,c,d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(a>d)
{t=a;a=d;d=t;}
if(b>c)
{t=b;b=c;c=t;}
if(b>d)
{t=b;b=d;d=t;}
if(c>d)
{t=c;c=d;d=t;}
printf("\n 排序结果如下: \n");
printf(" %d %d %d %d \n",a,b,c,d);
}
5.10塔
main()
{
int h=10;
float x,y,x0=2,y0=2,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
scanf("%f,%f",&x,&y);
d1=(x-x0)*(x-x0)+(y-y0)(y-y0);
d2=(x-x0)*(x-x0)+(y+y0)(y+y0);
d3=(x+x0)*(x+x0)+(y-y0)*(y-y0);
d4=(x+x0)*(x+x0)+(y+y0)*(y+y0);
if(d1>1 && d2>1 && d3>1 && d4>1)
h=0;
printf("该点高度为%d",h);
}

Ⅸ C语言实验题——字符编码

#intclude<stdio.h>
void main()
{
int i=0;
char chr,a[5];
for(i=0;i<55;i++)
{
scanf("%c",&chr);
a[i]=chr+4;
}
printf("password is %s",.a);
}

Ⅹ C语言实验

哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。 例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。

本文描述在网上能够找到的最简单,最快速的哈夫曼编码。本方法不使用任何扩展动态库,比如STL或者组件。只使用简单的C函数,比如:memset,memmove,qsort,malloc,realloc和memcpy。
因此,大家都会发现,理解甚至修改这个编码都是很容易的。

背景
哈夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件。哈夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文本文件中的字符)用一个特定长度的位序列替代。因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列。
编码使用
我用简单的C函数写这个编码是为了让它在任何地方使用都会比较方便。你可以将他们放到类中,或者直接使用这个函数。并且我使用了简单的格式,仅仅输入输出缓冲区,而不象其它文章中那样,输入输出文件。
bool CompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen);
bool DecompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen);
要点说明
速度
为了让它(huffman.cpp)快速运行,我花了很长时间。同时,我没有使用任何动态库,比如STL或者MFC。它压缩1M数据少于100ms(P3处理器,主频1G)。
压缩
压缩代码非常简单,首先用ASCII值初始化511个哈夫曼节点:
CHuffmanNode nodes[511];
for(int nCount = 0; nCount < 256; nCount++)
nodes[nCount].byAscii = nCount;
然后,计算在输入缓冲区数据中,每个ASCII码出现的频率:
for(nCount = 0; nCount < nSrcLen; nCount++)
nodes[pSrc[nCount]].nFrequency++;
然后,根据频率进行排序:
qsort(nodes, 256, sizeof(CHuffmanNode), frequencyCompare);
现在,构造哈夫曼树,获取每个ASCII码对应的位序列:
int nNodeCount = GetHuffmanTree(nodes);
构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。
// parent node
pNode = &nodes[nParentNode++];
// pop first child
pNode->pLeft = PopNode(pNodes, nBackNode--, false);
// pop second child
pNode->pRight = PopNode(pNodes, nBackNode--, true);
// adjust parent of the two poped nodes
pNode->pLeft->pParent = pNode->pRight->pParent = pNode;
// adjust parent frequency
pNode->nFrequency = pNode->pLeft->nFrequency + pNode->pRight->nFrequency;
这里我用了一个好的诀窍来避免使用任何队列组件。我先前就直到ASCII码只有256个,但我分配了511个(CHuffmanNode nodes[511]),前255个记录ASCII码,而用后255个记录哈夫曼树中的父节点。并且在构造树的时候只使用一个指针数组(ChuffmanNode *pNodes[256])来指向这些节点。同样使用两个变量来操作队列索引(int nParentNode = nNodeCount;nBackNode = nNodeCount –1)。
接着,压缩的最后一步是将每个ASCII编码写入输出缓冲区中:
int nDesIndex = 0;
// loop to write codes
for(nCount = 0; nCount < nSrcLen; nCount++)
{
*(DWORD*)(pDesPtr+(nDesIndex>>3)) |=
nodes[pSrc[nCount]].dwCode << (nDesIndex&7);
nDesIndex += nodes[pSrc[nCount]].nCodeLength;
}
(nDesIndex>>3): >>3 以8位为界限右移后到达右边字节的前面
(nDesIndex&7): &7 得到最高位.
注意:在压缩缓冲区中,我们必须保存哈夫曼树的节点以及位序列,这样我们才能在解压缩时重新构造哈夫曼树(只需保存ASCII值和对应的位序列)。
解压缩
解压缩比构造哈夫曼树要简单的多,将输入缓冲区中的每个编码用对应的ASCII码逐个替换就可以了。只要记住,这里的输入缓冲区是一个包含每个ASCII值的编码的位流。因此,为了用ASCII值替换编码,我们必须用位流搜索哈夫曼树,直到发现一个叶节点,然后将它的ASCII值添加到输出缓冲区中:
int nDesIndex = 0;
DWORD nCode;
while(nDesIndex < nDesLen)
{
nCode = (*(DWORD*)(pSrc+(nSrcIndex>>3)))>>(nSrcIndex&7);
pNode = pRoot;
while(pNode->pLeft)
{
pNode = (nCode&1) ? pNode->pRight : pNode->pLeft;
nCode >>= 1;
nSrcIndex++;
}
pDes[nDesIndex++] = pNode->byAscii;
}