c语言编程问题?

作者&投稿:容琛 (若有异议请与网页底部的电邮联系)
C语言编程问题~

解题思路:完全跟百钱买百鸡的问题是一样的!设大马,中马,小马的匹数分别为x,y,z;可以得到两个方程:x+y+z=100; 3*x+2*y+z/2=100; 将第二个方程变形为:6*x+4*y+z=200; 从第二个方程变形的方程中,我们可以看到,x的最大值为200/6=33.3;即中马,小马都不用,只用大马最多用34;1
int main()
{
int x,y,z;
for(x=1; x<=34; x++)
for(y=1; y<=50; y++)
if(5*x + 3*y == 100)
{
z=100-x-y;
printf("x=%d y=%d z=%d
",x,y,z);
}
}

#include
#include

struct student {
int num;
char name[20];
float score[4];
};

void input(struct student a[], int);

void aver(struct student a[], int,struct student b[]);

void order(struct student a[], int);

void output(struct student a[], int,struct student b[]);

int main() {
struct student stu[100];
struct student b[100];
int n;
printf("请输入学生个数:");
scanf("%d", &n);
input(stu, n);
aver(stu, n,b);
order(stu, n);
output(stu, n,b);
return 0;
}

void input(struct student a[], int n) {
int i, j;
// printf("请输入学生的学号,姓名,英语,数学,物理,语文成绩:
");
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号,姓名,英语,数学,物理,语文成绩:
", i + 1);
scanf("%d", &a[i].num);
//gets(a[i].name);
scanf("%s", &a[i].name);
for (j = 0; j < 4; j++)
scanf("%f", &a[i].score[j]);
}
}

void aver(struct student a[], int n,struct student b[]) {
int i=0, j;
for (i = 0; i < n; i++) {
b[i].score[0] = 0;
for (j = 0; j < 4; j++)
b[i].score[0] += a[i].score[j];
b[i].score[0] = b[i].score[0] / 4;
}
}

void order(struct student a[], int n) {
int i, j;
struct student t[1];
for (i = 1; i < n; i++)
for (j = 0; j < n - i; j++)
if (a[j].score[3] < a[j + 1].score[3]) {
t[1] = a[j];
a[j] = a[j + 1];
a[j + 1] = t[1];
}
}

void output(struct student a[], int n,struct student b[]) {
int i, j;
printf("学号姓名 英语 数学 物理 语文 平均成绩如下:
");
for (i = 0; i < n; i++) {
printf("%d%s", a[i].num, a[i].name);
for (j = 0; j < 4; j++)
printf("%.2f", a[i].score[j]);
printf("%.2f", b[i].score[0]);
printf("
");
}
}

帮你改了一些,看看测试:

1、输入有范围,两个变量输入都需要验证,方法变量处置范围以外,循环判断输入。

2、天数循环计数,日期0~6周期自增。用变量累加计数结果。

下面是演示代码:

#include<stdio.h>

int main()

{

    int i,j,a=7,n=366,cnt=0;

    while(a<0 || a>6)

        printf("请输入a的值(0~6):"),scanf("%d",&a);

    while(n<0 || n>365)

        printf("请输入n的值(0~365):"),scanf("%d",&n);

    for(i=0,j=a;i<n+1;i++,j++)

    {

        if(j==4) cnt++;

        if(j==6) j=-1;

    }

    printf("上机次数%d次
",cnt);

    return 0;

}



对于这种类似于OJ的问题,输入和输出不能含有多余的字符,否则提交就会不通过,要严格按照题目要求进行输入和输出。

第一题分析:

  1. 这题求平均值,题目没有结束输入的条件(标记),该条件一般有多种形式,例如可以输入某个值结束输入(例如-1),或者先输入一个 n ,然后再用循环输入 n 个数。在这里就使用输入 -1 结束输入来编写代码。

  2. 整个题目的思路还是比较清晰。

  3. 先求全班人数和平均值,再求高的人数和平均值,再求低的人数和平均值。

  4. 这里需要注意最后一行的提示,如果平均值是一个整数,应该输出一个整数,例如平均值为 98.00,则应该输出 98,否则保留两位小数输出。

  5. 细节方面就是输入数据的问题。例如如果输入 -1,则人数、平均值全为 0。如果输入的分数都相同,则所有人都大于或等于全部平均分,此时低于全班平均分的人数为 0,根据求平均值公式(平均分=总分÷人数),此时出现除数为 0 的情况。

第一题求解过程:

  1. 声明一个数组(整型、浮点型都行)用来保存输入的分数。

  2. 在输入分数的同时可以累计班级总分和班级人数。

  3. 根据班级总分和班级人数求班级平均分。

  4. 再循环遍历数组,把高于平均分或低于平均分和相应的人数和分数统计出来。

  5. 再求出这两批的平均分。

  6. 最后输出数据。

第一题测试代码

第一题测试结果

第一题测试代码:

#include <stdio.h>

int main()

{

     int a[1000] = {0}, L = 0, mid = 0, R = 0;

     float sum = 0, Lsum = 0, Rsum = 0;

     float Laver = 0, aver = 0, Raver = 0;

     while (a[mid] != -1)

     {

          sum += a[mid];

          scanf("%d", &a[++mid]);

     }

     if (mid > 1) aver = sum / --mid;

     else --mid;

     for (int i = 1; i <= mid; i++)

     {

         if (a[i] < aver)

         {

             R++;

            Rsum += a[i];

         }

     }

     Lsum = sum - Rsum;

     L = mid - R;

     if (L > 0) Laver = Lsum / L;

     if (R > 0) Raver = Rsum / R;

    

     printf("%d ", mid);

     if (aver == (int)aver) printf("%.f
", aver);

     else printf("%.2f
", aver);

    

     printf("%d ", L);

     if (Laver == (int)Laver) printf("%.f
", Laver);

     else printf("%.2f
", Laver);

    

     printf("%d ", R);

     if (Raver == (int)Raver) printf("%.f
", Raver);

     else printf("%.2f
", Raver);

    return 0;

}

第二题分析:

  1. 这题可以完全用数学来解决。能用数学解决的,最好用数学来解决,运行速度快。

  2. 变量 a 表示 0 ~ 6,也代表星期一 ~ 星期日。

  3. 变量 n 是后面的有 n 天。

  4. a + 1 + n,其实就是总的天数,除以 7 的结果就是有多少周,1 周有一个星期五,所以除以 7 的结果就是能上机的次数。但是考虑到有余数的问题,如果余数是 5 或 6,说明还有一次上机的机会。

第二题运算过程:

  1. 声明变量和输入数据。

  2. int sum = a + 1 + n 求得总的天数。

  3. int cnt = sum / 7 求得上机的次数。

  4. if (sum % 7 >= 5) cnt++,求是否还有一次上机的机会。

  5. 输出结果。

第二题测试结果

第二题测试代码:

#include <stdio.h>

int main()

{

     int a, n;

     scanf("%d %d", &a, &n);

     int sum = a + 1 + n;

     int cnt = sum / 7;

     if (sum % 7 >= 5) cnt++;

     printf("%d", cnt);

     return 0;

}



假设班级人数最多200人,输入数据时,以输入-1代表输入结束,如下代码:
int main()
{
float r1,r2,r3;
int a[200];
int i,j,k,m;
k=0;
m=0;
r1=0;
r2=0;
r3=0;
for(i=0;i<200;i++)
a[i]=0;
for(i=0;i<200;i++)
{ a[0]=0;
if(a[i]!=-1) { scanf("%d",&a[i+1]); } else break; } for(j=1;j<=i-1;j++) r1=r1+a[j]; r1=r1/(i-1); printf("%d %.2f\n",i-1,r1); for(j=1;j<=i-1;j++) { if(a[j]>=r1) { k++; r2=r2+a[j]; } } printf("%d %.2f\n",k,r2/k); for(j=1;j<=i-1;j++) { if(a[j]<r1) { m++; r3=r3+a[j]; } } printf("%d %.2f\n",m,r3/m); return 0;}
实际运行满足题目要求,望采纳

#include <stdio.h>

int isprime(int n)

{ for(int i=2; i*i<=n; i++)

    if(n%i==0)return 0;

  return n>1;

}

int main()

{ int i,n,s,s1,n1,s2,a[200];

  s=s1=s2=n=n1=0;

  while((scanf("%d",&a[n]))==1)s+=a[n++];

  float av=(float)s/n;

  for(i=0; i<n; i++)

    a[i]>=av?s1+=a[i],n1++:s2+=a[i];

  printf("总人数=%d平均分=%.2f
",n,av);

  printf("达到平均分的人数=%d平均分=%.2f
",n1,(float)s1/n1);

  printf("未达平均分的人数=%d平均分=%.2f
",n-n1,(float)s2/(n-n1));

  return 0;

}




C语言编程常见十大面试问题(内附答案)
C语言编程面试中常遇到的十大问题,下面就逐一解答:1. 变量\/函数声明与定义的区别:变量\/函数声明告知程序它们的存在,如类型和参数信息,但不分配内存。定义则同时包含声明并为变量分配内存,定义是声明的扩展或细化操作。2. C中的存储类说明符:主要有auto、register、static和extern,它们分别定义了变量...

C语言编程最常见的15个错误
C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。以下是关于C语言编程最常见的15个错误,希望大家认真阅读!1.书写标识符时,忽略了大小写字母的区别。main(){ int a=5;printf("%d",A); } 编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母...

c语言编程问题?
1、初学者会忽略一个问题,scanf函数里变量名前要加&,取地址 printf 里就不用了 2、你这里的 c1=c1+3;...处理后得到的结果是 China-->Fklqd 要得到 Glmre 应该是 c1=c1+4;...3、题外话 password 漏掉了 字母d

c语言编程问题?
1、输入有范围,两个变量输入都需要验证,方法变量处置范围以外,循环判断输入。2、天数循环计数,日期0~6周期自增。用变量累加计数结果。下面是演示代码:include<stdio.h> int main(){ int i,j,a=7,n=366,cnt=0;while(a<0 || a>6)printf("请输入a的值(0~6):"),scanf("%d",&a)...

C语言问题编程问题?
int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的...

C语言编程问题?
2、利用fread函数读取文件所有内容。3、通过遍历字符串,进行大小写判断及转换。下面是演示代码:(命令符不想输入,连续两次回车)include <stdio.h> include <malloc.h> include <string.h> define FPH "C:\\\\test.txt"long getFileSize(char path[]);\/\/获取文件长度 char *readFFile(char path[...

作为一个语言编程的初学者,有哪些问题是要注意的?
这种经历对任何一个水准的程序员而言,都再正常不过了。有过这种经历,并不代表你的智商,技术悟性,或你和编程的适合度有任何问题。不管你是编程新兵,还是程序大牛,你都会遇到这样的经历。不妨告诉自己:出bug很正常,没人能一次搞定!告诉自己:出错的原因是符合逻辑的,并可以找到的,任何问题都是...

基础C语言编程时易犯错误有哪些
l 类型不匹配的问题。(例如:有float a=3.5,但输出的时候printf(“a=%d”,a);则屏幕上会显示出a=0.00000或者提示其它运行错误)。基本原则是:float对应%f, int对应%d, char对应%c。 l 个数不匹配。无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,...

问一道C语言编程的问题,看下图
按你的提问,每天都吃一半多两个,第6天剩一个。程序按图片中的程序照猫画虎即可。计算结果,第一天摘了156个桃子,而不是100个。include <stdio.h>int main(){int day,x1,x2;day=5;x2=1;while(day>0){x1=(x2+2)*2;x2=x1;day--;}printf("total=%d\\n",x1);return 0;} 用...

编程语言的问题
由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。Python 和 Ruby 是最近才出现的语言,在开发时完全采用了 OOP 的思想,而流行的 Perl 脚本语言从版本5开始也慢慢地加入了新的面向对象的功能组件。用组件代替“现实”上的实体成为 JavaScript(ECMA...

乌拉特前旗17142726353: C语言编程问题 -
仪珠福尔: 思路:先确定一个比较大的范围,然后用减半折衷的办法尝试.比方说,你可以把增长率设为0%和100%,然后再尝试这之间的数字就可以.

乌拉特前旗17142726353: C语言编程问题
仪珠福尔: 第一:设置三个变量:两个整型的,一个字符的,两个整型是用来输入两个数的,而字符型用来输入运算法; 第二:判断一下输入的字符类型,可以用if或者switch; 第三:用输出语句直接输出结果; main() {int a,b; char c; scnaf("%d%c%d",...

乌拉特前旗17142726353: C语言编程初学问题 -
仪珠福尔: (1)程序输出:c1=a;c2=b;c1=97;c2=98;因为:你用%c,就是你要输出一个字符,97的ascii码就是小写字母a,98为b; (2)如果你把c1=197,c2=198,应该会提示隐式转换吧,如果定义char c1,c2,默认为有符号的char型,取值范围为-128~127,因此输出的是197-256=-59,198-256=-58,貌似用%c一般机器输出的是?吧,一般的就输出0-127能输出字符吧. (3)换成int和(2)的%c一样,%d就是int的值.

乌拉特前旗17142726353: c语言编程问题
仪珠福尔: #define作用是用一个字符串替换另一个进行编译,这里不是变量. 比如,你用了#define pi 3.14 那么,并不表示pi是一个变量,而是在出现“pi”的地方,都会替换成3.14,然后编译器才对程序进行编译.

乌拉特前旗17142726353: C语言编程问题 -
仪珠福尔: //复制就可以用,但我还是希望你能明白其中的逻辑. #include int mai...

乌拉特前旗17142726353: 有关C语言编程的问题
仪珠福尔: 这么写就可以了: 在最前面加上#include<stdlib.h> 然后在main()函数最后加上: system("pause"); 这样运行完毕之后就不会自动退出,而会等待你确认 比如,这么写一个程序(用于计算从1到n的连加和): #include<stdio.h> #include<...

乌拉特前旗17142726353: C语言编程问题
仪珠福尔: scanf是一个ANSI C标准格式化输入函数,标准库对它的转换说明符 对"s"的描述中是其读取一个多字节字符序列并自动添加一个空字符,开始时扫描输入流的第一个非空白字符进行后续读取直到以一个isspace()能识别的空白字符结束,所以它只能读单词. 简单改成: gets(str); 就可以了.或者编写更正式和安全的: fgets(str, 100 - 1, stdin); str[strchr(str, '\n') - str] = '\0';

乌拉特前旗17142726353: 有关c语言编程的问题 -
仪珠福尔: 要有通用性的话建议把各个功能写成函数,方便调用和重用.至于界面美观和操作性就要看你制作界面的程度了

乌拉特前旗17142726353: 关于C语言编程问题 -
仪珠福尔: "我在TURBO C上运行了也没有错误"按Ctrl+F9运行……另外在TC的文件夹里(默认),生成了对应的exe文件,那个程序可以用于发布.引用一下别人说的:“珍爱生命,远离TC”……

乌拉特前旗17142726353: C语言的 编程问题
仪珠福尔: 其实是从1000开始的,只不过是因为命令运行窗口显示有限,所以是给你的感觉是从9702开始的,打印数太多,显示不出来而已!不信你把j<10000改成j<1100 ,看看是不是从1000开始的! 运行后 去C盘 找到一个文件为 b.txt的文件,打开 里面就是结果了!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网