大学大一C语言程序设计实验室上机题全部代码答案(实验 |
|
|
C语言实验报告
实验1-1:
helloworld程序:
源代码:
#include
main()
{
printf("helloworld!\n");
system("pause");
}
实验1-2:
完成3个数据的输入、求和并输出计算结果的程序:
源代码:
#include
main()
{
inti,j,k,sum;
scanf("%d%d%d",&i,&j,&k);
sum=i+j+k;
printf("sum=%d",sum);
system("pause");
实验1-3:
在屏幕上输出如下图形:
A
BBB
CCCCC
源代码:
#include
main()
{
printf("A\n");
printf("BBB\n");
printf("CCCCC\n");
system("pause");
}
实验2-1:
计算由键盘输入的任何两个双精度数据的平均值
源代码:
#include
main()
{
doublea,b;
scanf("%lf%lf",&a,&b);
printf("%.1lf\n",(a+b)/2);
system("pause");
}
实验2-2:
写一个输入7个数据的程序,把输入的数据代入a+b(c–d)/ef–g表达式进行运算
源代码:
#include
main()
{
floata,b,c,d,e,f,g,x;
scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);
x=a+b(c-d)/ef-g;
printf("x=%f",x);
system("pause");
}
实验2-3:
编写一个C语言程序,测试下列各表达式:
i,j
i+1,j+1
i++,j++
++i,++j
i+++++j
源代码:
#include
main()
{
inti=1,j=1;
printf("%d%d\n",i+1,j+1);
printf("%d%d\n",i++,j++);
printf("%d%d\n",++i,++j);
printf("%d\n",(i++)+(++j));
system("pause");
}
实验2-4:
输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
interest=money(1+rate)year-money
源代码:
#include
#include
main()
{
intyear=2;
floatrate=0.1,money=1000;
floatfutureMoney;
futureMoney=moneypow((1+rate),year);
printf("%10.2f",futureMoney);
system("pause");
}
实验2-5:
输入华氏温度,输出对应的摄氏温度。计算公式如下:
c=5(f-32)/9
其中,c表示摄氏温度,f表示华氏温度
源代码:
#include
main()
{
intc,f;
scanf("%d",&f);
c=5(f-32)/9;
printf("%d",c);
system("pause");
}
实验3-1:
编写一个程序完成输入一个整数,输出它的符号
源代码:
#include
main()
{
inti;
scanf("%d",&i);
if(i>0)
printf("+");
else
printf("-");
system("pause");
}
实验3-2:
请编写居民应交水费,并提供各种测试数据。
居民应交水费y(元)与月用水量x(吨)的函数关系式如下:
0x<0
y=f(x)=4x/30≤x≤15
2.5x–10.5x>15
源代码:
#include
main()
{
floatx,y;
scanf("%f",&x);
if(x<0)
printf("0");
elseif(x>=0&&x<=15)
{
y=4x/3;
printf("%f",y);
}
elseif(x>15)
{
y=2.5x-10.5;
printf("%f",y);
}
system("pause");
}
实验3-3:
请根据输入的学生成绩给出成绩等级的判断,判断规则如下:
如果输入的成绩大于等于90,则输出优秀;
如果输入的成绩小于90、大于等于80,则输出良好;
如果输入的成绩小于80、大于等于70,则输出中等;
如果输入的成绩小于70、大于等于60,则输出及格;
其他输出不及格
源代码:
#include
main()
{
intx;
scanf("%d",&x);
if(x>=90)
printf("优秀\n");
elseif(x>=80&&x<90)
printf("良好\n");
elseif(x>=70&&x<80)
printf("中等\n");
elseif(x>=60&&x<70)
printf("及格\n");
else
printf("不及格\n");
system("pause");
}
实验3-4:
运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s=250km没有折扣
250km≤s<500km2%折扣
500km≤s<1000km5%折扣
1000km≤s<2000km8%折扣
2000km≤s<3000km10%折扣
3000km≤s15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:
f=pws(1–d)
请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费
源代码:
#include
main()
{
intp,w,s,f;
scanf("%d%d%d",&p,&w,&s);
floatd;
f=pws(1-d);
if(s=250)
{
d==0;
printf("%d",f);
}
elseif(s>=250&&s<500)
{
d==0.02;
printf("%d",f);
}
elseif(s>=500&&s<1000)
{
d==0.05;
printf("%d",f);
}
elseif(s>=1000&&s<2000)
{
d==0.08;
printf("%d",f);
}
elseif(s>=2000&&s<3000)
{
d==0.1;
printf("%d",f);
}
elseif(s>=3000)
{
d==0.15;
printf("%d",f);
}
system("pause");
}
实验4-1:
已知xyz+yzz=532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字
源代码:
#include
main()
{
intx,y,z;
for(x=1;x<=9;x++)
for(y=1;y<=9;y++)
for(z=1;z<=9;z++)
if(100x+10y+z+100y+10z+z==532)
printf("%d%d%d",x,y,z);
system("pause");
}
实验4-2:
编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444
33333
222
1
222
33333
4444444
源代码:
#include
main()
{
inti,j,k,n;
printf("请输入一个数字\n");
scanf("%d",&n);
i=n;
for(i=0;i<2n-1;i++)
{
k=i;
if(i>=n)
k=2n-2-i;
for(j=0;j printf("");
for(j=0;j<2(n-k)-1;j++)
printf("%d",n-k);
printf("\n");
}
system("pause");
}
实验4-3:
学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数
源代码:
#include
main()
{
inti;
for(i=900;i<=1100;i++)
{
if(i%5==2&&i%7==3&&i%3==1)
{
printf("%d\n",i);
break;
}
}
system("pause");
}
实验4-4:
学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:
A说:不是我。
B说:是C。
C说:是D。
D说:他胡说。
已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人
源代码:
#include
main()
{
inti,j,a,b,c,d;
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
if(j==i)
switch(j)
{
case0:a=1;b=0;c=0;d=0;
break;
case1:a=0;b=1;c=0;d=0;
break;
case2:a=0;b=0;c=1;d=0;
break;
case3:a=0;b=0;c=0;d=1;
break;
default:break;
}
if(a+b+c==1&&b+c==1&&c+d==1&&b+c+d==1)
printf("做好事的人是%c\n",i+''a'');
}
system("pause");
}
实验5-1:
从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2-5-89750-89093480,经过处理后的数组为:-5-89-890007593482。由于不要求数组有序,所以不允许用排序方法
源代码:
#include
#include
#defineN10
main()
{
inta[N]={2,-5,-89,75,0,-89,0,93,48,0};
inti,t,j;
for(i=0;i printf("%4d",a[i]);
printf("\n");
for(i=0;i {
for(j=i+1;j {
if(a[i]>0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
elseif(a[i]>0&&a[j]==0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
elseif(a[i]==0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i printf("%4d",a[i]);
printf("\n");
system("pause");
}
实验5-2:
设数组a的定义如下:
inta[20]={2,4,6,8,10,12,14,16};已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能
源代码:
#include
main()
{
inta[9]={2,4,6,8,10,12,14,16};
inti,j,number;
printf("原数组\n");
for(i=0;i<=8;i++)//输出数组原有的元素
printf("%d",a[i]);
printf("\n");
printf("请输入一个数据\n");
scanf("%d",&number);
i=0;//以下三行找到插入位置
while(a[i] i++;
for(j=7;j>=i;j--)//将插入点以后的元素顺序往后移一位
a[j+1]=a[j];
a[i]=number;//插入数据
printf("输出改变后的数组\n");
for(i=0;i<=8;i++)//输出插入后仍有序的数组
printf("%d",a[i]);
system("pause");
}
实验5-3:
写一个3x5矩阵的转置程序,输出其原矩阵的值和转置以后的结果
源代码:
#include
#include
main()
{
inti,j;
inta[3][5]={1,2,3,4,5,6,7,8,9,4,5,6,7,8,9};
for(i=0;i<3;i++){
for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}
printf("转置后的矩阵为\n");
for(i=0;i<5;i++){
for(j=0;j<3;j++)
printf("%d",a[j][i]);
printf("\n");
}
system("pause");
}
实验5-4:
编程实现随机产生10个位于区间[100200]互不相等的整数,并将其按降序排序和输出
源代码:
#include
#include
#include
#definerandom(x)(rand()%101+100)
main()
{
inti,j,k,n;//产生随机数
inta[10];
srand((int)time(0));
for(i=0;i<=9;i++){
a[i]=random(200);
printf("%d",a[i]);
}
printf("\n");
for(i=0;i<=9;i++){//排序
k=i;
for(j=i;j<10;j++)
if(a[k] n=a[i];
a[i]=a[k];
a[k]=n;
}
printf("排序后的数组为\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
system("pause");
}
实验6-1:
写一个函数intdigit(intn,intk),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3
源代码:
#include
#include
intdigit(intn,intk)
{
inti,j,a,b;
b=n%10;
a=(n/10)%10;
j=(n/100)%10;
i=(n/1000)%10;
n=1000i+100j+10a+b;
if(k==1)
printf("%d",b);
elseif(k==2)
printf("%d",a);
elseif(k==3)
printf("%d",j);
elseif(k==4)
printf("%d",i);
}
main()
{
intx,y;
printf("请输入一个数据\n");
scanf("%d%d",&x,&y);
digit(x,y);
system("pause");
}
实验6-2:
写一个函数intisprime(intn),当n是质数时,函数返回非零值;当n是合数时,函数返回零值
源代码:
#include
#include
intisprime(intn)
{
inti;
for(i=2;i if(n%i==0){//判断
return(0);
}
else{
return(1);
}
}
main()
{
intx;
printf("请输入一个数据\n");
scanf("%d",&x);
printf("%d",isprime(x));
system("pause");
}
实验6-3:
写一个函数reverse(chars[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写
源代码:
递归:
#include
#include
#include
voidres(chars[],intlen)
{
if(len>=0)
{
printf("%c",s[len-1]);
len--;
res(s,len);
getchar();
}
}
voidreverse(charb[])
{
res(b,strlen(b));
}
voidmain()
{
chara[100];
gets(a);
reverse(a);
system("pause");
}
源代码:
非递归:
#include
#include
voidreverse(chars[]);
voidmain()
{
chars[100];
gets(s);
reverse(s);
}
voidreverse(chars[])//非递归调用的reverse函数
{
intj,i=0;
do
{
i++;
}while(s[i]!=''\0'');
for(j=i-1;j>=0;j--)
printf("%c",s[j]);
printf("\n");
system("pause");
}
实验6-4:
写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性
源代码:
#include
intmax(inta,intb)
{
if(a>b)
returna;
if(a returnb;
}
main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d\n",max(a,b));
}
实验6-5:
一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行
源代码:
#include"stdio.h"
inthw(intn)
{
inta[5],i,k=n,j;
for(i=2;i if(n%i==0)
return0;
else
{
for(i=0;i<5;i++)
{
a[i]=k%10;
k=k/10;
}
if(n==a[0]10000+a[1]1000+a[2]100+a[3]10+a[4])
return1;
else
return0;
}
}
intmain()
{
inti,s,j=0;
for(i=10000;i<=99999;i++)
{
s=hw(i);
if(s)
{
printf("%10d",i);
j++;
if(j%5==0)
printf("\n");
}
}
getchar();
system("pause");
}
实验6-6:
在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程
源代码:
#include"stdio.h"
voidfound(ints[],intmax,intmin,intl)
{
intmid;
mid=(max+min)/2;
if(mid>max||mid printf("此数不存在于此数列中!");
else
{
if(s[mid]==l)
{
printf("该数在10个数中的位置是%d",mid+1);
}
elseif(s[mid]>l)
{
max--;
found(s,max,min,l);
}
else
{
min++;
found(s,max,min,l);
}
}
getchar();
}
intmain()
{
inta[100],i,n;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&n);
found(a,9,0,n);
system("pause");
}
实验7-1:
编写一个函数chardelk(charsp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回
源代码:
#include
#include
voiddelchar(chars,charc)
{
chars2[50];
inti,j;
for(i=0,j=0;s[i]!=''\0'';i++){
if(s[i]!=c){
s2[j]=s[i];
j++;
}
}
s2[j]=''\0'';
for(i=0;s2[i]!=''\0'';i++){
s[i]=s2[i];
}
s[i]="\0";
}
intmain()
{
charstr[20]="abcdef";
delchar(str,''c'');
puts(str);
system("pause");
}
实验7-2:
源代码:
#include
intfind(chars1,chars2)
{
inti=0,j=0;
charp=s2;
for(;s1!=''\0'';s1++,i++)
{
if(s1!=s2)
{
s2=p;
j=0;
}
if(s1==s2)
{
j++;
s2++;
if(s2==''\0'')
{
returni-j+2;
}
}
}
return-1;
}
intmain()
{
chars1="Iamagirl",s2="am";
printf("%d",find(s1,s2));
printf("\n");
}
实验7-3:
编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f
源代码:
#include
#include
intDtoH(intn,inta[])
{
inti=0;
while(n!=0){
intbit=n%16;
a[i]=bit;
i++;
n=n/16;
}
returni;
}
intmain()
{
intx;
printf("pleaseenteranumber\n");
scanf("%d",&x);
inta[10]={0};
intnbits=DtoH(x,a);
inti;
printf("转换后的数为\n");
for(i=nbits-1;i>=0;i--){
if(a[i]>9)
printf("%c",a[i]-10+''A'');
else
printf("%d",a[i]);
}
printf("\n");
system("pause");
}
实验4:
源代码:
#include
voidMerge(inta[],intn,intb[],intm)
{
intp,q,i,j,k;
p=a;
q=b;
for(i=0;i<10;i++)
{
if(i>0&&(p+i)<(p+i-1))
{
(p+i)=q;
q++;
}
}
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if((p+i)>(p+j))
{
k=(p+i);
(p+i)=(p+j);
(p+j)=k;
}
}
main()
{
inta[10]={2,3,5,7,9},b[5]={1,4,6,8,10};
inti;
Merge(a,10,b,5);
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
实验8-1:
源代码:
#include
#include
voidsortstring(charname[],intn)
{
charp;
inti,j;
for(i=0;i for(j=i+1;j {
if(strcmp(name[i],name[j])>0)
{
p=name[i];
name[i]=name[j];
name[j]=p;
}
}
}
main()
{
charname[]={"hello","world","start","end","then",
"first","follow","watch","see","hear"};
inta;
sortstring(name,10);
for(a=0;a<10;a++)
printf("%s\n",name[a]);
}
实验2:
源代码:
#include
#include
#include
voidsearch(chars1,chars2,chars3)
{
charp;
intword,i,m,n;
chara[20];
p=s1;
s3[0]=''\0'';
while(p!=''\0'')
{
word=0;
{
if(p[i]!=''''&&word==0)
{
word=1;
m=i;
}
elseif(p[i]==''''&&word==1)
{
n=i;
break;
}
}
if(p[i]==''\0''&&word==1)
n=i;
if(word==1)
{//将单词复制到atemp中
strncpy(a,p+m,n-m);
a[n-m]=''\0'';
//puts(s3);
charpfind;//strstr:找出atemp字符串在s2字符串中第一次出现的位置。
if((pfind=strstr(s2,a))!=NULL)
{//finded
//只是找到包含,如果完全一致,应该将找到对应的单词取出来再比较
if((pfind+strlen(a))==''''||(pfind+strlen(a))==''\0'')
if(strlen(a)>strlen(s3))strcpy(s3,a);
}
p=p+n;
}
elsebreak;
}
}
main()
{
chars1="What''syourname";
chars2="Mynameis007";
chars3[20];
search(s1,s2,s3);
printf("%s\n",s3);
}
实验3:
结果如上两题所示。
实验4:
源代码:
实验1:
源代码:
实验2:
源代码:
实验9-3:
源代码:
#include
#include
#include
#include
structstudent
{
charname[15];
charnum[15];
charrisk[15];
structstudentnext;
};
structstudentfun()
{
structstudentp,q,head;
q=head=NULL;
charstr[15]={''\0''};
printf("请依次输入学生的姓名,学号,成绩:(以''0''作为结束标志)\n");
while(1)
{
scanf("%s",str);
if(str[0]==''0'')
break;
p=(structstudent)malloc(sizeof(structstudent));
strcpy(p->name,str);
scanf("%s",p->num);
scanf("%s",p->risk);
if(head==NULL)
head=q=p;
else
{
q->next=p;
q=p;
}
}
q->next=NULL;
returnhead;
}
structstudentpark(structstudenthead)
{
inti;
charstr[15];
structstudentp,q;
printf("你想要删除某个学生的信息吗?是/否(1/0)\n");
scanf("%d",&i);
if(!i)
returnhead;
printf("请输入你想要删除的学生姓名\n");
scanf("%s",str);
for(p=head,q=NULL;p!=NULL;q=p,p=p->next)
if(!strcmp(p->name,str))
break;
if(p==NULL)
{
printf("没有你要删除的学生的信息\n");
returnhead;
}
else
{
if(q==NULL)
head=p->next;
else
{
q->next=p->next;
}
free(p);
}
returnhead;
}
structstudentwall(structstudenthead)
{
inti,j,k=1;
structstudentp,q,r;
printf("你想要添加某个学生的信息吗?是/否(1/0)\n");
scanf("%d",&i);
if(!i)
returnhead;
printf("请输入你想要添加的学生的信息:(依次为:姓名,学号,成绩)\n");
p=(structstudent)malloc(sizeof(structstudent));
scanf("%s",p->name);
scanf("%s",p->num);
scanf("%s",p->risk);
printf("请输入你想要添加到的位置\n");
scanf("%d",&j);
for(q=head,r=NULL;q!=NULL;r=q,q=q->next)
{
if(j==1)
{
p->next=head;
head=p;
break;
}
if(k==j)
{
p->next=q;
r->next=p;
break;
}
k++;
}
if(q==NULL&&j==k)
{
q=p;
p->next=NULL;
}
if(q==NULL&&j>k)
printf("你的添加的位置不合法\n");
returnhead;
}
voidprin(structstudenthead)
{
structstudentp;
for(p=head;p!=NULL;p=p->next)
{
printf("%s",p->name);
printf("%s",p->num);
printf("%s",p->risk);
printf("\n");
}
}
main()
{
structstudenthead;
head=fun();
head=wall(head);
head=park(head);
prin(head);
}
实验10-1:
源代码:
实验2:
源代码:
实验3:
源代码:
#include
#include
voidmain()
{
inti=0;
charc;
FILEp1;
if((p1=fopen("F:\\PLL.txt","r"))==NULL)
{
printf("Can''topenfile\n");
exit(1);
}
while(!feof(p1))
{
c=fgetc(p1);
if((c-''0'')%2==0)
i--;
elseif((c-''0'')%2==1)
i++;
}
fclose(p1);
printf("%d\n",i);
}
实验4:
源代码:
|
|
|
|
|
|
|
|