178.输入一行字符,以“#”号作为结束标志,分别统计出其中的英文字母.空格.数字和其它字符的个数。要求在程序中用变量letter统计英文字母的个数.space统计空格的个数.count统计数字的个数.other统计其它字符的个数。
正确答案:
#include <stdio.h>
main() {
char str[30], c;
int letter = 0, space = 0, count = 0, other = 0;
while ((c = getchar()) != '#') {
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) letter++;
else if (c == ' ') space++;
else if (c >= '0' && c <= '9') count++;
else other++;
}
printf("%d,%d,%d,%d", letter, space, count, other);
}
179.现有班级学生60人,现统计C语言课程的成绩情况,包括平时上机,期末上机考试和笔试成绩。总评成绩=平时上机*20%+上机考试*20%+笔试成绩*60。假设三个成绩的数据已由任课老师录入并存放在e盘根目录下的student.txt文件中。要求:
(1)定义学生结构体,其中包括学生的学号.姓名,以及平时上机.期末上机考试.笔试成绩.总评成绩这4项成绩。用结构体数组存放所有学生的记录,并计算出每个学生的总评成绩。
(2)求60分以下人数D,70-79分人数C,80-89分人数B,90分以上人数A。
(3)在屏幕上输出所有成绩,每行每个成绩设置域宽为8,输完一个学生换行。最后输出A,B,C,D的值。
正确答案:
#include <stdio.h>
struct student {
char ID[30];
char name[10];
int homework; //平时上机成绩
int pexam; //上机考试成绩
int fexam; //笔试成绩
int sumexam; //总评成绩
};
int main() {
FILE *fp;
struct student s[100];
int n = 0;
int A = 0, B = 0, C = 0, D = 0;
fp = fopen("e:\\student.txt", "r");
char str[100];
for (n = 0; n < 60; n++) {
fscanf(fp, "%d%d%d", &s[n].homework, &s[n].pexam, &s[n].fexam);
s[n].sumexam = (int)(s[n].homework * 0.2 + s[n].pexam * 0.2 + s[n].fexam * 0.6);
}
switch (s[n].sumexam / 10) {
case 10:
A++;
break;
case 9:
A++;
break;
case 8:
B++;
break;
case 7:
C++;
break;
default:
D++;
}
n++;
fclose(fp);
for (int i = 0; i < n; i++)
printf("%s,%s,%d,%d,%d,%d\n", s[i].ID, s[i].name, s[i].homework, s[i].pexam, s[i].fexam, s[i].sumexam);
printf("A:%d", A);
printf("B:%d", B);
printf("C:%d", C);
printf("D:%d", D);
return 0;
}
180.货物征税问题。对一批货物征税,价格在1万元以上部分的征5%,5000元以上(包括5000元).1万元以下部分的征3%,1000元以上(包括1000元).5000以下部分的征2%,1000元以下部分的免税,读入货物价格,计算并输出税金。征税应分段累计,各段采用不同税率进行征收。(8分)
(提示:如对2万元货物,应分1万以上.5千-1万及1千-5千部分进行三段征收)。
正确答案:
#include <stdio.h>
int main() {
float price, p, tax = 0;
scanf("%f", &price);
p = price;
if (price > 10000) {
tax = (price - 10000) * 0.05;
price = 10000;
}
if (price > 5000) {
tax = tax + (price - 5000) * 0.03;
price = 5000;
}
if (price > 1000) {
tax = tax + (price - 1000) * 0.02;
price = 1000;
}
if (price <= 1000)
tax = tax + 0;
printf("价格为%f的货物应交税%f元", p, tax);
}
181.要求定义一个子函数实现求阶乘的计算,在主函数中由用户输入m和n,然后调用子函数计算下列公式并输出计算结果。
正确答案:
#include <stdio.h>
int fac(int n) {
int f;
if (n < 0) printf("n<0,data error!");
else if (n == 0 || n == 1) f = 1; //终止条件
else f = fac(n - 1) * n; //递归步骤
return (f);
}
main() {
int m, n;
scanf("%d,%d", &m, &n);
int s = fac(m) / (fac(n) * fac(m - n));
printf("result=%d\n", s);
}
182.任意读入10个字符串,降序排列,然后输出屏幕,同时写入myFile.txt文件中。
正确答案:
#include <stdio.h>
#include <string.h>
#define N 10
int main() {
char s[N][20]; //假设每个串的串长都小于20
char h[40] = "";
char *p[N]; //借助指针数组,可以只交换指向串的指针,不交换串本身
int i, j, k;
for (i = 0; i < N; i++) p[i] = s[i]; //让指针数组p的每一个元素依次存放s每行的首地址
for (i = 0; i < N; i++) gets(s[i]); //读入10个串,存放到s的每一行中
//选择法排序
for (i = 0; i <= N - 2; i++) {
k = i;
for (j = i + 1; j <= N - 1; j++)
if (strcmp(p[j], p[k]) > 0)k = j;
if (k != i) {
char *t;
t = p[i];
p[i] = p[k];
p[k] = t;
}
}
puts("降序排列后:");
for (i = 0; i < N; i++) puts(p[i]);
FILE *fp;
fp = fopen("myFile.txt", "w");
for (i = 0; i < N; i++) fprintf(fp, "%s\n", p[i]);
fclose(fp);
return 0;
}
183.编写程序,输入一个大于3的整数n,判定它是否为素数(素数:只能被1和它自己整除的数)。
正确答案:
#include <stdio.h>
#include <math.h>
int main() {
int n, i, k;
printf("please enter a integer number,n=?");
scanf("%d", &n);
k = sqrt(n);
for (i = 2; i <= k; i++)
if (n % i == 0) break;
if (i <= k) printf("%d is not a prime number.\n", n);
else printf("%d is a prime number.\n", n);
return 0;
}
184.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。编程求第一天共摘多少桃子。(要求用循环实现)
#include <stdio.h>
main() {
int day, peach;
peach = 1;
for (day = 9; day >= 1; day--) peach = (peach + 1) * 2;
printf("The first day:%d\n", peach);
}
185.编写嵌套的循环程序,输出1-100这个范围内的素数。
正确答案:
#include <stdio.h>
#include <math.h>
int main() {
int i, j, k = 0, count = 0;
int isPrime;
printf("1至100之间的素数从小到大分别为:\n");
for (i = 2; i <= 100; i++) {
isPrime = 1;
for (j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime == 1) {
printf("%d\t", i);
count++;
}
}
printf("一共%d个素数\n", count);
return 0;
}
186.编写嵌套的循环程序,输出1-100这个范围内的素数。
正确答案:
#include <stdio.h>
#include <math.h>
int main() {
int i, j, k = 0, count = 0;
int isPrime;
printf("1至100之间的素数从小到大分别为:\n");
for (i = 2; i <= 100; i++) {
isPrime = 1;
for (j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime == 1) {
printf("%d\t", i);
count++;
}
}
printf("一共%d个素数\n", count);
return 0;
}
187.请编写2个程序,分别用while.do…while 循环计算:10!
提示:10!=1×2×3×…×10
正确答案:
#include <stdio.h>
main() {
int i = 1, product = 1;
while (i <= 10) {
product = product*i;
i = i + 1;
}
printf("10!=%d\n", product);
}
#include <stdio.h>
main() {
int i = 1, product = 1;
do {
product = product * i;
i = i + 1;
} while (i <= 10);
printf("10!=%d\n", product);
}
188.键盘输入3位学生3 门课程的成绩,输出每位学生的总成绩。(要求用二位数组实现,运行成功的请将程序和运行截图上传)
正确答案:
#include <stdio.h>
int main( ) {
int score[3][3], i, j ; //行代表每一位学生,列表示某一门课程
float avg[3] = {0} ;
printf( "Please input:\n" ) ;
for ( i = 0 ; i <= 2 ; i++ ) {
for ( j = 0 ; j <= 2 ; j++ ) {
scanf( "%d", &score[i][j] ) ;
avg[i] += score[i][j] ;
}
printf( "第%d位同学的总成绩为:%.1f", i + 1, avg[i]);
}
return 0;
}
189.编写一个程序,输出所有的水仙花数。若一个三位数等于其各位上数字的立方和,则称这个三位数为水仙花数。例如,153是一个水仙花数,因为
正确答案:
#include<stdio.h>
int main( ) {
int n, i, j, k ;
printf( "Output:\n" ) ;
for (n = 100 ; n < 1000 ; n++ ) {
i = n % 10 ; /* 个位 */
j = ( n / 10 ) % 10 ; /* 十位 */
k = n / 100 ; /* 百位 */
if ( n == i * i * i + j * j * j + k * k * k )
printf( "%d\n", n ) ;
}
return 0 ;
}
190.编写程序,从键盘输入任意位数整数,求出其逆序整数,并输出。
正确答案:
#include <stdio.h>
main( ) {
int num, nixu_num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
while (num != 0) {
nixu_num = nixu_num * 10 + num % 10;
num = num / 10;
}
printf("逆序整数为:%d\n", nixu_num);
}
191.将一个二维数组a[3][4]行列元素互换,存放到另一个数组b中,要求按行输出b中的元素。
正确答案:
#include <stdio.h>
int main( ) {
int a[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} } ;
int b[4][3], i, j ;
printf( "array a:\n" ) ;
for ( i = 0 ; i <= 2 ; i++ ) {
for ( j = 0 ; j <= 3 ; j++ ) {
printf( "%4d", a[i][j] ) ;
b[j][i] = a[i][j] ;
}
printf( "\n" ) ;
}
printf( "array b:\n" ) ;
for ( i = 0 ; i <= 3 ; i++ ) {
for ( j = 0 ; j <= 2 ; j++ )
printf( "%4d", b[i][j] ) ;
printf( "\n" ) ;
}
return 0 ;
}
192.数组的大小为8,输入,各个数组元素,然后求出数组中的最大值和最小值,以及他们所在的位置(位置编号从1开始),依次输出到屏幕上。
要求:1.请将程序及截图上传。
2.验证的时候,输入的数组元素为:12 56 85 4 23 45 90 110
正确答案:
#include <stdio.h>
void print_a(int *p) {
int max = *p, min = *p, max_index = 0, min_index = 0;
for (int i = 0; i < 8; i++) {
if (max < p[i]) {
max = p[i];
max_index = i + 1;
}
}
for (int i = 0; i < 8; i++) {
if (min > p[i]) {
min = p[i];
min_index = i + 1;
}
}
printf("最大值:%d,位置%d", max, max_index);
printf("\n最小值:%d,位置%d", min, min_index);
}
int main() {
int a[8];
int *p = a;
for (int i = 0; i < 8; i++) {
scanf("%d", p + i);
}
print_a(p);
}