大连理工大学C语言期末复习课件
- 格式:ppt
- 大小:226.50 KB
- 文档页数:8
C编程(C语⾔程序设计,⼤连理⼯⼤学MOOC)仅作参考,请指正(都提交通过,但是也有错误,第22题的错误,已经修正)1、Hello World!1 #include <stdio.h>2int main()3 {4 printf("Hello World!");5return0;6 }View Code2、我爱编程1 #include <stdio.h>2int main()3 {4 printf("Hello C!\n");5 printf("I like programming.");6return0;7 }View Code3、计算两个整数的乘积1 #include <stdio.h>2int main()3 {4int a,b;5 scanf("%d%d",&a,&b);6 printf("%d",a*b);7return0;8 }View Code4、计算圆的⾯积1 #include <stdio.h>2 #include <string.h>3#define PI 3.14154int main()5 {6 printf("Area=%5.2f\n", PI*4.3*4.3);7return0;8 }View Code5、计算平⽅根1 #include <stdio.h>2 #include <math.h>3int main()4 {5double x;6 scanf("%lf", &x);7 printf("%f\n", sqrt(x));8return0;9 }View Code6、输出逆序数1 #include <stdio.h>2 #include <string.h>3 #include <math.h>4int main()5 {8while(x)9 {10 y = y*10 + x%10;11 x /= 10;12 }13 printf("y=%d\n", y);14return0;15 }View Code7、交换两个变量1 #include<stdio.h>2 #include<math.h>34int main()5 {6int a,b,t;7 scanf("%d,%d",&a,&b);8 t = a;9 a = b;10 b = t;11 printf("%d,%d",a,b);12return0;13 }View Code8、输出字符ASCII码1 #include<stdio.h>2 #include<math.h>34int main()5 {6int a;7 a = getchar();8 printf("ASCII=%d",a);9return0;10 }View Code9、求⼀元⼆次⽅程的两个实根1 #include<stdio.h>2 #include<math.h>34int main()5 {6float x1,x2;7 x1 = (-1 + sqrt(1+4*2))/2.0;8 x2 = (-1 - sqrt(1+4*2))/2.0;9 printf("x1=%.4f\n",x1);10 printf("x2=%.4f\n",x2);11return0;12 }View Code10、计算银⾏存款本息1 #include<stdio.h>2 #include<math.h>34int main()5 {6int money,year;7double rate,sum = 0;8 scanf("%d%d%lf",&money,&year,&rate);9 sum = money*pow((1+rate),year);1011 printf("sum=%7.2f",sum);12return0;13 }View Code1 #include <stdio.h>2 #include <stdio.h>3 #include <stdlib.h>45int main()6 {7char ch;8 ch = getchar();9if(ch>='a'&&ch<='z')10 ch -= 32;11else12 ch += 32;13 putchar(ch);14return0;15 }View Code12、计算分段函数1 #include <stdio.h>2int main(void)3 {4double x, y;5 scanf("%lf",&x);6if ( x<0 )7 y=0;8else if( x<=15 )9 y=4*x/3;10else11 y=2.5*x-10.5;12 printf("y=%.2f",y);13return0;14 }View Code13、百分制成绩转换为五级分制成绩1 #include <stdio.h>2 #include <stdio.h>3 #include <stdlib.h>45int main()6 {7float achievment;8 scanf("%f",&achievment);910int a = achievment;11char ch;1213switch(a/10){14case10:15case9:ch = 'A';break;16case8:ch = 'B';break;17case7:ch = 'C';break;18case6:ch = 'D';break;19default:ch = 'E';20 }21 printf("grade:%c\n",ch);2223return0;24 }View Code14、输出⽔仙花数1 #include <stdio.h>2 #include <stdio.h>3 #include <stdlib.h>45int main()6 {7int i;8 scanf("%d",&i);910int a = i%10, b = i/10%10, c = i/100;14 printf("%d不是⽔仙花数!",i);1516return0;17 }View Code15、⽤for语句实现判断并求和1 #include<stdio.h>23int main()4 {5int sum = 0;6for(int i=1; i<=100; ++i)7 {8if(i%3==0 && i%5==1)9 sum += i;10 }11 printf("sum=%d",sum);1213return0;14 }View Code16、⽤do while 语句实现从键盘输⼊⼀组整数,求平均值 1 #include<stdio.h>23int main()4 {5int i=0, x;6float sum = 0;7do{8 scanf("%d",&x);9if(x<0) break;10 sum += x;11 i++;12 }while(x>=0);13 printf("AVE=%.2f\n",sum/i);14return0;15 }View Code17、⽤while语句实现计算圆周率 pi (3.14) 的近似值1 #include<stdio.h>2 #include <math.h>3#define EPS 1e-54int main()5 {6float pi = 0, sign = 1, x = 1;78while(fabs(sign/x) > EPS)9 {10 pi += sign/x;11 x += 2;12 sign = -sign;13 }14 printf("pi=%.2f\n",pi*4);15return0;16 }View Code18、求两个整数的最⼤公约数1 #include<stdio.h>2 #include<stdlib.h>34int GCD(int x, int y);5int main()6 {7int a,b;8 scanf("%d%d",&a,&b);9 printf("GCD=%d\n",GCD(a,b));1213int GCD(int x, int y){14return y == 0 ? x : GCD(y, x%y);15 }View Code19、找素数1 #include<stdio.h>2 #include<stdlib.h>34int isPrime(int x);5int main()6 {7int a;8 scanf("%d",&a);9for(int i=a+1;;++i){10if(isPrime(i)){11 printf("prime=%d\n",i);12break;13 }14 }15return0;16 }1718int isPrime(int x){19for(int i=2; i<x; ++i)20if(x%i==0)21return0;22return1;23 }View Code20、斐波那契数列求和1 #include<stdio.h>2 #include<stdlib.h>34int main()5 {6int sum = 0, a=1,b=1;7for(int i=0;i<20;i+=2){8 sum += a+b;9 a = a+b;10 b = a+b;11 }12 printf("sum=%d\n",sum);13return0;14 }View Code21、逆序存放数据1 #include<stdio.h>2#define N 1003int main()4 {5int arr[N] = {0}, n=6;6for(int i=n-1; i>=0; --i)7 scanf("%d",&arr[i]);8for(int j=0; j<n; ++j)9 printf("%d\n",arr[j]);10return0;11 }View Code22、找出⼀维整型数组中的次最⼤值#include<stdio.h>#define N 5/*设次⼤值⼀定存在*/int main(){int i, j, arr[N+1] = {0};scanf("%d",&arr[i]);/* 冒泡排序 */for(i=0; i<N-1; ++i)for(j=0; j<N-i-1; ++j)if(arr[j]<arr[j+1]){int t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}/* 求次最⼤值下标i*/for(i=1; arr[0]==arr[i] && i<N; ++i);/*if(i==N)printf("次⼤值不存在!\n");*/printf("次最⼤值=%d",arr[i]);return0;}View Code/*求最⼤值、次⼤值可以不⽤排序*/#include <stdio.h>#define N 5int main(){int i, arr[N] = {0};int max1, max2;scanf("%d%d",&arr[0],&arr[1]);max1 = max2 = arr[0];arr[1] > max1 ? (max1 = arr[1]) : (max2 = arr[1]); for(i=2; i<N; ++i){scanf("%d",&arr[i]);if(arr[i]>max1){max2 = max1;max1 = arr[i];}else if(arr[i]>max2){max2 = arr[i];}}/*if(max1==max2)printf("次⼤值不存在!\n");elseprintf("次最⼤值=%d",max2);*//*次最⼤值 max2 是存在的 */printf("次最⼤值=%d",max2);return0;}View Code#include <stdio.h>#include <limits.h>#define N 5int main(){int i, arr[N] = {0};int max1, max2;max1 = max2 = INT_MIN;for(i=0; i<N; ++i){scanf("%d",&arr[i]);if(arr[i]>max1){max2 = max1;max1 = arr[i];}else if(arr[i]>max2){max2 = arr[i];}}/* 次最⼤值 max2 */if(max1 == INT_MIN)printf("次⼤值不存在!\n");elseprintf("次最⼤值=%d",max2);View Code23、调整最⼤值的位置1 #include<stdio.h>2#define N 1003int main()4 {5int arr[N] = {0}, n=6, max=0, maxi=0;6 scanf("%d",&arr[0]);7 max=arr[0];89for(int i=1; i<n; ++i){10 scanf("%d",&arr[i]);11if(arr[i]>max){12 max = arr[i];13 maxi = i;14 }1516 }17int t = arr[n-1];18 arr[n-1] = arr[maxi];19 arr[maxi] = t;2021for(int j=0; j<n; ++j)22 printf("%d\n",arr[j]);23return0;24 }View Code24、连接两个字符串1 #include<stdio.h>2 #include<string.h>3#define N 1004int main()5 {6char a[2*N] = "", b[N] = "";7 scanf("%s%s",a,b);8/* strcpy(&a[strlen(a)],b);//没有⽤strcat⽤的strcpy 9*/10//不⽤函数11int i;12for(i=0; a[i]; ++i);//求字符串'\0'下标13char *p = a+i, *q = b;14while(*q)15 {16 *p++ = *q++;17 }18 *p = '\0';1920 printf("%s\n",a);21return0;22 }View Code1 #include<stdio.h>2 #include<string.h>3#define N 1004int main()5 {6char a[2*N] = "", b[N] = "";7 scanf("%s%s",a,b);89char *p = a, *q = b;10while(*p) p++;11while((*p++=*q++)!='\0');1213 printf("%s\n",a);14return0;15 }View Code25、求矩阵外围元素之和4 {5int sum=0, n=3;6int *arr = (int*)malloc(sizeof(int)*n*n); //⼀维模拟⼆维数组 78for(int i=0; i<n*n; ++i)9 {10 scanf("%d",&arr[i]);11 }1213for(int i=0; i<n; ++i)14 {15for(int j=0; j<n; ++j)16 {17if(i==0||i==n-1 || j==0|| j==n-1 )18 {19 sum += arr[i*n+j]; //⼀⾏n个20 }21 }22 }2324 printf("%d",sum);2526return0;27 }View Code26、求矩阵主对⾓线和副对⾓线元素之和1 #include <stdio.h>2#define N 53int main()4 {5char str[N][N];6int i,j,sum=0;78for(i=0; i<N; ++i)9for(j=0; j<N; ++j)10 scanf("%d",&str[i][j]);1112for(i=0; i<N; ++i)13for(j=0; j<N; ++j)14 {15if(i==j)16 sum += str[i][j];17if(i==N-j-1)18 sum += str[i][j];19 }20 printf("sum=%d\n",sum);21return0;22 }View Code27、将字符串的⼩写字母转换为⼤写字母1 #include <stdio.h>2#define N 10003int main()4 {5char str[N]="";6int i=0;7 gets(str);89while(str[i]){10if(str[i]>='a'&&str[i]<='z')11 str[i] -= 32;12 i++;13 }14 printf("%s\n",str);15return0;16 }View Code28、编写函数,计算银⾏存款本息并输出1 #include <stdio.h>5double sum = money;6while(year--){7 sum = sum*(1+rate);8 }9return sum;10 }11int main()12 {13int money, year;14double rate, sum=0;15 scanf("%d%d%lf",&money,&year,&rate);16 sum = fun(money,year,rate);17 printf("sum=%.2f",sum);18return0;19 }View Code29、数值转换1/*位运算*/2 #include <stdio.h>3void fun(int x)4 {5int j=31;/*按32位定义*/6while(!((x&(1<<j))>>j))/*去前⾯的0*/7 j--;8for(; j>=0; j--)/*按位输出*/9 printf("%d", (x&(1<<j))>>j);10 }11int main()12 {13int x;14 scanf("%d",&x);15 fun(x);16return0;17 }View Code30、求⼀组数中⼤于平均值的数的个数 1 #include <stdio.h>2#define N 10034int main()5 {6int num[N] = {0},count=0;7double sum = 0;8for(int i=0; i<10; ++i){9 scanf("%d",&num[i]);10 sum += num[i];11 }12for(int j=0; j<10; ++j)13if(num[j]>sum/10)14 count++;15 printf("%d",count);16return0;17 }View Code31、求x的n次⽅1 #include <stdio.h>2double cube(double x,int n)3 {4if(n ==1)5return x;6else7return x*cube(x,n-1);8 }9int main()10 {11double x,y;12int n;13 scanf("%lf%d",&x,&n);14 y=cube(x,n);15 printf("%f",y);View Code32、输出最⼤、最⼩数1 #include <stdio.h>2void fun(int *arr,int *max,int *min){3 *max = *min = arr[0];4for(int i=1; i<10; ++i){5if(arr[i]>*max)6 *max = arr[i];7if(arr[i]<*min)8 *min = arr[i];9 }10 }11int main()12 {13int max,min;14int arr[10] = {0};15for(int i=0; i<10; ++i){16 scanf("%d",&arr[i]);17 }18 fun(arr,&max,&min);19 printf("max=%d,min=%d",max,min);20return0;21 }View Code33、任意整数转换为千分位分隔的字符形式1 #include <stdio.h>2#define N 1003int main()4 {5int n;6 scanf("%d",&n);7int arr[N] = {0},index = 0;8while(n)9 {10 arr[index++] = n%10;11 n /= 10;12 }13for(int i=index-1; i>=0; --i)14 {15 printf("%d",arr[i]);16if(i%3==0&&i)17 printf(",");18 }19return0;20 }View Code34、利⽤指针编写程序,统计字符串的长度1 #include <stdio.h>2#define N 1003int main()4 {5char str[N] = "";6 gets(str);7char *p = str;8int len = 0;9while(*p)10 {11 len++;12 p++;13 }14 printf("Length of the string is %d\n",len);15return0;16 }View Code35、利⽤指针编程,将数组中所有元素的值对称交换 1 #include <stdio.h>2#define N 105int arr[N] = {0};6for(int i=0; i<N; ++i)7 scanf("%d",&arr[i]);8int *p = arr, *q = arr+N-1;9while(p<q)10 {11int t = *p;12 *p = *q;13 *q = t;14 p++, q--;15 }16for(int j=0; j<N; ++j)17 printf("%2d",arr[j]);18return0;19 }View Code36、利⽤指针编写程序,求⼀维数组中的最⼤和最⼩的元素值1 #include <stdio.h>2#define N 103int main()4 {5int arr[N] = {0};6for(int i=0; i<N; ++i)7 scanf("%d",&arr[i]);8int max, min;9 max = min = arr[0];10for(int j=1; j<N; ++j)11 {12if(arr[j]>max)13 max = arr[j];14if(arr[j]<min)15 min = arr[j];16 }17 printf("max=%d,min=%d",max,min);18return0;19 }View Code37、利⽤指针编写⼀函数,输⼊3个整数,按由⼤到⼩的顺序将它们输出1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4#define N 25656void swap(int *a, int *b)7 {8int t = *a;9 *a = *b;10 *b = t;11 }12int main( )13 {14int arr[N] = {0};15for(int i=0; i<3; ++i)16 scanf("%d",&arr[i]);17if(arr[0]<arr[1])18 swap(&arr[0],&arr[1]);19if(arr[0]<arr[2])20 swap(&arr[0],&arr[2]);21if(arr[1]<arr[2])22 swap(&arr[1],&arr[2]);23for(int j=0;j<3; ++j)24 printf("%3d",arr[j]);25return0;26 }View Code38、⽤指向数组的指针变量实现输出指定学⽣的全部成绩1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4#define N 25656int main( )7 {8float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};9float (*p)[4] = score;10int n;11 scanf("%d",&n);12for(int i=0;i<4;++i)13 printf("%8.2f",p[n][i]);14return0;15 }View Code39、某班有5名同学,建⽴⼀个学⽣的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学⽣的平均成绩及名次1/*2测试数据3201701 zhao 29.8 85.4 65.44201702 qian 96.5 87.5 65.45201703 sun 85.4 65.4 84.66201704 li 63.4 95.4 86.37201705 zhou 65.9 84.6 97.58*/9 #include<stdio.h>1011struct student{12long no;13char name[20];14float score[3];15 }stu[5],*p;1617int rank(float *ave, float score){18int rank = 5;19for(int i=0; i<5; ++i)20if(ave[i]<score)21 rank--;22return rank;23 }2425int main()26 {27float ave[5] = {0.0};28int index = 0;29for(p=stu; p<stu+5; ++p){ //stu+530 scanf("%ld %s %f %f %f",31 &p->no,p->name,&p->score[0],&p->score[1],&p->score[2]);32 ave[index++] = (p->score[0]+p->score[1]+p->score[2])/3.0;33 }3435 printf("Number: Name: score: Average: rank:\n");36for(index=0,p=stu; p<stu+5; ++p){37 printf("%-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n",38 p->no,p->name,p->score[0],p->score[1],39 p->score[2],ave[index++],rank(ave,ave[index]));40 }41return0;42 }View Code40、某班有10名同学,建⽴学⽣结构体类型,包括学号、姓名、3门课程的成绩,编写程序,读⼊已准备好的⽂本⽂件student1.txt,为结构体数组变量赋值,计算每名学⽣的平均成绩及名次。