收藏 分销(赏)

c语言实验.doc

上传人:精*** 文档编号:2493242 上传时间:2024-05-30 格式:DOC 页数:20 大小:140.50KB
下载 相关 举报
c语言实验.doc_第1页
第1页 / 共20页
c语言实验.doc_第2页
第2页 / 共20页
点击查看更多>>
资源描述
//已知下面的程序是输入一个整数,判断该整数的位数,并依次输出各位数字。请将程序补充完整。 #include <stdio.h> main() { long num; int a[10],i=0; scanf("%ld",&num); while(num!=0) { a[i]=num%10; num=num/10; i++; } printf("this number is %d wei shu.\n",i); for(i--;i>=0;i--) printf("%d",a[i]); } //2. 输入10名学生的C语言成绩,并将成绩排序。 #include <stdio.h> main() { int grade[10]={78,89,56,98,74,68,23,56,68,75}; int i,j; int temp; //for(i=0;i<10;i++) //scanf("%d",&grade[i]); for(i=0;i<10-1;i++) for(j=i+1;j<10;j++) if(grade[i]<grade[j]) { temp=grade[i]; grade[i]=grade[j]; grade[j]=temp; } for(i=0;i<10;i++) printf("%6d",grade[i]); printf("\n"); } //3. 从键盘上输入10个整数,并放入一个一维数组中, //然后将其逆序重新存放。 //即:第1个元素和第10个元素互换,第2个元素和第9个元素互换……分别输出数组原来的值和兑换后各元素的值。 #include <stdio.h> #define N 10 main() { int number[10]={78,89,56,98,74,66,23,58,68,75}; int temp; int i; for(i=0;i<N/2;i++) { temp=number[i]; number[i]=number[N-i-1]; number[N-i-1]=temp; } for(i=0;i<N;i++) printf("%6d",number[i]); printf("\n"); } //4. 计算一个4×4矩阵两个对角线之和 #include <stdio.h> #define M 4 #define N 4 main() { int a[M][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int i,j; int sum=0; for(i=0;i<M;i++) for(j=0;j<N;j++) { if (i==j||i+j==M-1) sum=sum+a[i][j]; } printf("sum=%d\n",sum); } //随机产生20个[45,210]范围内的正整数,实现以下功能: //a) 求最大值、最小值和平均值。 //b) 求小于平均值的数据的个数。 #include<stdio.h> #include<time.h> #include<stdlib.h> #define N 20 main() { int a[N]; int i; int max,min,sum=0; float avg; int count=0; srand(time(NULL)); /*初始化随机因子*/ for(i=0;i<N;i++) a[i]=rand()%(210-45+1)+45; /*生成45~210之间的整数*/ max=a[0]; min=a[0]; for(i=0;i<N;i++) { if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; sum=sum+a[i]; } avg=(float)sum/N; printf("生成的20个随机数为:\n"); for(i=0;i<N;i++) { printf("%5d",a[i]); if((i+1)%10==0) printf("\n"); } printf("最大值为:%d;最小值为:%d;平均值为:%f;\n",max,min,avg); for(i=0;i<N;i++) { if(a[i]<avg) count++; } printf("小于平均值的数据个数为:%d\n",count); } //下面程序的功能是对两个字符串进行比较, //然后输出两个字符串中第一个不相同字符的ASCII码之差。 //例如:输入的两个字符串分别为"abcdefg"和"abceef",则输出为-1。 #include <stdio.h> main() { char str1[100],str2[100]; int i,s; printf("Enter string 1: "); gets(str1); printf("Enter string 2: "); gets(str2); i=0; while((str1[i]==str2[i] && str1[i]!='\0')) i++; s=str1[i]-str2[i]; printf("%d\n", s); } //编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。 //不用strcpy函数。复制时'\0'也要复制过去,'\0'后面的字符不复制。 #include <stdio.h> main() { char s1[100],s2[100]; int i; printf("Enter string 1: "); gets(s1); i=0; while((s1[i]!='\0')) { s2[i]=s1[i]; i++; } s2[i]=s1[i]; printf("s2=%s\n", s2); } //输入若干个字符串(最多10个), //求出每个字符串的长度,并打印最长字符串的内容。 //以"stop"作为输入的最后一个字符串。 //输入若干个字符串(最多10个), //求出每个字符串的长度,并打印最长字符串的内容。 //以"stop"作为输入的最后一个字符串。 #include <stdio.h> #include <string.h> main() { char str[10][100]; int i=0,k; int max_len,max_pos; gets(str[i]); max_len=strlen(str[i]); max_pos=0; while(i<10&&strcmp(str[i],"stop")!=0) { i++; gets(str[i]); } for(k=0;k<i;k++) { printf("第%d字符串长度为%d\n",k+1,strlen(str[k])); if((int)strlen(str[k])>max_len) { max_len=strlen(str[k]); max_pos=k; } } printf("最长字符串的内容为:%s\n",str[max_pos]); } //输入若干个字符串(最多10个), //求出每个字符串的长度,并打印最长字符串的内容。 //以"stop"作为输入的最后一个字符串。 #include <stdio.h> #include <string.h> main() { char str[10][100]; int i=0; int max_len,max_pos; gets(str[i]); max_len=strlen(str[i]); max_pos=0; while(i<10&&strcmp(str[i],"stop")!=0) { printf("第%d字符串长度为%d",i+1,strlen(str[i])); if((int)strlen(str[i])>max_len) { max_len=strlen(str[i]); max_pos=i; } i++; gets(str[i]); } printf("最长字符串的内容为:%s",str[max_pos]); } 实验6—4 #include <stdio.h> main() { char str[]="AbcDEfg"; int k=0; printf("转换前的字符串为:%s\n",str); while(str[k]!='\0') { if(str[k]>='a'&&str[k]<='z') str[k]=str[k]-32; else if(str[k]>='A'&&str[k]<='Z') str[k]=str[k]+32; k++; } printf("转换前的字符串为:%s\n",str); } 实验7—1—2 #include <stdio.h> int sub(int n) { return (n/10+n%10); } main() { int x,y; scanf("%d",&x); y=sub(sub(sub(x))); printf("%d\n",y); } 实验7—1—1 #include <stdio.h> fun (int x) { int p ; if (x==0 || x==1 ) return (3) ; p=x-fun (x-2) ; return p ; } main() { printf("%d \n",fun(9)); } //2. 写一个判素数的函数int isprime(int a){……}, //在主函数输入一个整数,并调用isprime函数,输出是否为素数的信息。 #include <stdio.h> #include <math.h> int isprime(int a); main() { int n; scanf("%d",&n); if(isprime(n)==1) printf("%d是一个素数!\n",n); else printf("%d不是一个素数\n!",n); } int isprime(int a) { int k; for(k=2;k<=sqrt(a);k++) if(a%k==0) return 0; return 1; } //3.用递归方法求n阶勒让德多项式的值,递归公式为: #include <stdio.h> float p(float x,int n); main() { float x; int n; printf("请输入x,n:<x n>:\n"); scanf("%f%d",&x,&n); printf("p(%f,%d)=%f\n",x,n,p(x,n)); } float p(float x,int n) { if (n==0) return 1; else if(n==1) return x; else return ((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-1))/n; } //4. 编写一函数,计算任一输入的整数的各位数字之和。 //主函数包括输入输出和调用该函数。 #include <stdio.h> int sum_digit(int n); main() { int num; printf("请输入一个整数:\n"); scanf("%d",&num); printf("%d的各位数字之和为%d\n",num,sum_digit(num)); } int sum_digit(int n) { int temp_sum; temp_sum=n%10; while(n/10!=0) { n=n/10; temp_sum=temp_sum+n%10; } return temp_sum; } //1. 编写将n个数从小到大排序的函数, //要求该函数返回排序过程中交换的次数,并设计main函数,验证算法正确与否。 //int sort( int arr[], int n) {……….} #include <stdio.h> int sort(int arr[],int n); main() { int a[10]={10,9,8,7,6,5,4,3,2,1}; int k; printf("初始序列为:\n"); for(k=0;k<10;k++) printf("%5d",a[k]); printf("\n"); printf("将序列按从小到大顺序排序,经过%d次变换后,序列为:\n",sort(a,10)); for(k=0;k<10;k++) printf("%5d",a[k]); printf("\n"); } int sort(int arr[],int n) { int i,j; int temp; int count=0; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) { if(arr[i]>arr[j]) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; count++; } } return count; } //2. 写一函数 void strcat_stu(char s1[41],char s2[20]){……….}, //将两个字符串连接,并设计main函数,验证算法正确与否。 #include <stdio.h> #include <string.h> void strcat_stu(char s1[41],char s2[20]) { int k=0,m=0; while(s1[k]!='\0') k++; while(s2[m]!='\0') { s1[k]=s2[m]; m++; k++; } s1[k]='\0'; } main() { char str1[41],str2[20]; strcpy(str1,"abcdefg"); strcpy(str2,"123456"); strcat_stu(str1,str2); printf("%s\n",str1); } #include <stdio.h> f( int a) { int b=0; static int c = 3; b++;c++; return(a+b+c); } 实验8—3 main() { int a = 1, i; for(i=0;i<3;i++) printf("%d\n",f(a)); } //4. 输入10个学生5门课的成绩,分别用函数实现下列功能: //(1) 计算每个学生的平均分。 //(2) 计算每门课的平均分。 //(3) 找出所有50个分数中最高的分数所对应的学生和课程; //(4) 计算平均分方差 #include <stdio.h> main() { float grade[10][5]={{78,89,76,98,87},{79,83,79,92,85}, {72,81,79,91,86},{75,84,71,95,81}, {71,84,71,92,84},{78,86,72,93,82}, {75,86,73,93,88},{76,87,73,95,83}, {79,84,75,94,89},{72,89,74,98,84},}; float average[10],total[10]; float average_course[5],total_course[5]; int i,j; float max_grade; int max_course,max_stu; float f1=0,f2=0,variance; printf("---------------计算每个学生的平均分----------------------\n"); for(i=0;i<10;i++) { total[i]=0; for(j=0;j<5;j++) { total[i]=total[i]+grade[i][j]; } average[i]=total[i]/5; } for(i=0;i<10;i++) printf("第%d个学生的平均分为%5.2f\n",i+1,average[i]); printf("\n----------------计算每门课的平均分-----------------------\n"); for(i=0;i<5;i++) { total_course[i]=0; for(j=0;j<10;j++) total_course[i]+=grade[j][i]; average_course[i]=total_course[i]/10; } for(i=0;i<5;i++) printf("第%d门课程的平均分为%5.2f\n",i+1,average_course[i]); printf("\n---------找出所有50个分数中最高的分数所对应的学生和课程-----------\n"); max_grade=grade[0][0]; max_stu=0; max_course=0; for(i=0;i<10;i++) for(j=0;j<5;j++) if(max_grade<grade[i][j]) { max_grade=grade[i][j]; max_stu=i; max_course=j; } printf("50个分数中第%d个学生的第%d门课程分数最高,最高分为%5.2f\n",max_stu+1,max_course+1,max_grade); printf("\n-------------------计算平均分方差----------------------\n"); for(i=0;i<10;i++) { f1=f1+average[i]*average[i]; f2=f2+average[i]; } variance=f1/10-(f2/10)*(f2/10); printf("平均分方差为:%8.4f\n",variance); } 实验9—1—1 #include "stdio.h" void sub(int x, int y,int *z) { *z=y-x; } main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%d,%d,%d\n",a,b,c); } 实验9—1—2 #include "stdio.h" main() { int a[]={2,4,6,8,10}, y=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf("%d\n",y); } //定义函数void f(float x,int *y,float *z), //将x的整数部分存于y所指存储单元, //将x的小数部分存于z所指存储单元。 //并设计main函数,验证算法正确与否。 #include <stdio.h> void f(float x,int *y,float *z) { *y=(int)x; *z=x-*y; } main() { float x; int y;float z; scanf("%f",&x); f(x,&y,&z); printf("%f的整数部分为:%d,小数部分为:%f\n",x,y,z); } //下面程序实现从10个数中找出最大值和最小值。 //请补充程序完整。 #include <stdio.h> int max, min; find_max_min(int *p, int n) { int *q; max=min=*p; for(q=p;q<p+n;q++) if( *q>max ) max=*q; else if ( *q<min) min=*q; } void main( ) { int i,num[10]={12,45,78,485,78,25,-78,69,45,-789}; //for(i=0; i<10; i++) //scanf("%d",&num[i]); find_max_min(num,10); printf("max=%d,min=%d\n",max,min); } //4. 输入10个整数,将其中最小的数与第一个数对换, //把最大的数与最后一个数对换。模仿第2题使用指针实现。 //写3个函数:①输入10个数。②进行处理。③输出10个数。 #include <stdio.h> #define N 10 void input_data(int a[],int n); void printf_data(int a[],int n); void deal_data(int a[],int n); void swap(int *m,int *n); main() { int a[N]; input_data(a,N); deal_data(a,N); printf_data(a,N); } void input_data(int a[],int n) { int i; for(i=0;i<n;i++) scanf("%d",&a[i]); } void printf_data(int a[],int n) { int i; for (i=0;i<n;i++) printf("%6d",a[i]); } void deal_data(int a[],int n) { int i; int min_pos=0,max_pos=0; for(i=0;i<10;i++) { if(a[i]>a[max_pos]) max_pos=i; if(a[i]<a[min_pos]) min_pos=i; } swap(&a[min_pos],&a[0]); swap(&a[max_pos],&a[N-1]); } void swap(int *m,int *n) { int temp; temp=*m; *m=*n; *n=temp; } //以下dele()函数的功能是删除字符串s中的所有数字字符。 //请补充完整dele()函数。 //编写main(),在主函数中输入一个字符串, //通过调用dele函数,删除其中的数字字符,并输出结果。 #include <stdio.h> void dele(char *s) { int n=0,i; for(i=0;s[i];i++) if(!(s[i]>='0'&&s[i]<='9')) //或者 if((s[i]<'0'||s[i]>'9')) s[n++]=s[i]; s[n]='\0'; } main() { char s[100]; gets(s); dele(s); printf("%s\n",s); } //写一函数,求一个字符串的长度, //并编写main()函数。即自己写一个strlen()函数, //函数原型为:int strlen_stu(char *s); #include <stdio.h> int strlen_stu(char *s) { int len=0; while(*s!='\0') { s++; len++; } return len; } main() { char s[100]; gets(s); printf("lengths of %s is %d\n",s,strlen_stu(s)); } //输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符的个数。 //提示:将这5个表示统计个数的变量定义为全局变量, //定义一个进行统计的函数:void Statistics(char *str){…..}, //在Statistics函数中对这5个全局变量进行计算赋值,在main函数中输出结果。 #include <stdio.h> int upper_char=0; int lower_char=0; int space_char=0; int digital_char=0; int other_char=0; void Statistics(char *str) { while(*str!='\0') { if(*str>='A'&&*str<='Z') upper_char++; else if(*str>='a'&&*str<='z') lower_char++; else if(*str==' ') space_char++; else if(*str>='0'&&*str<='9') digital_char++; else other_char++; str++; } } main() { char s[100]; gets(s); Statistics(s); printf("upper_char=%d\n",upper_char); printf("lower_char=%d\n",lower_char); printf("space_char=%d\n",space_char); printf("digital_char=%d\n",digital_char); printf("other_char=%d\n",other_char); } 实验10—4 #include <stdio.h> cut(char *s,int m,int n) { int i; for(i=0;i<n;i++) s[i]=s[i+m]; s[i]='\0'; } void main() { char str[3][20],*p[3]; int i; printf("请您输入三个长度超过5个字符的字符串:\n"); for(i=0;i<3;i++){ p[i]=str[i]; gets(p[i]); } for(i=0;i<3;i++) cut(p[i],i,5); for(i=0;i<3;i++) puts(str[i]); } //用结构体存放如下表中的数据, //然后输出每个人的姓名和实发工资(实发工资=基本工资+浮动工资-支出) //姓名 基本工资 浮动工资 支出 //Tom 1240.00 800.00 75.00 //Lucy 1360.00 900.00 50.00 //Jack 1560.00 1000.00 80.00 #include <stdio.h> #define N 3 struct salary { char name[10]; float base_salary; float float_salary; float expenditure; }; struct salary Workers[N]={{"Tom",1240,800,75},{"Lucy",1360,900,50},{"Jack",1560,1000,80}}; main() { int i; printf("\t姓名\t\t基本工资\t浮动工资\t支 出\n"); for(i=0;i<3;i++) printf("\t%s\t\t%8.2f\t%8.2f\t%6.2f\n",Workers[i].name,Workers[i].base_salary,Workers[i].float_salary,Workers[i].expenditure); printf("--------------------------------------------------------\n"); printf("\t姓名\t\t实发工资\n"); for(i=0;i<3;i++) printf("\t%s\t\t%8.2f\n",Workers[i].name,Workers[i].base_salary+Workers[i].float_salary-Workers[i].expenditure); } //定义一个结构体变量(包括年、月、日), //计算该日在本年中是第几天,注意闰年的问题。 #include <stdio.h> struct date { int year; int month; int day; }; int month_days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; main() { struct date date_value; int i; int day_count=0; printf("请输入年月日(year,month,day)\n"); scanf("%d,%d,%d",&date_value.year,&date_value.month,&date_value.day); for(i=1;i<date_value.month;i++) day_count+=month_days[i]; day_count+=date_value.day; if(date_value.year%4==0&&date_value.year%100!=0||date_value.year%400==0) if(date_value.month>2) day_count++; printf("%d年%d月%d日是该年的第%d天\n",date_value.year,date_value.month,date_value.day,day_count); } //编写程序,输入10个学生的学号、姓名、性别、年龄, //统计其中女生有多少,男生有多少, //并根据年龄从小到大对这10个学生重新排序。 #include <stdio.h> #include <string.h> #define N 10 struct student { char stuNo[10]; char name[10]; char xb[3]; int age; }; struct student stu[N]={{"20100080","关桂凯","男",20}, {"20100081","曾刚","男",19}, {"20100082","李新亮","男",21}, {"20100083","李妍","女",21}, {"20100084","段艳娇","女",20}, {"20100085","寇鹏","男",21}, {"20100086","孙鑫广","男",19}, {"20100087","张志强","男",18}, {"20100088","王健","男",20}, {"20100089","孙广辉","男",21}}; main() { int i,j; int Schoolboy=0; int Schoolgril=0; struct student temp; //输入10个学生的学号、姓名、性别、年龄, //for (i=0;i<10;i++) //{ // scanf("%s%s%s%d",stu[i].stuNo,stu[i].name,stu[i].xb,&stu[i].age); //} //统计其中女生有多少,男生有多少, for(i=0;i<10;i++) { if(strcmp(stu[i].xb,"男")==0) Schoolboy++; else Schoolgril++; } //根据年龄从小到大对这10个学生重新排序。 for(i=0;i<9;i++) for(j=i+1;j<10;j++) { if(stu[i].age>stu[j].age) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } //输出排序结果 printf("\t学号\t\t姓名\t\t性别\t\t年龄\n"); printf("---------------------------------------------------------------------------\n"); for (i=0;i<10;i++) { printf("\t%s\t%s\t\t%s\t\t%d\n",stu[i].stuNo,stu[i].name,stu[i].xb,stu[i].age); } } //建立一个mydata.txt文本文件,向其中写入"this is a test"字符串, //然后显示该文件的内容。 #include
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服