C语言实验题目.docx
- 文档编号:30680560
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:20
- 大小:22.89KB
C语言实验题目.docx
《C语言实验题目.docx》由会员分享,可在线阅读,更多相关《C语言实验题目.docx(20页珍藏版)》请在冰豆网上搜索。
C语言实验题目
C语言程序设计实验进阶题目
实验一分支语句
实验目的:
掌握使用if-else语句和switch-case语句实现分支结构的方法。
实验内容:
1.运输公司对用户计算运费。
距离越远,每公里运费越低,标准如下:
s<250km无折扣
250<=s<5002%折扣
500<=s<10005%折扣
1000<=s<20008%折扣
2000<=s<300010%折扣
3000<=s15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费计算公式为:
f=p*w*s*(1-d),编写程序计算运费。
要求:
(1)使用switch~case语句。
(2)p、w、s的值从键盘输入。
#include
main()
{intc,s;
floatp,f,w,d;
scanf("%f,%f,%d",&p,&w,&s);
if(s>=3000)c=12;
elsec=s/250;
switch(c)
{case0:
d=0;break;
case1:
d=2;break;
case2:
case3:
d=5;break;
case4:
case5:
case6:
case7:
d=8;break;
case8:
case9:
case10:
case11:
d=10;break;
case12:
d=15;break;
}f=p*w*s*(1-d/100.0);
printf("f=%f\n",f);}
实验二循环语句
实验目的:
掌握使用三种循环语句实现循环结构的方法。
实验内容:
1.编写程序验证下列结论:
任何一个自然数n的立方都等于n个连续奇数之和。
例如:
13=1;23=3+5;33=7+9+11。
要求:
程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0时止。
#include
#include
voidmain()
{
intn,N2,N3;
intm,i,a=0,b=0,s=0;
into;
scanf("%d",&n);
if(n%2==1)
{
N2=n*n;
N3=n*n*n;
printf("%d*%d*%d=%d=",n,n,n,N3);
m=(n-1)/2;
for(i=-m;i<=m;i++)
{
a=N2+i*2;
s=s+a;
b=b+1;
printf("%d",a);
if(b!
=n)
{
printf("+");
}
}
printf("\n");
if(s==N3)
printf("Yes\n");
else
printf("No\n");
}
else
{
N2=n*n;
N3=n*n*n;
printf("%d*%d*%d=%d=",n,n,n,N3);
m=n/2;
for(i=-m;i<=m;i++)
{
o=i/fabs(i);
if(i!
=0)
{
a=N2+i*2+o;
s=s+a;
b=b+1;
printf("%d",a);
if(b!
=n)
{
printf("+");
}
}
}
printf("\n");
if(s==N3)
printf("Yes\n");
else
printf("No\n");
}
}
实验三一维数组
实验目的:
掌握一维数组的定义、初始化,以及一维数组元素的下标法引用和指针法引用。
实验内容:
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的前位。
要求:
(1)数组元素值在程序中初始化。
(2)m的值从键盘输入。
(3)用下标法和指针法两种方法。
实验四数组
实验目的:
掌握二维数组的定义、初始化,以及二维数组元素的下标法引用和指针法引用。
实验内容:
1.有5名学生,每名学生有语文、数学、物理和外语四门课的考试成绩,编程统计各学生的总分和平均分,以及所有学生各科的总计分和平均分。
要求:
(1)成绩在程序中初始化,结果以表格的形式输出。
(2)分别用下标法和指针法实现。
#include
intmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,0};
inti,m,temp;
printf("请输入后移动的位数:
");
scanf("%d",&m);
for(i=0;i<=m;i++)
{
temp=a[i];
a[i]=a[10-m-i];
a[10-i-m]=temp;
}
printf("移动后的数组:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;
}
#include
structstudent
{floatscore[4];
floatstotal;
floatsaverage;
}stu[5];
intmain(void)
{structstudent*p[5];
inti,j;
floattotal[4];
floataverage[4];
//system("cls");
printf("pleaseinputstudents'score:
\n");
for(i=0;i<5;i++)p[i]=&stu[i];
for(i=0;i<5;i++){printf("student%d:
\n",i+1);
for(j=0;j<4;j++)scanf("%f",&p[i]->score[j]);printf("\n");}
for(i=0;i<4;i++)total[i]=p[0]->score[i]+p[1]->score[i]+p[2]->score[i]+p[3]->score[i]+p[4]->score[i];
for(i=0;i<4;i++)average[i]=total[i]/5;
for(i=0;i<5;i++)p[i]->stotal=p[i]->score[0]+p[i]->score[1]+p[i]->score[2]+p[i]->score[3];
for(i=0;i<5;i++)p[i]->saverage=p[i]->stotal/4;
printf("yuwenshuxuewulihuaxuezongfenpingjunfen\n");
for(i=0;i<5;i++)
printf("student%d:
%-3.2f%-3.2f%-3.2f%-3.2f%-3.2f%-3.2f\n",i+1,p[i]->score[0],p[i]->score[1],p[i]->score[2],p[i]->score[3],p[i]->stotal,p[i]->saverage);
printf("yuwenshuxuewulihuaxue\n");
printf("total:
%.2f%.2f%.2f%.2f\n",total[0],total[1],total[2],total[3]);
printf("average:
%-3.2f%-3.2f%-3.2f%-3.2f\n",average[0],average[1],average[2],average[3]);
//getch();
//clrscr();
return(0);
}
实验五字符串
实验目的:
掌握使用下标法和指针法处理字符串。
实验内容:
1.编写程序,统计字符串str中含有子串substr的个数。
要求:
(1)字符串从键盘输入。
(2)分别用下标法和指针法实现。
(1)/*下标法实现*/
#include
#include
voidmain()
{
charstr[100];
inti,j=0;
printf("请输入字符串:
\n");
gets(str);
for(i=0;i if(str[i]=='s'&&str[i+1]=='u'&&str[i+2]=='b'&&str[i+3]=='s'&&str[i+4]=='t'&&str[i+5]=='r') j++; printf("含有子字符串的个数为: %d\n",j); } (2)/*指针法实现*/ #include #include voidmain() { inti,j=0; charstr[100],*p=str; printf("请输入字符串: \n"); gets(str); for(i=0;i if(*(p+i)=='s'&&*(p+i+1)=='u'&&*(p+i+2)=='b'&&*(p+i+3)=='s'&&*(p+i+4)=='t'&&*(p+i+5)=='r') j++; printf("含有子字符串的个数为: %d\n",j); } if(*(p+i)=='s'&&*(p+i+1)=='u'&&*(p+i+2)=='b'&&*(p+i+3)=='s'&&*(p+i+4)=='t'&&*(p+i+5)=='r') 这一步可替换成if(p[i]=='s'&&p[i+1]=='u'&&p[i+2]=='b'&&p[i+3]=='s'&&p[i+4]=='t'&&p[i+5]=='r') #include #include main() {charstr[256],substr[256]; intcount=0; scanf("%s",str); printf("输入子字符串: "); scanf("%s",substr); printf("%s出现在%s中的次数: %d",substr,str,count); getchar(); getchar(); return0;} intfindSubString(char*str,char*substr) {intsubstrLen=0,totalStrLen=0,cursor=0,count=0; while(*str! ='\0') {totalStrLen++; str++;} str=str-totalStrLen; char*strVal=newchar[substrLen+1]; strVal[substrLen]='\0'; while((cursor+substrLen) {memcpy(strVal,str+cursor,substrLen); if(strcmp(substr,strVal)==0) {count++; cursor+=substrLen;} else cursor++; } delete[]strVal; returncount; } #include #include intfun(char*str,char*substr) { intcnt=0; char*p=str,*q; while(*p){ q=strstr(p,substr); if(q==NULL)break; p=q+strlen(substr); cnt++; } returncnt; } NONO() { /*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ charstr[81],substr[3],ch; intn,len,i=0; FILE*rf,*wf; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); while(i<5){ fgets(str,80,rf); fgets(substr,10,rf); len=strlen(substr)-1; ch=substr[len]; if(ch=='\n'||ch==0x1a)substr[len]=0; n=fun(str,substr); fprintf(wf,"%d\n",n); i++; } fclose(rf); fclose(wf); } main() { charstr[81],substr[3]; intn; printf("输入主字符串: "); gets(str); printf("输入子字符串: "); gets(substr); puts(str); puts(substr); n=fun(str,substr); printf("n=%d\n",n); NONO(); } 实验六函数的定义、调用与参数传递 实验目的: 掌握函数的定义、调用和参数的传递方式。 实验内容: 1.编写程序,将一个5×5阶矩阵中最大元素放在中心,四个角分别放4个最小元素(顺序为从左到右,从上到下的顺序一次从小到大存放)。 要求: 通过函数调用方式,并分别使用数组名和指针变量作函数的参数。 实验七函数的嵌套调用和递归调用 实验目的: 掌握函数的嵌套调用和递归调用。 实验内容: 1.编写程序,计算下列函数值: f(x,y)= 其中,s(n)= =p (1)+p (2)+…p(n),p(i)=i! 。 要求: (1)为函数p(i)、s(n)、f(x,y)均编写一个用户函数。 (2)x、y由键盘输入。 f(x,y)=s(x)/s(y) 其中,s(n)=p (1)+p (2)+…p(n),p(i)=i! 。 要求: (1)为函数p(i)、s(n)、f(x,y)均编写一个用户函数。 (2)x、y由键盘输入。 #include intmain() { floatf(intx,inty); inta,b; floatm; scanf("%d%d",&a,&b); m=f(a,b); printf("%f\n",m); return0; } floatf(intx,inty) { ints(inti); floatn; n=s(x)/s(y); returnn; } ints(inta) { intp(inti); intn,z=0; for(n=1;n<=a;n++) z=z+p(n); returnz; } intp(inti) { inta=1,m=1; for(;a<=i;a++) m=m*a; returnm; } n=s(x)/s(y);%conversionfrom'int'to'float',possiblelossofdata。 n是浮点数, s()是整形,可能会丢失数据。 实验八变量的作用域与存储类别 实验目的: 掌握全局变量和局部的定义及作用域。 掌握变量的四种存储类别。 实验内容: 1.输出4×4阶矩阵的最大值、最小值及其下标。 要求: (1)通过函数调用方式。 (2)使用全局变量。 #include main() { intj,i,a[4][4]; printf("请输入矩阵数据: \n"); for(i=0;i<=4;i++) {for(i=0;i<=4;i++) scanf("%d",&a[i]); printf("%4d",a[i][j]);} printf("\n");} void 实验九结构体和链表 实验目的: 掌握结构体类型、结构体类型变量、结构体类型数组和结构类型指针的定义,掌握结构体类型变量和结构体类型变量成员的使用。 掌握链表的定义及操作。 实验内容: 1.已知链表L1和L2中分别存放一个升序序列,编写程序,将两个链表中的升序合并成一个升序序列存放到链表L1中。 要求: (1)分别按带头结点和不带头结点处理。 (2)通过函数调用方式。 structstudent*hebing(structstudent*ah,structstudent*bh) { structstudent*pa1,*pa2,*pb1,*pb2; pa2=pa1=ah; pb2=pb1=bh; do { while((pb1->num>pa1->num)&&(pa1->next! =NULL)) { pa2=pa1; pa1=pa1->next; } if(pb1->num<=pa1->num) { if(ah==pa1) ah=pb1; else pa2->next=pb1; pb1=pb1->next; pb2->next=pa1; pa2=pb2; pb2=pb1; } }while((pa1->next! =NULL)||(pa1==NULL&&pb1! =NULL)); if((pb1! =NULL)&&(pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1; return(ah); } 实验十文件 实验目的: 掌握文件的打开、关闭和文件的读写操作。 实验内容: 1.有两个磁盘文件“A”和“B”,各存放一行字母(不多于80个),今要求把两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C”中去。 #include #include #defineN80 voidfun(char*w,intm) {chara[N]; inti; for(i=0;i i--;m--; for(;m>=0;m--,i--)w[i]=a[m]; } main() {chara[N]="ABCDEFGHIJK"; intm; printf("Theoriginalstring: \n");puts(a); printf("\n\nEnterm: ");scanf("%d",&m); fun(a,m); printf("\nThestringaftermoving: \n");puts(a); printf("\n\n"); NONO(); } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ FILE*rf,*wf;chara[N];intm,i; rf=fopen("D: \\k01\\24010001\\in.dat","r"); wf=fopen("D: \\k01\\24010001\\out.dat","w"); for(i=0;i<10;i++){ fscanf(rf,"%d%s",&m,a); fun(a,m); fprintf(wf,"%s\n",a); } fclose(rf);fclose(wf); } /* 10.10将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素 (顺序为从左到右,从上到下依次从小到大存放)。 写一函数实现之,用main函数调用 */ #include #defineM5//矩阵阶数(为奇数,如3,5,7等,可以自行更改) /*定义函数: 对x行x列的正方形二维数组a进行操作,存放最大数和4个最小数*/ voidreload(inta[][M],intx) { int*max,*m1,*m2,*m3,*m4,t,*tp; inti,j; max=m1=(*a); m2=*a+1; m3=*(a+1); m4=*(a+1)+1;//设置指针初始位置 //以下是让4个指针指向的元素由小到大有序 if(*m1>*m2){tp=m1;m1=m2;m2=tp;} if(*m1>*m3){tp=m1;m1=m3;m3=tp;} if(*m1>*m4){tp=m1;m1=m4;m4=tp;} if(*m2>*m3){tp=m2;m2=m3;m3=tp;} if(*m2>*m4){tp=m2;m2=m4;m4=tp;} if(*m3>*m4){tp=m3;m3=m4;m4=tp;} //------------------------------- //下面找出最大的和4个最小的数 for(i=0;i for(j=0;j { if(*(*(a+i)+j)>*max)max=(*(a+i)+j); if(! (i<=1&&j<=1)) { if(*(*(a+i)+j)<=*m1){m4=m3;m3=m2;m2=m1;m1=(*(a+i)+j);} elseif(*(*(a+i)+j)<=*m2){m4=m3;m3=m2;m2=(*(a+i)+j);} elseif(*(*(a+i)+j)<=*m3){m4=m3;m3=(*(a+i)+j);} elseif(*(*(a+i)+j)<=*m4)m4=(*(a+i)+j); } } //------------------------- //下面按位置要求存放(安置) if(*a==m2){t=*m1;*m1=*m2;*m2=t;tp=m1;m1=m2;m2=tp;} elseif(*a==m3){t=*m1;*m1=*m3;*m3=t;tp=m1;m1=m3;m3=tp;} elseif(*a==m4){t=*m1;*m1=*m4;*m4=t;tp=m1;m1=m4;m4=tp;} elseif(*a==max){t=*m1;*m1=*max;*max=t;tp=m1;m1=max;max=tp;} else{t=**a;**a=*m1;*m1=t;}//以上选择语句安置最小元素(m1指向的元素) if(*a+x-1==m3){t=*m2;*m2=*m3;*m3=t;tp=m2;m2=m3;m3=tp;} elseif(*a+x-1==m4){t=*m2;*m2=*m4;*m4=t;tp=m2;m2=m4;m4=tp;} elseif(*a+x-1==max){t=*m2;*m2=*max;*max=t;tp=m2;m2=max;max=tp;} else{t=*(*a+x-1);*(*a+x-1)=*m2;*m2=t;}//以上选择语句安置m2指向的元素 if(*(a+x-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 题目