1 实验2_6_幂计算 (100 分)
已知两个整数x和y(x为任意整数,y为非负整数),利用循环结构计算x的y次幂并输出。假设x,y及x的y次幂不会超过int型范围。
输入格式:
只有一行,为两个用空格分隔的整数,依次代表x与y的值。
输出格式:
也只有一行,为一个整数,即x的y次幂的计算结果(测试数据中保证没有0的0次幂)。例如输出2的4次幂结果,即16。
输入样例:
-7 5
输出样例:
-16807
#include<stdio.h>
#include<stdlib.h>
int main()
{
int dishu,zhishu,i=1,result=1;
scanf("%d %d",&dishu,&zhishu);
while(i<=zhishu)
{
result=result*dishu;
i=i+1;
}
printf("%d\n",result);
}
2 实验2_7_统计字符 (100 分)
给定一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
输入格式:
只有一行,为一个字符序列,字符序列长度小于100,以回车键结束。
输出格式:
只有一行,为4个用空格分隔的整数,依次代表输入字符序列中英文字符,空格,数字以及其他字符的数量。
输入样例:
Happy new year #100101 !
输出样例:
12 4 6 2
#include<stdio.h>
#include<stdlib.h>
int main()
{
int zifu=0,kongge=0,shuzi=0,qita=0;
char now;
while(now!='\n')
{
scanf("%c",&now);
switch(now){
case 32:
kongge+=1;break;
case 33 ... 47:
qita+=1;break;
case 48 ... 57:
shuzi+=1;break;
case 58 ... 64:
qita+=1;break;
case 65 ... 90:
zifu+=1;break;
case 91 ... 96:
qita+=1;break;
case 97 ... 122:
zifu+=1;break;
case 123 ... 126:
qita+=1;break;
default:
qita+=1;
}
}
printf("%d %d %d %d\n",zifu,kongge,shuzi,qita-1);
}
3 实验2_8_打印实心菱形 (100 分)
已知一个整数n,你要根据n打印出n阶的实心菱形。
输入格式:
只有一个整数n(0<n<40,代表要打印的菱形阶数)。测试用例保证合法。
输出格式:
n阶实心菱形(占2乘n-1行)。
输入样例:
5
输出样例:
*
***
*****
*******
*********
*******
*****
***
*
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,line,num,star,i;
scanf("%d",&n);
for(line=1;line<=n;line+=1)
{
for(num=0;num<n-line;num++)
{
printf(" ");
}
for(star=0;star<(2*line-1);star++)
{
printf("*");
}
printf("\n");
}
for(star=2*n-1,line=n+1;line<=2*n-1;line+=1, star-=2)
{
for(num=0;num<line-n;num++)
{
printf(" ");
}
for(i=0;i<star-2;i+=1)
{
printf("*");
}
printf("\n");
}
}
//20220112
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
//逐行执行上半个菱形
for (int line = 1; line <= n; ++line) {
//打印空格
for (int blank = 0; blank < n-line; ++blank) {
printf(" ");
}
//打印星星
for (int stars = 0; stars < 2*line-1; ++stars) {
printf("*");
}
printf("\n");
}
//逐行执行下半个菱形
for (int line = n+1; line < 2*n; ++line) {
//打印空格
for (int blank = 0; blank < line-n; ++blank) {
printf(" ");
}
//打印星星
for (int stars = 0; stars < 4*n-2*line-1; ++stars) {
printf("*");
}
printf("\n");
}
}
//20220130字符数组做法
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
char array[2*n-1][2*n];
for (int i = 0; i < 2*n-1; ++i) {
for (int j = 0; j < 2*n-1; ++j) {
array[i][j] = ' ';
}
array[i][2*n-1] = '\0';
}
for (int k = 0,i = 1,j = n-1; k < n; ++k,i+=2,j--) {
for (int t = 0; t < i; ++t) {
array[k][j+t] = '*';
}
}
for (int k = n,t=1,j=2*n-3; k < 2*n; ++k,++t,j-=2) {
for (int i=0; i < j; ++i) {
array[k][t+i] = '*';
}
}
for (int i = 0; i < 2*n-1; ++i) {
printf("%s\n", array[i]);
}
}
4 实验2_9_数列求和 (100 分)
已知正整数n与数列公式:
An = 1*2*3+2*3*4+3*4*5+…+(n-2)*(n-1)*n (n>=3)
An = 0 (n=1,2)
请根据n值计算该数列的前n项和的值,并输出。n的取值范围是(1<=n<=3000)。
注意:这里的An 只是一项,而我们要求的是计算该数列的前n项和。
提示:由于n值很大,建议使用long long型变量存储结果。
输入格式:
只有一个正整数n(1<=n<=3000)。
输出格式:
只有一个整数,为计算结果。
输入样例:
3000
输出样例:
12149993250000600
#include<stdio.h>
#include<stdlib.h>
int main()
{
unsigned long long n,a,b,c,termnum,term=0,result=0;
scanf("%llu",&n);
if(n==1||n==2)
{
printf("0");
}
else
{
for(termnum=3;termnum<=n;termnum++)
{
for(term=0,a=1,b=2,c=3;c<=termnum;a=a+1,b=b+1,c=c+1)
{
term=term+a*b*c;
}
result+=term;
}
printf("%llu\n",result);
}
5 实验2_10_数字统计一 (100 分)
请你写一段程序,统计各类数字的占比。
提示:输出%时需要用%%才能输出。
输入格式:
只有一行,为用空格分隔的若干整数,最后一个整数为0。测试用例保证输入中只包含这一个0。
输出格式:
共三行,依次分别输出3、5、7的倍数的占比(如果某个数同时为多个数的倍数,如15,70等,则不参与统计,但要计到总数中)。占比采用百分数形式,且保留2位小数。这里的占比指的是这类数字的数量跟所有数字的总数(不包括最后的0)比。测试用例保证所有整数可以用int存储。
输入样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0
输出样例:
25.00%
15.00%
10.00%
#include<stdio.h>
#include<stdlib.h>
int main()
{
int now;
float sanper,wuper,qiper,num=0,san=0,wu=0,qi=0;
scanf("%d",&now);
while(now!=0)
{
if((now%3==0&&now%5==0)||(now%3==0&&now%7==0)||(now%5==0&&now%7==0))
{}
else
{
if(now%3==0)
san++;
if(now%5==0)
wu++;
if(now%7==0)
qi++;
}
num++;
scanf("%d",&now);
}
sanper=(san/num*100);
wuper=(wu/num*100);
qiper=(qi/num*100);
printf("%.2f%%\n%.2f%%\n%.2f%%\n",sanper,wuper,qiper);
return 0;
}
6 实验2_11__双11优惠 (100 分)
双十一快到了,网上的各个商家纷纷推出各种优惠活动,某商家的优惠方式为满100减30,满200减70,满300减110,满400减160。
请你写一段程序,根据给定条件,计算用户某单实际该付多少钱。
输入格式:
第一行为一个整数t代表测试数据组数。
后边是t行测试数据,每行均为若干个用空格分隔的整数,其中第一个整数为n,代表用户买的商品的个数,后边为n个正整数,分别代表这n件商品的价格。
输出格式:
为t行,每行依次对应输入的t行测试数据用户实际付钱的计算结果。测试用例保证所有整数(包括求和的结果)可以用int存储。
特别说明:虽然程序在本地实际运行时输入和输出是混合在一起显示的,但在OJ上输入和输出是完全分开的,互相不干扰。所以输入整数T后,只要输入一行测试数据,应该立刻输出一行优惠结果;然后是输入下一行测试数据,输出下一个优惠结果。
输入样例:
2
4 10 20 30 40
5 10 20 30 40 50
输出样例:
70
120
#include<stdio.h>
#include<stdlib.h>
int main()
{
int line,amount,price,sum=0,final,i,m;
scanf("%d\n",&line);
for(i=1;i<=line;i+=1)
{
scanf("%d",&amount);
for(m=0;m<amount;m+=1)
{
scanf("%d",&price);
sum+=price;
}
switch(sum){
case 0 ... 99:
final=sum;break;
case 100 ... 199:
final=sum-30;break;
case 200 ... 299:
final=sum-70;break;
case 300 ... 399:
final=sum-110;break;
default:
final=sum-160;break;
}
printf("%d\n",final);
sum=0;
}
}