您的位置:首页 > 编程语言 > C语言/C++

C语言-指针、数组、结构体、分支、循环混合使用

2016-03-19 11:12 656 查看
1、写一个程序,输出如下内容:

//#############################################################
//###  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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: