大学大一c语言程序设计实验室上机题全部代码答案(实验报告)

更新时间:2023-12-03 07:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言实验报告

实验1-1:

hello world程序: 源代码:

#include main() {

printf(\ system(\ }

实验1-2:

完成3个数据的输入、求和并输出计算结果的程序: 源代码:

#include main() {

int i,j,k,sum;

scanf(\ sum=i+j+k;

printf(\ system(\

实验1-3:

在屏幕上输出如下图形:

A

BBB CCCCC 源代码:

#include main() {

printf(\ A\\n\ printf(\ BBB\\n\ printf(\ system(\ }

实验2-1:

计算由键盘输入的任何两个双精度数据的平均值 源代码:

#include

main() {

double a,b;

scanf(\ printf(\ system(\ }

实验2-2:

写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算 源代码:

#include main() {

float a,b,c,d,e,f,g,x;

scanf(\ x=a + b * (c - d ) / e * f - g; printf(\ system(\ }

实验2-3:

编写一个C语言程序,测试下列各表达式: i, j

i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j

源代码:

#include main() {

int i=1,j=1;

printf(\ printf(\ printf(\ printf(\ system(\ }

实验2-4:

输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。

interest = money(1+rate)year - money

源代码:

#include #include main() {

int year=2;

float rate=0.1,money=1000; float futureMoney;

futureMoney=money*pow((1+rate),year); printf(\ system(\ }

实验2-5:

输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9

其中,c表示摄氏温度,f表示华氏温度

源代码:

#include main() {

int c,f;

scanf(\ c = 5 * ( f - 32) / 9; printf(\ system(\}

实验3-1:

编写一个程序完成输入一个整数,输出它的符号 源代码:

#include main() {

int i;

scanf(\ if(i>0) printf(\ else

printf(\

system(\ }

实验3-2:

请编写居民应交水费,并提供各种测试数据。

居民应交水费y(元)与月用水量x(吨)的函数关系式如下: 0 x < 0 y = f(x) = 4x / 3 0 ≤ x ≤ 15 2.5x – 10.5 x > 15

源代码:

#include main() {

float x,y;

scanf(\ if(x<0) printf(\

else if(x>=0&&x<=15) { y=4*x/3; printf(\ }

else if(x>15) { y=2.5*x-10.5; printf(\ }

system(\}

实验3-3:

请根据输入的学生成绩给出成绩等级的判断,判断规则如下: 如果输入的成绩大于等于90,则输出优秀;

如果输入的成绩小于90、大于等于80,则输出良好; 如果输入的成绩小于80、大于等于70,则输出中等; 如果输入的成绩小于70、大于等于60,则输出及格; 其他输出不及格

源代码:

#include main() {

int x;

scanf(\ 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(\}

实验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 main() {

int p,w,s,f;

scanf(\ float d;

f = p * w * s * ( 1 - d ); if (s=250) { d==0; printf(\ }

else if (s>=250&&s<500) { d==0.02; printf(\ }

else if (s>=500&&s<1000) { d==0.05;

#include #include #include

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;

}

else break; } }

main() {

char *s1=\char *s2=\ char s3[20]; search(s1,s2,s3); printf(\}

实验8-3:

编写一个主函数,测试上述两个函数的正确性。 结果如上两题所示。

实验8-4:

输入一个字符串,内有数字和非数字字符,例如: A123cdf 456.78cpc876.9er 849.1 将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a[0],456.78存放在a[2],依次类推,统计共有多少个数,并输出这些数。

源代码:

#include

void f(char *sp,float b[]) { char *p; float value; int power,i=0,j=0; p=sp; while(*p) { for(;!(*p>='0'&&*p<='9');p++) value=0; for(value=0;(*p>='0'&&*p<='9');p++,i++) value=value*10+*p-'0'; if(*p=='.') p++; for(power=1;(*p>='0'&&*p<='9');p++,i++) { value=value*10+*p-'0'; power=power*10; }

value=value/power; b[j++]=value; } printf(\数字个数为:%d\\n\}

void main() { int j; float b[4]={0}; char *a=\ f(a,b); for(j=0;j<4;j++) printf(\}

实验9-1:

编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。

源代码:

#include struct student { int num; char name[20]; float score;

}stu[4]={{1,\main() { int i,j; printf(\请输入学号:\\n\ scanf(\ for(j=0;j<4;j++) if(stu[j].num==i) printf(\}

实验9-2:

编一程序,能把从终端输入的一个字符串中的小写字母全部转换成大写字母,要求输入的字符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结

果(用字符!表示输入字符串的结束)。

源代码:

#include struct str { char a; int num; }s[10]; main() { int i=0; printf(\请输入字母,以!为结束标志\\n\ while(1) { scanf(\ if(s[i].a!='!') s[i].num=i+1; else break; if(s[i].a>'Z') s[i].a=s[i].a-32; printf(\ i++; } }

实验9-3:

在本实验的实验内容1的基础上,实现在链表元素index之前插入元素的操作Insert( struct node *head, int index)和删除指定位置元素的操作Delete( struct node * head, int index),并编写主函数测试。

源代码:

#include #include #include #include struct student {

char name[15]; char num[15]; char risk[15];

struct student *next; };

struct student * fun() {

struct student *p,*q,*head; q=head=NULL; char str[15]={'\\0'};

printf(\请依次输入学生的姓名,学号,成绩:(以'0'作为结束标志)\\n\ while(1) { scanf(\ if(str[0]=='0') break; p=(struct student *)malloc(sizeof(struct student)); strcpy(p->name,str); scanf(\ scanf(\ if(head==NULL) head=q=p; else { q->next=p; q=p; } }

q->next=NULL; return head; }

struct student * park(struct student *head) {

int i;

char str[15];

struct student *p,*q;

printf(\你想要删除某个学生的信息吗?是/否(1/0)\\n\ scanf(\ if(!i) return head;

printf(\请输入你想要删除的学生姓名\\n\ scanf(\

for(p=head,q=NULL;p!=NULL;q=p,p=p->next) if(!strcmp(p->name,str)) break; if(p==NULL) { printf(\没有你要删除的学生的信息\\n\ return head;

} else { if(q==NULL) head=p->next; else { q->next=p->next; } free(p); }

return head; }

struct student *wall(struct student *head) {

int i,j,k=1;

struct student *p,*q,*r;

printf(\你想要添加某个学生的信息吗?是/否(1/0)\\n\ scanf(\ if(!i) return head;

printf(\请输入你想要添加的学生的信息:(依次为:姓名,学号,成绩)\\n\ p=(struct student *)malloc(sizeof(struct student)); scanf(\ scanf(\ scanf(\

printf(\请输入你想要添加到的位置\\n\ scanf(\

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\ return head; }

void prin(struct student *head) {

struct student *p;

for(p=head;p!=NULL;p=p->next) { printf(\ printf(\ printf(\ printf(\ } }

main() {

struct student *head; head=fun();

head=wall(head); head=park(head); prin(head); }

实验10-1:

编写一个程序,读取磁盘上的一个C语言程序文件,要求加上注释后再存放到磁盘上,文件可以另外命名。

源代码:

#include #include void main() { int i=0,j; char c,a[80]={\ FILE *p; if((p=fopen(\

}

fscanf(p,\fclose(p);

if((p=fopen(\{ printf(\ exit(1); }

fputs(\fprintf(p,a); fputs(\fclose(p);

实验10-2:

编写一个程序,将文件old.txt从第10行起存放到new.txt中。

源代码:

#include #include void main() {

int i=0; char c;

FILE *p1,*p2;

if((p1=fopen(\ {

printf(\ exit(1); }

if((p2=fopen(\ {

printf(\ exit(1); }

while(!feof(p1)) {

if((c=fgetc(p1))=='\\n') i++; if(i>=9) {

fputc(c,p2); } }

system(\

fclose(p1); fclose(p2); }

实验10-3:

有一个整数文件,读取其中的数值,如果为奇数加1,如果为偶数减1,然后存放到新的文件中去。

源代码:

#include #include void main() {

int i=0; char c; FILE *p1;

if((p1=fopen(\ {

printf(\ exit(1); }

while(!feof(p1)) {

c=fgetc(p1); if((c-'0')%2==0) i--;

else if((c-'0')%2==1) i++; }

fclose(p1);

printf(\}

实验10-4:

二进制文件d.dat中包含若干个整数,用键盘输入一个整数,请在文件中找出该整数的下一个数并输出。若找不到则输出“Not Found!”。

源代码:

#include int main() { FILE *pf; int x,y,j;

int i=0;

int a[8]={3,4,6,8,7,1,2,9}; pf = fopen(\ if( pf==NULL ){

printf(\ } else{

fwrite((char *)a,sizeof(int),8,pf); fclose(pf); }

if((pf=fopen(\ printf(\ } else{ scanf(\ while(!feof(pf)){

fread((char*)&y,sizeof(int),1,pf); i++; if(y==x) break; }

fread((char*)&y,sizeof(int),1,pf); if(!feof(pf)){

printf(\在第%d个,下一个数字为%d\\n\ } else{

printf(\ }

fclose(pf); } }

本文来源:https://www.bwwdw.com/article/39xt.html

Top