C语言-指针、数组、结构体、分支、循环混合使用
2016-03-19 11:12
656 查看
1、写一个程序,输出如下内容:
程序代码:
回车后输出:
2,计算2+4+6+8+。。。+100
回车后输出:
3、计算1到100之间的奇数和与偶数和
回车后输出:
4、求1到100的非素数之和
回车后输出:
5、调用子函数实现1到100的非素数和,其中子函数判断数字是否非素数,如果非素数,则返回
主函数:
子函数:
输出:
6、有一个四位正整数,组成着四个正整数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位数互换,组成一个新的四位数,原来四位数刚好是新四位数的4倍,求这样的四位数:
输出:
7、两个乒乓球队进行比赛,各处三个人,甲队为A,B,C三人,乙队为X,Y,Z三人,其中A不和X比,C不和X,Z比,请编程找出三对赛手的名单:
输出:
8、对一个3*3的二维数组进行转置,即行列互换
输出:
9、输入20个正整数,判断是否素数,如果是则排序。
主函数:
rank()子函数(使用选择法排序):
10、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:①输入10个数;②进行处理;③输出10个数。
主函数:
输入、输出、处理子函数:
11、使用子函数对数列排序:
主函数:
子函数:
12、有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),
三门课的成绩(score[3])。要求在main函数中输入这n个学生的数据, 然后调用一个函数count,在该函数中计算出每个学生的总分和平均分, 然后打印出所有各项数据(包括原有的和新求出的)。
结构体定义:
count()子函数:
//############################################################# //### name number math english computer ### //### zhanghua ,9901, 80.5, 87.0, 80.0 ### //### lina ,9902, 70.0, 80.0, 90.0 ### //### wanggang ,9903, 87.0, 76.0, 78.0 ### //#############################################################
程序代码:
struct score{ char *name; int number; float math; float english; float computer; }; struct score sc[3] = { {"zhanghua", 9901, 80.5, 87, 80}, {"lina", 9902, 70, 80, 90}, {"wanggang", 9903, 87, 76, 78}, }; printf("name number math english computer\n"); for (int i=0; i<3; i++) { printf("%-9s,%d,%10.1f,%10.1f,%10.1f\n",sc[i].name, sc[i].number,sc[i].math,sc[i].english,sc[i].computer); }
回车后输出:
name number math english computer zhanghua ,9901, 80.5, 87.0, 80.0 lina ,9902, 70.0, 80.0, 90.0 wanggang ,9903, 87.0, 76.0, 78.0 Program ended with exit code: 0
2,计算2+4+6+8+。。。+100
int sum = 0; for (int i=2; i<=100; i+=2) { sum+=i; } printf("2+4+6+8+...+100=%d.\n",sum);
回车后输出:
2+4+6+8+...+100=2550. Program ended with exit code: 0
3、计算1到100之间的奇数和与偶数和
int jsum = 0; int osum = 1; for (int i=1 ;i<=100 ; i++) { if (i%2) { jsum+=i; }else{ osum+=i; } } printf("jsum=%d,\tosum=%d\n", jsum, osum);
回车后输出:
jsum=2500, osum=2551 Program ended with exit code: 0
4、求1到100的非素数之和
int sum = 0; int j= 0 ; for (int i=1; i<=100; i++) { for (j=2; j<i; j++) { if (i%j==0) { break; } } if (j!=i) { sum=sum+i; printf("%d\t",i); } } printf("\n%d\n",sum);
回车后输出:
jsum=2500, osum=2551 Program ended with exit code: 0
5、调用子函数实现1到100的非素数和,其中子函数判断数字是否非素数,如果非素数,则返回
主函数:
int sum = 0; for (int i = 1 ; i<=100; i++) { sum += sushu(i); } printf("%d\n", sum);
子函数:
int sushu(int n){ int i; for (i=2; i<n; i++) { if (n%i==0) { break; } } if (n!=i) { return 0; }else{ return n; } }
输出:
3990 Program ended with exit code: 0
6、有一个四位正整数,组成着四个正整数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位数互换,组成一个新的四位数,原来四位数刚好是新四位数的4倍,求这样的四位数:
int a = 0; int b = 0; for (int i=1; i<10; i++) { for (int j=0; j<10; j++) { for (int k=0; k<10; k++) { for (int l=1; l<10; l++) { a=1000*i+100*j+10*k+l; b=1000*l+100*k+10*j+i; if (a==4*b && i!=j &&j!=k && k!=l) { printf("%d\t",a); } } } } } printf("\n");
输出:
8712 Program ended with exit code: 0
7、两个乒乓球队进行比赛,各处三个人,甲队为A,B,C三人,乙队为X,Y,Z三人,其中A不和X比,C不和X,Z比,请编程找出三对赛手的名单:
//设A=1,B=2,C=3. int x,y,z; for (x=1; x<4; x++) { for (y=1; y<4; y++) { for (z=1; z<4; z++) { if ((x+y+z)==6 && (x!=1) && (x!=3) && (z!=3) &&(x!=y) && (y!=z)) { printf("x=%d\ty=%d\tz=%d", x, y, z); } } } }
输出:
x=2 y=3 z=1 Program ended with exit code: 0
8、对一个3*3的二维数组进行转置,即行列互换
int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int tmp = 0; for (int i=0; i<3; i++) { for (int j=i+1; j<3; j++) { tmp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = tmp; } } for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { printf("%d\t",a[i][j]); } printf("\n"); }
输出:
1 4 7 2 5 8 3 6 9 Program ended with exit code: 0
9、输入20个正整数,判断是否素数,如果是则排序。
主函数:
int a[20] = {0}; int b[20] = {0}; printf("请输入20个正整数\n"); for (int i=0; i<20; i++) { scanf("%d",&a[i]); b[i] = sushu(a[i]); } rank(b, 20); for (int i=0; i<20; i++) { if (b[i]>0) { printf("%d\t",b[i]); } } printf("\n");
rank()子函数(使用选择法排序):
void rank(int *p, int n){ int max = 0; int tmp = 0; for (int i=0; i<n-1; i++) { max=i; for (int j=i+1; j<n;j++) { if (*(p+max)<*(p+j)) { max = j; } } if (i!=max) { tmp = *(p+max); *(p+max) = *(p+i); *(p+i) = tmp; } } }
10、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:①输入10个数;②进行处理;③输出10个数。
主函数:
int a[10] = {0}; printf("请输入十个数:\n"); inputnum(a); deal(a, 10); output(a, 10);
输入、输出、处理子函数:
// 输入十个数子函数 void inputnum(int *a){ for (int i=0;i<10 ; i++) { scanf("%d",&a[i]); } } // 处理函数:将其中最小的数与第一个数对换,把最大的数与最后一个数对换 void deal(int *p, int n){ int max=0,min=0; int tmp=0,i=0,j=0; max=i; for (i=0; i<n;i++) { if (*(p+max)<*(p+i)) { max=i; } } tmp = *(p+max); *(p+max) = *(p+0); *(p+0) = tmp; min=j; for (j=0; j<n;j++) { if (*(p+min)>*(p+j)) { min=j; } } tmp = *(p+min); *(p+min) = *(p+n-1); *(p+n-1) = tmp; } // 输出函数 void output(int *p, int n){ for (int i=0; i<n; i++) { printf("%d\t",p[i]); } printf("\n"); }
11、使用子函数对数列排序:
主函数:
int main() { int a[5] = {90, 50, 80, 70, 60,}; rank(a,5); for (int i=0; i<5; i++) { printf("%d\t", a[i]); } printf("\n"); return 0; }
子函数:
void rank(int * p, int n){ int max = 0; int tmp = 0; for (int i=0; i<n-1; i++) { max=i; for (int j=i+1; j<n; j++) { if (*(p+max)<*(p+j)) { max=j; } } if (i!=max) { tmp = *(p+i); *(p+i) = *(p+max); *(p+max) =tmp; } } }
12、有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),
三门课的成绩(score[3])。要求在main函数中输入这n个学生的数据, 然后调用一个函数count,在该函数中计算出每个学生的总分和平均分, 然后打印出所有各项数据(包括原有的和新求出的)。
int i; float s0,s1,s2; struct student a[3]; for(i=0;i<3;i++) { scanf("%d%s %c%d%f%f%f",&a[i].num, a[i].name, &a[i].sex,&a[i].age, &s0, &s1, &s2); a[i].score[0]=s0;a[i].score[1]=s1;a[i].score[2]=s2; printf("%d %s %c %d %4.1f %4.1f %4.1f\n",a[i].num,a[i].name, a[i].sex,a[i].age,a[i].score[0],a[i].score[1],a[i].score[2]); } count(a,3); printf("=============================================\n"); printf("NO name sex age score[0] score[1] score[2] total ave\n"); for(i=0;i<3;i++) printf("%d %s %c %d %5.1f %5.1f %5.1f %5.1f %5.1f\n", a[i].num,a[i].name,a[i].sex,a[i].age,a[i].score[0], a[i].score[1],a[i].score[2],a[i].total,a[i].ave); return 0;
结构体定义:
struct student { int num; char name[20]; char sex; int age; float score[3]; float total; float ave; };
count()子函数:
void count(struct student * b,int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<3;j++) b[i].total+= b[i].score[j]; b[i].ave=b[i].total/3; } }
相关文章推荐
- c++ 单链表 双向链表 链表笔试题
- 搭建Ubuntu下c/c++编译环境【转】
- c/c++中typedef详解(此文对typedef用于结构体的定义说明得很清楚到位)
- 六大排序算法c++实现
- 蓝桥杯数独游戏——C语言版
- C++中的const常见的用法总结
- C语言实现封装、继承和多态
- 友元简介:友元函数,友元类和友元成员函数
- C++分离类模板的声明和定义
- c++实验2-标准体重
- QML C++ TableView + Model 处理
- c语言 inline函数的总结
- c++第二次上机实验
- c++和wireshark和plsql的关联
- VC++6.0设置Release模式可调试的方法
- c#和c++和dos的关联
- 谈谈C++多态
- c#和C++的区别总结
- 3/ C++ 书籍
- 1/C++:STL标准入门汇总