大学大一c语言程序设计实验室上机题全部代码答案(实验报告)
更新时间:2023-05-20 05:17:01 阅读量: 实用文档 文档下载
这是本人搜录的,绝对有用。
C语言实验报告
实验1-1:
hello world程序:
源代码:
#include<stdio.h>
main()
{
printf("hello world!\n");
system("pause");
}
实验1-2:
完成3个数据的输入、求和并输出计算结果的程序:
源代码:
#include<stdio.h>
main()
{
int i,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<stdio.h>
main()
{
printf(" A\n");
printf(" BBB\n");
printf(" CCCCC\n");
system("pause");
}
实验2-1:
计算由键盘输入的任何两个双精度数据的平均值
源代码:
#include<stdio.h>
这是本人搜录的,绝对有用。
main()
{
double a,b;
scanf("%lf%lf",&a,&b);
printf("%.1lf\n",(a+b)/2);
system("pause");
}
实验2-2:
写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算 源代码:
#include<stdio.h>
main()
{
float a,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 ) / e * f - g;
printf("x=%f",x);
system("pause");
}
实验2-3:
编写一个C语言程序,测试下列各表达式:
i, j
i + 1 , j + 1
i++ , j++
++i , ++j
i+++++j
源代码:
#include<stdio.h>
main()
{
int i=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<stdio.h>
#include<math.h>
main()
{
int year=2;
float rate=0.1,money=1000;
float futureMoney;
futureMoney=money*pow((1+rate),year);
printf("%10.2f",futureMoney);
system("pause");
}
实验2-5:
输入华氏温度,输出对应的摄氏温度。计算公式如下:
c = 5 * ( f - 32) / 9
其中,c表示摄氏温度,f表示华氏温度
源代码:
#include<stdio.h>
main()
{
int c,f;
scanf("%d",&f);
c = 5 * ( f - 32) / 9;
printf("%d",c);
system("pause");
}
实验3-1:
编写一个程序完成输入一个整数,输出它的符号
源代码:
#include<stdio.h>
main()
{
int i;
scanf("%d",&i);
if(i>0)
printf("+");
else
printf("-");
system("pause");
}
实验3-2:
这是本人搜录的,绝对有用。
请编写居民应交水费,并提供各种测试数据。
居民应交水费y(元)与月用水量x(吨)的函数关系式如下:
0 x < 0
y = f(x) = 4x / 3 0 ≤ x ≤ 15
2.5x – 10.5 x > 15
源代码:
#include<stdio.h>
main()
{
float x,y;
scanf("%f",&x);
if(x<0)
printf("0");
else if(x>=0&&x<=15)
{
y=4*x/3;
printf("%f",y);
}
else if(x>15)
{
y=2.5*x-10.5;
printf("%f",y);
}
system("pause");
}
实验3-3:
请根据输入的学生成绩给出成绩等级的判断,判断规则如下:
如果输入的成绩大于等于90,则输出优秀;
如果输入的成绩小于90、大于等于80,则输出良好;
如果输入的成绩小于80、大于等于70,则输出中等;
如果输入的成绩小于70、大于等于60,则输出及格;
其他输出不及格
源代码:
#include<stdio.h>
main()
{
int x;
scanf("%d",&x);
if (x>=90)
printf("优秀\n");
else if (x>=80&&x<90)
printf("良好\n");
这是本人搜录的,绝对有用。
else if (x>=70&&x<80)
printf("中等\n");
else if (x>=60&&x<70)
printf("及格\n");
else
printf("不及格\n");
system("pause");
}
实验3-4:
运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s = 250km 没有折扣
250km ≤ s < 500km 2%折扣
500km ≤ s < 1000km 5%折扣
1000km ≤ s < 2000km 8%折扣
2000km ≤ s < 3000km 10%折扣
3000km ≤ s 15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:
f = p * w * s * ( 1 – d )
请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费
源代码:
#include<stdio.h>
main()
{
int p,w,s,f;
scanf("%d%d%d",&p,&w,&s);
float d;
f = p * w * s * ( 1 - d );
if (s=250)
{
d==0;
printf("%d",f);
}
else if (s>=250&&s<500)
{
d==0.02;
printf("%d",f);
}
else if (s>=500&&s<1000)
{
d==0.05;
这是本人搜录的,绝对有用。
printf("%d",f);
}
else if (s>=1000&&s<2000)
{
d==0.08;
printf("%d",f);
}
else if (s>=2000&&s<3000)
{
d==0.1;
printf("%d",f);
}
else if (s>=3000)
{
d==0.15;
printf("%d",f);
}
system("pause");
}
实验4-1:
已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字
源代码:
#include<stdio.h>
main()
{
int x,y,z;
for(x=1;x<=9;x++)
for(y=1;y<=9;y++)
for(z=1;z<=9;z++)
if(100*x+10*y+z+100*y+10*z+z==532)
printf("%d %d %d",x,y,z);
system("pause");
}
实验4-2:
编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444
33333
222
1
222
这是本人搜录的,绝对有用。
33333
4444444
源代码:
#include<stdio.h>
main()
{
int i,j,k,n;
printf("请输入一个数字\n");
scanf("%d",&n);
i=n;
for(i=0;i<2*n-1;i++)
{
k=i;
if(i>=n)
k=2*n-2-i;
for(j=0;j<k;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<stdio.h>
main()
{
int i;
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<stdio.h>
main()
{
int i,j,a,b,c,d;
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
if(j==i)
switch(j)
{
case 0:a=1;b=0;c=0;d=0;
break;
case 1:a=0;b=1;c=0;d=0;
break;
case 2:a=0;b=0;c=1;d=0;
break;
case 3: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 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法
源代码:
#include<stdio.h>
#include<stdlib.h>
这是本人搜录的,绝对有用。
#define N 10
main()
{
int a[N]={2,-5,-89,75,0,-89,0,93,48,0};
int i,t,j;
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(a[i]>0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
else if(a[i]>0&&a[j]==0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
else if(a[i]==0&&a[j]<0)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
system("pause");
}
实验5-2:
设数组a的定义如下:
int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能
这是本人搜录的,绝对有用。
源代码:
#include<stdio.h>
main()
{
int a[9]={2,4,6,8,10,12,14,16};
int i,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]<number&&i<8)
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:
写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果
源代码:
#include<stdio.h>
#include<stdlib.h>
main()
{
int i,j;
int a[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个位于区间[100 200]互不相等的整数,并将其按降序排序和输出 源代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define random(x)(rand()%101+100)
main()
{
int i,j,k,n;//产生随机数
int a[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]<a[j])k=j;
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:
写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3
源代码:
#include<stdio.h>
#include<stdlib.h>
int digit(int n,int k)
这是本人搜录的,绝对有用。
int i,j,a,b;
b=n%10;
a=(n/10)%10;
j=(n/100)%10;
i=(n/1000)%10;
n=1000*i+100*j+10*a+b;
if(k==1)
printf("%d",b);
else if(k==2)
printf("%d",a);
else if(k==3)
printf("%d",j);
else if(k==4)
printf("%d",i);
}
main()
{
int x,y;
printf("请输入一个数据\n");
scanf("%d%d",&x,&y);
digit(x,y);
system("pause");
}
实验6-2:
写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值
源代码:
#include<stdio.h>
#include<stdlib.h>
int isprime(int n)
{
int i;
for(i=2;i<sqrt(n);i++)
if(n%i==0){//判断
return (0);
}
else{
return (1);
}
}
main()
这是本人搜录的,绝对有用。
int x;
printf("请输入一个数据\n");
scanf("%d",&x);
printf("%d",isprime(x));
system("pause");
}
实验6-3:
写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写
源代码:
递归:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void res(char s[],int len)
{
if(len>=0)
{
printf("%c",s[len-1]);
len--;
res(s,len);
getchar();
}
}
void reverse(char b[])
{
res(b,strlen(b));
}
void main()
{
char a[100];
gets(a);
reverse(a);
system("pause");
}
源代码:
非递归:
#include<stdio.h>
#include<stdlib.h>
这是本人搜录的,绝对有用。
void reverse(char s[]);
void main()
{
char s[100];
gets(s);
reverse(s);
}
void reverse(char s[]) //非递归调用的reverse函数
{
int j,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<stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
if(a<b)
return b;
}
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",max(a,b));
}
实验6-5:
一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和
这是本人搜录的,绝对有用。
质数判断都需要通过子函数实现,输出的时候要求5个数字一行
源代码:
#include"stdio.h"
int hw(int n)
{
int a[5],i,k=n,j;
for(i=2;i<n/2;i++)
if(n%i==0)
return 0;
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])
return 1;
else
return 0;
}
}
int main()
{
int i,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"
void found(int s[],int max,int min,int l)
{
int mid;
mid=(max+min)/2;
if(mid>max||mid<min)
printf("此数不存在于此数列中!");
else
{
if(s[mid]==l)
{
printf("该数在10个数中的位置是%d",mid+1);
}
else if(s[mid]>l)
{
max--;
found(s,max,min,l);
}
else
{
min++;
found(s,max,min,l);
}
}
getchar();
}
int main()
{
int a[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:
编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回
源代码:
#include<stdio.h>
这是本人搜录的,绝对有用。
#include<stdlib.h>
void delchar(char *s,char c)
{
char s2[50];
int i,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";
}
int main()
{
char str[20]="abcdef";
delchar (str,'c');
puts(str);
system("pause");
}
实验7-2:
写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。
源代码:
#include<stdio.h>
int find(char *s1,char *s2)
{
int i=0,j=0;
char *p=s2;
for(;s1!='\0';s1++,i++)
{
if(*s1!=*s2)
{
s2=p;
j=0;
}
if(*s1==*s2)
这是本人搜录的,绝对有用。
{
j++;
s2++;
if(*s2=='\0')
{
return i-j+2;
}
}
}
return -1;
}
int main()
{
char *s1="I am a girl",*s2="am";
printf("%d",find(s1,s2));
printf("\n");
}
实验7-3:
编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f
源代码:
#include<stdio.h>
#include<stdlib.h>
int DtoH(int n,int a[])
{
int i=0;
while(n!=0){
int bit=n%16;
a[i]=bit;
i++;
n=n/16;
}
return i;
}
int main()
{
int x;
printf("please enter a number\n");
scanf("%d",&x);
int a[10]={0};
int nbits=DtoH(x,a);
int i;
这是本人搜录的,绝对有用。
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");
}
实验7-4:
定义函数void Merge(int a[], int n, int b[], int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。
源代码:
#include<stdio.h>
void Merge(int a[],int n,int b[],int m)
{
int *p,*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()
{
int a[10]={2,3,5,7,9},b[5]={1,4,6,8,10};
这是本人搜录的,绝对有用。
int i;
Merge(a,10,b,5);
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
实验8-1:
编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char *name[] , int n)实现它们的字典顺序。
源代码:
#include<stdio.h>
#include<string.h>
void sortstring(char *name[],int n)
{
char *p;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(strcmp(name[i],name[j])>0)
{
p=name[i];
name[i]=name[j];
name[j]=p;
}
}
}
main()
{
char *name[]={"hello","world","start","end","then",
"first","follow","watch","see","hear"};
int a;
sortstring(name,10);
for(a=0;a<10;a++)
printf("%s\n",name[a]);
}
实验8-2:
编写函数void search( char *s1, char *s2, char *s3)。函数search()从已知的两个字符串s1与s2中找出它们都包含的最长的单词放入字符串s3,约定字符串中只有小写字母和空格字符,单词用1个或1个以上空格分隔
源代码:
这是本人搜录的,绝对有用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void search(char *s1, char *s2, char *s3)
{
char *p;
int word,i,m,n;
char a[20];
p=s1;
s3[0]='\0';
while (*p!='\0')
{
word=0;
for (i=0;p[i]!='\0';i++)//记录单词的长度i
{
if (p[i]!=' '&&word==0)
{
word=1;
m=i;
}
else if (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);
char *pfind;// 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;
正在阅读:
大学大一c语言程序设计实验室上机题全部代码答案(实验报告)05-20
中国法制史单选题05-22
第二章_整式的加减单元水平测试(1)(含答案)00906-07
小学数学教案人教版06-02
BT项目的会计处理08-09
口腔颌面外科学重点06-03
关于开展党建品牌创建活动实施方案的通知11-24
大学军事理论考试试题复习资料大全选择题01-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 上机
- 程序设计
- 大一
- 实验室
- 答案
- 语言
- 实验
- 代码
- 全部
- 报告
- 大学
- 国内企业税务风险管理研究-税务风险论文-财政税收论文
- 第6课 交通运输方式的选择
- 物业二次供水、水池水箱清洗工作规程
- 书法作品展开幕词
- 精神病患者管理工作半年总结
- 2014年秋季《学前教育》专业知识月考试题(一).doc
- 18.2.3.1正方形性质(1)
- 第5章 锁存器和触发器
- B卷网络系统管理与维护考试题
- 实验小学2014——2015学年度教师周工作量统计表
- 中国象棋双人远程对弈
- 教大家一个恶搞别人电脑的小程序
- 二年级下册万以内数的读法和写法练习题
- 八年级上册7-12单元单选、阅读专项练习 外研社
- 带式输送机传动装置
- 考研心路:一年的经历 一年的收获
- 2016年春期工会活动方案
- 2012年高考数学试卷 全国卷2理
- Internet网络原理与应用
- 中学语文教师实习日志