C程序设计上机实验报告Word下载.docx
《C程序设计上机实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《C程序设计上机实验报告Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
![C程序设计上机实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/27/16845d1f-c167-4c61-bf09-8c99dd74bdde/16845d1f-c167-4c61-bf09-8c99dd74bdde1.gif)
c3=c3+4;
c4=c4+4;
c5=c5+4;
printf("
%c%c%c%c%c\n"
&
c1,&
c2,&
c3,&
c4,&
c5);
←需改进处
return0;
}
问题分析:
输出函数printf书写错误,加上了&
符号
解决方法:
删除&
p.s.输入函数scarf是才需要(“%?
”,&
?
)
改进后:
c1,c2,c3,c4,c5);
←改进处
}
⑤ 用户屏幕:
实验
(二)
数列计算
利用循环语句对简单规律的数列进行混合运算
将整个混合计算分解为对单个独立规律的数列的计算。
以此计算自然数列1+2+3+4,平方数列1*1+2*2+3*3+4*4,分母为自然数的数列1/1+1/2+1/3+1/4.最后将三个数列的和汇总。
{floatsum=0,sum1,sum2,sum3,i1,i2,i3;
for(sum1=0,i1=1;
i1<
4;
i1=i1+1)
sum1=sum1+i1;
for(sum2=0,i2=1;
i2<
i2=i2+1)
sum2=sum2+i2*i2;
for(sum3=0,i3=1;
i3<
i3=i3+1)
sum3=sum3+(1/i3);
sum=sum1+sum2+sum3;
sum=%f\n"
sum);
return0;
实验(三)
显示改进
将书上的例子进行改进,使显示出的结果更加清晰明了
在书本内原有基础上增加一个计数变量i,每循环一次是使技术变量增加1
{intn,i=0;
for(n=100;
n<
=200;
n++)
{if(n%3==0)
continue;
%d"
n);
i++;
if(i%5==0)
\n"
);
}
单个数字输出之间无间隔,使用户易读取错误数字
对输出进行限制,例如改为“%5d”
%5d"
实验(四)
使显示出的结果更加清晰明
在不使用实验三的计数变量的情况下,通过增加计数循环来控制换行
{inti,j;
for(i==1;
i<
=4;
i++)←需改进处
{for(j==1;
j<
=5;
j++)←需改进处
i*j);
return0;
对整型变量i,j错误使用了关系运算符
解决方案:
将关系运算符改为赋值语句
for(i=1;
i++)←改进处
{for(j=1;
j++)←改进处
实验(五)
估算
通过给定公式对π值进行估算,同时掌握对精度值判断的方法
通过while循环表示分母为奇数的数列,由绝对值来判断其末项。
有中间变量sign,sn来分布计算值,最后汇总到Pi
math.h>
{intsign=1,n=1.0;
doublePi,Sn=0.0,time;
←需改进处
while(fabs(1/n)>
=1e-6)
{Sn=Sn+sign*(1/n);
n=n+2;
sign=-sign;
Pi=4*Sn;
time=(n-1)/2;
Pi=%f\ntime=%d"
Pi,time);
输出不正确,Pi=4
由于n定义为整型,所以虽然Pi是双精度实型,但是输出仍旧只能是整型,故应将n定义为双精度实型
{intsign=1;
doublePi,Sn=0.0,time,n=1.0;
←改进处
Pi=%f\ntime=%d\n"
实验(六)
循环语句互换
输出三个数字就换行;
将for循环语句用while循环语句代替
将for语句第一分句提到while结构之前。
第二语句以及for循环内容合并作为while语句内容。
第三分句改为while内部限制条件。
{intf1=1,f2=1,f3;
inti;
%d\n%d\n"
f1,f2);
i=1;
while(i<
=38)
{f3=f2+f1;
f3);
if(i%3==1)
f1=f2;
f2=f3;
i++;
f1、f2、f3是同一列输出;
单个数字之间没有间隔;
经过二的改变后,由于i增加到接近38时f123变得极大所以“%5d”仍不能使各列对齐
去掉f1、f2输出时的换行符;
输出时改为"
%15d"
%d%d"
i=1;
if(i%3==1)printf("
实验(七)
统计程序
运用循环结构统计字符串内各类型字符的数量
输入字符串。
依次对所输入字符串进行扫描,分类进行统计,每扫描一个字符在其对应的类型加一
{charc;
intm=0,n=0,q=0,p=0;
pleaseenterc=?
scanf("
%c"
c);
while(c!
='
\n'
)
{if(c>
A'
&
c<
Z'
||c>
z'
m=m+1;
elseif(c=='
'
n=n+1;
elseif(c>
0'
9'
p=p+1;
elseq=q+1;
letter=%d,space=%d,number=%d,other=%d\n"
m,n,p,q);
(输入内容为12*&
mo)
实验(八)
数组使用
从a[1]开始使用数组
利用for循环,设定i为计数变量,i从1考试赋值
{inta[11],i,j,t;
pleaseenter10numberstoa[i]\n"
=10;
i++)
a[i]);
for(j=1;
j++)
=10-j;
i++)
if(a[i]>
a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
a[i]);
printf("
实验(九)
排序
训练自己基础算法设计能力
通过循环来进行一次筛选。
将两两比较中,小的一个数换为编号小的数,一次进行,直到每两个相邻的数都进行一次比较。
起泡法。
{inta[10],i,j,t;
for(i=0;
=9;
for(j=0;
=9-j;
实验(十)
二维数组使用
交换顺序输出矩阵
通过两个循环来分别控制行和列的循环,按照循环的顺序在for语句中加入矩阵内数字的递推公式。
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
Arraya:
=1;
for(j=0;
=2;
{printf("
a[i][j]);
}←需改进
\nArrayb:
{b[j][i]=a[i][j];
printf("
b[j][i]);
编写时格式没有正确输出,是123456;
152436这样的
只用在第二层for循环内加printf("
就行了,因为第二层for循环本来就是要显示完整个一行以后才出现第二行的内容
{for(j=0;
}←改进
{for(i=0;
i++)
实验(十一)
对数组内数值进行排序,并输出最大数值所在的编号
采用实验九的排序方法,每比较一次,则将i值替换为n值,由n来体现编号,并且在程序最后增加输出n
{intmax,a[3][4],hang,lie,i,j;
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
max=a[0][0];
for(i=0;
=3;
{if(a[i][j]>
max)
max=a[i][j];
hang=i;
lie=j;
max=%d\nhang=%d\nlie=%d"
max,hang,lie);
数组的定义与初始化没有区分清楚,造成重复定义
改进方案:
删除inta[3][4],只保留初始化行
{intmax,hang,lie,i,j;
max=%d\nhang=%d\nlie=%d\n"
实验(十二)
字符串函数比较的探究
字符串比较函数中,str1大于/小于/等于str2会输出什么数字?
利用字符串比较函数编写比较函数,改变被比较值进行试验,从而得到具体数值
string.h>
{inta;
a=strcmp("
※"
"
a);
(改变※的值为:
a/a,a/c,c/a;
分别得到结果0/-1/1)
a/a
a/c
c/a
实验(十三)
比较字符串大小
比较大小,并输出结果
利用strcmp函数进行比较,由strcpy函数进行对换,最后输出结果
#include<
{charstr1[20],str2[20],str3[20];
charmax[20];
pleaseenterstr1,str2,str3.\n"
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>
0)
strcpy(max,str1);
elsestrcpy(max,str2);
if(strcpy(str3,max)>
strcpy(max,str3);
themaxstringis%c\n"
max);
输出总为“0”
将输出格式改为字符串%s
themaxstringis%s\n"
实验(十四)
统计
训练字符数组的使用能力
先输入字符数组,在逐个扫描统计各个字符数量
{charstr[3][80];
inti,j,m=0,n=0,p=0,q=0,w=0,s;
gets(str[3][80]);
=79;
{if(str[i][j]>
str[i][j]<
m++;
elseif(str[i][j]>
n++;
p++;
elseif(str[i][j]=='
q++;
elsew++;
thereare%dcapitalletters,%dsmallletters,%dnumbers,%dspaces,%dothersighs.\n"
m,n,p,q,w);
编写“输入数组”错误写成了gets(str[3][80])
添加循环,分行输入
for(s=0;
s<
s++)
gets(str[s]);
实验(十五)
连续输出字符数组
不使用strcpy函数进行连续输出
输入两个字符串,用scanf函数连续输出
{charstr1[81],str2[81];
%s%s\n"
str1,str2);
实验(十六)
输出字符串
不适用strcpy函数进行覆盖输出
输入两个字符串,用if语句进行比较,用赋值语句进行覆盖,在输出被覆盖的字符
{chars2[81],s1[81];
gets(s2);
gets(s1);
s2[i]!
\0'
s1[i]=s2[i];
printf('
strings1=%s\n"
s1);
由于定义字符数组时写的是【81】,结果输出结果是中间未利用的部分就造成乱码现象
定义短些,或者直接输入字符串,不由用户输入字符串
{chars2[]="
a"
s1[]="
def"
实验(十七)
斐波那契数列
利用函数编写斐波那契数列
将斐波那契数列的递推公式定义为函数F,通过函数进行计算
{intn,m;
intF(intx);
pleaseentern.\n"
n);
m=F(n);
F(n)=%d\n"
m);
retur